Skip to content

Commit 7549f70

Browse files
committed
Move dataset picker setup into ScatterplotPlugin
Move control of dataset picker initialization from DatasetsAction to ScatterplotPlugin so the plugin can defer or re-run setup during project open. Make setupDatasetPickerActions protected and add ScatterplotPlugin as a friend so the plugin can call it. Refactor point-size dataset picker: tighten the filter to require PointType, a valid position dataset, and matching point counts; rework signal wiring to keep the DatasetPickerAction and ScalarAction synchronized and to set a default constant source when no dataset is selected. Minor debug logging added to aid troubleshooting.
1 parent 82ef458 commit 7549f70

File tree

3 files changed

+44
-21
lines changed

3 files changed

+44
-21
lines changed

src/DatasetsAction.cpp

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@ DatasetsAction::DatasetsAction(QObject* parent, const QString& title) :
4040
return;
4141

4242
setupDatasetPickerActions(scatterplotPlugin);
43-
44-
connect(&mv::projects(), &AbstractProjectManager::projectOpened, this, [this, scatterplotPlugin]() -> void {
45-
setupDatasetPickerActions(scatterplotPlugin);
46-
});
4743
}
4844

4945
void DatasetsAction::connectToPublicAction(WidgetAction* publicAction, bool recursive)
@@ -152,35 +148,53 @@ void DatasetsAction::setupColorDatasetPickerAction(ScatterplotPlugin* scatterplo
152148

153149
void DatasetsAction::setupPointSizeDatasetPickerAction(ScatterplotPlugin* scatterplotPlugin)
154150
{
155-
auto& settingsAction = scatterplotPlugin->getSettingsAction();
151+
auto& settingsAction = scatterplotPlugin->getSettingsAction();
152+
auto& pointPlotAction = settingsAction.getPlotAction().getPointPlotAction();
153+
auto& pointSizeAction = pointPlotAction.getSizeAction();
156154

157-
_pointSizeDatasetPickerAction.setFilterFunction([this](mv::Dataset<DatasetImpl> dataset) -> bool {
158-
return dataset->getDataType() == PointType;
159-
});
155+
_pointSizeDatasetPickerAction.setFilterFunction([this, scatterplotPlugin](mv::Dataset<DatasetImpl> dataset) -> bool {
156+
if (dataset->getDataType() != PointType)
157+
return false;
160158

161-
auto& pointPlotAction = settingsAction.getPlotAction().getPointPlotAction();
162-
auto& pointSizeAction = pointPlotAction.getSizeAction();
159+
qDebug() << dataset->getGuiName() << "A";
160+
const auto positionDataset = scatterplotPlugin->getPositionSourceDataset();
161+
162+
if (!positionDataset.isValid())
163+
return false;
163164

165+
qDebug() << dataset->getGuiName() << "B";
164166

165-
connect(&pointSizeAction, &ScalarAction::sourceSelectionChanged, this, [this, &pointSizeAction, scatterplotPlugin](const uint32_t& sourceSelectionIndex) -> void {
166-
if (_pointSizeDataset.isValid())
167+
const mv::Dataset<Points> candidatePoints(dataset);
168+
169+
if (candidatePoints->getNumPoints() != positionDataset->getNumPoints())
170+
return false;
171+
172+
qDebug() << dataset->getGuiName() << "C";
173+
174+
return true;
175+
});
176+
177+
connect(&_pointSizeDatasetPickerAction, &DatasetPickerAction::currentIndexChanged, this, [this, &pointPlotAction, &pointSizeAction, scatterplotPlugin](const int32_t& currentIndex) -> void {
178+
const auto& pointSizeDataset = _pointSizeDatasetPickerAction.getCurrentDataset();
179+
180+
if (pointSizeDataset.isValid())
167181
disconnect(&_pointSizeDataset, &Dataset<>::guiNameChanged, this, nullptr);
168182

169-
_pointSizeDataset = pointSizeAction.getCurrentDataset();
183+
_pointSizeDataset = pointSizeDataset;
170184

171185
connect(&_pointSizeDataset, &Dataset<>::guiNameChanged, scatterplotPlugin, &ScatterplotPlugin::updateHeadsUpDisplay);
172186

187+
pointPlotAction.setCurrentPointSizeDataset(_pointSizeDataset);
188+
189+
if (!_pointSizeDataset.isValid())
190+
pointSizeAction.setCurrentSourceIndex(ScalarSourceModel::DefaultRow::Constant);
191+
});
192+
193+
connect(&pointSizeAction, &ScalarAction::sourceSelectionChanged, this, [this, &pointSizeAction](const uint32_t& sourceSelectionIndex) -> void {
173194
_pointSizeDatasetPickerAction.setCurrentDataset(pointSizeAction.isSourceDataset() ? pointSizeAction.getCurrentDataset() : nullptr);
174195

175196
if (!pointSizeAction.isSourceDataset())
176197
_pointSizeDatasetPickerAction.setCurrentIndex(-1);
177-
});
178-
179-
connect(&_pointSizeDatasetPickerAction, &DatasetPickerAction::currentIndexChanged, this, [this, &pointSizeAction](const int32_t& currentIndex) -> void {
180-
pointSizeAction.setCurrentDataset(_pointSizeDatasetPickerAction.getCurrentDataset());
181-
182-
if (currentIndex < 0)
183-
pointSizeAction.setCurrentSourceIndex(ScalarSourceModel::DefaultRow::Constant);
184198
});
185199
}
186200

src/DatasetsAction.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class DatasetsAction : public GroupAction
5353
*/
5454
QVariantMap toVariantMap() const override;
5555

56-
private: // Dataset picker action setup
56+
protected: // Dataset picker action setup
5757

5858
/**
5959
* Set up the dataset picker actions with the datasets from the scatter plot plugin
@@ -103,6 +103,7 @@ class DatasetsAction : public GroupAction
103103
mv::Dataset<mv::DatasetImpl> _pointOpacityDataset; /** Smart pointer to dataset for driving point opacity (if any) */
104104

105105
friend class mv::AbstractActionsManager;
106+
friend class ScatterplotPlugin;
106107
};
107108

108109
Q_DECLARE_METATYPE(DatasetsAction)

src/ScatterplotPlugin.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,14 @@ void ScatterplotPlugin::init()
408408

409409
updateHeadsUpDisplay();
410410
updateHeadsUpDisplayTextColor();
411+
412+
if (mv::projects().isOpeningProject()) {
413+
connect(&mv::projects(), &AbstractProjectManager::projectOpened, this, [this, &datasetsAction]() -> void {
414+
datasetsAction.setupDatasetPickerActions(this);
415+
});
416+
} else {
417+
datasetsAction.setupDatasetPickerActions(this);
418+
}
411419
}
412420

413421
void ScatterplotPlugin::loadData(const Datasets& datasets)

0 commit comments

Comments
 (0)