CaptureWidget.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. #include "CaptureWidget.h"
  2. #include <qvariant.h>
  3. #include <qpushbutton.h>
  4. #include <qradiobutton.h>
  5. #include <qcheckbox.h>
  6. #include <qlabel.h>
  7. #include <qlineedit.h>
  8. #include <qlayout.h>
  9. #include <qtooltip.h>
  10. #include <qcombobox.h>
  11. #include <QHBoxLayout>
  12. #include <QVBoxLayout>
  13. #include <QFileDialog>
  14. namespace NICE {
  15. CaptureWidget::CaptureWidget(QWidget* parent, const char* name, Qt::WFlags fl)
  16. : QWidget(parent, fl) {
  17. CaptureWidgetLayout = new QVBoxLayout( this );
  18. layout15 = new QHBoxLayout( );
  19. textLabel1 = new QLabel( this );
  20. layout15->addWidget( textLabel1 );
  21. editFormat = new QComboBox( this );
  22. editFormat->addItem("ppm");
  23. editFormat->addItem("pgm");
  24. editFormat->addItem("png");
  25. editFormat->addItem("jpg");
  26. editFormat->setToolTip("Format specified by filename extension (without dot)");
  27. layout15->addWidget( editFormat );
  28. checkBuffered = new QCheckBox( this );
  29. checkBuffered->setToolTip( "Buffer images in memory and write after capturing (stop)");
  30. layout15->addWidget( checkBuffered );
  31. buttonStart = new QPushButton( this );
  32. layout15->addWidget( buttonStart );
  33. buttonStop = new QPushButton( this );
  34. buttonStop->setEnabled( FALSE );
  35. layout15->addWidget( buttonStop );
  36. buttonCancel = new QPushButton( this );
  37. buttonCancel->setAutoDefault( TRUE );
  38. buttonCancel->hide();
  39. layout15->addWidget( buttonCancel );
  40. CaptureWidgetLayout->addLayout( layout15 );
  41. layout11 = new QHBoxLayout();
  42. textLabel2 = new QLabel( this );
  43. layout11->addWidget( textLabel2 );
  44. editDirectory = new QLineEdit( this );
  45. layout11->addWidget( editDirectory );
  46. buttonBrowse = new QPushButton( this );
  47. layout11->addWidget( buttonBrowse );
  48. CaptureWidgetLayout->addLayout( layout11 );
  49. buttonBrowse->setFlat(true);
  50. QSize size = buttonBrowse->size();
  51. size.setHeight(editDirectory->size().height() - 5);
  52. size.setWidth(20);//buttonBrowse->size().width() - 20);
  53. buttonBrowse->setMaximumSize(size);
  54. buttonBrowse->setMinimumSize(size);
  55. buttonBrowse->resize(size);
  56. languageChange();
  57. resize( QSize(542, 253).expandedTo(minimumSizeHint()) );
  58. connect(buttonCancel, SIGNAL(clicked()),
  59. this, SIGNAL(cancelled()));
  60. connect(buttonBrowse, SIGNAL(clicked()),
  61. this, SLOT(buttonBrowseClicked()));
  62. connect(buttonStart, SIGNAL(clicked()),
  63. this, SLOT(buttonStartClicked()));
  64. connect(buttonStop, SIGNAL(clicked()),
  65. this, SLOT(buttonStopClicked()));
  66. }
  67. void CaptureWidget::showCancelButton() {
  68. buttonCancel->show();
  69. }
  70. /*
  71. * Destroys the object and frees any allocated resources
  72. */
  73. CaptureWidget::~CaptureWidget()
  74. {
  75. // no need to delete child widgets, Qt does it all for us
  76. }
  77. /*
  78. * Sets the strings of the subwidgets using the current
  79. * language.
  80. */
  81. void CaptureWidget::languageChange()
  82. {
  83. setWindowTitle( tr( "Capture Image Sequence" ) );
  84. buttonStart->setText( tr( "Start" ) );
  85. buttonStop->setText( tr( "Stop" ) );
  86. buttonCancel->setText( tr( "&Cancel" ) );
  87. buttonCancel->setShortcut( QKeySequence( QString::null ) );
  88. checkBuffered->setText( tr( "Buffer" ) );
  89. textLabel1->setText( tr( "Format" ) );
  90. textLabel2->setText( tr( "Directory" ) );
  91. buttonBrowse->setText( tr( "..." ) );
  92. }
  93. void CaptureWidget::buttonBrowseClicked()
  94. {
  95. /*
  96. QFileDialog dialog( this );
  97. dialog.setWindowTitle("Choose an output directory");
  98. dialog.setMode(QFileDialog::AnyFile);
  99. if (dialog.exec() == QDialog::Accepted) {
  100. editDirectory->setText(dialog.selectedFile());
  101. }
  102. */
  103. QString directory = QFileDialog::getExistingDirectory(this);
  104. if(!directory.isNull()) {
  105. editDirectory->setText(directory);
  106. }
  107. }
  108. void CaptureWidget::buttonStartClicked()
  109. {
  110. if (!isCapturing()) {
  111. if (directoryName().size() == 0) {
  112. return;
  113. }
  114. enableGUI(false);
  115. emit(started());
  116. }
  117. }
  118. void CaptureWidget::buttonStopClicked()
  119. {
  120. if (isCapturing()) {
  121. enableGUI(true);
  122. emit(stopped());
  123. }
  124. }
  125. void CaptureWidget::enableGUI(bool enable)
  126. {
  127. const bool value = enable;
  128. buttonStart->setEnabled(value);
  129. buttonCancel->setEnabled(value);
  130. editDirectory->setEnabled(value);
  131. buttonBrowse->setEnabled(value);
  132. checkBuffered->setEnabled(value);
  133. buttonStop->setEnabled(!value);
  134. }
  135. std::string CaptureWidget::directoryName()
  136. {
  137. return std::string(editDirectory->text().toLocal8Bit());
  138. }
  139. bool CaptureWidget::isBuffered() {
  140. return checkBuffered->isChecked();
  141. }
  142. std::string CaptureWidget::extensionName()
  143. {
  144. return "." + std::string(editFormat->currentText().toLocal8Bit());
  145. }
  146. bool CaptureWidget::isCapturing() {
  147. return buttonStop->isEnabled();
  148. }
  149. void CaptureWidget::setDirectoryName(const std::string& dir) {
  150. editDirectory->setText(dir.c_str());
  151. }
  152. void CaptureWidget::setExtensionName(const std::string& ext) {
  153. std::string extension_end = ext.substr(1);
  154. int extension_index = editFormat->findText(extension_end.c_str());
  155. if(extension_index > 0) {
  156. editFormat->addItem(extension_end.c_str());
  157. }
  158. editFormat->setCurrentIndex(extension_index);
  159. }
  160. void CaptureWidget::setBuffered(bool buffer) {
  161. checkBuffered->setChecked(buffer);
  162. }
  163. }