aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/componentcore
diff options
context:
space:
mode:
authorHenning Gruendl <henning.gruendl@qt.io>2020-06-11 18:35:46 +0200
committerHenning Gründl <henning.gruendl@qt.io>2020-06-12 07:49:31 +0000
commitd52cb22b441d1d95e06814506e63db4884831477 (patch)
treef27007efecd577d712b95dafe4b0aa6bf38aa1e6 /src/plugins/qmldesigner/components/componentcore
parentb24bb3d9a7ec4fa48c10b8ca7a5074e623f7b067 (diff)
QmlDesigner: Add fit root to screen button
* Add fit root to screen action to designer actions * Add button to form editor taskbar to trigger the action * Add additional zoom levels Task-number: QDS-2234 Change-Id: I1310da8ee9cfa608ed0c28f8bff769d320f588c3 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src/plugins/qmldesigner/components/componentcore')
-rw-r--r--src/plugins/qmldesigner/components/componentcore/componentcore_constants.h5
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp10
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp8
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h1
-rw-r--r--src/plugins/qmldesigner/components/componentcore/zoomaction.cpp22
-rw-r--r--src/plugins/qmldesigner/components/componentcore/zoomaction.h3
6 files changed, 45 insertions, 4 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h
index 792666ec36..e6ecc114b7 100644
--- a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h
+++ b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h
@@ -83,6 +83,7 @@ const char decreaseIndexOfStackedContainerCommandId[] = "DecreaseIndexOfStackedC
const char flowAssignEffectCommandId[] = "AssignFlowEffect";
const char flowAssignCustomEffectCommandId[] = "AssignFlowCustomEffect";
const char addToGroupItemCommandId[] = "AddToGroupItem";
+const char fitRootToScreenCommandId[] = "FitRootToScreen";
const char selectionCategoryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Selection");
const char flowConnectionCategoryDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Connect");
@@ -155,6 +156,8 @@ const char layoutFillHeightDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContext
const char flowAssignEffectDisplayName[] = "Assign FlowEffect ";
const char flowAssignCustomEffectDisplayName[] = "Assign Custom FlowEffect ";
+const char fitRootToScreenDisplayName[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Fit root to screen");
+
const char raiseToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Raise selected item.");
const char lowerToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Lower selected item.");
@@ -173,6 +176,8 @@ const char decreaseIndexOfStackedContainerToolTip[] = QT_TRANSLATE_NOOP("QmlDesi
const char addItemToStackedContainerToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Add item to stacked container.");
const char addFlowActionToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Add flow action.");
+const char fitRootToScreenToolTip[] = QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Fit the root element inside the available space.");
+
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 2dbf8b00b4..ceb8ddcdd0 100644
--- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
@@ -821,6 +821,16 @@ void DesignerActionManager::createDefaultDesignerActions()
&resetSize,
&selectionNotEmptyAndHasWidthOrHeightProperty));
+ addDesignerAction(new ModelNodeAction(
+ fitRootToScreenCommandId,
+ fitRootToScreenDisplayName,
+ Utils::Icon({{":/utils/images/fittoview.png", Utils::Theme::IconsBaseColor}}).icon(),
+ fitRootToScreenToolTip,
+ genericToolBarCategory,
+ QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_0),
+ 182,
+ &fitRootToScreen));
+
addDesignerAction(new SeperatorDesignerAction(editCategory, 170));
addDesignerAction(new VisiblityModelNodeAction(
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index e91fde4359..c73f48d6af 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -344,6 +344,14 @@ void resetPosition(const SelectionContext &selectionState)
});
}
+void fitRootToScreen(const SelectionContext &selectionState)
+{
+ if (!selectionState.view())
+ return;
+
+ selectionState.view()->emitCustomNotification(QStringLiteral("fit root to screen"));
+}
+
void goIntoComponentOperation(const SelectionContext &selectionState)
{
goIntoComponent(selectionState.currentSingleSelectedNode());
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h
index afd8416bf9..b8bbc0e1c9 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h
@@ -49,6 +49,7 @@ void setFillWidth(const SelectionContext &selectionState);
void setFillHeight(const SelectionContext &selectionState);
void resetSize(const SelectionContext &selectionState);
void resetPosition(const SelectionContext &selectionState);
+void fitRootToScreen(const SelectionContext &selectionState);
void goIntoComponentOperation(const SelectionContext &selectionState);
void setId(const SelectionContext &selectionState);
void resetZ(const SelectionContext &selectionState);
diff --git a/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp b/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp
index 95ed102f82..4f1d1c3da9 100644
--- a/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp
@@ -30,7 +30,7 @@
namespace QmlDesigner {
-const int defaultZoomIndex = 11;
+const int defaultZoomIndex = 13;
ZoomAction::ZoomAction(QObject *parent)
: QWidgetAction(parent),
@@ -69,14 +69,19 @@ void ZoomAction::setZoomLevel(float zoomLevel)
if (qFuzzyCompare(m_zoomLevel, zoomLevel))
return;
+ forceZoomLevel(zoomLevel);
+}
+
+void ZoomAction::forceZoomLevel(float zoomLevel)
+{
m_zoomLevel = qBound(0.01f, zoomLevel, 16.0f);
emit zoomLevelChanged(m_zoomLevel);
}
//initial m_zoomLevel and m_currentComboBoxIndex
-const QVector<float> s_zoomFactors = {0.01f, 0.02f, 0.05f, 0.0625f, 0.125f, 0.25f,
- 0.33f, 0.5f, 0.66f, 0.75f, 0.9f, 1.0f, 1.25f,
- 1.5f, 1.75f, 2.0f, 3.0f, 4.0f, 6.0f, 8.0f, 10.0f, 16.0f };
+const QVector<float> s_zoomFactors = {0.01f, 0.02f, 0.05f, 0.0625f, 0.1f, 0.125f, 0.2f, 0.25f,
+ 0.33f, 0.5f, 0.66f, 0.75f, 0.9f, 1.0f, 1.1f, 1.25f, 1.33f,
+ 1.5f, 1.66f, 1.75f, 2.0f, 3.0f, 4.0f, 6.0f, 8.0f, 10.0f, 16.0f };
int getZoomIndex(float zoom)
{
@@ -87,6 +92,15 @@ int getZoomIndex(float zoom)
return -1;
}
+float ZoomAction::getClosestZoomLevel(float zoomLevel)
+{
+ int i = 0;
+ while (i < s_zoomFactors.size() && s_zoomFactors[i] < zoomLevel)
+ ++i;
+
+ return s_zoomFactors[qBound(0, i - 1, s_zoomFactors.size() - 1)];
+}
+
QWidget *ZoomAction::createWidget(QWidget *parent)
{
auto comboBox = new QComboBox(parent);
diff --git a/src/plugins/qmldesigner/components/componentcore/zoomaction.h b/src/plugins/qmldesigner/components/componentcore/zoomaction.h
index 1b178343e8..bd46f915d9 100644
--- a/src/plugins/qmldesigner/components/componentcore/zoomaction.h
+++ b/src/plugins/qmldesigner/components/componentcore/zoomaction.h
@@ -48,6 +48,9 @@ public:
void zoomOut();
void resetZoomLevel();
void setZoomLevel(float zoomLevel);
+ void forceZoomLevel(float zoomLevel);
+
+ static float getClosestZoomLevel(float zoomLevel);
protected:
QWidget *createWidget(QWidget *parent) override;