summaryrefslogtreecommitdiff
path: root/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml
diff options
context:
space:
mode:
Diffstat (limited to 'share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml')
-rw-r--r--share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml191
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
}