QmlDesigner: Add MouseArea Shortcut

Task-number: QDS-7675
Change-Id: Ibc0bdeecbd83a063d99973fd6bc945907f4a124a
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Aleksei German
2022-09-15 17:08:47 +02:00
parent 523d632874
commit 26e5b3787c
7 changed files with 63 additions and 0 deletions

View File

@@ -92,6 +92,7 @@ const char removeGroupItemCommandId[] = "RemoveToGroupItem";
const char fitRootToScreenCommandId[] = "FitRootToScreen"; const char fitRootToScreenCommandId[] = "FitRootToScreen";
const char fitSelectionToScreenCommandId[] = "FitSelectionToScreen"; const char fitSelectionToScreenCommandId[] = "FitSelectionToScreen";
const char editAnnotationCommandId[] = "EditAnnotation"; const char editAnnotationCommandId[] = "EditAnnotation";
const char addMouseAreaFillCommandId[] = "AddMouseAreaFill";
const char openSignalDialogCommandId[] = "OpenSignalDialog"; const char openSignalDialogCommandId[] = "OpenSignalDialog";
const char update3DAssetCommandId[] = "Update3DAsset"; const char update3DAssetCommandId[] = "Update3DAsset";
@@ -137,6 +138,7 @@ const char addSignalHandlerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContext
const char moveToComponentDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Move Component into Separate File"); const char moveToComponentDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Move Component into Separate File");
const char editMaterialDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit Material"); const char editMaterialDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit Material");
const char editAnnotationDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit Annotation"); const char editAnnotationDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit Annotation");
const char addMouseAreaFillDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Add Mouse Area");
const char openSignalDialogDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Open Signal Dialog"); const char openSignalDialogDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Open Signal Dialog");
const char update3DAssetDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Update 3D Asset"); const char update3DAssetDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Update 3D Asset");

View File

@@ -1474,6 +1474,17 @@ void DesignerActionManager::createDefaultDesignerActions()
&singleSelection, &singleSelection,
&singleSelection)); &singleSelection));
addDesignerAction(new ModelNodeContextMenuAction(
addMouseAreaFillCommandId,
addMouseAreaFillDisplayName,
{},
rootCategory,
QKeySequence(),
(priorityLast+7),
&addMouseAreaFill,
&addMouseAreaFillCheck,
&singleSelection));
const bool standaloneMode = QmlProjectManager::QmlProject::isQtDesignStudio(); const bool standaloneMode = QmlProjectManager::QmlProject::isQtDesignStudio();
if (!standaloneMode) { if (!standaloneMode) {

View File

@@ -64,6 +64,18 @@ inline bool singleSelection(const SelectionContext &selectionState)
return selectionState.singleNodeIsSelected(); return selectionState.singleNodeIsSelected();
} }
inline bool addMouseAreaFillCheck(const SelectionContext &selectionContext)
{
if (selectionContext.isValid() && selectionContext.singleNodeIsSelected()) {
ModelNode node = selectionContext.currentSingleSelectedNode();
if (node.hasMetaInfo()) {
NodeMetaInfo nodeInfo = node.metaInfo();
return nodeInfo.isSuitableForMouseAreaFill();
}
}
return false;
}
inline bool isModel(const SelectionContext &selectionState) inline bool isModel(const SelectionContext &selectionState)
{ {
ModelNode node = selectionState.currentSingleSelectedNode(); ModelNode node = selectionState.currentSingleSelectedNode();

View File

@@ -1620,6 +1620,34 @@ void editAnnotation(const SelectionContext &selectionContext)
ModelNodeEditorProxy::fromModelNode<AnnotationEditor>(selectedNode); ModelNodeEditorProxy::fromModelNode<AnnotationEditor>(selectedNode);
} }
void addMouseAreaFill(const SelectionContext &selectionContext)
{
if (!selectionContext.isValid()) {
return;
}
if (!selectionContext.singleNodeIsSelected()) {
return;
}
selectionContext.view()->executeInTransaction("DesignerActionManager|addMouseAreaFill", [selectionContext]() {
ModelNode modelNode = selectionContext.currentSingleSelectedNode();
if (modelNode.isValid()) {
NodeMetaInfo itemMetaInfo = selectionContext.view()->model()->metaInfo("QtQuick.MouseArea", -1, -1);
QTC_ASSERT(itemMetaInfo.isValid(), return);
QmlDesigner::ModelNode mouseAreaNode =
selectionContext.view()->createModelNode("QtQuick.MouseArea", itemMetaInfo.majorVersion(), itemMetaInfo.minorVersion());
modelNode.defaultNodeListProperty().reparentHere(mouseAreaNode);
QmlItemNode mouseAreaItemNode(mouseAreaNode);
if (mouseAreaItemNode.isValid()) {
mouseAreaItemNode.anchors().fill();
}
}
});
}
QVariant previewImageDataForGenericNode(const ModelNode &modelNode) QVariant previewImageDataForGenericNode(const ModelNode &modelNode)
{ {
if (modelNode.isValid()) if (modelNode.isValid())

View File

@@ -93,6 +93,7 @@ void selectFlowEffect(const SelectionContext &selectionContext);
void mergeWithTemplate(const SelectionContext &selectionContext); void mergeWithTemplate(const SelectionContext &selectionContext);
void removeGroup(const SelectionContext &selectionContext); void removeGroup(const SelectionContext &selectionContext);
void editAnnotation(const SelectionContext &selectionContext); void editAnnotation(const SelectionContext &selectionContext);
void addMouseAreaFill(const SelectionContext &selectionContext);
void openSignalDialog(const SelectionContext &selectionContext); void openSignalDialog(const SelectionContext &selectionContext);
void updateImported3DAsset(const SelectionContext &selectionContext); void updateImported3DAsset(const SelectionContext &selectionContext);

View File

@@ -95,6 +95,7 @@ public:
bool availableInVersion(int majorVersion, int minorVersion) const; bool availableInVersion(int majorVersion, int minorVersion) const;
bool isSubclassOf(const TypeName &type, int majorVersion = -1, int minorVersion = -1) const; bool isSubclassOf(const TypeName &type, int majorVersion = -1, int minorVersion = -1) const;
bool isSuitableForMouseAreaFill() const;
bool isGraphicalItem() const; bool isGraphicalItem() const;
bool isQmlItem() const; bool isQmlItem() const;
bool isLayoutable() const; bool isLayoutable() const;

View File

@@ -1659,6 +1659,14 @@ bool NodeMetaInfo::isSubclassOf(const TypeName &type, int majorVersion, int mino
return false; return false;
} }
bool NodeMetaInfo::isSuitableForMouseAreaFill() const
{
return isSubclassOf("QtQuick.Item")
&& !isSubclassOf("QtQuick.MouseArea")
&& !isSubclassOf("QtQuick.Controls.Control")
&& !isSubclassOf("QtQuick.Templates.Control");
}
bool NodeMetaInfo::isGraphicalItem() const bool NodeMetaInfo::isGraphicalItem() const
{ {
return isSubclassOf("QtQuick.Item") return isSubclassOf("QtQuick.Item")