diff --git a/Modules/Loadable/Markups/Logic/vtkSlicerMarkupsLogic.cxx b/Modules/Loadable/Markups/Logic/vtkSlicerMarkupsLogic.cxx index 4c3a2dc667f..69a6ef6d397 100644 --- a/Modules/Loadable/Markups/Logic/vtkSlicerMarkupsLogic.cxx +++ b/Modules/Loadable/Markups/Logic/vtkSlicerMarkupsLogic.cxx @@ -15,6 +15,9 @@ ==============================================================================*/ +// Qt includes +#include <QSettings> + // Markups includes #include "vtkSlicerMarkupsLogic.h" @@ -145,36 +148,46 @@ void vtkSlicerMarkupsLogic::ProcessMRMLNodesEvents(vtkObject *caller, } else if (event == vtkMRMLMarkupsDisplayNode::JumpToPointEvent) { - int controlPointIndex = -1; - int viewGroup = -1; - vtkMRMLSliceNode* sliceNode = nullptr; - if (callData != nullptr) + QSettings settings; + std::string leftButtonClickEvent = "Centered"; //default + if (settings.contains("Markups/JumpSliceType")) { - vtkMRMLInteractionEventData* eventData = reinterpret_cast<vtkMRMLInteractionEventData*>(callData); - if (eventData->GetComponentType() == vtkMRMLMarkupsDisplayNode::ComponentControlPoint) - { - controlPointIndex = eventData->GetComponentIndex(); - } - if (eventData->GetViewNode()) - { - viewGroup = eventData->GetViewNode()->GetViewGroup(); - sliceNode = vtkMRMLSliceNode::SafeDownCast(eventData->GetViewNode()); - } + leftButtonClickEvent = settings.value("Markups/JumpSliceType").toString().toLatin1(); } - // Jump current slice node to the plane of the control point (do not center) - if (sliceNode) + if (leftButtonClickEvent != "None") { - vtkMRMLMarkupsNode* markupsNode = vtkMRMLMarkupsNode::SafeDownCast(markupsDisplayNode->GetDisplayableNode()); - if (markupsNode) + int controlPointIndex = -1; + int viewGroup = -1; + vtkMRMLSliceNode* sliceNode = nullptr; + if (callData != nullptr) { - double worldPos[3] = { 0.0 }; - markupsNode->GetNthControlPointPositionWorld(controlPointIndex, worldPos); - sliceNode->JumpSliceByOffsetting(worldPos[0], worldPos[1], worldPos[2]); + vtkMRMLInteractionEventData* eventData = reinterpret_cast<vtkMRMLInteractionEventData*>(callData); + if (eventData->GetComponentType() == vtkMRMLMarkupsDisplayNode::ComponentControlPoint) + { + controlPointIndex = eventData->GetComponentIndex(); + } + if (eventData->GetViewNode()) + { + viewGroup = eventData->GetViewNode()->GetViewGroup(); + sliceNode = vtkMRMLSliceNode::SafeDownCast(eventData->GetViewNode()); + } + } + // Jump current slice node to the plane of the control point (do not center) + if (sliceNode) + { + vtkMRMLMarkupsNode* markupsNode = vtkMRMLMarkupsNode::SafeDownCast(markupsDisplayNode->GetDisplayableNode()); + if (markupsNode) + { + double worldPos[3] = { 0.0 }; + markupsNode->GetNthControlPointPositionWorld(controlPointIndex, worldPos); + sliceNode->JumpSliceByOffsetting(worldPos[0], worldPos[1], worldPos[2]); + } } + bool center = (leftButtonClickEvent == "Centered"); + // Jump centered in all other slices in the view group + this->JumpSlicesToNthPointInMarkup(markupsDisplayNode->GetDisplayableNode()->GetID(), controlPointIndex, + center, viewGroup, sliceNode); } - // Jump centered in all other slices in the view group - this->JumpSlicesToNthPointInMarkup(markupsDisplayNode->GetDisplayableNode()->GetID(), controlPointIndex, - true /* centered */, viewGroup, sliceNode); } } } diff --git a/Modules/Loadable/Markups/Resources/UI/qSlicerMarkupsSettingsPanel.ui b/Modules/Loadable/Markups/Resources/UI/qSlicerMarkupsSettingsPanel.ui index 253c97c7b0e..f9893d095c3 100644 --- a/Modules/Loadable/Markups/Resources/UI/qSlicerMarkupsSettingsPanel.ui +++ b/Modules/Loadable/Markups/Resources/UI/qSlicerMarkupsSettingsPanel.ui @@ -213,6 +213,35 @@ </property> </widget> </item> + <item row="6" column="0"> + <widget class="QLabel" name="defaultJumpSliceTypeLabel"> + <property name="text"> + <string>LeftButtonClick Jump Slice Type:</string> + </property> + </widget> + </item> + <item row="6" column="1"> + <widget class="QComboBox" name="defaultJumpSliceTypeComboBox"> + <property name="currentIndex"> + <number>2</number> + </property> + <item> + <property name="text"> + <string>None</string> + </property> + </item> + <item> + <property name="text"> + <string>Offset</string> + </property> + </item> + <item> + <property name="text"> + <string>Centered</string> + </property> + </item> + </widget> + </item> </layout> </widget> <customwidgets> diff --git a/Modules/Loadable/Markups/qSlicerMarkupsModule.cxx b/Modules/Loadable/Markups/qSlicerMarkupsModule.cxx index f68096c8dc1..ace6b0b8307 100644 --- a/Modules/Loadable/Markups/qSlicerMarkupsModule.cxx +++ b/Modules/Loadable/Markups/qSlicerMarkupsModule.cxx @@ -40,8 +40,7 @@ #include "qSlicerMarkupsModule.h" #include "qSlicerMarkupsModuleWidget.h" #include "qSlicerMarkupsReader.h" -//#include "qSlicerMarkupsSettingsPanel.h" -//#include "vtkSlicerMarkupsLogic.h" +#include "qSlicerMarkupsSettingsPanel.h" #include "vtkMRMLMarkupsDisplayNode.h" // DisplayableManager initialization @@ -134,7 +133,6 @@ void qSlicerMarkupsModule::setup() QStringList() << "vtkMRMLMarkupsNode", true, this)); // settings - /* if (qSlicerApplication::application()) { qSlicerMarkupsSettingsPanel* panel = @@ -143,7 +141,6 @@ void qSlicerMarkupsModule::setup() "Markups", panel); panel->setMarkupsLogic(vtkSlicerMarkupsLogic::SafeDownCast(this->logic())); } - */ // Register Subject Hierarchy core plugins qSlicerSubjectHierarchyPluginHandler::instance()->registerPlugin(new qSlicerSubjectHierarchyMarkupsPlugin()); diff --git a/Modules/Loadable/Markups/qSlicerMarkupsSettingsPanel.cxx b/Modules/Loadable/Markups/qSlicerMarkupsSettingsPanel.cxx index 94b36bf0ea4..7f524766957 100644 --- a/Modules/Loadable/Markups/qSlicerMarkupsSettingsPanel.cxx +++ b/Modules/Loadable/Markups/qSlicerMarkupsSettingsPanel.cxx @@ -17,6 +17,7 @@ // Qt includes #include <QDebug> +#include <QSettings> // QtGUI includes #include "qSlicerApplication.h" @@ -117,6 +118,8 @@ ::setMarkupsLogic(vtkSlicerMarkupsLogic* logic) "defaultTextScale", SIGNAL(defaultTextScaleChanged(double))); this->registerProperty("Markups/Opacity", this, "defaultOpacity", SIGNAL(defaultOpacityChanged(double))); + this->registerProperty("Markups/JumpSliceType", this, + "defaultJumpSliceType", SIGNAL(defaultJumpSliceTypeChanged(QString))); } // -------------------------------------------------------------------------- @@ -124,50 +127,46 @@ void qSlicerMarkupsSettingsPanel ::onMarkupsLogicModified() { Q_D(qSlicerMarkupsSettingsPanel); -/* disable it for now; if we want a settings panel then use the same pattern that is used for default view options + this->readDefaultMarkupsDisplaySettings(); - // update the gui to match the logic - QString glyphType = QString(d->MarkupsLogic->GetDefaultMarkupsDisplayNodeGlyphTypeAsString().c_str()); - - QObject::connect(d->defaultGlyphTypeComboBox, SIGNAL(currentIndexChanged(int)), - this, SLOT(onDefaultGlyphTypeChanged(int)),Qt::UniqueConnection); +} - // TODO: do I need to use the strings? -// d->defaultGlyphTypeComboBox->setCurrentIndex(glyphType - 1); - int glyphTypeIndex = d->defaultGlyphTypeComboBox->findData(glyphType); - if (glyphTypeIndex != -1) +//----------------------------------------------------------------------------- +void qSlicerMarkupsSettingsPanel::readDefaultMarkupsDisplaySettings() +{ + QSettings settings; + if (settings.contains("Markups/GlyphType")) { - d->defaultGlyphTypeComboBox->setCurrentIndex(glyphTypeIndex); + setDefaultGlyphType(settings.value("Markups/GlyphType").toString().toLatin1()); + } + if (settings.contains("Markups/SelectedColor")) + { + QVariant variant = settings.value("Markups/SelectedColor"); + QColor qcolor = variant.value<QColor>(); + setDefaultSelectedColor(qcolor); + } + if (settings.contains("Markups/UnselectedColor")) + { + QVariant variant = settings.value("Markups/UnselectedColor"); + QColor qcolor = variant.value<QColor>(); + setDefaultUnselectedColor(qcolor); + } + if (settings.contains("Markups/GlyphScale")) + { + setDefaultGlyphScale(settings.value("Markups/GlyphScale").toDouble()); + } + if (settings.contains("Markups/TextScale")) + { + setDefaultTextScale(settings.value("Markups/TextScale").toDouble()); + } + if (settings.contains("Markups/Opacity")) + { + setDefaultOpacity(settings.value("Markups/Opacity").toDouble()); + } + if (settings.contains("Markups/JumpSliceType")) + { + setDefaultGlyphType(settings.value("Markups/JumpSliceType").toString().toLatin1()); } - - - double *unselectedColor = d->MarkupsLogic->GetDefaultMarkupsDisplayNodeColor(); - QObject::connect(d->defaultUnselectedColorPickerButton, SIGNAL(colorChanged(QColor)), - this, SLOT(onDefaultUnselectedColorChanged(QColor))); - QColor qcolor = QColor::fromRgbF(unselectedColor[0], unselectedColor[1], unselectedColor[2]); - d->defaultUnselectedColorPickerButton->setColor(qcolor); - - double *selectedColor = d->MarkupsLogic->GetDefaultMarkupsDisplayNodeSelectedColor(); - QObject::connect(d->defaultSelectedColorPickerButton, SIGNAL(colorChanged(QColor)), - this, SLOT(onDefaultSelectedColorChanged(QColor)),Qt::UniqueConnection); - qcolor = QColor::fromRgbF(selectedColor[0], selectedColor[1], selectedColor[2]); - d->defaultSelectedColorPickerButton->setColor(qcolor); - - double glyphScale = d->MarkupsLogic->GetDefaultMarkupsDisplayNodeGlyphScale(); - QObject::connect(d->defaultGlyphScaleSliderWidget, SIGNAL(valueChanged(double)), - this, SLOT(onDefaultGlyphScaleChanged(double)),Qt::UniqueConnection); - d->defaultGlyphScaleSliderWidget->setValue(glyphScale); - - double textScale = d->MarkupsLogic->GetDefaultMarkupsDisplayNodeTextScale(); - QObject::connect(d->defaultTextScaleSliderWidget, SIGNAL(valueChanged(double)), - this, SLOT(onDefaultTextScaleChanged(double)),Qt::UniqueConnection); - d->defaultTextScaleSliderWidget->setValue(textScale); - - double opacity = d->MarkupsLogic->GetDefaultMarkupsDisplayNodeOpacity(); - QObject::connect(d->defaultOpacitySliderWidget, SIGNAL(valueChanged(double)), - this, SLOT(onDefaultOpacityChanged(double)),Qt::UniqueConnection); - d->defaultOpacitySliderWidget->setValue(opacity); - */ } // -------------------------------------------------------------------------- @@ -235,6 +234,21 @@ double qSlicerMarkupsSettingsPanel::defaultOpacity()const return opacity; } +// -------------------------------------------------------------------------- +QString qSlicerMarkupsSettingsPanel::defaultJumpSliceType()const +{ + Q_D(const qSlicerMarkupsSettingsPanel); + + int currentIndex = d->defaultJumpSliceTypeComboBox->currentIndex(); + QString jumpSliceType; + if (currentIndex != -1) + { + jumpSliceType = + d->defaultJumpSliceTypeComboBox->itemText(currentIndex); + } + return jumpSliceType; +} + // -------------------------------------------------------------------------- void qSlicerMarkupsSettingsPanel::setDefaultGlyphType(const QString& glyphType) { @@ -288,6 +302,19 @@ void qSlicerMarkupsSettingsPanel::setDefaultOpacity(const double opacity) d->defaultOpacitySliderWidget->setValue(opacity); } +// -------------------------------------------------------------------------- +void qSlicerMarkupsSettingsPanel::setDefaultJumpSliceType(const QString& jumpSliceType) +{ + Q_D(qSlicerMarkupsSettingsPanel); + + int jumpSliceTypeIndex = d->defaultJumpSliceTypeComboBox->findData(jumpSliceType); + + if (jumpSliceTypeIndex != -1) + { + d->defaultJumpSliceTypeComboBox->setCurrentIndex(jumpSliceTypeIndex); + } +} + // -------------------------------------------------------------------------- void qSlicerMarkupsSettingsPanel::onDefaultGlyphTypeChanged(int index) { @@ -425,3 +452,26 @@ void qSlicerMarkupsSettingsPanel::updateMarkupsLogicDefaultOpacity() // disable it for now; if we want a settings panel then use the same pattern that is used for default view options // d->MarkupsLogic->SetDefaultMarkupsDisplayNodeOpacity(this->defaultOpacity()); } + +// -------------------------------------------------------------------------- +void qSlicerMarkupsSettingsPanel::onDefaultJumpSliceTypeChanged(int index) +{ +// Q_D(qSlicerMarkupsSettingsPanel); + Q_UNUSED(index); + + this->updateMarkupsLogicDefaultJumpSliceType(); + emit defaultJumpSliceTypeChanged(this->defaultJumpSliceType()); +} + +// -------------------------------------------------------------------------- +void qSlicerMarkupsSettingsPanel::updateMarkupsLogicDefaultJumpSliceType() +{ + Q_D(qSlicerMarkupsSettingsPanel); + + if (d->MarkupsLogic == nullptr) + { + return; + } + // disable it for now; if we want a settings panel then use the same pattern that is used for default view options + // d->MarkupsLogic->SetDefaultMarkupsDisplayNodeJumpSliceTypeFromString(this->defaultJumpSliceType().toLatin1()); +} diff --git a/Modules/Loadable/Markups/qSlicerMarkupsSettingsPanel.h b/Modules/Loadable/Markups/qSlicerMarkupsSettingsPanel.h index 3af1bcc1b1c..2fd04d1aef2 100644 --- a/Modules/Loadable/Markups/qSlicerMarkupsSettingsPanel.h +++ b/Modules/Loadable/Markups/qSlicerMarkupsSettingsPanel.h @@ -38,6 +38,7 @@ class Q_SLICER_QTMODULES_MARKUPS_EXPORT qSlicerMarkupsSettingsPanel Q_PROPERTY(double defaultGlyphScale READ defaultGlyphScale WRITE setDefaultGlyphScale NOTIFY defaultGlyphScaleChanged) Q_PROPERTY(double defaultTextScale READ defaultTextScale WRITE setDefaultTextScale NOTIFY defaultTextScaleChanged) Q_PROPERTY(double defaultOpacity READ defaultOpacity WRITE setDefaultOpacity NOTIFY defaultOpacityChanged) + Q_PROPERTY(QString defaultJumpSliceType READ defaultJumpSliceType WRITE setDefaultJumpSliceType NOTIFY defaultJumpSliceTypeChanged) public: /// Superclass typedef @@ -59,12 +60,15 @@ class Q_SLICER_QTMODULES_MARKUPS_EXPORT qSlicerMarkupsSettingsPanel void setMarkupsLogic(vtkSlicerMarkupsLogic* logic); vtkSlicerMarkupsLogic* markupsLogic()const; + void readDefaultMarkupsDisplaySettings(); + QString defaultGlyphType() const; QColor defaultUnselectedColor() const; QColor defaultSelectedColor() const; double defaultGlyphScale() const; double defaultTextScale() const; double defaultOpacity() const; + QString defaultJumpSliceType() const; public slots: void setDefaultGlyphType(const QString& type); @@ -73,6 +77,7 @@ public slots: void setDefaultGlyphScale(const double scale); void setDefaultTextScale(const double scale); void setDefaultOpacity(const double scale); + void setDefaultJumpSliceType(const QString& type); signals: void defaultGlyphTypeChanged(const QString&); @@ -81,6 +86,7 @@ public slots: void defaultGlyphScaleChanged(const double); void defaultTextScaleChanged(const double); void defaultOpacityChanged(const double); + void defaultJumpSliceTypeChanged(const QString&); protected slots: void onMarkupsLogicModified(); @@ -103,6 +109,9 @@ protected slots: void onDefaultOpacityChanged(double); void updateMarkupsLogicDefaultOpacity(); + void onDefaultJumpSliceTypeChanged(int); + void updateMarkupsLogicDefaultJumpSliceType(); + protected: QScopedPointer<qSlicerMarkupsSettingsPanelPrivate> d_ptr;