Преглед на файлове

ctkSettingsDialog - Make sure Reset button is disabled by default.

Jean-Christophe Fillion-Robin преди 14 години
родител
ревизия
c32a887cb9
променени са 2 файла, в които са добавени 65 реда и са изтрити 0 реда
  1. 61 0
      Libs/Widgets/Testing/Cpp/ctkSettingsDialogTest1.cpp
  2. 4 0
      Libs/Widgets/ctkSettingsDialog.cpp

+ 61 - 0
Libs/Widgets/Testing/Cpp/ctkSettingsDialogTest1.cpp

@@ -21,6 +21,8 @@
 // Qt includes
 #include <QApplication>
 #include <QCheckBox>
+#include <QDialogButtonBox>
+#include <QPushButton>
 #include <QSettings>
 #include <QTimer>
 
@@ -41,8 +43,31 @@ int ctkSettingsDialogTest1(int argc, char * argv [] )
   settings.remove("key 1");
 
   ctkSettingsDialog settingsDialog;
+
+  // Get a reference to the DialogButtonBox
+  QDialogButtonBox * buttonBox = settingsDialog.findChild<QDialogButtonBox*>("SettingsButtonBox");
+  if (!buttonBox)
+    {
+    std::cerr << "Line " << __LINE__ << " - Failed to get a reference to the button box !" << std::endl;
+    return EXIT_FAILURE;
+    }
+
+  // Reset button should be disabled by default
+  if (buttonBox->button(QDialogButtonBox::Reset)->isEnabled())
+    {
+    std::cerr << "Line " << __LINE__ << " - Reset button should be disabled !" << std::endl;
+    return EXIT_FAILURE;
+    }
+
   settingsDialog.setSettings(&settings);
 
+  // Reset button should be disabled after settings are set
+  if (buttonBox->button(QDialogButtonBox::Reset)->isEnabled())
+    {
+    std::cerr << "Line " << __LINE__ << " - Reset button should be disabled !" << std::endl;
+    return EXIT_FAILURE;
+    }
+
   ctkSettingsPanel* panel1 = new ctkSettingsPanel;
   settingsDialog.addPanel("Panel 1", panel1); 
   if (panel1->settings() != &settings)
@@ -73,7 +98,19 @@ int ctkSettingsDialogTest1(int argc, char * argv [] )
     std::cerr << "Saving to settings failed" << std::endl;
     return EXIT_FAILURE;
     }
+  // Reset button should be enabled after settings are modified
+  if (!buttonBox->button(QDialogButtonBox::Reset)->isEnabled())
+    {
+    std::cerr << "Line " << __LINE__ << " - Reset button should be enabled !" << std::endl;
+    return EXIT_FAILURE;
+    }
   settingsDialog.resetSettings();
+  // Reset button should be enabled after settings are reset
+  if (buttonBox->button(QDialogButtonBox::Reset)->isEnabled())
+    {
+    std::cerr << "Line " << __LINE__ << " - Reset button should be disabled !" << std::endl;
+    return EXIT_FAILURE;
+    }
   boxVal = settings.value("key 1");
   if (!boxVal.isValid() || boxVal.toBool() != false)
     {
@@ -81,6 +118,30 @@ int ctkSettingsDialogTest1(int argc, char * argv [] )
     return EXIT_FAILURE;
     }
 
+  // Reset button should be enabled after settings are modified
+  box->setChecked(true);
+  boxVal = settings.value("key 1");
+  if (!boxVal.isValid() || boxVal.toBool() != true)
+    {
+    std::cerr << "Saving to settings failed" << std::endl;
+    return EXIT_FAILURE;
+    }
+  if (!buttonBox->button(QDialogButtonBox::Reset)->isEnabled())
+    {
+    std::cerr << "Line " << __LINE__ << " - Reset button should be enabled !" << std::endl;
+    return EXIT_FAILURE;
+    }
+  // .. and reset button should be disabled if new settings object is set
+  QSettings settings2(QSettings::IniFormat, QSettings::UserScope, "Common ToolKit", "CTK");
+  settingsDialog.setSettings(&settings2);
+  if (buttonBox->button(QDialogButtonBox::Reset)->isEnabled())
+    {
+    std::cerr << "Line " << __LINE__ << " - Reset button should be disabled !" << std::endl;
+    return EXIT_FAILURE;
+    }
+
+
+
   settingsDialog.setCurrentPanel("Panel 4");
 
   settingsDialog.show();

+ 4 - 0
Libs/Widgets/ctkSettingsDialog.cpp

@@ -71,6 +71,8 @@ void ctkSettingsDialogPrivate::init()
 
   this->setupUi(q);
 
+  this->SettingsButtonBox->button(QDialogButtonBox::Reset)->setEnabled(false);
+
   QObject::connect(this->SettingsTreeWidget,
     SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
     q, SLOT(onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
@@ -130,6 +132,8 @@ void ctkSettingsDialog::setSettings(QSettings* settings)
 {
   Q_D(ctkSettingsDialog);
 
+  d->SettingsButtonBox->button(QDialogButtonBox::Reset)->setEnabled(false);
+
   d->Settings = settings;
   foreach(ctkSettingsPanel* panel, d->Panels.values())
     {