-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSubsetAction.cpp
More file actions
119 lines (83 loc) · 3.78 KB
/
SubsetAction.cpp
File metadata and controls
119 lines (83 loc) · 3.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include "SubsetAction.h"
#include "ScatterplotPlugin.h"
#include "ScatterplotWidget.h"
#include <PointData/PointData.h>
#include <Application.h>
#include <QMenu>
using namespace mv;
using namespace mv::gui;
SubsetAction::SubsetAction(QObject* parent, const QString& title) :
VerticalGroupAction(parent, title),
_scatterplotPlugin(dynamic_cast<ScatterplotPlugin*>(parent->parent())),
_subsetNameAction(this, "Subset name"),
_sourceDataAction(this, "Source data"),
_createSubsetAction(this, "Create subset")
{
setIconByName("crop");
setConnectionPermissionsToForceNone(true);
setConfigurationFlag(WidgetAction::ConfigurationFlag::ForceCollapsedInGroup);
setLabelSizingType(LabelSizingType::Auto);
addAction(&_subsetNameAction);
addAction(&_sourceDataAction);
addAction(&_createSubsetAction);
_subsetNameAction.setToolTip("Name of the subset");
_createSubsetAction.setToolTip("Create subset from selected data points");
const auto updateReadOnly = [this]() -> void {
_createSubsetAction.setEnabled(!_subsetNameAction.getString().isEmpty());
};
updateReadOnly();
connect(&_subsetNameAction, &StringAction::stringChanged, this, updateReadOnly);
}
void SubsetAction::initialize(ScatterplotPlugin* scatterplotPlugin)
{
Q_ASSERT(scatterplotPlugin != nullptr);
if (scatterplotPlugin == nullptr)
return;
_scatterplotPlugin = scatterplotPlugin;
connect(&_createSubsetAction, &QAction::triggered, this, [this]() {
_scatterplotPlugin->createSubset(_sourceDataAction.getCurrentIndex() == 1, _subsetNameAction.getString());
});
const auto onCurrentDatasetChanged = [this]() -> void {
if (!_scatterplotPlugin->getPositionDataset().isValid())
return;
const auto datasetGuiName = _scatterplotPlugin->getPositionDataset()->text();
QStringList sourceDataOptions;
if (!datasetGuiName.isEmpty()) {
const auto sourceDatasetGuiName = _scatterplotPlugin->getPositionDataset()->getSourceDataset<Points>()->text();
sourceDataOptions << QString("From: %1").arg(datasetGuiName);
if (sourceDatasetGuiName != datasetGuiName)
sourceDataOptions << QString("From: %1 (source data)").arg(sourceDatasetGuiName);
}
_sourceDataAction.setOptions(sourceDataOptions);
_sourceDataAction.setEnabled(sourceDataOptions.count() >= 2);
};
connect(&_scatterplotPlugin->getPositionDataset(), &Dataset<Points>::changed, this, onCurrentDatasetChanged);
onCurrentDatasetChanged();
const auto updateReadOnly = [this]() {
const auto positionDataset = _scatterplotPlugin->getPositionDataset();
const auto numberOfSelectedPoints = positionDataset.isValid() ? positionDataset->getSelectionSize() : 0;
const auto hasSelection = numberOfSelectedPoints >= 1;
setEnabled(_scatterplotPlugin->getScatterplotWidget().getRenderMode() == ScatterplotWidget::SCATTERPLOT && hasSelection);
};
updateReadOnly();
connect(&_scatterplotPlugin->getScatterplotWidget(), &ScatterplotWidget::renderModeChanged, this, updateReadOnly);
connect(&_scatterplotPlugin->getPositionDataset(), &Dataset<Points>::dataSelectionChanged, this, updateReadOnly);
}
QMenu* SubsetAction::getContextMenu()
{
auto menu = new QMenu("Subset");
menu->addAction(&_createSubsetAction);
menu->addAction(&_sourceDataAction);
return menu;
}
void SubsetAction::fromVariantMap(const QVariantMap& variantMap)
{
GroupAction::fromVariantMap(variantMap);
_subsetNameAction.fromParentVariantMap(variantMap);
}
QVariantMap SubsetAction::toVariantMap() const
{
auto variantMap = GroupAction::toVariantMap();
_subsetNameAction.insertIntoVariantMap(variantMap);
return variantMap;
}