浏览代码

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 年之前
父节点
当前提交
c91b582a1b
共有 2 个文件被更改,包括 22 次插入11 次删除
  1. 15 4
      Libs/Widgets/ctkDirectoryButton.cpp
  2. 7 7
      Libs/Widgets/ctkDirectoryButton.h

+ 15 - 4
Libs/Widgets/ctkDirectoryButton.cpp

@@ -102,12 +102,23 @@ void ctkDirectoryButton::setDirectory(const QString& dir)
 {
   CTK_D(ctkDirectoryButton);
   QDir newDirectory(dir);
+
   if (d->Directory == newDirectory)
     {
+    emit directorySelected(d->DisplayAbsolutePath ?
+                           newDirectory.absolutePath() :
+                           newDirectory.path());
     return;
     }
+
   d->Directory = newDirectory;
+
   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());
 }
 
@@ -150,11 +161,11 @@ const ctkDirectoryButton::Options& ctkDirectoryButton::options()const
 void ctkDirectoryButton::browse()
 {
   CTK_D(ctkDirectoryButton);
-  QString dir = 
+  QString dir =
     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)));
   // An empty directory means that the user cancelled the dialog.
   if (dir.isEmpty())

+ 7 - 7
Libs/Widgets/ctkDirectoryButton.h

@@ -1,7 +1,7 @@
 /*=========================================================================
 
   Library:   CTK
- 
+
   Copyright (c) 2010  Kitware Inc.
 
   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.
   See the License for the specific language governing permissions and
   limitations under the License.
- 
+
 =========================================================================*/
 
 #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.
   Q_FLAGS(Option Options);
 
-public: 
+public:
   // QFileDialog::Options is not a meta-type, we need to create our own.
   enum Option
     {
@@ -52,20 +52,20 @@ public:
       HideNameFilterDetails = 0x00000040
     };
   Q_DECLARE_FLAGS(Options, Option)
-    
+
   ctkDirectoryButton(QWidget * parent = 0);
   ctkDirectoryButton(const QString& directory, QWidget * parent = 0);
   ctkDirectoryButton(const QIcon& icon, const QString& directory, QWidget * parent = 0);
 
   void setDirectory(const QString& directory);
   QString directory()const;
-  
+
   ///
   /// The title of the file dialog used to select a new directory
   /// If caption is not set, internally use QWidget::tooltip()
   void setCaption(const QString& caption);
   const QString& caption()const;
-  
+
   void setOptions(const Options& options);
   const Options& options()const;
 
@@ -77,7 +77,7 @@ signals:
   /// directoryChanged is emitted when the current directory changes
   ///if you want a directoryChanged signal as a utility. Feel free to add it
   void directoryChanged(const QString&);
-
+  void directorySelected(const QString&);
 private:
   CTK_DECLARE_PRIVATE(ctkDirectoryButton);
 };