aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/componentcore
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2020-07-01 09:38:13 +0200
committerTim Jenssen <tim.jenssen@qt.io>2020-07-01 09:40:01 +0200
commit0c6231d7ecc55ae988ab6a1b23fe1925027af113 (patch)
treef6c598ce11ef9273c2b94065c9defbacdfc88318 /src/plugins/qmldesigner/components/componentcore
parent6d9ccbdf69d8e57269a945cf19a54a00ad540bfb (diff)
parenta8819d0efde54d6196b292e874a1441fd2c25c27 (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.h3
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp64
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()