소스 검색

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 12 년 전
부모
커밋
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();
+    }
 }
 
 //------------------------------------------------------------------------------