Skip to content

Commit 684a632

Browse files
authored
Add a toggle to freeze zooming (#140)
* Add zoom freeze toggle action to navigation action * Also conditionally set the point renderer view bounds * Also check for project loading * Partially revert last commit that introduced a bug
1 parent 1fc2164 commit 684a632

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

src/NavigationAction.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ NavigationAction::NavigationAction(QObject* parent, const QString& title) :
1313
HorizontalGroupAction(parent, title),
1414
_scatterplotWidget(nullptr),
1515
_zoomRectangleAction(this, "Zoom Rectangle"),
16-
_zoomDataExtentsAction(this, "Zoom to data extents")
16+
_zoomDataExtentsAction(this, "Zoom to data extents"),
17+
_freezeZoomAction(this, "Freeze zoom")
1718
{
1819
setIcon(mv::Application::getIconFont("FontAwesome").getIcon("image"));
1920
setShowLabels(false);
2021

2122
addAction(&_zoomRectangleAction);
2223
addAction(&_zoomDataExtentsAction);
24+
addAction(&_freezeZoomAction);
2325

2426
auto& fontAwesome = Application::getIconFont("FontAwesome");
2527

@@ -34,6 +36,9 @@ NavigationAction::NavigationAction(QObject* parent, const QString& title) :
3436
_zoomDataExtentsAction.setConnectionPermissionsToForceNone(true);
3537
_zoomDataExtentsAction.setShortcutContext(Qt::WidgetWithChildrenShortcut);
3638
_zoomDataExtentsAction.setShortcut(QKeySequence("Alt+O"));
39+
40+
_freezeZoomAction.setToolTip("Freeze the zoom extents");
41+
_freezeZoomAction.setConnectionPermissionsToForceNone(true);
3742
}
3843

3944
void NavigationAction::initialize(ScatterplotWidget* scatterplotWidget)
@@ -84,6 +89,7 @@ void NavigationAction::fromVariantMap(const QVariantMap& variantMap)
8489

8590
_zoomRectangleAction.fromParentVariantMap(variantMap);
8691
_zoomDataExtentsAction.fromParentVariantMap(variantMap);
92+
_freezeZoomAction.fromParentVariantMap(variantMap);
8793
}
8894

8995
QVariantMap NavigationAction::toVariantMap() const
@@ -92,6 +98,7 @@ QVariantMap NavigationAction::toVariantMap() const
9298

9399
_zoomRectangleAction.insertIntoVariantMap(variantMap);
94100
_zoomDataExtentsAction.insertIntoVariantMap(variantMap);
101+
_freezeZoomAction.insertIntoVariantMap(variantMap);
95102

96103
return variantMap;
97104
}

src/NavigationAction.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <actions/HorizontalGroupAction.h>
44
#include <actions/DecimalRectangleAction.h>
55
#include <actions/TriggerAction.h>
6+
#include <actions/ToggleAction.h>
67

78
using namespace mv::gui;
89

@@ -66,11 +67,13 @@ class NavigationAction : public HorizontalGroupAction
6667

6768
DecimalRectangleAction& getZoomRectangleAction() { return _zoomRectangleAction; }
6869
TriggerAction& getZoomDataExtentsAction() { return _zoomDataExtentsAction; }
70+
ToggleAction& getFreezeZoomAction() { return _freezeZoomAction; }
6971

7072
private:
7173
ScatterplotWidget* _scatterplotWidget; /** Pointer to owning scatterplot widget */
7274
DecimalRectangleAction _zoomRectangleAction; /** Rectangle action for setting the current zoom bounds */
7375
TriggerAction _zoomDataExtentsAction; /** Trigger action to zoom to data extents */
76+
ToggleAction _freezeZoomAction; /** Action for toggling the zoom rectangle freeze */
7477

7578
friend class mv::AbstractActionsManager;
7679
};

src/ScatterplotWidget.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "ScatterplotWidget.h"
22

3+
#include <CoreInterface.h>
4+
35
#include <util/Exception.h>
46

57
#include <vector>
@@ -389,11 +391,17 @@ void ScatterplotWidget::setData(const std::vector<Vector2f>* points)
389391
dataBounds.makeSquare();
390392
dataBounds.expand(0.1f);
391393

392-
_pointRenderer.setViewBounds(dataBounds);
394+
const auto shouldSetBounds = (mv::projects().isOpeningProject() || mv::projects().isImportingProject()) ? false : !_navigationAction.getFreezeZoomAction().isChecked();
395+
396+
if (shouldSetBounds)
397+
_pointRenderer.setViewBounds(dataBounds);
398+
393399
_densityRenderer.setBounds(dataBounds);
394400

395401
_dataRectangleAction.setBounds(dataBounds);
396-
_navigationAction.getZoomRectangleAction().setBounds(dataBounds);
402+
403+
if (shouldSetBounds)
404+
_navigationAction.getZoomRectangleAction().setBounds(dataBounds);
397405

398406
_pointRenderer.setData(*points);
399407
_densityRenderer.setData(points);

0 commit comments

Comments
 (0)