Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 31 additions & 15 deletions src/ScatterplotPlugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -368,14 +368,18 @@ void ScatterplotPlugin::init()
});
#endif

updateHeadsUpDisplay();

connect(&_positionDataset, &Dataset<>::changed, this, &ScatterplotPlugin::updateHeadsUpDisplay);
connect(&_positionDataset, &Dataset<>::guiNameChanged, this, &ScatterplotPlugin::updateHeadsUpDisplay);
connect(&_settingsAction.getColoringAction(), &ColoringAction::currentColorDatasetChanged, this, &ScatterplotPlugin::updateHeadsUpDisplay);
connect(&_settingsAction.getColoringAction().getColorByAction(), &OptionAction::currentIndexChanged, this, &ScatterplotPlugin::updateHeadsUpDisplay);
connect(&_settingsAction.getPlotAction().getPointPlotAction().getSizeAction(), &ScalarAction::sourceDataChanged, this, &ScatterplotPlugin::updateHeadsUpDisplay);
connect(&_settingsAction.getPlotAction().getPointPlotAction().getOpacityAction(), &ScalarAction::sourceDataChanged, this, &ScatterplotPlugin::updateHeadsUpDisplay);
_hudUpdateTimer = new QTimer(this);
_hudUpdateTimer->setSingleShot(true);
connect(_hudUpdateTimer, &QTimer::timeout, this, &ScatterplotPlugin::updateHeadsUpDisplay);

connect(&_positionDataset, &Dataset<>::changed, this, &ScatterplotPlugin::scheduleHeadsUpDisplayUpdate);
connect(&_positionDataset, &Dataset<>::guiNameChanged, this, &ScatterplotPlugin::scheduleHeadsUpDisplayUpdate);
connect(&_settingsAction.getColoringAction(), &ColoringAction::currentColorDatasetChanged, this, &ScatterplotPlugin::scheduleHeadsUpDisplayUpdate);
connect(&_settingsAction.getColoringAction().getColorByAction(), &OptionAction::currentIndexChanged, this, &ScatterplotPlugin::scheduleHeadsUpDisplayUpdate);
connect(&_settingsAction.getPlotAction().getPointPlotAction().getSizeAction(), &ScalarAction::sourceDataChanged, this, &ScatterplotPlugin::scheduleHeadsUpDisplayUpdate);
connect(&_settingsAction.getPlotAction().getPointPlotAction().getOpacityAction(), &ScalarAction::sourceDataChanged, this, &ScatterplotPlugin::scheduleHeadsUpDisplayUpdate);

scheduleHeadsUpDisplayUpdate();
}

void ScatterplotPlugin::loadData(const Datasets& datasets)
Expand Down Expand Up @@ -970,26 +974,38 @@ void ScatterplotPlugin::updateSelection()
}
}

void ScatterplotPlugin::scheduleHeadsUpDisplayUpdate()
{
if (_hudUpdateTimer)
_hudUpdateTimer->start(20);
}

void ScatterplotPlugin::updateHeadsUpDisplay()
{
getHeadsUpDisplayAction().removeAllHeadsUpDisplayItems();

if (_positionDataset.isValid()) {
const auto datasetsItem = getHeadsUpDisplayAction().addHeadsUpDisplayItem("Datasets", "", "");
const auto datasetsItem = getHeadsUpDisplayAction().addHeadsUpDisplayItem("Datasets", "", nullptr);

// Defensive: Check both pointer and index validity
if (!datasetsItem || !datasetsItem->getIndex().isValid())
return;

// Only add child items if parent is valid and part of the model
getHeadsUpDisplayAction().addHeadsUpDisplayItem("Position by:", _positionDataset->getGuiName(), "", datasetsItem);

auto addMetaDataToHeadsUpDisplay = [this](const QString& metaDataName, const Dataset<> data, const util::HeadsUpDisplayItemSharedPtr& itemPtr) {
if (data.isValid())
if (data.isValid() && itemPtr && itemPtr->getIndex().isValid())
getHeadsUpDisplayAction().addHeadsUpDisplayItem(QString("%1 by:").arg(metaDataName), data->getGuiName(), "", itemPtr);
};

addMetaDataToHeadsUpDisplay("Color", _settingsAction.getColoringAction().getCurrentColorDataset(), datasetsItem);
addMetaDataToHeadsUpDisplay("Size", _settingsAction.getPlotAction().getPointPlotAction().getSizeAction().getCurrentDataset(), datasetsItem);
addMetaDataToHeadsUpDisplay("Color", _settingsAction.getColoringAction().getCurrentColorDataset(), datasetsItem);
addMetaDataToHeadsUpDisplay("Size", _settingsAction.getPlotAction().getPointPlotAction().getSizeAction().getCurrentDataset(), datasetsItem);
addMetaDataToHeadsUpDisplay("Opacity", _settingsAction.getPlotAction().getPointPlotAction().getOpacityAction().getCurrentDataset(), datasetsItem);

} else {
getHeadsUpDisplayAction().addHeadsUpDisplayItem("No datasets loaded", "", "");
}
else {
getHeadsUpDisplayAction().addHeadsUpDisplayItem("No datasets loaded", "", nullptr);
}
}

Expand All @@ -1006,7 +1022,7 @@ void ScatterplotPlugin::fromVariantMap(const QVariantMap& variantMap)
_primaryToolbarAction.fromParentVariantMap(variantMap);
_settingsAction.fromParentVariantMap(variantMap);

updateHeadsUpDisplay();
scheduleHeadsUpDisplayUpdate();

if (pointRenderer.getNavigator().getNavigationAction().getSerializationCountFrom() == 0) {
qDebug() << "Resetting view";
Expand Down
5 changes: 4 additions & 1 deletion src/ScatterplotPlugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ class ScatterplotPlugin : public ViewPlugin
/** Use the sampler pixel selection tool to sample data points */
void samplePoints();

/** Schedule an update of the heads-up display (HUD) **/
void scheduleHeadsUpDisplayUpdate();

public:

/** Get reference to the scatter plot widget */
Expand Down Expand Up @@ -120,7 +123,7 @@ class ScatterplotPlugin : public ViewPlugin
SettingsAction _settingsAction; /** Group action for all settings */
HorizontalToolbarAction _primaryToolbarAction; /** Horizontal toolbar for primary content */
QRectF _selectionBoundaries; /** Boundaries of the selection */

QTimer* _hudUpdateTimer = nullptr;
static const std::int32_t LAZY_UPDATE_INTERVAL = 2;

};
Expand Down