diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h index 2aec0f4b4d7..a8149351de4 100644 --- a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h +++ b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h @@ -43,12 +43,14 @@ const char selectionCategory[] = "Selection"; const char stackCategory[] = "Stack (z)"; const char editCategory[] = "Edit"; const char anchorsCategory[] = "Anchors"; +const char positionCategory[] = "Position"; const char layoutCategory[] = "Layout"; const char selectionCategoryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Selection"); const char stackCategoryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Stack (z)"); const char editCategoryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit"); const char anchorsCategoryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Anchors"); +const char positionCategoryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Position"); const char layoutCategoryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Layout"); const char selectParentDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Select Parent: %1"); @@ -84,10 +86,10 @@ const char resetZDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Re const char anchorsFillDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Fill"); const char anchorsResetDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Reset"); -const char layoutColumnPositionerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Layout in Column (Positioner)"); -const char layoutRowPositionerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Layout in Row (Positioner)"); -const char layoutGridPositionerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Layout in Grid (Positioner)"); -const char layoutFlowPositionerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Layout in Flow (Positioner)"); +const char layoutColumnPositionerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Position in Column"); +const char layoutRowPositionerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Position in Row"); +const char layoutGridPositionerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Position in Grid"); +const char layoutFlowPositionerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Position in Flow"); const char removePositionerDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Remove Positioner"); const char removeLayoutDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Remove Layout"); @@ -104,6 +106,7 @@ const int prioritySelectionCategory = 200; const int priorityStackCategory = 180; const int priorityEditCategory = 160; const int priorityAnchorsCategory = 140; +const int priorityPositionCategory = 130; const int priorityLayoutCategory = 120; const int priorityTopLevelSeperator = 100; const int priorityCustomActions = 80; diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index dffddf008df..55f431c4ee7 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -34,6 +34,9 @@ #include #include "designeractionmanagerview.h" +#include +#include + namespace QmlDesigner { static inline QString captionForModelNode(const ModelNode &modelNode) @@ -249,24 +252,15 @@ bool isNotInLayout(const SelectionContext &context) bool selectionCanBeLayouted(const SelectionContext &context) { - return selectionHasSameParentAndInBaseState(context) + return multiSelection(context) + && selectionHasSameParentAndInBaseState(context) && inBaseState(context) && isNotInLayout(context); } -bool hasQtQuickLayoutImport(const SelectionContext &context) +bool selectionCanBeLayoutedAndQtQuickLayoutPossible(const SelectionContext &context) { - if (context.view() && context.view()->model()) { - Import import = Import::createLibraryImport(QStringLiteral("QtQuick.Layouts"), QStringLiteral("1.0")); - return context.view()->model()->hasImport(import, true, true); - } - - return false; -} - -bool selectionCanBeLayoutedAndasQtQuickLayoutImport(const SelectionContext &context) -{ - return selectionCanBeLayouted(context) && hasQtQuickLayoutImport(context); + return selectionCanBeLayouted(context) && context.view()->majorQtQuickVersion() > 1; } bool selectionNotEmptyAndHasZProperty(const SelectionContext &context) @@ -360,9 +354,31 @@ bool isPositioner(const SelectionContext &context) bool layoutOptionVisible(const SelectionContext &context) { return multiSelectionAndInBaseState(context) - || singleSelectionAndInQtQuickLayout(context); + || singleSelectionAndInQtQuickLayout(context) + || isLayout(context); } +bool positionOptionVisible(const SelectionContext &context) +{ + return multiSelectionAndInBaseState(context) + || isPositioner(context); +} + +bool singleSelectedAndUiFile(const SelectionContext &context) +{ + if (!singleSelection(context)) + return false; + + DesignDocument *designDocument = QmlDesignerPlugin::instance()->documentManager().currentDesignDocument(); + + if (!designDocument) + return false; + + return designDocument->fileName().toFileInfo().completeSuffix() + == QLatin1String("ui.qml"); +} + + void DesignerActionManager::createDefaultDesignerActions() { using namespace SelectionContextFunctors; @@ -399,8 +415,11 @@ void DesignerActionManager::createDefaultDesignerActions() addDesignerAction(new ModelNodeAction (anchorsResetDisplayName, anchorsCategory, 180, &anchorsReset, &singleSelectionItemIsAnchored)); - addDesignerAction(new ActionGroup(layoutCategoryDisplayName, layoutCategory, + addDesignerAction(new ActionGroup(positionCategoryDisplayName, positionCategory, + priorityPositionCategory, &positionOptionVisible)); + addDesignerAction(new ActionGroup(layoutCategoryDisplayName, layoutCategory, priorityLayoutCategory, &layoutOptionVisible)); + addDesignerAction(new ModelNodeAction (removePositionerDisplayName, positionCategory, @@ -408,37 +427,38 @@ void DesignerActionManager::createDefaultDesignerActions() &removePositioner, &isPositioner, &isPositioner)); + addDesignerAction(new ModelNodeAction (layoutRowPositionerDisplayName, - layoutCategory, + positionCategory, 200, &layoutRowPositioner, &selectionCanBeLayouted, - selectionCanBeLayouted)); + &selectionCanBeLayouted)); addDesignerAction(new ModelNodeAction (layoutColumnPositionerDisplayName, - layoutCategory, + positionCategory, 180, &layoutColumnPositioner, &selectionCanBeLayouted, - selectionCanBeLayouted)); + &selectionCanBeLayouted)); addDesignerAction(new ModelNodeAction (layoutGridPositionerDisplayName, - layoutCategory, + positionCategory, 160, &layoutGridPositioner, &selectionCanBeLayouted, - selectionCanBeLayouted)); + &selectionCanBeLayouted)); addDesignerAction(new ModelNodeAction (layoutFlowPositionerDisplayName, - layoutCategory, + positionCategory, 140, &layoutFlowPositioner, &selectionCanBeLayouted, - selectionCanBeLayouted)); + &selectionCanBeLayouted)); addDesignerAction(new SeperatorDesignerAction(layoutCategory, 120)); @@ -455,40 +475,40 @@ void DesignerActionManager::createDefaultDesignerActions() layoutCategory, 100, &layoutRowLayout, - &selectionCanBeLayoutedAndasQtQuickLayoutImport, - &selectionCanBeLayoutedAndasQtQuickLayoutImport)); + &selectionCanBeLayoutedAndQtQuickLayoutPossible, + &selectionCanBeLayoutedAndQtQuickLayoutPossible)); addDesignerAction(new ModelNodeAction (layoutColumnLayoutDisplayName, layoutCategory, 80, &layoutColumnLayout, - &selectionCanBeLayoutedAndasQtQuickLayoutImport, - &selectionCanBeLayoutedAndasQtQuickLayoutImport)); + &selectionCanBeLayoutedAndQtQuickLayoutPossible, + &selectionCanBeLayoutedAndQtQuickLayoutPossible)); addDesignerAction(new ModelNodeAction (layoutGridLayoutDisplayName, layoutCategory, 60, &layoutGridLayout, - &selectionCanBeLayoutedAndasQtQuickLayoutImport, - &selectionCanBeLayoutedAndasQtQuickLayoutImport)); + &selectionCanBeLayoutedAndQtQuickLayoutPossible, + &selectionCanBeLayoutedAndQtQuickLayoutPossible)); addDesignerAction(new FillWidthModelNodeAction (layoutFillWidthDisplayName, layoutCategory, 40, &setFillWidth, - singleSelectionAndInQtQuickLayout, - singleSelectionAndInQtQuickLayout)); + &singleSelectionAndInQtQuickLayout, + &singleSelectionAndInQtQuickLayout)); addDesignerAction(new FillHeightModelNodeAction (layoutFillHeightDisplayName, layoutCategory, 20, &setFillHeight, - singleSelectionAndInQtQuickLayout, - singleSelectionAndInQtQuickLayout)); + &singleSelectionAndInQtQuickLayout, + &singleSelectionAndInQtQuickLayout)); addDesignerAction(new SeperatorDesignerAction(rootCategory, priorityTopLevelSeperator)); addDesignerAction(new ModelNodeAction