Forráskód Böngészése

ENH: Add directorySelected signal to ctkDiretoryButton.

directoryChanged is not emitted if the user select the same directory than
the current directory. A new signal is necessary: directorySelected is
fired anytime the user selects a directory (new or not). The signal is
also fired when setDirectory() is programatically called.
Julien Finet 15 éve
szülő
commit
c91b582a1b

+ 15 - 4
Libs/Widgets/ctkDirectoryButton.cpp

@@ -102,12 +102,23 @@ void ctkDirectoryButton::setDirectory(const QString& dir)
 {
 {
   CTK_D(ctkDirectoryButton);
   CTK_D(ctkDirectoryButton);
   QDir newDirectory(dir);
   QDir newDirectory(dir);
+
   if (d->Directory == newDirectory)
   if (d->Directory == newDirectory)
     {
     {
+    emit directorySelected(d->DisplayAbsolutePath ?
+                           newDirectory.absolutePath() :
+                           newDirectory.path());
     return;
     return;
     }
     }
+
   d->Directory = newDirectory;
   d->Directory = newDirectory;
+
   d->PushButton->setText(d->DisplayAbsolutePath ? d->Directory.absolutePath() : d->Directory.path());
   d->PushButton->setText(d->DisplayAbsolutePath ? d->Directory.absolutePath() : d->Directory.path());
+
+  emit directorySelected(d->DisplayAbsolutePath ?
+                         newDirectory.absolutePath() :
+                         newDirectory.path());
+
   emit directoryChanged(d->DisplayAbsolutePath ? d->Directory.absolutePath() : d->Directory.path());
   emit directoryChanged(d->DisplayAbsolutePath ? d->Directory.absolutePath() : d->Directory.path());
 }
 }
 
 
@@ -150,11 +161,11 @@ const ctkDirectoryButton::Options& ctkDirectoryButton::options()const
 void ctkDirectoryButton::browse()
 void ctkDirectoryButton::browse()
 {
 {
   CTK_D(ctkDirectoryButton);
   CTK_D(ctkDirectoryButton);
-  QString dir = 
+  QString dir =
     QFileDialog::getExistingDirectory(
     QFileDialog::getExistingDirectory(
-      this, 
-      d->DialogCaption.isEmpty() ? this->toolTip() : d->DialogCaption, 
-      d->Directory.path(), 
+      this,
+      d->DialogCaption.isEmpty() ? this->toolTip() : d->DialogCaption,
+      d->Directory.path(),
       QFlags<QFileDialog::Option>(int(d->DialogOptions)));
       QFlags<QFileDialog::Option>(int(d->DialogOptions)));
   // An empty directory means that the user cancelled the dialog.
   // An empty directory means that the user cancelled the dialog.
   if (dir.isEmpty())
   if (dir.isEmpty())

+ 7 - 7
Libs/Widgets/ctkDirectoryButton.h

@@ -1,7 +1,7 @@
 /*=========================================================================
 /*=========================================================================
 
 
   Library:   CTK
   Library:   CTK
- 
+
   Copyright (c) 2010  Kitware Inc.
   Copyright (c) 2010  Kitware Inc.
 
 
   Licensed under the Apache License, Version 2.0 (the "License");
   Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,7 +15,7 @@
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   See the License for the specific language governing permissions and
   limitations under the License.
   limitations under the License.
- 
+
 =========================================================================*/
 =========================================================================*/
 
 
 #ifndef __ctkDirectoryButton_h
 #ifndef __ctkDirectoryButton_h
@@ -39,7 +39,7 @@ class CTK_WIDGETS_EXPORT ctkDirectoryButton: public QWidget
   // QFileDialog::Options is not a meta-type, we need to create our own.
   // QFileDialog::Options is not a meta-type, we need to create our own.
   Q_FLAGS(Option Options);
   Q_FLAGS(Option Options);
 
 
-public: 
+public:
   // QFileDialog::Options is not a meta-type, we need to create our own.
   // QFileDialog::Options is not a meta-type, we need to create our own.
   enum Option
   enum Option
     {
     {
@@ -52,20 +52,20 @@ public:
       HideNameFilterDetails = 0x00000040
       HideNameFilterDetails = 0x00000040
     };
     };
   Q_DECLARE_FLAGS(Options, Option)
   Q_DECLARE_FLAGS(Options, Option)
-    
+
   ctkDirectoryButton(QWidget * parent = 0);
   ctkDirectoryButton(QWidget * parent = 0);
   ctkDirectoryButton(const QString& directory, QWidget * parent = 0);
   ctkDirectoryButton(const QString& directory, QWidget * parent = 0);
   ctkDirectoryButton(const QIcon& icon, const QString& directory, QWidget * parent = 0);
   ctkDirectoryButton(const QIcon& icon, const QString& directory, QWidget * parent = 0);
 
 
   void setDirectory(const QString& directory);
   void setDirectory(const QString& directory);
   QString directory()const;
   QString directory()const;
-  
+
   ///
   ///
   /// The title of the file dialog used to select a new directory
   /// The title of the file dialog used to select a new directory
   /// If caption is not set, internally use QWidget::tooltip()
   /// If caption is not set, internally use QWidget::tooltip()
   void setCaption(const QString& caption);
   void setCaption(const QString& caption);
   const QString& caption()const;
   const QString& caption()const;
-  
+
   void setOptions(const Options& options);
   void setOptions(const Options& options);
   const Options& options()const;
   const Options& options()const;
 
 
@@ -77,7 +77,7 @@ signals:
   /// directoryChanged is emitted when the current directory changes
   /// directoryChanged is emitted when the current directory changes
   ///if you want a directoryChanged signal as a utility. Feel free to add it
   ///if you want a directoryChanged signal as a utility. Feel free to add it
   void directoryChanged(const QString&);
   void directoryChanged(const QString&);
-
+  void directorySelected(const QString&);
 private:
 private:
   CTK_DECLARE_PRIVATE(ctkDirectoryButton);
   CTK_DECLARE_PRIVATE(ctkDirectoryButton);
 };
 };