Krita Source Code Documentation
Loading...
Searching...
No Matches
RecorderExport Class Reference

#include <recorder_export.h>

+ Inheritance diagram for RecorderExport:

Classes

class  Private
 

Public Member Functions

 RecorderExport (RecorderExportSettings *s, QWidget *parent=nullptr)
 
void setup ()
 
 ~RecorderExport ()
 

Protected Member Functions

void closeEvent (QCloseEvent *event) override
 

Private Slots

void onButtonBrowseDirectoryClicked ()
 
void onButtonBrowseExportClicked ()
 
void onButtonBrowseFfmpegClicked ()
 
void onButtonCancelClicked ()
 
void onButtonEditProfileClicked ()
 
void onButtonExportClicked ()
 
void onButtonLockFpsToggled (bool checked)
 
void onButtonLockRatioToggled (bool checked)
 
void onButtonRemoveSnapshotsClicked ()
 
void onButtonRestartClicked ()
 
void onButtonShowInFolderClicked ()
 
void onButtonWatchItClicked ()
 
void onCheckExtendResultToggled (bool checked)
 
void onCheckResizeToggled (bool checked)
 
void onCheckResultPreviewToggled (bool checked)
 
void onCleanUpFinished ()
 
void onComboProfileIndexChanged (int index)
 
void onEditVideoPathChanged (const QString &videoFilePath)
 
void onExporterFinished ()
 
void onExporterFinishedWithError (QString error)
 
void onExporterProgressUpdated (int frameNo)
 
void onExporterStarted ()
 
void onFirstFrameSecValueChanged (int value)
 
void onLastFrameSecValueChanged (int value)
 
void onSpinFpsValueChanged (int value)
 
void onSpinInputFpsValueChanged (int value)
 
void onSpinScaleHeightValueChanged (int value)
 
void onSpinScaleWidthValueChanged (int value)
 
void reject () override
 

Private Member Functions

bool eventFilter (QObject *obj, QEvent *event) override
 

Private Attributes

QScopedPointer< Privated
 
RecorderExportSettingssettings
 

Detailed Description

Definition at line 16 of file recorder_export.h.

Constructor & Destructor Documentation

◆ RecorderExport()

RecorderExport::RecorderExport ( RecorderExportSettings * s,
QWidget * parent = nullptr )
explicit

Definition at line 459 of file recorder_export.cpp.

460 : QDialog(parent)
461 , settings(s)
462 , d(new Private(this))
463{
464 d->ui->setupUi(this);
465
466#ifdef Q_OS_ANDROID
467 d->ui->labelFfmpegLocation->hide();
468 d->ui->editFfmpegPath->hide();
469 d->ui->buttonBrowseFfmpeg->hide();
470 d->ui->labelExportTo->hide();
471 d->ui->editVideoFilePath->hide();
472 d->ui->buttonBrowseExport->hide();
473 d->ui->buttonShowInFolder->hide();
474#else
475 d->ui->buttonBrowseFfmpeg->setIcon(KisIconUtils::loadIcon("folder"));
476 d->ui->buttonBrowseExport->setIcon(KisIconUtils::loadIcon("folder"));
477 d->ui->buttonShowInFolder->setIcon(KisIconUtils::loadIcon("folder"));
478#endif
479
480 d->spinInputFPSMaxValue = d->ui->spinInputFps->minimum();
481 d->spinInputFPSMaxValue = d->ui->spinInputFps->maximum();
482 d->ui->buttonBrowseDirectory->setIcon(KisIconUtils::loadIcon("view-preview"));
483 d->ui->buttonEditProfile->setIcon(KisIconUtils::loadIcon("document-edit"));
484 d->ui->buttonLockRatio->setIcon(settings->lockRatio ? KisIconUtils::loadIcon("locked") : KisIconUtils::loadIcon("unlocked"));
485 d->ui->buttonLockFps->setIcon(settings->lockFps ? KisIconUtils::loadIcon("locked") : KisIconUtils::loadIcon("unlocked"));
486 d->ui->buttonWatchIt->setIcon(KisIconUtils::loadIcon("media-playback-start"));
487 d->ui->buttonRemoveSnapshots->setIcon(KisIconUtils::loadIcon("edit-delete"));
488 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageSettings);
489 d->ui->spinLastFrameSec->setEnabled(d->ui->extendResultCheckBox->isChecked());
490 d->ui->spinFirstFrameSec->setEnabled(d->ui->resultPreviewCheckBox->isChecked());
491 d->ui->lblWarnFpsIcon->setPixmap(KisIconUtils::loadIcon("dialog-warning").pixmap(48, 48));
492 d->ui->lblWarnSizeIcon->setPixmap(KisIconUtils::loadIcon("dialog-warning").pixmap(48, 48));
493 d->ui->wdgWarnFps->hide();
494 d->ui->wdgWarnSize->hide();
495
496 connect(d->ui->buttonBrowseDirectory, SIGNAL(clicked()), SLOT(onButtonBrowseDirectoryClicked()));
497 connect(d->ui->spinInputFps, SIGNAL(valueChanged(int)), SLOT(onSpinInputFpsValueChanged(int)));
498 connect(d->ui->spinFps, SIGNAL(valueChanged(int)), SLOT(onSpinFpsValueChanged(int)));
499 connect(d->ui->resultPreviewCheckBox, SIGNAL(toggled(bool)), SLOT(onCheckResultPreviewToggled(bool)));
500 connect(d->ui->spinFirstFrameSec, SIGNAL(valueChanged(int)), SLOT(onFirstFrameSecValueChanged(int)));
501 connect(d->ui->extendResultCheckBox, SIGNAL(toggled(bool)), SLOT(onCheckExtendResultToggled(bool)));
502 connect(d->ui->spinLastFrameSec, SIGNAL(valueChanged(int)), SLOT(onLastFrameSecValueChanged(int)));
503 connect(d->ui->checkResize, SIGNAL(toggled(bool)), SLOT(onCheckResizeToggled(bool)));
504 connect(d->ui->spinScaleWidth, SIGNAL(valueChanged(int)), SLOT(onSpinScaleWidthValueChanged(int)));
505 connect(d->ui->spinScaleHeight, SIGNAL(valueChanged(int)), SLOT(onSpinScaleHeightValueChanged(int)));
506 connect(d->ui->buttonLockRatio, SIGNAL(toggled(bool)), SLOT(onButtonLockRatioToggled(bool)));
507 connect(d->ui->buttonLockFps, SIGNAL(toggled(bool)), SLOT(onButtonLockFpsToggled(bool)));
508 connect(d->ui->comboProfile, SIGNAL(currentIndexChanged(int)), SLOT(onComboProfileIndexChanged(int)));
509 connect(d->ui->buttonEditProfile, SIGNAL(clicked()), SLOT(onButtonEditProfileClicked()));
510 connect(d->ui->buttonBox->button(QDialogButtonBox::Save), SIGNAL(clicked()), this, SLOT(onButtonExportClicked()));
511 connect(d->ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
512 connect(d->ui->buttonCancelExport, SIGNAL(clicked()), SLOT(onButtonCancelClicked()));
513 connect(d->ui->buttonWatchIt, SIGNAL(clicked()), SLOT(onButtonWatchItClicked()));
514 connect(d->ui->buttonRemoveSnapshots, SIGNAL(clicked()), SLOT(onButtonRemoveSnapshotsClicked()));
515 connect(d->ui->buttonRestart, SIGNAL(clicked()), SLOT(onButtonRestartClicked()));
516 connect(d->ui->resultPreviewCheckBox, SIGNAL(toggled(bool)), d->ui->spinFirstFrameSec, SLOT(setEnabled(bool)));
517 connect(d->ui->extendResultCheckBox, SIGNAL(toggled(bool)), d->ui->spinLastFrameSec, SLOT(setEnabled(bool)));
518
519#ifndef Q_OS_ANDROID
520 connect(d->ui->buttonBrowseFfmpeg, SIGNAL(clicked()), SLOT(onButtonBrowseFfmpegClicked()));
521 connect(d->ui->buttonBrowseExport, SIGNAL(clicked()), SLOT(onButtonBrowseExportClicked()));
522 connect(d->ui->editVideoFilePath, SIGNAL(textChanged(QString)), SLOT(onEditVideoPathChanged(QString)));
523 connect(d->ui->buttonShowInFolder, SIGNAL(clicked()), SLOT(onButtonShowInFolderClicked()));
524#endif
525
527 d->ui->buttonBox->button(QDialogButtonBox::Close)->setText("OK");
528 d->ui->buttonBox->button(QDialogButtonBox::Save)->setText(i18n("Export"));
529#ifndef Q_OS_ANDROID
530 d->ui->editVideoFilePath->installEventFilter(this);
531#endif
532}
void onButtonBrowseFfmpegClicked()
void onCheckResultPreviewToggled(bool checked)
void onSpinInputFpsValueChanged(int value)
void onLastFrameSecValueChanged(int value)
void onButtonShowInFolderClicked()
void onEditVideoPathChanged(const QString &videoFilePath)
RecorderExportSettings * settings
void onSpinScaleHeightValueChanged(int value)
void onButtonEditProfileClicked()
void onFirstFrameSecValueChanged(int value)
void onButtonRemoveSnapshotsClicked()
QScopedPointer< Private > d
void onCheckExtendResultToggled(bool checked)
void onCheckResizeToggled(bool checked)
void onButtonBrowseDirectoryClicked()
void onButtonLockFpsToggled(bool checked)
void onComboProfileIndexChanged(int index)
void onSpinFpsValueChanged(int value)
void onButtonLockRatioToggled(bool checked)
void onSpinScaleWidthValueChanged(int value)
void onButtonBrowseExportClicked()
QIcon loadIcon(const QString &name)

References d, KisIconUtils::loadIcon(), RecorderExportSettings::lockFps, RecorderExportSettings::lockRatio, onButtonBrowseDirectoryClicked(), onButtonBrowseExportClicked(), onButtonBrowseFfmpegClicked(), onButtonCancelClicked(), onButtonEditProfileClicked(), onButtonExportClicked(), onButtonLockFpsToggled(), onButtonLockRatioToggled(), onButtonRemoveSnapshotsClicked(), onButtonRestartClicked(), onButtonShowInFolderClicked(), onButtonWatchItClicked(), onCheckExtendResultToggled(), onCheckResizeToggled(), onCheckResultPreviewToggled(), onComboProfileIndexChanged(), onEditVideoPathChanged(), onFirstFrameSecValueChanged(), onLastFrameSecValueChanged(), onSpinFpsValueChanged(), onSpinInputFpsValueChanged(), onSpinScaleHeightValueChanged(), onSpinScaleWidthValueChanged(), RecorderExportSettings::realTimeCaptureMode, and settings.

◆ ~RecorderExport()

RecorderExport::~RecorderExport ( )

Definition at line 534 of file recorder_export.cpp.

535{
536}

Member Function Documentation

◆ closeEvent()

void RecorderExport::closeEvent ( QCloseEvent * event)
overrideprotected

Definition at line 597 of file recorder_export.cpp.

598{
599 if (!d->tryAbortExport())
600 event->ignore();
601}

References d.

◆ eventFilter()

bool RecorderExport::eventFilter ( QObject * obj,
QEvent * event )
overrideprivate

Definition at line 918 of file recorder_export.cpp.

919{
920 if (obj == d->ui->editVideoFilePath && event->type() == QEvent::FocusOut)
921 d->updateVideoFilePath();
922
923 return QDialog::eventFilter(obj, event);
924}

References d.

◆ onButtonBrowseDirectoryClicked

void RecorderExport::onButtonBrowseDirectoryClicked ( )
privateslot

Definition at line 609 of file recorder_export.cpp.

610{
611 if (settings->framesCount != 0) {
613 } else {
614 QMessageBox::warning(this, windowTitle(), i18nc("Can't browse frames of recording because no frames have been recorded", "No frames to browse."));
615 return;
616 }
617}
static void desktopServicesOpenPath(const QString &path)

References RecorderExport::Private::desktopServicesOpenPath(), RecorderExportSettings::framesCount, RecorderExportSettings::inputDirectory, and settings.

◆ onButtonBrowseExportClicked

void RecorderExport::onButtonBrowseExportClicked ( )
privateslot

Definition at line 790 of file recorder_export.cpp.

791{
792 QString videoFileName = d->requestFile(settings->profiles[settings->profileIndex].extension, settings->videoDirectory);
793 if (!videoFileName.isEmpty()) {
794 QFileInfo fileInfo(videoFileName);
795 settings->videoDirectory = fileInfo.absolutePath();
796 settings->videoFileName = fileInfo.completeBaseName();
798 d->updateVideoFilePath();
799 }
800}
void setVideoDirectory(const QString &value)
QList< RecorderProfile > profiles

References d, RecorderExportSettings::profileIndex, RecorderExportSettings::profiles, settings, RecorderExportConfig::setVideoDirectory(), RecorderExportSettings::videoDirectory, and RecorderExportSettings::videoFileName.

◆ onButtonBrowseFfmpegClicked

void RecorderExport::onButtonBrowseFfmpegClicked ( )
privateslot

Definition at line 723 of file recorder_export.cpp.

724{
725 KoFileDialog dialog(this, KoFileDialog::OpenFile, "SelectFFmpeg");
726 dialog.setCaption(i18n("Select FFmpeg Executable File"));
727 dialog.setDefaultDir(settings->ffmpegPath);
728 QString file = dialog.filename();
729 if (!file.isEmpty()) {
732 d->checkExporter();
733 }
734}
void setFfmpegPath(const QString &value)

References d, RecorderExportSettings::ffmpegPath, KoFileDialog::OpenFile, RecorderExportConfig::setFfmpegPath(), and settings.

◆ onButtonCancelClicked

void RecorderExport::onButtonCancelClicked ( )
privateslot

Definition at line 831 of file recorder_export.cpp.

832{
833 if (d->cleaner) {
834 d->cleaner->stop();
835 d->cleaner->deleteLater();
836 d->cleaner = nullptr;
837 return;
838 }
839
840 if (d->tryAbortExport())
841 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageSettings);
842}

References d.

◆ onButtonEditProfileClicked

void RecorderExport::onButtonEditProfileClicked ( )
privateslot

Definition at line 750 of file recorder_export.cpp.

751{
752#ifdef Q_OS_ANDROID
753 QString key = settings->selectedFormat;
756
757 KisMediaEncoderPreferencesDialog dlg(format, settings->formatPreferences.value(key).toMap(), this);
758 if (dlg.exec() == QDialog::Accepted) {
759 settings->formatPreferences.insert(key, dlg.preferences());
760 RecorderExportConfig(false).setFormatPreferences(settings->formatPreferences);
761 }
762#else
763 RecorderProfileSettings settingsDialog(this);
764
765 connect(&settingsDialog, &RecorderProfileSettings::requestPreview, [&](const QString & arguments) {
766 settingsDialog.setPreview(settings->ffmpegPath % " -y " % d->applyVariables(arguments).replace("\n", " ")
767 % " \"" % settings->videoFilePath % "\"");
768 });
769
770 if (settingsDialog.editProfile(
772 d->fillComboProfiles();
773 d->updateVideoFilePath();
775 }
776#endif
777}
static KisMediaEncoderFormat * getFormatByKey(const QString &key)
void setProfiles(const QList< RecorderProfile > &value)
void requestPreview(QString arguments)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
QList< RecorderProfile > defaultProfiles

References d, RecorderExportSettings::defaultProfiles, RecorderProfileSettings::editProfile(), RecorderExportSettings::ffmpegPath, KisMediaEncoderWrapper::getFormatByKey(), KIS_SAFE_ASSERT_RECOVER_RETURN, KisMediaEncoderPreferencesDialog::preferences(), RecorderExportSettings::profileIndex, RecorderExportSettings::profiles, RecorderProfileSettings::requestPreview(), RecorderProfileSettings::setPreview(), RecorderExportConfig::setProfiles(), settings, and RecorderExportSettings::videoFilePath.

◆ onButtonExportClicked

void RecorderExport::onButtonExportClicked ( )
privateslot

Definition at line 803 of file recorder_export.cpp.

804{
805 if (settings->framesCount == 0) {
806 QMessageBox::warning(this, windowTitle(), i18n("No frames to export."));
807 return;
808 }
809
810#ifdef Q_OS_ANDROID
813 settings->videoFilePath = d->requestFile(format->extension());
814 if (settings->videoFilePath.isEmpty()) {
815 return;
816 }
817#else
818 if (QFile::exists(settings->videoFilePath)) {
819 if (QMessageBox::question(this, windowTitle(),
820 i18n("The video file already exists. Do you wish to overwrite it?"))
821 != QMessageBox::Yes) {
822 return;
823 }
824 }
825#endif
826
827 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageProgress);
828 d->startExport();
829}
virtual QString extension() const =0

References d, KisMediaEncoderFormat::extension(), RecorderExportSettings::framesCount, KisMediaEncoderWrapper::getFormatByKey(), KIS_SAFE_ASSERT_RECOVER_RETURN, settings, and RecorderExportSettings::videoFilePath.

◆ onButtonLockFpsToggled

void RecorderExport::onButtonLockFpsToggled ( bool checked)
privateslot

Definition at line 704 of file recorder_export.cpp.

705{
706 settings->lockFps = checked;
707 RecorderExportConfig config(false);
708 config.setLockFps(checked);
709 d->updateFps(config);
710 if (settings->lockFps) {
711 d->ui->buttonLockFps->setIcon(KisIconUtils::loadIcon("locked"));
712 d->ui->spinInputFps->setMinimum(d->ui->spinFps->minimum());
713 d->ui->spinInputFps->setMaximum(d->ui->spinFps->maximum());
714 } else {
715 d->ui->buttonLockFps->setIcon(KisIconUtils::loadIcon("unlocked"));
716 d->ui->spinInputFps->setMinimum(d->spinInputFPSMinValue);
717 d->ui->spinInputFps->setMaximum(d->spinInputFPSMaxValue);
718 }
719 d->updateWarningVisibility();
720}

References d, KisIconUtils::loadIcon(), RecorderExportSettings::lockFps, RecorderExportConfig::setLockFps(), and settings.

◆ onButtonLockRatioToggled

void RecorderExport::onButtonLockRatioToggled ( bool checked)
privateslot

Definition at line 691 of file recorder_export.cpp.

692{
693 settings->lockRatio = checked;
694 RecorderExportConfig config(false);
695 config.setLockRatio(checked);
696 if (settings->lockRatio) {
697 d->updateRatio(true);
698 config.setSize(settings->size);
699 }
700 d->ui->buttonLockRatio->setIcon(settings->lockRatio ? KisIconUtils::loadIcon("locked") : KisIconUtils::loadIcon("unlocked"));
701 d->updateWarningVisibility();
702}

References d, KisIconUtils::loadIcon(), RecorderExportSettings::lockRatio, RecorderExportConfig::setLockRatio(), RecorderExportConfig::setSize(), settings, and RecorderExportSettings::size.

◆ onButtonRemoveSnapshotsClicked

void RecorderExport::onButtonRemoveSnapshotsClicked ( )
privateslot

Definition at line 884 of file recorder_export.cpp.

885{
886 const QString confirmation(i18n("The recordings for this document will be deleted"
887 " and you will not be able to export a timelapse for it again"
888 ". Note that already exported timelapses will still be preserved."
889 "\n\nDo you wish to continue?"));
890 if (QMessageBox::question(this, windowTitle(), confirmation) != QMessageBox::Yes)
891 return;
892
893 d->ui->labelStatus->setText(i18nc("Label title, Snapshot directory deleting is in progress", "Cleaning up..."));
894 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageProgress);
895
896 Q_ASSERT(d->cleaner == nullptr);
897 d->cleaner = new RecorderDirectoryCleaner({d->settings->inputDirectory});
898 connect(d->cleaner, SIGNAL(finished()), this, SLOT(onCleanUpFinished()));
899 d->cleaner->start();
900}

References d, and onCleanUpFinished().

◆ onButtonRestartClicked

void RecorderExport::onButtonRestartClicked ( )
privateslot

Definition at line 902 of file recorder_export.cpp.

903{
904 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageSettings);
905}

References d.

◆ onButtonShowInFolderClicked

void RecorderExport::onButtonShowInFolderClicked ( )
privateslot

◆ onButtonWatchItClicked

void RecorderExport::onButtonWatchItClicked ( )
privateslot

◆ onCheckExtendResultToggled

void RecorderExport::onCheckExtendResultToggled ( bool checked)
privateslot

Definition at line 652 of file recorder_export.cpp.

653{
654 settings->extendResult = checked;
656 d->updateVideoDuration();
657}

References d, RecorderExportSettings::extendResult, RecorderExportConfig::setExtendResult(), and settings.

◆ onCheckResizeToggled

void RecorderExport::onCheckResizeToggled ( bool checked)
privateslot

Definition at line 666 of file recorder_export.cpp.

667{
668 settings->resize = checked;
669 RecorderExportConfig(false).setResize(checked);
670 d->updateWarningVisibility();
671}

References d, RecorderExportSettings::resize, RecorderExportConfig::setResize(), and settings.

◆ onCheckResultPreviewToggled

void RecorderExport::onCheckResultPreviewToggled ( bool checked)
privateslot

Definition at line 638 of file recorder_export.cpp.

639{
640 settings->resultPreview = checked;
642 d->updateVideoDuration();
643}

References d, RecorderExportSettings::resultPreview, RecorderExportConfig::setResultPreview(), and settings.

◆ onCleanUpFinished

void RecorderExport::onCleanUpFinished ( )
privateslot

Definition at line 907 of file recorder_export.cpp.

908{
909 d->cleaner->deleteLater();
910 d->cleaner = nullptr;
911
912 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageDone);
913 d->ui->buttonRestart->hide();
914 d->ui->buttonRemoveSnapshots->hide();
915}

References d.

◆ onComboProfileIndexChanged

void RecorderExport::onComboProfileIndexChanged ( int index)
privateslot

Definition at line 737 of file recorder_export.cpp.

738{
739#ifdef Q_OS_ANDROID
740 QString format = d->ui->comboProfile->itemData(index).toString();
741 d->settings->selectedFormat = format;
742 RecorderExportConfig(false).setSelectedFormat(format);
743#else
744 settings->profileIndex = index;
745 d->updateVideoFilePath();
747#endif
748}

References d, RecorderExportSettings::profileIndex, RecorderExportConfig::setProfileIndex(), and settings.

◆ onEditVideoPathChanged

void RecorderExport::onEditVideoPathChanged ( const QString & videoFilePath)
privateslot

Definition at line 780 of file recorder_export.cpp.

781{
782 QFileInfo fileInfo(videoFilePath);
783 if (!fileInfo.isRelative())
784 settings->videoDirectory = fileInfo.absolutePath();
785 settings->videoFileName = fileInfo.completeBaseName();
786}

References settings, RecorderExportSettings::videoDirectory, and RecorderExportSettings::videoFileName.

◆ onExporterFinished

void RecorderExport::onExporterFinished ( )
privateslot

Definition at line 851 of file recorder_export.cpp.

852{
853 quint64 elapsed = d->elapsedTimer.elapsed();
854 d->ui->labelRenderTime->setText(d->formatDuration(elapsed));
855 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageDone);
856 d->ui->labelVideoPathDone->setText(settings->videoFilePath);
857 d->cleanupExporter();
858}

References d, settings, and RecorderExportSettings::videoFilePath.

◆ onExporterFinishedWithError

void RecorderExport::onExporterFinishedWithError ( QString error)
privateslot

Definition at line 860 of file recorder_export.cpp.

861{
862 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageSettings);
863 QMessageBox::critical(this, windowTitle(), i18n("Export failed. Error message:") % "\n\n" % error);
864 d->cleanupExporter();
865}

References d.

◆ onExporterProgressUpdated

void RecorderExport::onExporterProgressUpdated ( int frameNo)
privateslot

Definition at line 867 of file recorder_export.cpp.

868{
869 d->ui->progressExport->setValue(frameNo * 100 / (settings->framesCount * settings->fps / static_cast<float>(settings->inputFps)));
870}

References d, RecorderExportSettings::fps, RecorderExportSettings::framesCount, RecorderExportSettings::inputFps, and settings.

◆ onExporterStarted

void RecorderExport::onExporterStarted ( )
privateslot

Definition at line 845 of file recorder_export.cpp.

846{
847 d->ui->buttonCancelExport->setEnabled(true);
848 d->ui->labelStatus->setText(i18n("The timelapse video is being encoded..."));
849}

References d.

◆ onFirstFrameSecValueChanged

void RecorderExport::onFirstFrameSecValueChanged ( int value)
privateslot

Definition at line 645 of file recorder_export.cpp.

646{
649 d->updateVideoDuration();
650}
float value(const T *src, size_t ch)

References d, RecorderExportSettings::firstFrameSec, RecorderExportConfig::setFirstFrameSec(), settings, and value().

◆ onLastFrameSecValueChanged

void RecorderExport::onLastFrameSecValueChanged ( int value)
privateslot

◆ onSpinFpsValueChanged

void RecorderExport::onSpinFpsValueChanged ( int value)
privateslot

Definition at line 628 of file recorder_export.cpp.

629{
630 settings->fps = value;
631 RecorderExportConfig config(false);
632 config.setFps(value);
633 d->updateFps(config, false);
634 d->updateVideoDuration();
635 d->updateWarningVisibility();
636}

References d, RecorderExportSettings::fps, RecorderExportConfig::setFps(), settings, and value().

◆ onSpinInputFpsValueChanged

void RecorderExport::onSpinInputFpsValueChanged ( int value)
privateslot

Definition at line 619 of file recorder_export.cpp.

620{
622 RecorderExportConfig config(false);
623 config.setInputFps(value);
624 d->updateFps(config, true);
625 d->updateVideoDuration();
626}

References d, RecorderExportSettings::inputFps, RecorderExportConfig::setInputFps(), settings, and value().

◆ onSpinScaleHeightValueChanged

void RecorderExport::onSpinScaleHeightValueChanged ( int value)
privateslot

Definition at line 682 of file recorder_export.cpp.

683{
684 settings->size.setHeight(value);
685 if (settings->lockRatio)
686 d->updateRatio(false);
688 d->updateWarningVisibility();
689}
void setSize(const QSize &value)

References d, RecorderExportSettings::lockRatio, RecorderExportConfig::setSize(), settings, RecorderExportSettings::size, and value().

◆ onSpinScaleWidthValueChanged

void RecorderExport::onSpinScaleWidthValueChanged ( int value)
privateslot

Definition at line 673 of file recorder_export.cpp.

674{
675 settings->size.setWidth(value);
676 if (settings->lockRatio)
677 d->updateRatio(true);
679 d->updateWarningVisibility();
680}

References d, RecorderExportSettings::lockRatio, RecorderExportConfig::setSize(), settings, RecorderExportSettings::size, and value().

◆ reject

void RecorderExport::reject ( )
overrideprivateslot

Definition at line 603 of file recorder_export.cpp.

604{
605 if (d->tryAbortExport())
606 QDialog::reject();
607}

References d.

◆ setup()

void RecorderExport::setup ( )

Definition at line 538 of file recorder_export.cpp.

539{
540 RecorderExportConfig config(true);
541 d->updateFps(config);
542 d->updateFrameInfo();
543
544 if (settings->framesCount == 0) {
545 d->ui->labelRecordInfo->setText(i18nc("Can't export recording because nothing to export", "No frames to export"));
546 d->ui->buttonBox->button(QDialogButtonBox::Save)->setEnabled(false);
547 } else {
548 d->ui->labelRecordInfo->setText(QString("%1: %2x%3 %4, %5 %6")
549 .arg(i18nc("General information about recording", "Recording info"))
550 .arg(settings->imageSize.width())
551 .arg(settings->imageSize.height())
552 .arg(i18nc("Pixel dimension suffix", "px"))
553 .arg(settings->framesCount)
554 .arg(i18nc("The suffix after number of frames", "frame(s)"))
555 );
556 }
557
558
559 // Don't load lockFps flag from config, if liveCaptureMode was just set by the user
560 config.loadConfiguration(settings, !settings->realTimeCaptureModeWasSet);
562
563 // Video dimensions are much more restrictive than image dimensions.
564 // Clobber them with sensible defaults instead of letting the user run into
565 // the trap of trying to export video well beyond what most encoders,
566 // devices and websites support.
567 d->initDimensions();
568
569 d->ui->spinInputFps->setValue(settings->inputFps);
570 d->ui->spinFps->setValue(settings->fps);
571 d->ui->resultPreviewCheckBox->setChecked(settings->resultPreview);
572 d->ui->spinFirstFrameSec->setValue(settings->firstFrameSec);
573 d->ui->extendResultCheckBox->setChecked(settings->extendResult);
574 d->ui->spinLastFrameSec->setValue(settings->lastFrameSec);
575 d->ui->checkResize->setChecked(settings->resize);
576 {
577 // Need to block signals or else a locked ratio will mess these up.
578 QSignalBlocker spinScaleWidthBlocker(d->ui->spinScaleWidth);
579 QSignalBlocker spinScaleHeightBlocker(d->ui->spinScaleHeight);
580 QSignalBlocker buttonLockRatioBlocker(d->ui->buttonLockRatio);
581 d->ui->spinScaleWidth->setValue(settings->size.width());
582 d->ui->spinScaleHeight->setValue(settings->size.height());
583 d->ui->buttonLockRatio->setChecked(settings->lockRatio);
584 }
585 d->ui->buttonLockRatio->setIcon(settings->lockRatio ? KisIconUtils::loadIcon("locked") : KisIconUtils::loadIcon("unlocked"));
586 d->ui->labelRealTimeCaptureNotion->setVisible(settings->realTimeCaptureMode);
587 d->ui->buttonLockFps->setChecked(settings->lockFps);
588 d->ui->buttonLockFps->setIcon(settings->lockFps ? KisIconUtils::loadIcon("locked") : KisIconUtils::loadIcon("unlocked"));
589 d->fillComboProfiles();
590#ifndef Q_OS_ANDROID
591 d->checkExporter();
592 d->updateVideoFilePath();
593#endif
594 d->updateVideoDuration();
595}

References d, RecorderExportSettings::extendResult, RecorderExportSettings::firstFrameSec, RecorderExportSettings::fps, RecorderExportSettings::framesCount, RecorderExportSettings::imageSize, RecorderExportSettings::inputFps, RecorderExportSettings::lastFrameSec, RecorderExportConfig::loadConfiguration(), KisIconUtils::loadIcon(), RecorderExportSettings::lockFps, RecorderExportSettings::lockRatio, RecorderExportSettings::realTimeCaptureMode, RecorderExportSettings::realTimeCaptureModeWasSet, RecorderExportSettings::resize, RecorderExportSettings::resultPreview, settings, and RecorderExportSettings::size.

Member Data Documentation

◆ d

QScopedPointer<Private> RecorderExport::d
private

Definition at line 80 of file recorder_export.h.

◆ settings

RecorderExportSettings* RecorderExport::settings
private

Definition at line 79 of file recorder_export.h.


The documentation for this class was generated from the following files: