瀏覽代碼

ENH: Add "areTopWidgetsVisible" property to VTKScalarsToColorsWidget

Jean-Christophe Fillion-Robin 6 年之前
父節點
當前提交
0be27f02e9

+ 3 - 0
Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKScalarsToColorsWidgetTest1.cpp

@@ -63,6 +63,9 @@ int ctkVTKScalarsToColorsWidgetTest1(int argc, char * argv [] )
 
   ctkVTKScalarsToColorsWidget widget(0);
 
+  // check default values
+  CHECK_BOOL(widget.editColors(), true)
+  CHECK_BOOL(widget.areTopWidgetsVisible(), true)
   CHECK_NULL(widget.currentControlPointsItem())
 
   // add transfer function item

+ 3 - 0
Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKScalarsToColorsWidgetTest2.cpp

@@ -73,6 +73,9 @@ int ctkVTKScalarsToColorsWidgetTest2(int argc, char * argv [] )
 
   ctkVTKScalarsToColorsWidget widget(0);
 
+  // check default values
+  CHECK_BOOL(widget.editColors(), true)
+  CHECK_BOOL(widget.areTopWidgetsVisible(), true)
   CHECK_NULL(widget.currentControlPointsItem())
 
   // add transfer function item

+ 3 - 0
Libs/Visualization/VTK/Widgets/Testing/Cpp/ctkVTKScalarsToColorsWidgetTest3.cpp

@@ -65,6 +65,9 @@ int ctkVTKScalarsToColorsWidgetTest3(int argc, char * argv [] )
 
   ctkVTKScalarsToColorsWidget widget(0);
 
+  // check default values
+  CHECK_BOOL(widget.editColors(), true)
+  CHECK_BOOL(widget.areTopWidgetsVisible(), true)
   CHECK_NULL(widget.currentControlPointsItem())
 
   // add transfer function item

+ 38 - 7
Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsWidget.cpp

@@ -63,6 +63,7 @@ public:
 
   vtkControlPointsItem* CurrentControlPointsItem;
   bool EditColors;
+  bool TopWidgetsVisible;
 };
 
 // ----------------------------------------------------------------------------
@@ -75,6 +76,7 @@ ctkVTKScalarsToColorsWidgetPrivate::ctkVTKScalarsToColorsWidgetPrivate(
 {
   this->CurrentControlPointsItem = 0;
   this->EditColors = true;
+  this->TopWidgetsVisible = true;
 }
 
 // ----------------------------------------------------------------------------
@@ -249,6 +251,29 @@ void ctkVTKScalarsToColorsWidget::setEditColors(bool edit)
 }
 
 // ----------------------------------------------------------------------------
+bool ctkVTKScalarsToColorsWidget::areTopWidgetsVisible()const
+{
+  Q_D(const ctkVTKScalarsToColorsWidget);
+  return d->TopWidgetsVisible;
+}
+
+// ----------------------------------------------------------------------------
+void ctkVTKScalarsToColorsWidget::setTopWidgetsVisible(bool visible)
+{
+  Q_D(ctkVTKScalarsToColorsWidget);
+  d->ExpandButton->setVisible(visible);
+  d->PointIdLabel->setVisible(visible);
+  d->PointIdSpinBox->setVisible(visible);
+  foreach(QWidget* widget, this->extraWidgets())
+  {
+    widget->setVisible(visible);
+  }
+  d->TopSpacer->changeSize(visible ? 40 : 0, visible ? 20 : 0);
+  d->TopSpacer->invalidate();
+  d->TopWidgetsVisible = visible;
+}
+
+// ----------------------------------------------------------------------------
 void ctkVTKScalarsToColorsWidget::onPlotAdded(vtkPlot* plot)
 {
   vtkControlPointsItem* controlPoints = vtkControlPointsItem::SafeDownCast(plot);
@@ -321,15 +346,17 @@ void ctkVTKScalarsToColorsWidget::setCurrentControlPointsItem(vtkControlPointsIt
   d->CurrentControlPointsItem = item;
   if (item)
     {
-    d->ColorPickerButton->setVisible( d->EditColors &&
+    d->ColorPickerButton->setVisible( d->EditColors && d->TopWidgetsVisible &&
       (vtkColorTransferControlPointsItem::SafeDownCast(item) != 0 ||
        vtkCompositeControlPointsItem::SafeDownCast(item) != 0));
-    d->XLabel->setVisible(true);
-    d->XSpinBox->setVisible(true);
-    d->OpacityLabel->setVisible(vtkPiecewiseControlPointsItem::SafeDownCast(item) != 0 ||
-                                vtkCompositeControlPointsItem::SafeDownCast(item) != 0);
-    d->OpacitySpinBox->setVisible(vtkPiecewiseControlPointsItem::SafeDownCast(item) != 0 ||
-                                  vtkCompositeControlPointsItem::SafeDownCast(item) != 0);
+    d->XLabel->setVisible(d->TopWidgetsVisible);
+    d->XSpinBox->setVisible(d->TopWidgetsVisible);
+    d->OpacityLabel->setVisible(d->TopWidgetsVisible &&
+      (vtkPiecewiseControlPointsItem::SafeDownCast(item) != 0 ||
+       vtkCompositeControlPointsItem::SafeDownCast(item) != 0));
+    d->OpacitySpinBox->setVisible(d->TopWidgetsVisible &&
+      (vtkPiecewiseControlPointsItem::SafeDownCast(item) != 0 ||
+       vtkCompositeControlPointsItem::SafeDownCast(item) != 0));
     this->onAxesModified();
     }
   d->PointIdSpinBox->setEnabled(item != 0);
@@ -648,4 +675,8 @@ void ctkVTKScalarsToColorsWidget::addExtraWidget(QWidget* extraWidget)
 {
   Q_D(const ctkVTKScalarsToColorsWidget);
   d->TopLayout->insertWidget(this->extraWidgets().count(), extraWidget);
+  if (!d->TopWidgetsVisible)
+    {
+    extraWidget->setVisible(d->TopWidgetsVisible);
+    }
 }

+ 13 - 1
Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsWidget.h

@@ -39,12 +39,13 @@ class vtkPlot;
 /// This widget includes a ctkVTKScalarsToColorsView and a "top widget" to display and update its properties.
 ///
 /// Features are:
-/// * vertical and horizontal scrollbars (visible by default)
+/// * vertical and horizontal scrollbars (if needed, visible by default)
 /// * a "top widget" including selected point index, its coordinate and color. An expand button allows to access
 ///   advanced properties like mid point and sharpness.
 /// * if a piecewise or composite function are added to the view, the opacity is available in the "top widget" advanced properties.
 /// * color associated with points can be updated in place (editable by default).
 /// * support customization of widget shown in the top-left corner. See addExtraWidget().
+/// * visibility of the "top widgets" can easily be updated.
 ///
 /// Observing vtkControlPointsItem allows to be notified of point selection or
 /// point update:
@@ -59,6 +60,7 @@ class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKScalarsToColorsWidget : public
   Q_PROPERTY(bool horizontalSliderVisible READ isHorizontalSliderVisible WRITE setHorizontalSliderVisible)
   Q_PROPERTY(bool verticalSliderVisible READ isVerticalSliderVisible WRITE setVerticalSliderVisible)
   Q_PROPERTY(bool editColors READ editColors WRITE setEditColors)
+  Q_PROPERTY(bool areTopWidgetsVisible READ areTopWidgetsVisible WRITE setTopWidgetsVisible)
 public:
   ctkVTKScalarsToColorsWidget(QWidget* parent = 0);
   virtual ~ctkVTKScalarsToColorsWidget();
@@ -78,6 +80,16 @@ public:
   void xRange(double* range)const;
   void yRange(double* range)const;
 
+  /// Hide all widgets displayed above the color view.
+  ///
+  /// This function internally keeps track of the selected visibility state
+  /// by setting a "TopWidgetsVisible" property. This means that:
+  /// (1) widgets for editing point coordinate and color are
+  ///     not shown in the "top widgets" when a point is selected or modified.
+  /// (2) widgets added using addExtraWidget() are explicitly hidden if it applies.
+  bool areTopWidgetsVisible()const;
+  void setTopWidgetsVisible(bool visible);
+
   /// Return the top-left corner widget if any.
   ///
   /// \sa addExtraWidget()