diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2020-07-01 09:38:13 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2020-07-01 09:40:01 +0200 |
commit | 0c6231d7ecc55ae988ab6a1b23fe1925027af113 (patch) | |
tree | f6c598ce11ef9273c2b94065c9defbacdfc88318 /src/plugins/qmldesigner/components/componentcore | |
parent | 6d9ccbdf69d8e57269a945cf19a54a00ad540bfb (diff) | |
parent | a8819d0efde54d6196b292e874a1441fd2c25c27 (diff) |
Merge remote-tracking branch 'origin/qds-1.59' into 4.13
Conflicts:
src/tools/clangpchmanagerbackend/source/pchtaskqueue.h
Change-Id: Ibe8ac2fa0eafcbcc86ac445f0be035839e06ff40
Diffstat (limited to 'src/plugins/qmldesigner/components/componentcore')
-rw-r--r-- | src/plugins/qmldesigner/components/componentcore/componentcore_constants.h | 3 | ||||
-rw-r--r-- | src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp | 64 |
2 files changed, 67 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h index 2fa19a5c24..a8db25f417 100644 --- a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h +++ b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h @@ -181,6 +181,9 @@ const char addFlowActionToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", const char fitRootToScreenToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Fit the root element inside the available space."); const char fitSelectionToScreenToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Fit the selected elements inside the available space."); +const char editListModelDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", + "Edit List Model..."); + const int priorityFirst = 280; const int prioritySelectionCategory = 220; const int priorityQmlPreviewCategory = 200; diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index 479f40203c..fb7d4ce202 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -41,10 +41,14 @@ #include <qmldesignerplugin.h> #include <viewmanager.h> +#include <listmodeleditor/listmodeleditordialog.h> +#include <listmodeleditor/listmodeleditormodel.h> + #include <QHBoxLayout> #include <QGraphicsLinearLayout> #include <coreplugin/actionmanager/actionmanager.h> +#include <coreplugin/icore.h> #include <utils/algorithm.h> #include <utils/qtcassert.h> #include <utils/utilsicons.h> @@ -335,6 +339,64 @@ public: } }; +class EditListModelAction final : public ModelNodeContextMenuAction +{ +public: + EditListModelAction() + : ModelNodeContextMenuAction("EditListModel", + ComponentCoreConstants::editListModelDisplayName, + {}, + ComponentCoreConstants::rootCategory, + QKeySequence("Alt+e"), + 1001, + &openDialog, + &isListViewInBaseState, + &isListViewInBaseState) + {} + + static bool isListViewInBaseState(const SelectionContext &selectionState) + { + return selectionState.isInBaseState() && selectionState.singleNodeIsSelected() + && selectionState.currentSingleSelectedNode().metaInfo().isSubclassOf( + "QtQuick.ListView"); + } + + bool isEnabled(const SelectionContext &) const override { return true; } + + static ModelNode listModelNode(const ModelNode &listViewNode) + { + if (listViewNode.hasProperty("model")) { + if (listViewNode.hasBindingProperty("model")) + return listViewNode.bindingProperty("model").resolveToModelNode(); + else if (listViewNode.hasNodeProperty("model")) + return listViewNode.nodeProperty("model").modelNode(); + } + + ModelNode newModel = listViewNode.view()->createModelNode("QtQml.Models.ListModel", 2, 15); + listViewNode.nodeProperty("mode").reparentHere(newModel); + + return newModel; + } + + static void openDialog(const SelectionContext &selectionState) + { + ListModelEditorModel model; + + ModelNode targetNode = selectionState.targetNode(); + if (!targetNode.isValid()) + targetNode = selectionState.currentSingleSelectedNode(); + if (!targetNode.isValid()) + return; + + model.setListModel(listModelNode(targetNode)); + + ListModelEditorDialog dialog{Core::ICore::mainWindow()}; + dialog.setModel(&model); + + dialog.exec(); + } +}; + bool flowOptionVisible(const SelectionContext &context) { return QmlFlowViewNode::isValidQmlFlowViewNode(context.rootNode()); @@ -1217,6 +1279,8 @@ void DesignerActionManager::createDefaultDesignerActions() priorityGenericToolBar)); addDesignerAction(new ChangeStyleAction()); + + addDesignerAction(new EditListModelAction); } void DesignerActionManager::createDefaultAddResourceHandler() |