diff options
Diffstat (limited to 'share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml')
-rw-r--r-- | share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml | 191 |
1 files changed, 80 insertions, 111 deletions
diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml index 9d8e677b5b..05d8d6db9c 100644 --- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml @@ -1,24 +1,20 @@ -// Copyright (C) 2016 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -import QtQuick 2.15 -import QtQuick.Layouts 1.15 +import QtQuick +import QtQuick.Layouts import QtQuickDesignerTheme 1.0 -import HelperWidgets 2.0 +import HelperWidgets 2.0 as HelperWidgets import StudioControls 1.0 as StudioControls import StudioTheme 1.0 as StudioTheme - +import ItemLibraryBackend /* The view displaying the item grid. - The following Qml context properties have to be set: - ItemLibraryModel itemLibraryModel - int itemLibraryIconWidth - int itemLibraryIconHeight - ItemLibraryWidget rootView - QColor highlightColor - itemLibraryModel structure: - itemLibraryModel [ ItemLibraryImport { string importName @@ -26,13 +22,11 @@ itemLibraryModel [ bool importVisible bool importUsed bool importExpanded - list categoryModel [ ItemLibraryCategory { string categoryName bool categoryVisible bool categoryExpanded - list itemModel [ ItemLibraryItem { string itemName @@ -50,10 +44,8 @@ itemLibraryModel [ ... more imports ] */ - Item { id: itemsView - property string importToRemove property string importToAdd property string componentSource @@ -62,192 +54,182 @@ Item { property bool isHorizontalView: false property bool isAddModuleView: false + property var tooltipBackend: ItemLibraryBackend.tooltipBackend + // Called also from C++ to close context menu on focus out function closeContextMenu() { moduleContextMenu.close() itemContextMenu.close() } - // Called from C++ function clearSearchFilter() { searchBox.clear(); } - // Called also from C++ function switchToComponentsView() { - isAddModuleView = false + ItemLibraryBackend.isAddModuleView = false } - onWidthChanged: { - itemsView.isHorizontalView = itemsView.width > widthLimit + itemsView.isHorizontalView = itemsView.width > ItemLibraryBackend.widthLimit } - onIsHorizontalViewChanged: closeContextMenu() - Item { id: styleConstants property int textWidth: 58 property int textHeight: Theme.smallFontPixelSize() * 2 - property int cellHorizontalMargin: 1 property int cellVerticalSpacing: 2 property int cellVerticalMargin: 4 - // the following depend on the actual shape of the item delegate property int cellWidth: styleConstants.textWidth + 2 * styleConstants.cellHorizontalMargin - property int cellHeight: itemLibraryIconHeight + styleConstants.textHeight + + property int cellHeight: ItemLibraryBackend.itemLibraryIconHeight + styleConstants.textHeight + 2 * styleConstants.cellVerticalMargin + styleConstants.cellVerticalSpacing - StudioControls.Menu { id: moduleContextMenu - StudioControls.MenuItem { text: qsTr("Remove Module") visible: itemsView.currentCategory === null height: visible ? implicitHeight : 0 - enabled: itemsView.importToRemove && !rootView.subCompEditMode - onTriggered: rootView.removeImport(itemsView.importToRemove) + enabled: itemsView.importToRemove && !ItemLibraryBackend.rootView.subCompEditMode + onTriggered: ItemLibraryBackend.rootView.removeImport(itemsView.importToRemove) } - StudioControls.MenuSeparator { - visible: itemsView.currentCategory === null && !rootView.searchActive + visible: itemsView.currentCategory === null && !ItemLibraryBackend.rootView.searchActive height: visible ? StudioTheme.Values.border : 0 } - StudioControls.MenuItem { text: qsTr("Expand All") - visible: itemsView.currentCategory === null && !rootView.searchActive + visible: itemsView.currentCategory === null && !ItemLibraryBackend.rootView.searchActive height: visible ? implicitHeight : 0 - onTriggered: itemLibraryModel.expandAll() + onTriggered: ItemLibraryBackend.itemLibraryModel.expandAll() } - StudioControls.MenuItem { text: qsTr("Collapse All") - visible: itemsView.currentCategory === null && !rootView.searchActive + visible: itemsView.currentCategory === null && !ItemLibraryBackend.rootView.searchActive height: visible ? implicitHeight : 0 - onTriggered: itemLibraryModel.collapseAll() + onTriggered: ItemLibraryBackend.itemLibraryModel.collapseAll() } - StudioControls.MenuSeparator { - visible: itemsView.currentCategory === null && !rootView.searchActive + visible: itemsView.currentCategory === null && !ItemLibraryBackend.rootView.searchActive height: visible ? StudioTheme.Values.border : 0 } - StudioControls.MenuItem { text: qsTr("Hide Category") visible: itemsView.currentCategory height: visible ? implicitHeight : 0 - onTriggered: itemLibraryModel.hideCategory(itemsView.currentImport.importUrl, + onTriggered: ItemLibraryBackend.itemLibraryModel.hideCategory(itemsView.currentImport.importUrl, itemsView.currentCategory.categoryName) } - StudioControls.MenuSeparator { visible: itemsView.currentCategory height: visible ? StudioTheme.Values.border : 0 } - StudioControls.MenuItem { text: qsTr("Show Module Hidden Categories") - visible: !rootView.searchActive + visible: !ItemLibraryBackend.rootView.searchActive enabled: itemsView.currentImport && !itemsView.currentImport.allCategoriesVisible height: visible ? implicitHeight : 0 - onTriggered: itemLibraryModel.showImportHiddenCategories(itemsView.currentImport.importUrl) + onTriggered: ItemLibraryBackend.itemLibraryModel.showImportHiddenCategories(itemsView.currentImport.importUrl) } - StudioControls.MenuItem { text: qsTr("Show All Hidden Categories") - visible: !rootView.searchActive - enabled: itemLibraryModel.isAnyCategoryHidden + visible: !ItemLibraryBackend.rootView.searchActive + enabled: ItemLibraryBackend.itemLibraryModel.isAnyCategoryHidden height: visible ? implicitHeight : 0 - onTriggered: itemLibraryModel.showAllHiddenCategories() + onTriggered: ItemLibraryBackend.itemLibraryModel.showAllHiddenCategories() } } - StudioControls.Menu { id: itemContextMenu // Workaround for menu item implicit width not properly propagating to menu width: Math.max(importMenuItem.implicitWidth, openSourceItem.implicitWidth) - StudioControls.MenuItem { id: importMenuItem text: qsTr("Add Module: ") + itemsView.importToAdd visible: itemsView.importToAdd height: visible ? implicitHeight : 0 - onTriggered: rootView.addImportForItem(itemsView.importToAdd) + onTriggered: ItemLibraryBackend.rootView.addImportForItem(itemsView.importToAdd) } - StudioControls.MenuItem { id: openSourceItem - text: qsTr("Go into Component") + text: qsTr("Edit Component") visible: itemsView.componentSource height: visible ? implicitHeight : 0 - onTriggered: rootView.goIntoComponent(itemsView.componentSource) + onTriggered: ItemLibraryBackend.rootView.goIntoComponent(itemsView.componentSource) } } } - Column { id: col width: parent.width height: parent.height - y: 5 spacing: 5 - Row { + Rectangle { width: parent.width + height: StudioTheme.Values.doubleToolbarHeight + color: StudioTheme.Values.themeToolbarBackground - StudioControls.SearchBox { - id: searchBox - - width: parent.width - addModuleButton.width - 5 - - onSearchChanged: (searchText) => rootView.handleSearchFilterChanged(searchText) - } + Column { + anchors.fill: parent + anchors.topMargin: 6 + anchors.bottomMargin: 6 + anchors.leftMargin: 10 + anchors.rightMargin: 10 + spacing: 12 + + StudioControls.SearchBox { + id: searchBox + width: parent.width + style: StudioTheme.Values.searchControlStyle - IconButton { - id: addModuleButton - anchors.verticalCenter: parent.verticalCenter - tooltip: qsTr("Add a module.") - icon: StudioTheme.Constants.plus - buttonSize: parent.height + onSearchChanged: (searchText) => ItemLibraryBackend.rootView.handleSearchFilterChanged(searchText) + } - onClicked: isAddModuleView = true + Row { + width: parent.width + height: StudioTheme.Values.toolbarHeight + spacing: 6 + + HelperWidgets.AbstractButton { + id: addModuleButton + style: StudioTheme.Values.viewBarButtonStyle + buttonIcon: StudioTheme.Constants.add_medium + tooltip: qsTr("Add a module.") + onClicked: isAddModuleView = true + } + } } } Loader { id: loader - width: col.width height: col.height - y - 5 sourceComponent: isAddModuleView ? addModuleView : itemsView.isHorizontalView ? horizontalView : verticalView } } - Component { id: verticalView - - ScrollView { + HelperWidgets.ScrollView { id: verticalScrollView anchors.fill: parent clip: true - interactive: !itemContextMenu.opened && !moduleContextMenu.opened - + interactive: !itemContextMenu.opened && !moduleContextMenu.opened && !ItemLibraryBackend.rootView.isDragging onContentHeightChanged: { var maxPosition = Math.max(contentHeight - verticalScrollView.height, 0) if (contentY > maxPosition) contentY = maxPosition } - Column { spacing: 2 Repeater { - model: itemLibraryModel // to be set in Qml context - delegate: Section { + model: ItemLibraryBackend.itemLibraryModel // to be set in Qml context + delegate: HelperWidgets.Section { width: itemsView.width - (verticalScrollView.verticalScrollBarVisible ? verticalScrollView.verticalThickness : 0) @@ -263,6 +245,8 @@ Item { expanded: importExpanded expandOnClick: false useDefaulContextMenu: false + category: "ItemsView" + onToggleExpand: { if (categoryModel.rowCount() > 0) importExpanded = !importExpanded @@ -273,13 +257,12 @@ Item { itemsView.currentCategory = null moduleContextMenu.popup() } - Column { spacing: 2 property var currentImportModel: model // allows accessing the import model from inside the category section Repeater { model: categoryModel - delegate: Section { + delegate: HelperWidgets.Section { width: itemsView.width - (verticalScrollView.verticalScrollBarVisible ? verticalScrollView.verticalThickness : 0) @@ -296,24 +279,22 @@ Item { expandOnClick: false onToggleExpand: categoryExpanded = !categoryExpanded useDefaulContextMenu: false + category: "ItemsView" + onShowContextMenu: { - if (!rootView.searchActive) { + if (!ItemLibraryBackend.rootView.searchActive) { itemsView.currentCategory = model itemsView.currentImport = parent.currentImportModel moduleContextMenu.popup() } } - Grid { id: itemGrid - property real actualWidth: parent.width - itemGrid.leftPadding - itemGrid.rightPadding - leftPadding: 6 rightPadding: 6 columns: itemGrid.actualWidth / styleConstants.cellWidth rowSpacing: 7 - Repeater { model: itemModel delegate: ItemDelegate { @@ -340,32 +321,28 @@ Item { } } } - Component { id: horizontalView - Row { leftPadding: 5 - - ScrollView { + HelperWidgets.ScrollView { id: horizontalScrollView width: 270 height: parent.height clip: true - interactive: !itemContextMenu.opened && !moduleContextMenu.opened + interactive: !itemContextMenu.opened && !moduleContextMenu.opened && !ItemLibraryBackend.rootView.isDragging onContentHeightChanged: { var maxPosition = Math.max(contentHeight - horizontalScrollView.height, 0) if (contentY > maxPosition) contentY = maxPosition } - Column { width: parent.width spacing: 2 Repeater { - model: itemLibraryModel // to be set in Qml context - delegate: Section { + model: ItemLibraryBackend.itemLibraryModel // to be set in Qml context + delegate: HelperWidgets.Section { width: 265 - (horizontalScrollView.verticalScrollBarVisible ? horizontalScrollView.verticalThickness : 0) @@ -381,6 +358,8 @@ Item { expanded: importExpanded expandOnClick: false useDefaulContextMenu: false + category: "ItemsView" + onToggleExpand: { if (categoryModel.rowCount() > 0) importExpanded = !importExpanded @@ -391,7 +370,6 @@ Item { itemsView.currentCategory = null moduleContextMenu.popup() } - Column { spacing: 2 property var currentImportModel: model // allows accessing the import model from inside the category section @@ -409,7 +387,6 @@ Item { ? StudioTheme.Values.themeControlBackgroundHover : categoryMouseArea.containsMouse ? Qt.darker(StudioTheme.Values.themeControlBackgroundHover, 1.5) : StudioTheme.Values.themeControlBackground - Text { anchors.fill: parent text: categoryName @@ -419,19 +396,16 @@ Item { horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } - MouseArea { id: categoryMouseArea anchors.fill: parent hoverEnabled: true acceptedButtons: Qt.LeftButton | Qt.RightButton - onClicked: (mouse) => { - itemLibraryModel.selectImportCategory(parent.parent.currentImportModel.importUrl, model.index) - + ItemLibraryBackend.itemLibraryModel.selectImportCategory(parent.parent.currentImportModel.importUrl, model.index) if (mouse.button === Qt.RightButton && categoryModel.rowCount() !== 1 - && !rootView.searchActive) { + && !ItemLibraryBackend.rootView.searchActive) { itemsView.currentCategory = model itemsView.currentImport = parent.parent.currentImportModel moduleContextMenu.popup() @@ -445,39 +419,36 @@ Item { } } } - Rectangle { // separator between import/category column and item grid id: separatingLine height: itemsView.height - 10 width: 1 color: StudioTheme.Values.themeControlOutline } - - ScrollView { + HelperWidgets.ScrollView { id: itemScrollView width: itemsView.width - 275 height: itemsView.height + interactive: !itemContextMenu.opened && !moduleContextMenu.opened && !ItemLibraryBackend.rootView.isDragging + onContentHeightChanged: { var maxPosition = Math.max(contentHeight - itemScrollView.height, 0) if (contentY > maxPosition) contentY = maxPosition } - Grid { id: hItemGrid property real actualWidth: itemsView.width - 294 - leftPadding: 9 rightPadding: 9 bottomPadding: 15 columns: hItemGrid.actualWidth / styleConstants.cellWidth rowSpacing: 7 - Repeater { - model: itemLibraryModel.itemsModel + model: ItemLibraryBackend.itemLibraryModel.itemsModel delegate: ItemDelegate { visible: itemVisible - textColor: itemLibraryModel.importUnimportedSelected + textColor: ItemLibraryBackend.itemLibraryModel.importUnimportedSelected ? StudioTheme.Values.themeUnimportedModuleColor : StudioTheme.Values.themeTextColor width: styleConstants.cellWidth height: styleConstants.cellHeight @@ -494,10 +465,8 @@ Item { } } } - Component { id: addModuleView - AddModuleView { onBack: isAddModuleView = false } |