@@ -262,6 +262,8 @@ ScatterplotPlugin::ScatterplotPlugin(const PluginFactory* factory) :
262262 getSamplerAction ().getEnabledAction ().setChecked (false );
263263
264264 getLearningCenterAction ().addVideos (QStringList ({ " Practitioner" , " Developer" }));
265+
266+ setOverlayActionsTargetWidget (_scatterPlotWidget);
265267}
266268
267269ScatterplotPlugin::~ScatterplotPlugin ()
@@ -270,35 +272,23 @@ ScatterplotPlugin::~ScatterplotPlugin()
270272
271273void ScatterplotPlugin::init ()
272274{
275+ getWidget ().setMouseTracking (true );
276+
273277 auto layout = new QVBoxLayout ();
274278
275279 layout->setContentsMargins (0 , 0 , 0 , 0 );
276280 layout->setSpacing (0 );
277281 layout->addWidget (_primaryToolbarAction.createWidget (&getWidget ()));
278282 layout->addWidget (_scatterPlotWidget, 100 );
279283
280- auto navigationWidget = new QWidget ();
281- auto navigationLayout = new QHBoxLayout ();
282-
283- navigationLayout->setContentsMargins (4 , 4 , 4 , 4 );
284-
285- navigationLayout->addStretch (1 );
286- {
287- auto renderersNavigationGroupAction = new HorizontalGroupAction (this , " Navigation" );
288-
289- renderersNavigationGroupAction->setShowLabels (false );
290-
291- renderersNavigationGroupAction->addAction (const_cast <NavigationAction*>(&_scatterPlotWidget->getPointRendererNavigator ().getNavigationAction ()));
284+ auto & navigationAction = _scatterPlotWidget->getPointRendererNavigator ().getNavigationAction ();
292285
293- _scatterPlotWidget->getPointRendererNavigator ().getNavigationAction ().setParent (&_settingsAction);
286+ if (auto navigationWidget = navigationAction.createWidget (&getWidget ())) {
287+ layout->addWidget (navigationWidget);
288+ layout->setAlignment (navigationWidget, Qt::AlignCenter);
294289
295- navigationLayout-> addWidget (renderersNavigationGroupAction-> createWidget (& getWidget ()) );
290+ navigationAction. setParent (&_settingsAction );
296291 }
297- navigationLayout->addStretch (1 );
298-
299- navigationWidget->setLayout (navigationLayout);
300-
301- layout->addWidget (navigationWidget);
302292
303293 getWidget ().setLayout (layout);
304294
@@ -375,6 +365,19 @@ void ScatterplotPlugin::init()
375365 return pointIndicesTableWidget;
376366 });
377367#endif
368+
369+ updateHeadsUpDisplay ();
370+
371+ connect (&_positionDataset, &Dataset<>::changed, this , &ScatterplotPlugin::updateHeadsUpDisplay);
372+ connect (&_positionDataset, &Dataset<>::guiNameChanged, this , &ScatterplotPlugin::updateHeadsUpDisplay);
373+ connect (&_settingsAction.getColoringAction (), &ColoringAction::currentColorDatasetChanged, this , &ScatterplotPlugin::updateHeadsUpDisplay);
374+ connect (&_settingsAction.getColoringAction ().getColorByAction (), &OptionAction::currentIndexChanged, this , &ScatterplotPlugin::updateHeadsUpDisplay);
375+ connect (&_settingsAction.getPlotAction ().getPointPlotAction ().getSizeAction (), &ScalarAction::sourceDataChanged, this , &ScatterplotPlugin::updateHeadsUpDisplay);
376+ connect (&_settingsAction.getPlotAction ().getPointPlotAction ().getOpacityAction (), &ScalarAction::sourceDataChanged, this , &ScatterplotPlugin::updateHeadsUpDisplay);
377+
378+ updateHeadsUpDisplayTextColor ();
379+
380+ connect (&_settingsAction.getMiscellaneousAction ().getBackgroundColorAction (), &ColorAction::colorChanged, this , &ScatterplotPlugin::updateHeadsUpDisplayTextColor);
378381}
379382
380383void ScatterplotPlugin::loadData (const Datasets& datasets)
@@ -412,8 +415,11 @@ void ScatterplotPlugin::selectPoints()
412415
413416 auto & pixelSelectionTool = _scatterPlotWidget->getPixelSelectionTool ();
414417
418+ auto renderer = _settingsAction.getRenderModeAction ().getCurrentIndex () > 0 ? dynamic_cast <Renderer2D*>(&_scatterPlotWidget->_densityRenderer ) : dynamic_cast <Renderer2D*>(&_scatterPlotWidget->_pointRenderer );
419+ auto & navigator = renderer->getNavigator ();
420+
415421 // Only proceed with a valid points position dataset and when the pixel selection tool is active
416- if (!_positionDataset.isValid () || !pixelSelectionTool.isActive () || _scatterPlotWidget-> _pointRenderer . getNavigator () .isNavigating () || !pixelSelectionTool.isEnabled ())
422+ if (!_positionDataset.isValid () || !pixelSelectionTool.isActive () || navigator .isNavigating () || !pixelSelectionTool.isEnabled ())
417423 return ;
418424
419425 auto selectionAreaImage = pixelSelectionTool.getAreaPixmap ().toImage ();
@@ -427,11 +433,8 @@ void ScatterplotPlugin::selectPoints()
427433
428434 _positionDataset->getGlobalIndices (localGlobalIndices);
429435
430- auto & pointRenderer = _scatterPlotWidget->_pointRenderer ;
431- auto & navigator = pointRenderer.getNavigator ();
432-
433436 const auto zoomRectangleWorld = navigator.getZoomRectangleWorld ();
434- const auto screenRectangle = QRect (QPoint (), pointRenderer. getRenderSize ());
437+ const auto screenRectangle = QRect (QPoint (), renderer-> getRenderSize ());
435438
436439 float boundaries[4 ]{
437440 std::numeric_limits<float >::max (),
@@ -516,7 +519,7 @@ void ScatterplotPlugin::selectPoints()
516519 }
517520 }
518521
519- auto & navigationAction = _scatterPlotWidget-> getPointRendererNavigator () .getNavigationAction ();
522+ auto & navigationAction = navigator .getNavigationAction ();
520523
521524 navigationAction.getZoomSelectionAction ().setEnabled (!targetSelectionIndices.empty () && !navigationAction.getFreezeNavigation ().isChecked ());
522525
@@ -969,6 +972,42 @@ void ScatterplotPlugin::updateSelection()
969972 }
970973}
971974
975+ void ScatterplotPlugin::updateHeadsUpDisplay ()
976+ {
977+ getHeadsUpDisplayAction ().removeAllHeadsUpDisplayItems ();
978+
979+ if (_positionDataset.isValid ()) {
980+ const auto datasetsItem = getHeadsUpDisplayAction ().addHeadsUpDisplayItem (" Datasets" , " " , " " );
981+
982+ getHeadsUpDisplayAction ().addHeadsUpDisplayItem (" Position by:" , _positionDataset->getGuiName (), " " , datasetsItem);
983+
984+ auto addMetaDataToHeadsUpDisplay = [this ](const QString& metaDataName, const Dataset<> data, const util::HeadsUpDisplayItemSharedPtr& itemPtr) {
985+ if (data.isValid ())
986+ getHeadsUpDisplayAction ().addHeadsUpDisplayItem (QString (" %1 by:" ).arg (metaDataName), data->getGuiName (), " " , itemPtr);
987+ };
988+
989+ addMetaDataToHeadsUpDisplay (" Color" , _settingsAction.getColoringAction ().getCurrentColorDataset (), datasetsItem);
990+ addMetaDataToHeadsUpDisplay (" Size" , _settingsAction.getPlotAction ().getPointPlotAction ().getSizeAction ().getCurrentDataset (), datasetsItem);
991+ addMetaDataToHeadsUpDisplay (" Opacity" , _settingsAction.getPlotAction ().getPointPlotAction ().getOpacityAction ().getCurrentDataset (), datasetsItem);
992+
993+ } else {
994+ getHeadsUpDisplayAction ().addHeadsUpDisplayItem (" No datasets loaded" , " " , " " );
995+ }
996+ }
997+
998+ void ScatterplotPlugin::updateHeadsUpDisplayTextColor ()
999+ {
1000+ if (auto headsUpDisplayWidget = getWidget ().findChild <QWidget*>(" HeadsUpDisplayWidget" )) {
1001+ if (auto headsUpDisplayWidgetTreeView = headsUpDisplayWidget->findChild <QTreeView*>(" TreeView" )) {
1002+ QPalette palette = headsUpDisplayWidgetTreeView->palette ();
1003+
1004+ palette.setColor (QPalette::Text, _settingsAction.getMiscellaneousAction ().getBackgroundColorAction ().getColor ().lightnessF () > .5f ? Qt::black : Qt::white);
1005+
1006+ headsUpDisplayWidgetTreeView->setPalette (palette);
1007+ }
1008+ }
1009+ }
1010+
9721011void ScatterplotPlugin::fromVariantMap (const QVariantMap& variantMap)
9731012{
9741013 ViewPlugin::fromVariantMap (variantMap);
@@ -982,14 +1021,16 @@ void ScatterplotPlugin::fromVariantMap(const QVariantMap& variantMap)
9821021 _primaryToolbarAction.fromParentVariantMap (variantMap);
9831022 _settingsAction.fromParentVariantMap (variantMap);
9841023
985-
1024+ updateHeadsUpDisplay ();
9861025
9871026 if (pointRenderer.getNavigator ().getNavigationAction ().getSerializationCountFrom () == 0 ) {
9881027 qDebug () << " Resetting view" ;
9891028
9901029
9911030 _scatterPlotWidget->update ();
9921031 }
1032+
1033+ updateHeadsUpDisplayTextColor ();
9931034}
9941035
9951036QVariantMap ScatterplotPlugin::toVariantMap () const
0 commit comments