Prechádzať zdrojové kódy

Merge branch 'ctkdoublespinbox-decimalsbykey'

* ctkdoublespinbox-decimalsbykey:
  Control the number of decimals in the ctkMatrixWidget display
Julien Finet 11 rokov pred
rodič
commit
9a87710e32

+ 3 - 0
Libs/Widgets/Testing/Cpp/CMakeLists.txt

@@ -45,6 +45,7 @@ set(TEST_SOURCES
   ctkMaterialPropertyPreviewLabelTest1.cpp
   ctkMaterialPropertyWidgetTest1.cpp
   ctkMaterialPropertyWidgetTest2.cpp
+  ctkMatrixWidgetTest.cpp
   ctkMatrixWidgetTest1.cpp
   ctkMatrixWidgetTest2.cpp
   ctkMenuButtonTest1.cpp
@@ -184,6 +185,7 @@ QT4_GENERATE_MOCS(
   ctkFlatProxyModelTest.cpp
   ctkFontButtonTest.cpp
   ctkLanguageComboBoxTest.cpp
+  ctkMatrixWidgetTest.cpp
   ctkMessageBoxDontShowAgainTest.cpp
   ctkPathListWidgetTest.cpp
   ctkPathListWidgetWithButtonsTest.cpp
@@ -253,6 +255,7 @@ SIMPLE_TEST( ctkLayoutManagerTest1 )
 SIMPLE_TEST( ctkMaterialPropertyPreviewLabelTest1 )
 SIMPLE_TEST( ctkMaterialPropertyWidgetTest1 )
 SIMPLE_TEST( ctkMaterialPropertyWidgetTest2 )
+SIMPLE_TEST( ctkMatrixWidgetTest )
 SIMPLE_TEST( ctkMatrixWidgetTest1 )
 SIMPLE_TEST( ctkMatrixWidgetTest2 )
 SIMPLE_TEST( ctkMenuButtonTest1 )

+ 72 - 0
Libs/Widgets/Testing/Cpp/ctkMatrixWidgetTest.cpp

@@ -0,0 +1,72 @@
+/*=========================================================================
+
+  Library:   CTK
+
+  Copyright (c) Kitware Inc.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0.txt
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=========================================================================*/
+
+// Qt includes
+#include <QApplication>
+#include <QString>
+#include <QTimer>
+
+// CTK includes
+#include "ctkMatrixWidget.h"
+#include "ctkTest.h"
+
+// ----------------------------------------------------------------------------
+class ctkMatrixWidgetTester: public QObject
+{
+  Q_OBJECT
+private slots:
+  void testUI();
+
+  void testDecimals();
+};
+
+// ----------------------------------------------------------------------------
+void ctkMatrixWidgetTester::testUI()
+{
+  ctkMatrixWidget matrix;
+  matrix.setMinimum(-100.);
+  matrix.setMaximum(100.);
+
+  matrix.show();
+  QTest::qWaitForWindowShown(&matrix);
+  //qApp->exec();
+}
+
+// ----------------------------------------------------------------------------
+void ctkMatrixWidgetTester::testDecimals()
+{
+  ctkMatrixWidget matrix;
+  matrix.setDecimalsOption(
+    ctkDoubleSpinBox::DecimalsByKey | ctkDoubleSpinBox::DecimalsByShortcuts );
+  matrix.setDecimals(10);
+  matrix.setValue(0, 0, 1.000000001);
+
+  matrix.show();
+  QTest::qWaitForWindowShown(&matrix);
+  //qApp->exec();
+
+  QCOMPARE(matrix.value(0, 0), 1.000000001);
+}
+
+// ----------------------------------------------------------------------------
+CTK_TEST_MAIN(ctkMatrixWidgetTest)
+#include "moc_ctkMatrixWidgetTest.cpp"
+
+

+ 25 - 0
Libs/Widgets/ctkMatrixWidget.cpp

@@ -62,6 +62,30 @@ namespace
         matrixWidget, SLOT(setDecimals(int)));
     }
   };
+
+//-----------------------------------------------------------------------------
+// Reimplemented to display the numbers with the matrix decimals.
+class ctkMatrixItemDelegate : public QStyledItemDelegate
+{
+public:
+  ctkMatrixItemDelegate(ctkMatrixWidget* matrixWidget)
+    : QStyledItemDelegate(matrixWidget)
+  {
+  }
+  virtual QString	displayText ( const QVariant & value, const QLocale & locale ) const
+  {
+    ctkMatrixWidget* matrix = qobject_cast<ctkMatrixWidget*>(this->parent());
+    Q_ASSERT(matrix);
+    switch(value.type())
+      {
+      case QVariant::Double:
+        return locale.toString(value.toDouble(), 'f', matrix->decimals());
+      default:
+        return this->QStyledItemDelegate::displayText(value, locale);
+      }
+  }
+};
+
 }
 
 //-----------------------------------------------------------------------------
@@ -99,6 +123,7 @@ ctkMatrixWidgetPrivate::ctkMatrixWidgetPrivate(ctkMatrixWidget& object, int rows
 void ctkMatrixWidgetPrivate::init()
 {
   Q_Q(ctkMatrixWidget);
+  this->Table->setItemDelegate(new ctkMatrixItemDelegate(q));
 
   this->Table->setParent(q);
   QHBoxLayout* layout = new QHBoxLayout(q);