PageRenderTime 41ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/examples/player/config/CaptureConfigPage.cpp

https://gitlab.com/mba811/QtAV
C++ | 147 lines | 114 code | 14 blank | 19 comment | 7 complexity | 68a5eda3f33327f1327b185010e7e468 MD5 | raw file
  1. /******************************************************************************
  2. QtAV Player Demo: this file is part of QtAV examples
  3. Copyright (C) 2012-2014 Wang Bin <wbsecg1@gmail.com>
  4. * This file is part of QtAV
  5. This program is free software: you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation, either version 3 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. ******************************************************************************/
  16. #include "CaptureConfigPage.h"
  17. #include "Config.h"
  18. #include <QLabel>
  19. #include <QFormLayout>
  20. #include <QtGui/QImageWriter>
  21. #include <QToolButton>
  22. #include <QDesktopServices>
  23. #include <QFileDialog>
  24. #include <QtCore/QUrl>
  25. #include "../Slider.h"
  26. CaptureConfigPage::CaptureConfigPage(QWidget *parent) :
  27. ConfigPageBase(parent)
  28. {
  29. QFormLayout *formLayout = new QFormLayout();
  30. setLayout(formLayout);
  31. QHBoxLayout *hb = new QHBoxLayout();
  32. mpDir = new QLineEdit();
  33. hb->addWidget(mpDir);
  34. QToolButton *bt = new QToolButton();
  35. bt->setText("...");
  36. hb->addWidget(bt);
  37. connect(bt, SIGNAL(clicked()), SLOT(selectSaveDir()));
  38. bt = new QToolButton();
  39. bt->setText(tr("Browse"));
  40. hb->addWidget(bt);
  41. connect(bt, SIGNAL(clicked()), SLOT(browseCaptureDir()));
  42. formLayout->addRow(tr("Save dir"), hb);
  43. mpDir->setEnabled(false);
  44. mpDir->setText(Config::instance().captureDir());
  45. mpFormat = new QComboBox();
  46. formLayout->addRow(tr("Save format"), mpFormat);
  47. QList<QByteArray> formats;
  48. formats << "YUV" << QImageWriter::supportedImageFormats();
  49. foreach (QByteArray fmt, formats) {
  50. mpFormat->addItem(fmt);
  51. }
  52. int idx = mpFormat->findText(Config::instance().captureFormat());
  53. mpFormat->setCurrentIndex(idx);
  54. mpQuality = new Slider();
  55. formLayout->addRow(tr("Quality"), mpQuality);
  56. mpQuality->setRange(0, 100);
  57. mpQuality->setOrientation(Qt::Horizontal);
  58. mpQuality->setValue(Config::instance().captureQuality());
  59. mpQuality->setSingleStep(1);
  60. mpQuality->setTickInterval(10);
  61. mpQuality->setTickPosition(QSlider::TicksBelow);
  62. connect(&Config::instance(), SIGNAL(captureDirChanged(QString)), mpDir, SLOT(setText(QString)));
  63. connect(&Config::instance(), SIGNAL(captureQualityChanged(int)), mpQuality, SLOT(setValue(int)));
  64. connect(&Config::instance(), SIGNAL(captureFormatChanged(QByteArray)), SLOT(formatChanged(QByteArray)));
  65. connect(mpDir, SIGNAL(textChanged(QString)), SLOT(changeDirByUi(QString)));
  66. connect(mpFormat, SIGNAL(currentIndexChanged(QString)), SLOT(changeFormatByUi(QString)));
  67. connect(mpQuality, SIGNAL(valueChanged(int)), SLOT(changeQualityByUi(int)));
  68. }
  69. void CaptureConfigPage::apply()
  70. {
  71. Config::instance().captureDir(mpDir->text())
  72. .captureFormat(mpFormat->currentText().toUtf8())
  73. .captureQuality(mpQuality->value());
  74. }
  75. QString CaptureConfigPage::name() const
  76. {
  77. return tr("Capture");
  78. }
  79. void CaptureConfigPage::cancel()
  80. {
  81. mpDir->setText(Config::instance().captureDir());
  82. formatChanged(Config::instance().captureFormat());
  83. mpQuality->setValue(Config::instance().captureQuality());
  84. }
  85. void CaptureConfigPage::reset()
  86. {
  87. }
  88. void CaptureConfigPage::changeDirByUi(const QString& dir)
  89. {
  90. if (applyOnUiChange()) {
  91. Config::instance().captureDir(dir);
  92. } else {
  93. emit Config::instance().captureDirChanged(dir);
  94. }
  95. }
  96. void CaptureConfigPage::changeFormatByUi(const QString& fmt)
  97. {
  98. if (applyOnUiChange()) {
  99. Config::instance().captureFormat(mpFormat->currentText().toUtf8());
  100. } else{
  101. emit Config::instance().captureFormatChanged(fmt.toUtf8());
  102. }
  103. }
  104. void CaptureConfigPage::changeQualityByUi(int q)
  105. {
  106. if (applyOnUiChange()) {
  107. Config::instance().captureQuality(mpQuality->value());
  108. } else {
  109. emit Config::instance().captureQualityChanged(q);
  110. }
  111. }
  112. void CaptureConfigPage::formatChanged(const QByteArray& fmt)
  113. {
  114. int idx = mpFormat->findText(fmt);
  115. if (idx >= 0)
  116. mpFormat->setCurrentIndex(idx);
  117. }
  118. void CaptureConfigPage::selectSaveDir()
  119. {
  120. QString dir = QFileDialog::getExistingDirectory(0, tr("Save dir"), mpDir->text());
  121. if (dir.isEmpty())
  122. return;
  123. mpDir->setText(dir);
  124. }
  125. void CaptureConfigPage::browseCaptureDir()
  126. {
  127. qDebug("browse capture dir");
  128. QDesktopServices::openUrl(QUrl("file:///" + mpDir->text()));
  129. }