diff --git a/toonz/sources/stopmotion/stopmotion.cpp b/toonz/sources/stopmotion/stopmotion.cpp index b5223407..e603dd5d 100644 --- a/toonz/sources/stopmotion/stopmotion.cpp +++ b/toonz/sources/stopmotion/stopmotion.cpp @@ -46,9 +46,11 @@ TEnv::IntVar StopMotionOpacity("StopMotionOpacity", 204); TEnv::IntVar StopMotionAlwaysLiveView("StopMotionAlwaysLiveView", 0); TEnv::IntVar StopMotionPlaceOnXSheet("StopMotionPlaceOnXSheet", 1); -TEnv::IntVar StopMotionReviewTime("StopMotionReviewTime", 1); +TEnv::IntVar StopMotionReviewDSec("StopMotionReviewDSec", 10); +TEnv::IntVar StopMotionIntervalDSec("StopMotionIntervalDSec", 100); TEnv::IntVar StopMotionUseNumpad("StopMotionUseNumpad", 0); TEnv::IntVar StopMotionDrawBeneathLevels("StopMotionDrawBeneathLevels", 1); +TEnv::IntVar StopMotionPlayCaptureSound("StopMotionPlayCaptureSound", 0); // Connected camera TEnv::StringVar StopMotionCameraName("CamCapCameraName", ""); @@ -252,9 +254,11 @@ StopMotion::StopMotion() { m_alwaysLiveView = StopMotionAlwaysLiveView; m_placeOnXSheet = StopMotionPlaceOnXSheet; - m_reviewTime = StopMotionReviewTime; + m_reviewTimeDSec = StopMotionReviewDSec; + m_intervalDSec = StopMotionIntervalDSec; m_useNumpadShortcuts = StopMotionUseNumpad; m_drawBeneathLevels = StopMotionDrawBeneathLevels; + m_playCaptureSound = StopMotionPlayCaptureSound; m_numpadForStyleSwitching = Preferences::instance()->isUseNumpadForSwitchingStylesEnabled(); setUseNumpadShortcuts(m_useNumpadShortcuts); @@ -265,6 +269,7 @@ StopMotion::StopMotion() { m_intervalTimer = new QTimer(this); m_countdownTimer = new QTimer(this); m_webcamOverlayTimer = new QTimer(this); + m_camSnapSound = new QSound(":Resources/camera_snap.wav"); // Make the interval timer single-shot. When the capture finished, restart // timer for next frame. @@ -517,10 +522,10 @@ void StopMotion::setPlaceOnXSheet(bool on) { //----------------------------------------------------------------- -void StopMotion::setReviewTime(int time) { - m_reviewTime = time; - StopMotionReviewTime = time; - emit(reviewTimeChangedSignal(time)); +void StopMotion::setReviewTimeDSec(int timeDSec) { + m_reviewTimeDSec = timeDSec; + StopMotionReviewDSec = timeDSec; + emit(reviewTimeChangedSignal(timeDSec)); } //----------------------------------------------------------------- @@ -619,8 +624,8 @@ void StopMotion::toggleInterval(bool on) { void StopMotion::startInterval() { if (m_liveViewStatus > 1) { - m_intervalTimer->start(m_intervalTime * 1000); - if (m_intervalTime != 0) m_countdownTimer->start(100); + m_intervalTimer->start(m_intervalDSec * 100); + if (m_intervalDSec != 0) m_countdownTimer->start(100); m_intervalStarted = true; emit(intervalStarted()); } else { @@ -641,8 +646,9 @@ void StopMotion::stopInterval() { //----------------------------------------------------------------- -void StopMotion::setIntervalAmount(int value) { - m_intervalTime = value; +void StopMotion::setIntervalDSec(int value) { + m_intervalDSec = value; + StopMotionIntervalDSec = value; emit(intervalAmountChanged(value)); } @@ -663,10 +669,10 @@ void StopMotion::onIntervalCaptureTimerTimeout() { void StopMotion::restartInterval() { // restart interval timer for capturing next frame (it is single shot) if (m_isTimeLapse && m_intervalStarted) { - m_intervalTimer->start(m_intervalTime * 1000); + m_intervalTimer->start(m_intervalDSec * 100); // restart the count down as well (for aligning the timing. It is not // single shot) - if (m_intervalTime != 0) m_countdownTimer->start(100); + if (m_intervalDSec != 0) m_countdownTimer->start(100); } } @@ -1314,6 +1320,14 @@ void StopMotion::getSubsampling() { //----------------------------------------------------------------------------- +void StopMotion::setPlayCaptureSound(bool on) { + m_playCaptureSound = on; + StopMotionPlayCaptureSound = on; + emit(playCaptureSignal(on)); +} + +//----------------------------------------------------------------------------- + void StopMotion::update() { getSubsampling(); } //----------------------------------------------------------------------------- @@ -1666,9 +1680,9 @@ bool StopMotion::importImage() { // for now always save. This can be tweaked later sl->save(); m_sl = sl; - if (getReviewTime() > 0 && !m_isTimeLapse) { + if (getReviewTimeDSec() > 0 && !m_isTimeLapse) { m_liveViewStatus = LiveViewPaused; - m_reviewTimer->start(getReviewTime() * 1000); + m_reviewTimer->start(getReviewTimeDSec() * 100); } /* placement in xsheet */ @@ -1691,7 +1705,7 @@ bool StopMotion::importImage() { xsh->setCell(row + i, col, TXshCell(sl, fid)); } app->getCurrentColumn()->setColumnIndex(col); - if (getReviewTime() == 0 || m_isTimeLapse) + if (getReviewTimeDSec() == 0 || m_isTimeLapse) app->getCurrentFrame()->setFrame(row + m_captureNumberOfFrames); m_xSheetFrameNumber = row + 1 + m_captureNumberOfFrames; emit(xSheetFrameNumberChanged(m_xSheetFrameNumber)); @@ -1737,7 +1751,7 @@ bool StopMotion::importImage() { xsh->setCell(row + i, foundCol, TXshCell(sl, fid)); } app->getCurrentColumn()->setColumnIndex(foundCol); - if (getReviewTime() == 0 || m_isTimeLapse) + if (getReviewTimeDSec() == 0 || m_isTimeLapse) app->getCurrentFrame()->setFrame(row + m_captureNumberOfFrames); m_xSheetFrameNumber = row + 1 + m_captureNumberOfFrames; emit(xSheetFrameNumberChanged(m_xSheetFrameNumber)); @@ -1753,7 +1767,7 @@ bool StopMotion::importImage() { xsh->setCell(row + i, col, TXshCell(sl, fid)); } app->getCurrentColumn()->setColumnIndex(col); - if (getReviewTime() == 0 || m_isTimeLapse) + if (getReviewTimeDSec() == 0 || m_isTimeLapse) app->getCurrentFrame()->setFrame(row + m_captureNumberOfFrames); m_xSheetFrameNumber = row + 1 + m_captureNumberOfFrames; emit(xSheetFrameNumberChanged(m_xSheetFrameNumber)); @@ -1765,6 +1779,9 @@ bool StopMotion::importImage() { //----------------------------------------------------------------- void StopMotion::captureImage() { + if (m_playCaptureSound) { + m_camSnapSound->play(); + } if (m_isTimeLapse && !m_intervalStarted) { startInterval(); return; @@ -1801,7 +1818,7 @@ void StopMotion::captureWebcamImage() { m_light->showOverlays(); m_webcamOverlayTimer->start(500); } else { - if (getReviewTime() > 0 && !m_isTimeLapse) { + if (getReviewTimeDSec() > 0 && !m_isTimeLapse) { m_timer->stop(); if (m_liveViewStatus > LiveViewClosed) { // m_liveViewStatus = LiveViewPaused; @@ -1821,7 +1838,7 @@ void StopMotion::captureWebcamOnTimeout() { saveTestShot(); return; } - if (getReviewTime() > 0 && !m_isTimeLapse) { + if (getReviewTimeDSec() > 0 && !m_isTimeLapse) { m_timer->stop(); if (m_liveViewStatus > LiveViewClosed) { // m_liveViewStatus = LiveViewPaused; @@ -1846,7 +1863,7 @@ void StopMotion::captureDslrImage() { return; } #endif - if (getReviewTime() > 0 && !m_isTimeLapse) { + if (getReviewTimeDSec() > 0 && !m_isTimeLapse) { m_timer->stop(); } diff --git a/toonz/sources/stopmotion/stopmotion.h b/toonz/sources/stopmotion/stopmotion.h index 77cb9ad9..66c59042 100644 --- a/toonz/sources/stopmotion/stopmotion.h +++ b/toonz/sources/stopmotion/stopmotion.h @@ -29,6 +29,7 @@ #include #include +#include class QCamera; class QCameraInfo; @@ -85,6 +86,9 @@ private: std::map m_oldActionMap; std::map m_liveViewImageMap; + bool m_playCaptureSound = false; + QSound* m_camSnapSound = 0; + public: enum LiveViewStatus { LiveViewClosed = 0, @@ -104,14 +108,14 @@ public: bool m_userCalledPause = false; bool m_drawBeneathLevels = true; bool m_isTimeLapse = false; - int m_reviewTime = 2; + int m_reviewTimeDSec = 20; bool m_isTestShot = false; QString m_tempFile, m_tempRaw; TXshSimpleLevel* m_sl; // timers QTimer* m_timer; - int m_intervalTime = 10; + int m_intervalDSec = 100; bool m_intervalStarted = false; QTimer* m_reviewTimer; QTimer *m_intervalTimer, *m_countdownTimer, *m_webcamOverlayTimer; @@ -183,7 +187,8 @@ public: void toggleInterval(bool on); void startInterval(); void stopInterval(); - void setIntervalAmount(int value); + void setIntervalDSec(int value); + int getIntervalDSec() { return m_intervalDSec; }; void restartInterval(); // options @@ -200,12 +205,14 @@ public: void toggleNumpadShortcuts(bool on); void toggleNumpadForFocusCheck(bool on); void setDrawBeneathLevels(bool on); - void setReviewTime(int time); - int getReviewTime() { return m_reviewTime; } + void setReviewTimeDSec(int timeDSec); + int getReviewTimeDSec() { return m_reviewTimeDSec; } void getSubsampling(); void setSubsampling(); int getSubsamplingValue() { return m_subsampling; } void setSubsamplingValue(int subsampling); + void setPlayCaptureSound(bool on); + bool getPlayCaptureSound() { return m_playCaptureSound; } // saving and loading void saveXmlFile(); @@ -264,6 +271,7 @@ signals: void useNumpadSignal(bool); void drawBeneathLevelsSignal(bool); void reviewTimeChangedSignal(int); + void playCaptureSignal(bool); // time lapse void intervalToggled(bool); diff --git a/toonz/sources/stopmotion/stopmotioncontroller.cpp b/toonz/sources/stopmotion/stopmotioncontroller.cpp index bb9f4504..8d7289a9 100644 --- a/toonz/sources/stopmotion/stopmotioncontroller.cpp +++ b/toonz/sources/stopmotion/stopmotioncontroller.cpp @@ -36,6 +36,7 @@ // TnzQt includes #include "toonzqt/filefield.h" #include "toonzqt/intfield.h" +#include "toonzqt/doublefield.h" #include "toonzqt/menubarcommand.h" // Qt includes @@ -1374,32 +1375,50 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { // Make Options Page QGroupBox *webcamBox = new QGroupBox(tr("Webcam Options"), this); QGroupBox *dslrBox = new QGroupBox(tr("DSLR Options"), this); - QGroupBox *timerFrame = new QGroupBox(tr("Time Lapse"), this); - m_timerCB = new QCheckBox(tr("Use time lapse"), this); - m_timerIntervalFld = new DVGui::IntField(this); - timerFrame->setObjectName("CleanupSettingsFrame"); + m_timerCB = new QGroupBox(tr("Use Time Lapse"), this); + m_timerIntervalFld = new DVGui::DoubleField(this, true, 1); + m_timerCB->setCheckable(true); + m_timerCB->setObjectName("CleanupSettingsFrame"); m_timerCB->setChecked(false); - m_timerIntervalFld->setRange(0, 60); - m_timerIntervalFld->setValue(10); - m_timerIntervalFld->setDisabled(true); + m_timerIntervalFld->setRange(0.0, 60.0); + m_timerIntervalFld->setValue(0.0); - m_postCaptureReviewFld = new DVGui::IntField(this); - m_postCaptureReviewFld->setRange(0, 10); + m_postCaptureReviewFld = new DVGui::DoubleField(this, true, 1); + m_postCaptureReviewFld->setRange(0.0, 10.0); + m_postCaptureReviewFld->setValue(0.0); m_subsamplingFld = new DVGui::IntField(this); m_subsamplingFld->setRange(1, 30); m_subsamplingFld->setDisabled(true); - m_placeOnXSheetCB = new QCheckBox(this); + m_placeOnXSheetCB = new QCheckBox(tr("Place on XSheet"), this); m_placeOnXSheetCB->setToolTip(tr("Place the frame in the Scene")); - m_directShowLabel = new QLabel(tr("Use Direct Show Webcam Drivers"), this); - m_directShowCB = new QCheckBox(this); - m_useMjpgCB = new QCheckBox(this); - m_useNumpadCB = new QCheckBox(this); - m_drawBeneathCB = new QCheckBox(this); + m_directShowCB = new QCheckBox(tr("Use Direct Show Webcam Drivers"), this); + m_useMjpgCB = new QCheckBox(tr("Use MJPG with Webcam"), this); + m_useNumpadCB = new QCheckBox(tr("Use Numpad Shortcuts When Active"), this); + m_useNumpadCB->setToolTip( + tr("Requires restarting camera when toggled\n" + "NP 1 = Previous Frame\n" + "NP 2 = Next Frame\n" + "NP 3 = Jump To Camera\n" + "NP 5 = Toggle Live View\n" + "NP 6 = Short Play\n" + "NP 8 = Loop\n" + "NP 0 = Play\n" + "Period = Use Live View Images\n" + "Plus = Raise Opacity\n" + "Minus = Lower Opacity\n" + "Enter = Capture\n" + "BackSpace = Remove Frame\n" + "Multiply = Toggle Zoom\n" + "Divide = Focus Check")); + m_drawBeneathCB = new QCheckBox(tr("Show Camera Below Other Levels"), this); + m_liveViewOnAllFramesCB = + new QCheckBox(tr("Show Live View on All Frames"), this); + m_playSound = new QCheckBox(tr("Play Sound on Capture"), this); + m_playSound->setToolTip(tr("Make a click sound on each capture")); - m_liveViewOnAllFramesCB = new QCheckBox(this); QVBoxLayout *optionsOutsideLayout = new QVBoxLayout; QGridLayout *optionsLayout = new QGridLayout; optionsLayout->setSpacing(3); @@ -1414,11 +1433,8 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { optionsOutsideLayout->addWidget(dslrBox, Qt::AlignCenter); dslrBox->hide(); - webcamLayout->addWidget(m_directShowCB, 0, 0, Qt::AlignRight); - webcamLayout->addWidget(m_directShowLabel, 0, 1, Qt::AlignLeft); - webcamLayout->addWidget(m_useMjpgCB, 1, 0, Qt::AlignRight); - webcamLayout->addWidget(new QLabel(tr("Use MJPG with Webcam")), 1, 1, - Qt::AlignLeft); + webcamLayout->addWidget(m_directShowCB, 0, 0, 1, 2); + webcamLayout->addWidget(m_useMjpgCB, 1, 0, 1, 2); webcamLayout->setColumnStretch(1, 30); webcamBox->setLayout(webcamLayout); webcamBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum); @@ -1430,36 +1446,24 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { timerLay->setHorizontalSpacing(3); timerLay->setVerticalSpacing(5); { - timerLay->addWidget(m_timerCB, 0, 0, 1, 2); - timerLay->addWidget(new QLabel(tr("Interval(sec):"), this), 1, 0, Qt::AlignRight); timerLay->addWidget(m_timerIntervalFld, 1, 1); } timerLay->setColumnStretch(0, 0); timerLay->setColumnStretch(1, 1); - timerFrame->setLayout(timerLay); - optionsOutsideLayout->addWidget(timerFrame); + m_timerCB->setLayout(timerLay); + optionsOutsideLayout->addWidget(m_timerCB); - checkboxLayout->addWidget(m_placeOnXSheetCB, 0, 0, 1, 1, Qt::AlignRight); - // checkboxLayout->addWidget(new QLabel(tr("Place in Scene")), 0, 1, - // Qt::AlignLeft); + checkboxLayout->addWidget(m_placeOnXSheetCB, 0, 0, 1, 2); m_placeOnXSheetCB->hide(); - checkboxLayout->addWidget(m_drawBeneathCB, 1, 0, Qt::AlignRight); - // checkboxLayout->addWidget(new QLabel(tr("Show Camera Below Other - // Levels")), - // 1, 1, Qt::AlignLeft); + checkboxLayout->addWidget(m_drawBeneathCB, 1, 0, 1, 2); m_drawBeneathCB->hide(); - checkboxLayout->addWidget(m_useNumpadCB, 2, 0, Qt::AlignRight); - checkboxLayout->addWidget( - new QLabel(tr("Use Numpad Shortcuts When Active")), 2, 1, - Qt::AlignLeft); - checkboxLayout->addWidget(m_liveViewOnAllFramesCB, 3, 0, Qt::AlignRight); + checkboxLayout->addWidget(m_useNumpadCB, 2, 0, 1, 2); + checkboxLayout->addWidget(m_liveViewOnAllFramesCB, 3, 0, 1, 2); m_liveViewOnAllFramesCB->hide(); - // checkboxLayout->addWidget(new QLabel(tr("Show Live View on All Frames")), - // 3, - // 1, Qt::AlignLeft); + checkboxLayout->addWidget(m_playSound, 4, 0, 1, 2); checkboxLayout->setColumnStretch(1, 30); optionsOutsideLayout->addLayout(checkboxLayout, Qt::AlignLeft); @@ -1766,7 +1770,8 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { // Options Page ret = ret && connect(m_liveViewOnAllFramesCB, SIGNAL(stateChanged(int)), this, SLOT(onLiveViewOnAllFramesChanged(int))); - + ret = ret && connect(m_playSound, SIGNAL(toggled(bool)), this, + SLOT(onPlaySoundToggled(bool))); ret = ret && connect(m_placeOnXSheetCB, SIGNAL(stateChanged(int)), this, SLOT(onPlaceOnXSheetChanged(int))); ret = ret && connect(m_directShowCB, SIGNAL(stateChanged(int)), this, @@ -1802,6 +1807,8 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { this, SLOT(onDrawBeneathSignal(bool))); ret = ret && connect(m_stopMotion, SIGNAL(reviewTimeChangedSignal(int)), this, SLOT(onReviewTimeChangedSignal(int))); + ret = ret && connect(m_stopMotion, SIGNAL(playCaptureSignal(bool)), this, + SLOT(onPlayCaptureSignal(bool))); // From Stop Motion Main ret = ret && connect(m_stopMotion, SIGNAL(newDimensions()), this, @@ -2024,6 +2031,7 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { m_useNumpadCB->setChecked(m_stopMotion->getUseNumpadShortcuts()); m_drawBeneathCB->setChecked(m_stopMotion->m_drawBeneathLevels); m_liveViewOnAllFramesCB->setChecked(m_stopMotion->getAlwaysLiveView()); + m_playSound->setChecked(m_stopMotion->getPlayCaptureSound()); m_blackScreenForCapture->setChecked( m_stopMotion->m_light->getBlackCapture() ? true : false); if (m_stopMotion->m_light->getBlackCapture()) { @@ -2031,7 +2039,8 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { m_screen2Box->setDisabled(true); m_screen3Box->setDisabled(true); } - m_postCaptureReviewFld->setValue(m_stopMotion->getReviewTime()); + m_postCaptureReviewFld->setValue(m_stopMotion->getReviewTimeDSec() / 10.0); + m_timerIntervalFld->setValue(m_stopMotion->getIntervalDSec() / 10.0); refreshCameraList(QString("")); onSceneSwitched(); @@ -2040,7 +2049,6 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { #ifndef _WIN32 m_directShowCB->hide(); - m_directShowLabel->hide(); #endif } @@ -2321,19 +2329,25 @@ void StopMotionController::onDrawBeneathSignal(bool on) { //----------------------------------------------------------------------------- void StopMotionController::onCaptureReviewFldEdited() { - m_stopMotion->setReviewTime(m_postCaptureReviewFld->getValue()); + m_stopMotion->setReviewTimeDSec(m_postCaptureReviewFld->getValue() * 10.0); } //----------------------------------------------------------------------------- void StopMotionController::onCaptureReviewSliderChanged(bool ignore) { - m_stopMotion->setReviewTime(m_postCaptureReviewFld->getValue()); + m_stopMotion->setReviewTimeDSec(m_postCaptureReviewFld->getValue() * 10.0); } //----------------------------------------------------------------------------- void StopMotionController::onReviewTimeChangedSignal(int time) { - m_postCaptureReviewFld->setValue(time); + m_postCaptureReviewFld->setValue(time / 10.0); +} + +//----------------------------------------------------------------------------- + +void StopMotionController::onPlayCaptureSignal(bool on) { + m_playSound->setChecked(on); } //----------------------------------------------------------------------------- @@ -3540,7 +3554,7 @@ void StopMotionController::onIntervalTimerCBToggled(bool on) { //----------------------------------------------------------------------------- void StopMotionController::onIntervalSliderValueChanged(bool on) { - m_stopMotion->setIntervalAmount(m_timerIntervalFld->getValue()); + m_stopMotion->setIntervalDSec(m_timerIntervalFld->getValue() * 10.0); } //----------------------------------------------------------------------------- @@ -3563,14 +3577,13 @@ void StopMotionController::onIntervalCountDownTimeout() { //----------------------------------------------------------------------------- void StopMotionController::onIntervalAmountChanged(int value) { m_timerIntervalFld->blockSignals(true); - m_timerIntervalFld->setValue(value); + m_timerIntervalFld->setValue(value / 10.0); m_timerIntervalFld->blockSignals(false); } //----------------------------------------------------------------------------- void StopMotionController::onIntervalToggled(bool on) { m_timerCB->blockSignals(true); - m_timerIntervalFld->setEnabled(on); m_captureButton->setCheckable(on); if (on) m_captureButton->setText(tr("Start Capturing")); @@ -3601,6 +3614,12 @@ void StopMotionController::onIntervalStopped() { //----------------------------------------------------------------------------- +void StopMotionController::onPlaySoundToggled(bool on) { + m_stopMotion->setPlayCaptureSound(on); +} + +//----------------------------------------------------------------------------- + void StopMotionController::openSaveInFolderPopup() { if (m_saveInFolderPopup->exec()) { QString oldPath = m_saveInFileFld->getPath(); diff --git a/toonz/sources/stopmotion/stopmotioncontroller.h b/toonz/sources/stopmotion/stopmotioncontroller.h index 14b21f82..9ad70cd0 100644 --- a/toonz/sources/stopmotion/stopmotioncontroller.h +++ b/toonz/sources/stopmotion/stopmotioncontroller.h @@ -15,6 +15,7 @@ #include "toonzqt/tabbar.h" #include "toonzqt/gutil.h" #include "toonzqt/colorfield.h" +#include "toonzqt/doublefield.h" // Qt includes #include @@ -191,7 +192,7 @@ class StopMotionController final : public QWidget { *m_focusFar3Button, *m_captureFilterSettingsBtn, *m_testLightsButton; QHBoxLayout *m_focusAndZoomLayout; QLabel *m_frameInfoLabel, *m_cameraSettingsLabel, *m_cameraModeLabel, - *m_resolutionLabel, *m_directShowLabel, *m_cameraStatusLabel, + *m_resolutionLabel, *m_cameraStatusLabel, *m_apertureLabel, *m_kelvinValueLabel, *m_isoLabel, *m_shutterSpeedLabel, *m_webcamLabel, *m_liveViewCompensationLabel; QToolButton *m_previousLevelButton, *m_previousFrameButton, @@ -208,21 +209,22 @@ class StopMotionController final : public QWidget { LevelNameLineEdit *m_levelNameEdit; QCheckBox *m_blackScreenForCapture, *m_placeOnXSheetCB, *m_directShowCB, *m_liveViewOnAllFramesCB, *m_useMjpgCB, *m_useNumpadCB, *m_drawBeneathCB, - *m_timerCB, *m_showScene1, *m_showScene2, + *m_playSound, *m_showScene1, *m_showScene2, *m_showScene3; //, *m_upsideDownCB; CameraCaptureLevelControl *m_camCapLevelControl; DVGui::FileField *m_saveInFileFld; DVGui::IntLineEdit *m_xSheetFrameNumberEdit; FrameNumberLineEdit *m_frameNumberEdit; - DVGui::IntField *m_onionOpacityFld, *m_postCaptureReviewFld, - *m_subsamplingFld; + DVGui::IntField *m_onionOpacityFld, *m_subsamplingFld; + DVGui::DoubleField *m_postCaptureReviewFld; StopMotionSaveInFolderPopup *m_saveInFolderPopup; - DVGui::IntField *m_timerIntervalFld; + DVGui::DoubleField *m_timerIntervalFld; DVGui::ColorField *m_screen1ColorFld, *m_screen2ColorFld, *m_screen3ColorFld; QGroupBox *m_screen1Box; QGroupBox *m_screen2Box; QGroupBox *m_screen3Box; QGroupBox *m_webcamAutoFocusGB; + QGroupBox *m_timerCB; QTimer *m_lightTestTimer; // tests variables @@ -302,6 +304,9 @@ protected slots: void onIntervalStarted(); void onIntervalStopped(); + // sound + void onPlaySoundToggled(bool); + // lights and screens void setScreen1Color(const TPixel32 &value, bool isDragging); void setScreen2Color(const TPixel32 &value, bool isDragging); @@ -384,6 +389,7 @@ protected slots: void onUseMjpgSignal(bool); void onUseDirectShowSignal(bool); void onReviewTimeChangedSignal(int); + void onPlayCaptureSignal(bool); void onUseNumpadSignal(bool); void onDrawBeneathSignal(bool); void onLiveViewChanged(bool); diff --git a/toonz/sources/toonz/Resources/camera_snap.wav b/toonz/sources/toonz/Resources/camera_snap.wav new file mode 100644 index 00000000..1e7a1ace Binary files /dev/null and b/toonz/sources/toonz/Resources/camera_snap.wav differ diff --git a/toonz/sources/toonz/toonz.qrc b/toonz/sources/toonz/toonz.qrc index af5cb9d8..ef10f8aa 100644 --- a/toonz/sources/toonz/toonz.qrc +++ b/toonz/sources/toonz/toonz.qrc @@ -584,6 +584,7 @@ Resources/brush.png Resources/camera.svg Resources/camera_small.svg + Resources/camera_snap.wav Resources/center.png Resources/clapboard.png Resources/curve.svg