瀏覽代碼

Better support of decimals change in ctkCoordinatesWidget

The number of decimals can be changed from the ctkDoubleSpinBox
directly. Let's make sure the new number of decimals is not overwritten
by the coordinates widget.
Julien Finet 11 年之前
父節點
當前提交
d9603a04b5
共有 1 個文件被更改,包括 15 次插入4 次删除
  1. 15 4
      Libs/Widgets/ctkCoordinatesWidget.cpp

+ 15 - 4
Libs/Widgets/ctkCoordinatesWidget.cpp

@@ -295,6 +295,8 @@ void ctkCoordinatesWidget::setCoordinates(double* coordinates)
     {
     this->normalize(this->Coordinates, this->Dimension);
     }
+  bool valuesModified = false;
+  int maxDecimals = 0;
   bool blocked = this->blockSignals(true);
   for (int i = 0; i < this->Dimension; ++i)
     {
@@ -305,13 +307,22 @@ void ctkCoordinatesWidget::setCoordinates(double* coordinates)
       {
       // we don't want updateCoordinate() to be called.
       // it could mess with the LastUserEditedCoordinates list.
-      bool spinBoxSignalWasBlocked = spinBox->blockSignals(true);
-      spinBox->setValue(this->Coordinates[i]);
-      spinBox->blockSignals(spinBoxSignalWasBlocked);
+      if (spinBox->displayedValue() != this->Coordinates[i])
+        {
+        bool spinBoxSignalWasBlocked = spinBox->blockSignals(true);
+        spinBox->setValue(this->Coordinates[i]);
+        spinBox->blockSignals(spinBoxSignalWasBlocked);
+        valuesModified = true;
+        }
+      maxDecimals = qMax(maxDecimals, spinBox->decimals());
       }
     }
   this->blockSignals(blocked);
-  this->updateCoordinates();
+  if (valuesModified)
+    {
+    this->setDecimals(maxDecimals);
+    this->updateCoordinates();
+    }
 }
 
 //------------------------------------------------------------------------------