ctkPathLineEdit.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /*=========================================================================
  2. Library: CTK
  3. Copyright (c) Kitware Inc.
  4. Licensed under the Apache License, Version 2.0 (the "License");
  5. you may not use this file except in compliance with the License.
  6. You may obtain a copy of the License at
  7. http://www.apache.org/licenses/LICENSE-2.0.txt
  8. Unless required by applicable law or agreed to in writing, software
  9. distributed under the License is distributed on an "AS IS" BASIS,
  10. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. See the License for the specific language governing permissions and
  12. limitations under the License.
  13. =========================================================================*/
  14. /*=========================================================================
  15. Program: Maverick
  16. Module: $RCSfile: config.h,v $
  17. Copyright (c) Kitware Inc. 28 Corporate Drive,
  18. Clifton Park, NY, 12065, USA.
  19. All rights reserved. No part of this software may be reproduced, distributed,
  20. or modified, in any form or by any means, without permission in writing from
  21. Kitware Inc.
  22. IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR
  23. DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  24. OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF,
  25. EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26. THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING,
  27. BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  28. PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN
  29. "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE
  30. MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  31. =========================================================================*/
  32. #ifndef __ctkPathLineEdit_h
  33. #define __ctkPathLineEdit_h
  34. // Qt includes
  35. #include <QWidget>
  36. #include <QDir>
  37. // CTK includes
  38. #include "ctkWidgetsExport.h"
  39. class ctkPathLineEditPrivate;
  40. /**
  41. * \ingroup Widgets
  42. * \brief Advanced line edit to select file or directory
  43. */
  44. class CTK_WIDGETS_EXPORT ctkPathLineEdit: public QWidget
  45. {
  46. Q_OBJECT
  47. Q_FLAGS(Filters)
  48. Q_PROPERTY ( QString label READ label WRITE setLabel )
  49. Q_PROPERTY ( QStringList nameFilters READ nameFilters WRITE setNameFilters)
  50. Q_PROPERTY ( Filters filters READ filters WRITE setFilters)
  51. Q_PROPERTY ( QString currentPath READ currentPath WRITE setCurrentPath USER true )
  52. /// Qt versions prior to 4.7.0 didn't expose QFileDialog::Options in the
  53. /// public API. We need to create a custom property that will be used when
  54. /// instanciating a QFileDialog in ctkPathLineEdit::browse()
  55. #ifdef USE_QFILEDIALOG_OPTIONS
  56. Q_PROPERTY(QFileDialog::Options options READ options WRITE setOptions)
  57. #else
  58. Q_PROPERTY(Options options READ options WRITE setOptions)
  59. Q_FLAGS(Option Options);
  60. #endif
  61. public:
  62. enum Filter { Dirs = 0x001,
  63. Files = 0x002,
  64. Drives = 0x004,
  65. NoSymLinks = 0x008,
  66. AllEntries = Dirs | Files | Drives,
  67. TypeMask = 0x00f,
  68. Readable = 0x010,
  69. Writable = 0x020,
  70. Executable = 0x040,
  71. PermissionMask = 0x070,
  72. Modified = 0x080,
  73. Hidden = 0x100,
  74. System = 0x200,
  75. AccessMask = 0x3F0,
  76. AllDirs = 0x400,
  77. CaseSensitive = 0x800,
  78. NoDotAndDotDot = 0x1000, // ### Qt5 NoDotAndDotDot = NoDot|NoDotDot
  79. NoDot = 0x2000,
  80. NoDotDot = 0x4000,
  81. NoFilter = -1
  82. };
  83. Q_DECLARE_FLAGS(Filters, Filter)
  84. #ifndef USE_QFILEDIALOG_OPTIONS
  85. // Same options than QFileDialog::Options
  86. enum Option
  87. {
  88. ShowDirsOnly = 0x00000001,
  89. DontResolveSymlinks = 0x00000002,
  90. DontConfirmOverwrite = 0x00000004,
  91. DontUseSheet = 0x00000008,
  92. DontUseNativeDialog = 0x00000010,
  93. ReadOnly = 0x00000020,
  94. HideNameFilterDetails = 0x00000040
  95. };
  96. Q_DECLARE_FLAGS(Options, Option)
  97. #endif
  98. /** Default constructor
  99. */
  100. ctkPathLineEdit(QWidget *parent = 0);
  101. /** Constructor
  102. * /param label Used in file dialogs
  103. * /param nameFilters Regular expression (in wildcard mode) used to help the user to complete the line,
  104. * example: "Images (*.jpg *.gif *.png)"
  105. * /param parent Parent widget
  106. */
  107. ctkPathLineEdit( const QString& label,
  108. const QStringList& nameFilters,
  109. Filters filters = ctkPathLineEdit::AllEntries,
  110. QWidget *parent=0 );
  111. virtual ~ctkPathLineEdit();
  112. QString currentPath()const;
  113. void setLabel(const QString &label);
  114. const QString& label()const;
  115. void setNameFilters(const QStringList &nameFilters);
  116. const QStringList& nameFilters()const;
  117. void setFilters(const Filters& filters);
  118. Filters filters()const;
  119. /// Options of the file dialog pop up.
  120. /// \sa QFileDialog::getExistingDirectory
  121. #ifdef USE_QFILEDIALOG_OPTIONS
  122. void setOptions(const QFileDialog::Options& options);
  123. const QFileDialog::Options& options()const;
  124. #else
  125. void setOptions(const Options& options);
  126. const Options& options()const;
  127. #endif
  128. /** Change the current extension of the edit line.
  129. * If there is no extension yet, set it
  130. */
  131. void setCurrentFileExtension(const QString& extension);
  132. Q_SIGNALS:
  133. /** the signal is emit when the state of hasValidInput changed
  134. */
  135. void validInputChanged(bool);
  136. void currentPathChanged(const QString& path);
  137. public Q_SLOTS:
  138. void setCurrentPath(const QString& path);
  139. /** Open a QFileDialog to select a file or directory and set current text to it
  140. * You would probably connect a browse push button like this:
  141. * connect(myPushButton,SIGNAL(clicked()),myPathLineEdit,SLOT(browse()))
  142. */
  143. void browse();
  144. /** Load the history of the paths. To be restored the inputs must have been saved by
  145. * saveCurrentPathInHistory().
  146. */
  147. void retrieveHistory();
  148. /** Save the current value (this->currentPath()) into the history. That value will be retrieved
  149. * next time the retrieveHistory()
  150. */
  151. void addCurrentPathToHistory();
  152. protected Q_SLOTS:
  153. void setCurrentDirectory(const QString& directory);
  154. void updateHasValidInput();
  155. protected:
  156. QScopedPointer<ctkPathLineEditPrivate> d_ptr;
  157. private:
  158. Q_DECLARE_PRIVATE(ctkPathLineEdit);
  159. Q_DISABLE_COPY(ctkPathLineEdit);
  160. };
  161. Q_DECLARE_OPERATORS_FOR_FLAGS(ctkPathLineEdit::Filters)
  162. #ifndef USE_QFILEDIALOG_OPTIONS
  163. Q_DECLARE_OPERATORS_FOR_FLAGS(ctkPathLineEdit::Options);
  164. #endif
  165. #endif // __ctkPathLineEdit_h