Browse Source

Add test to ctkDirectoryButton

On windows, clicking on the third directory button result in a crash though
Julien Finet 14 years ago
parent
commit
ee84fd2671

+ 66 - 9
Libs/Widgets/Testing/Cpp/ctkDirectoryButtonTest1.cpp

@@ -20,7 +20,9 @@
 
 // Qt includes
 #include <QApplication>
+#include <QStyle>
 #include <QTimer>
+#include <QVBoxLayout>
 
 // CTK includes
 #include "ctkDirectoryButton.h"
@@ -33,22 +35,77 @@
 int ctkDirectoryButtonTest1(int argc, char * argv [] )
 {
   QApplication app(argc, argv);
+  
+  QWidget topLevel;
+  ctkDirectoryButton button;
+  
+  QIcon defaultIcon = button.style()->standardIcon(QStyle::SP_DirIcon);
+  QIcon icon = button.style()->standardIcon(QStyle::SP_MessageBoxQuestion);
+  QIcon icon2 = button.style()->standardIcon(QStyle::SP_DesktopIcon);
 
-  ctkDirectoryButton ctkObject;
+  ctkDirectoryButton button2(".");
+  ctkDirectoryButton button3(icon, "..");
+  
+  QVBoxLayout* layout = new QVBoxLayout;
+  layout->addWidget(&button);
+  layout->addWidget(&button2);
+  layout->addWidget(&button3);
+  topLevel.setLayout(layout);
+  
+  button.setCaption("Select a directory");
+  if (button.caption() != "Select a directory")
+    {
+    std::cerr << "ctkDirectoryButton::setCaption() failed." << std::endl;
+    return EXIT_FAILURE;
+    }
+
+  if (button.icon().pixmap(20).toImage() !=
+      defaultIcon.pixmap(20).toImage())
+    {
+    std::cerr << "ctkDirectoryButton::icon() failed." << std::endl;
+    return EXIT_FAILURE;
+    }
+
+  button3.setIcon(icon2);
+  if (button3.icon().pixmap(20).toImage() !=
+      icon2.pixmap(20).toImage())
+    {
+    std::cerr << "ctkDirectoryButton::setIcon() failed." << std::endl;
+    return EXIT_FAILURE;
+    }
+  
 #ifdef USE_QFILEDIALOG_OPTIONS
-  ctkObject.setOptions(QFileDialog::ShowDirsOnly | QFileDialog::ReadOnly);
+  button.setOptions(QFileDialog::ShowDirsOnly | QFileDialog::ReadOnly);
+  if (button.options() != (QFileDialog::ShowDirsOnly |
+                           QFileDialog::ReadOnly))
 #else
-  ctkObject.setOptions(ctkDirectoryButton::ShowDirsOnly |
-                       ctkDirectoryButton::ReadOnly);
+  button.setOptions(ctkDirectoryButton::ShowDirsOnly |
+                    ctkDirectoryButton::ReadOnly);
+  
+  if (button.options() != (ctkDirectoryButton::ShowDirsOnly |
+                           ctkDirectoryButton::ReadOnly))
 #endif
-  ctkObject.show();
+    {
+    std::cerr<< "ctkDirectoryButton::setOptions failed" << std::endl;
+    return EXIT_FAILURE;
+    }
+
+  button.setDirectory(QDir::home().absolutePath());
+  if ( QDir(button.directory()) != QDir::home())
+    {
+    std::cerr<< "ctkDirectoryButton::setDirectory failed" << button.directory().toStdString() << std::endl;
+    return EXIT_FAILURE;
+    }
+
+  //button.browse();
 
-  QTimer autoExit;
-  if (argc < 2 || QString(argv[1]) != "-I")
+  topLevel.show();
+
+  if (argc < 2 || QString(argv[1]) != "-I" )
     {
-    QObject::connect(&autoExit, SIGNAL(timeout()), &app, SLOT(quit()));
-    autoExit.start(100);
+    QTimer::singleShot(200, &app, SLOT(quit()));
     }
+
   return app.exec();
 }
 

+ 15 - 0
Libs/Widgets/ctkDirectoryButton.cpp

@@ -165,6 +165,21 @@ const QString& ctkDirectoryButton::caption()const
 }
 
 //-----------------------------------------------------------------------------
+void ctkDirectoryButton::setIcon(const QIcon& newIcon)
+{
+  Q_D(const ctkDirectoryButton);
+  return d->PushButton->setIcon(newIcon);
+}
+
+
+//-----------------------------------------------------------------------------
+QIcon ctkDirectoryButton::icon()const
+{
+  Q_D(const ctkDirectoryButton);
+  return d->PushButton->icon();
+}
+
+//-----------------------------------------------------------------------------
 #ifdef USE_QFILEDIALOG_OPTIONS
 void ctkDirectoryButton::setOptions(const QFileDialog::Options& dialogOptions)
 #else

+ 8 - 0
Libs/Widgets/ctkDirectoryButton.h

@@ -24,6 +24,7 @@
 // Qt includes
 #include <QDir>
 #include <QFileDialog>
+#include <QIcon>
 
 // CTK includes
 #include <ctkPimpl.h>
@@ -43,6 +44,7 @@ class CTK_WIDGETS_EXPORT ctkDirectoryButton: public QWidget
   Q_OBJECT
   Q_PROPERTY(QString directory READ directory WRITE setDirectory)
   Q_PROPERTY(QString caption READ caption WRITE setCaption)
+  Q_PROPERTY(QIcon icon READ icon WRITE setIcon)
   /// Qt versions prior to 4.7.0 didn't expose QFileDialog::Options in the
   /// public API. We need to create a custom property that will be used when
   /// instanciating a QFileDialog in ctkDirectoryButton::browse()
@@ -91,6 +93,12 @@ public:
   void setCaption(const QString& caption);
   const QString& caption()const;
 
+  ///
+  /// The icon of the button
+  /// By default use QStyle::SP_DirIcon
+  void setIcon(const QIcon& icon);
+  QIcon icon()const;
+
   /// Options of the file dialog pop up.
   /// \sa QFileDialog::getExistingDirectory
 #ifdef USE_QFILEDIALOG_OPTIONS