ctkDirectoryButton.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Qt includes
  2. #include <QStyle>
  3. // CTK includes
  4. #include "ctkDirectoryButton.h"
  5. //-----------------------------------------------------------------------------
  6. class ctkDirectoryButtonPrivate: public ctkPrivate<ctkDirectoryButton>
  7. {
  8. public:
  9. ctkDirectoryButtonPrivate();
  10. void init();
  11. QString Caption;
  12. QFileDialog::Options Options;
  13. };
  14. //-----------------------------------------------------------------------------
  15. ctkDirectoryButtonPrivate::ctkDirectoryButtonPrivate()
  16. {
  17. this->Options = QFileDialog::ShowDirsOnly;
  18. }
  19. //-----------------------------------------------------------------------------
  20. void ctkDirectoryButtonPrivate::init()
  21. {
  22. CTK_P(ctkDirectoryButton);
  23. QObject::connect(p, SIGNAL(clicked()), p, SLOT(browse()));
  24. }
  25. //-----------------------------------------------------------------------------
  26. ctkDirectoryButton::ctkDirectoryButton(QWidget * parentWidget)
  27. :QPushButton(parentWidget)
  28. {
  29. CTK_INIT_PRIVATE(ctkDirectoryButton);
  30. this->setIcon(this->style()->standardIcon(QStyle::SP_DirIcon));
  31. ctk_d()->init();
  32. }
  33. //-----------------------------------------------------------------------------
  34. ctkDirectoryButton::ctkDirectoryButton(const QString & text, QWidget * parentWidget)
  35. :QPushButton(text, parentWidget)
  36. {
  37. CTK_INIT_PRIVATE(ctkDirectoryButton);
  38. this->setIcon(this->style()->standardIcon(QStyle::SP_DirIcon));
  39. ctk_d()->init();
  40. }
  41. //-----------------------------------------------------------------------------
  42. ctkDirectoryButton::ctkDirectoryButton(
  43. const QIcon & icon, const QString & text, QWidget * parentWidget)
  44. :QPushButton(icon, text, parentWidget)
  45. {
  46. CTK_INIT_PRIVATE(ctkDirectoryButton);
  47. ctk_d()->init();
  48. }
  49. //-----------------------------------------------------------------------------
  50. void ctkDirectoryButton::setCaption(const QString& captionTitle)
  51. {
  52. CTK_D(ctkDirectoryButton);
  53. d->Caption = captionTitle;
  54. }
  55. //-----------------------------------------------------------------------------
  56. const QString& ctkDirectoryButton::caption()const
  57. {
  58. CTK_D(const ctkDirectoryButton);
  59. return d->Caption;
  60. }
  61. //-----------------------------------------------------------------------------
  62. void ctkDirectoryButton::ctkDirectoryButton::setOptions(const QFileDialog::Options& dialogOptions)
  63. {
  64. CTK_D(ctkDirectoryButton);
  65. d->Options = dialogOptions;
  66. }
  67. //-----------------------------------------------------------------------------
  68. const QFileDialog::Options& ctkDirectoryButton::options()const
  69. {
  70. CTK_D(const ctkDirectoryButton);
  71. return d->Options;
  72. }
  73. //-----------------------------------------------------------------------------
  74. void ctkDirectoryButton::browse()
  75. {
  76. CTK_D(ctkDirectoryButton);
  77. QString directory =
  78. QFileDialog::getExistingDirectory(
  79. this,
  80. d->Caption.isEmpty() ? this->toolTip() : d->Caption,
  81. this->text(),
  82. d->Options);
  83. if (directory.isEmpty())
  84. {
  85. return;
  86. }
  87. this->setText(directory);
  88. emit directoryChanged(directory);
  89. }