ctkDirectoryListWidget.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /*=========================================================================
  2. Library: CTK
  3. Copyright (c) University College London.
  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. #include <iostream>
  15. // Qt includes
  16. #include <QDebug>
  17. #include <QFileDialog>
  18. // CTK includes
  19. #include "ctkDirectoryListWidget.h"
  20. #include "ctkDirectoryListWidget_p.h"
  21. //-----------------------------------------------------------------------------
  22. // ctkDirectoryListWidgetPrivate methods
  23. //-----------------------------------------------------------------------------
  24. ctkDirectoryListWidgetPrivate::~ctkDirectoryListWidgetPrivate()
  25. {
  26. }
  27. //-----------------------------------------------------------------------------
  28. ctkDirectoryListWidgetPrivate::ctkDirectoryListWidgetPrivate(ctkDirectoryListWidget& object)
  29. : QObject(&object), q_ptr(&object)
  30. {
  31. }
  32. //-----------------------------------------------------------------------------
  33. void ctkDirectoryListWidgetPrivate::init()
  34. {
  35. Q_Q(ctkDirectoryListWidget);
  36. this->setupUi(q);
  37. }
  38. //-----------------------------------------------------------------------------
  39. void ctkDirectoryListWidgetPrivate::setupUi(QWidget * widget)
  40. {
  41. this->Ui_ctkDirectoryListWidget::setupUi(widget);
  42. this->ExpandButton->setChecked(false);
  43. this->ExpandButton->setMirrorOnExpand(true);
  44. this->GroupBox->hide();
  45. QObject::connect(this->AddButton, SIGNAL(clicked()),
  46. this, SLOT(onAddClicked()));
  47. QObject::connect(this->RemoveButton, SIGNAL(clicked()),
  48. this, SLOT(onRemoveClicked()));
  49. QObject::connect(this->ExpandButton, SIGNAL(clicked(bool)),
  50. this, SLOT(onExpandClicked(bool)));
  51. QObject::connect(this->DirectoryList, SIGNAL(directoryListChanged()),
  52. this, SLOT(onDirectoryListChanged()));
  53. }
  54. //-----------------------------------------------------------------------------
  55. void ctkDirectoryListWidgetPrivate::setDirectoryList(const QStringList& list)
  56. {
  57. this->DirectoryList->setDirectoryList(list);
  58. }
  59. //-----------------------------------------------------------------------------
  60. QStringList ctkDirectoryListWidgetPrivate::directoryList() const
  61. {
  62. return this->DirectoryList->directoryList(true); // true for absolute path.
  63. }
  64. //-----------------------------------------------------------------------------
  65. void ctkDirectoryListWidgetPrivate::onAddClicked()
  66. {
  67. QString path = QFileDialog::getExistingDirectory(
  68. this->DirectoryList, tr("Select folder"),
  69. QString(""));
  70. // An empty directory means that the user cancelled the dialog.
  71. if (path.isEmpty())
  72. {
  73. return;
  74. }
  75. this->DirectoryList->addDirectory(path);
  76. }
  77. //-----------------------------------------------------------------------------
  78. void ctkDirectoryListWidgetPrivate::onRemoveClicked()
  79. {
  80. this->DirectoryList->removeSelectedDirectories();
  81. }
  82. //-----------------------------------------------------------------------------
  83. void ctkDirectoryListWidgetPrivate::onExpandClicked(bool state)
  84. {
  85. this->GroupBox->setVisible(state);
  86. }
  87. //-----------------------------------------------------------------------------
  88. void ctkDirectoryListWidgetPrivate::onDirectoryListChanged()
  89. {
  90. Q_Q(ctkDirectoryListWidget);
  91. emit (q->directoryListChanged(this->DirectoryList->directoryList()));
  92. }
  93. //-----------------------------------------------------------------------------
  94. // ctkDirectoryListWidget methods
  95. //-----------------------------------------------------------------------------
  96. ctkDirectoryListWidget::~ctkDirectoryListWidget()
  97. {
  98. }
  99. //-----------------------------------------------------------------------------
  100. ctkDirectoryListWidget::ctkDirectoryListWidget(QWidget* newParent)
  101. : Superclass(newParent)
  102. , d_ptr(new ctkDirectoryListWidgetPrivate(*this))
  103. {
  104. Q_D(ctkDirectoryListWidget);
  105. d->init();
  106. }
  107. //-----------------------------------------------------------------------------
  108. void ctkDirectoryListWidget::setDirectoryList(const QStringList& list)
  109. {
  110. Q_D(ctkDirectoryListWidget);
  111. d->setDirectoryList(list);
  112. }
  113. //-----------------------------------------------------------------------------
  114. QStringList ctkDirectoryListWidget::directoryList() const
  115. {
  116. Q_D(const ctkDirectoryListWidget);
  117. return d->directoryList();
  118. }