import QtQuick 2.0 import QtQuick.Layouts 1.12 import QtQml.Models 2.12 import org.ukui.menu.core 1.0 import AppControls2 1.0 as AppControls2 import org.ukui.quick.items 1.0 as UkuiItems import org.ukui.quick.platform 1.0 as Platform UkuiItems.StyleBackground { paletteRole: Platform.Theme.Dark MouseArea { anchors.fill: parent onClicked: { if (mainContainer.visible) { //执行全屏退出操作 forceActiveFocus(); mainWindow.hide(); } else { mainContainer.visible = true; } } } Item { id: mainContainer anchors.fill: parent z: 10 // 两行三列 GridLayout { anchors.fill: parent // anchors.margins: 36 anchors.leftMargin: 36 anchors.topMargin: 36 anchors.rightMargin: 36 anchors.bottomMargin: 5 rowSpacing: 5 columnSpacing: 5 rows: 2 columns: 3 // 应用列表模式选择按钮: [row: 0, column: 0] [rowspan: 2, columnSpan: 1] Item { Layout.row: 0 Layout.column: 0 Layout.preferredWidth: Math.max(actionsItem.width, labelsItem.width) Layout.preferredHeight: 40 // TODO: 设计最小保持宽度 AppListActions { id: actionsItem anchors.centerIn: parent height: parent.height actions: AppPageBackend.appModel.header.actions visible: count > 0 } } // 搜索框: [row: 0, column: 1] Item { Layout.row: 0 Layout.column: 1 Layout.fillWidth: true Layout.preferredHeight: 40 SearchInputBar { id: searchInputBar width: 372; height: 36 anchors.centerIn: parent radius: Platform.Theme.minRadius visible: opacity onTextChanged: { if (text === "") { AppPageBackend.group = PluginGroup.Display; } else { AppPageBackend.group = PluginGroup.Search; AppPageBackend.startSearch(text); } } } } // 右侧按钮区域: [row: 0, column: 2] [rowspan: 2, columnSpan: 1] Sidebar { Layout.row: 0 Layout.column: 2 Layout.rowSpan: 2 Layout.columnSpan: 1 Layout.preferredWidth: 60 Layout.fillHeight: true } // 左侧标签列表: [row: 1, column: 0] Item { Layout.row: 1 Layout.column: 0 Layout.preferredWidth: Math.max(actionsItem.width, labelsItem.width) Layout.fillHeight: true Item { id: labelsItem anchors.centerIn: parent width: 120 height: parent.height AppLabelPage { id: appLabelPage anchors.centerIn: parent width: parent.width labelBottle: AppPageBackend.appModel.labelBottle labelColum: 1 cellHeight: 34 // TODO: 潜在的优化点,尝试组合widget的model和应用model model: { if (labelBottle !== null) { let labelItems = [], i = 0, item = null; let widgetInfos = fullScreenAppList.headerItem.widgetInfos; for (i = 0; i < widgetInfos.length; ++i) { item = widgetInfos[i]; labelItems.push({label: item.label, type: item.type, display: item.display}); } let labels = labelBottle.labels; for (i = 0; i < labels.length; ++i) { item = labels[i]; labelItems.push({label: item.label, type: item.type, display: item.display}); } return labelItems; } return []; } interactive: height > parent.height highlightMoveDuration: 300 highlight: UkuiItems.StyleBackground { width: appLabelPage.cellWidth height: appLabelPage.cellHeight useStyleTransparency: false radius: Platform.Theme.minRadius paletteRole: Platform.Theme.Light alpha: 0.15; borderAlpha: 0.5 border.width: 1 borderColor: Platform.Theme.Highlight } onLabelSelected: (label) => { fullScreenAppList.positionLabel(label); } } } } // 应用列表: [row: 1, column: 1] FullScreenAppList { id: fullScreenAppList Layout.row: 1 Layout.column: 1 Layout.fillWidth: true Layout.fillHeight: true sourceModel: AppPageBackend.appModel function positionLabel(label) { // 如果是Widget那么直接滚动到最顶上 // console.log("=positionLabel=", label) if (headerItem.widgets.includes(label)) { positionViewAtBeginning(); } else { let index = model.findLabelIndex(label); if (index >= 0) { positionViewAtIndex(index, ListView.Beginning) } } } onContentYChanged: { // 向下偏移200, 计算偏移后在那个item里 let index = indexAt(10, contentY + 200); if (index >= 0) { appLabelPage.currentIndex = index + headerItem.widgetCount; } else if (contentY < 0) { appLabelPage.currentIndex = 0; } } Component.onCompleted: { positionViewAtBeginning(); } } } } }