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 462 of file recorder_export.cpp.

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

◆ ~RecorderExport()

RecorderExport::~RecorderExport ( )

Definition at line 533 of file recorder_export.cpp.

534{
535}

Member Function Documentation

◆ closeEvent()

void RecorderExport::closeEvent ( QCloseEvent * event)
overrideprotected

Definition at line 596 of file recorder_export.cpp.

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

References d.

◆ eventFilter()

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

Definition at line 917 of file recorder_export.cpp.

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

References d.

◆ onButtonBrowseDirectoryClicked

void RecorderExport::onButtonBrowseDirectoryClicked ( )
privateslot

Definition at line 608 of file recorder_export.cpp.

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

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

◆ onButtonBrowseExportClicked

void RecorderExport::onButtonBrowseExportClicked ( )
privateslot

Definition at line 789 of file recorder_export.cpp.

790{
791 QString videoFileName = d->requestFile(settings->profiles[settings->profileIndex].extension, settings->videoDirectory);
792 if (!videoFileName.isEmpty()) {
793 QFileInfo fileInfo(videoFileName);
794 settings->videoDirectory = fileInfo.absolutePath();
795 settings->videoFileName = fileInfo.completeBaseName();
797 d->updateVideoFilePath();
798 }
799}
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 722 of file recorder_export.cpp.

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

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

◆ onButtonCancelClicked

void RecorderExport::onButtonCancelClicked ( )
privateslot

Definition at line 830 of file recorder_export.cpp.

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

References d.

◆ onButtonEditProfileClicked

void RecorderExport::onButtonEditProfileClicked ( )
privateslot

Definition at line 749 of file recorder_export.cpp.

750{
751#ifdef Q_OS_ANDROID
752 QString key = settings->selectedFormat;
755
756 KisMediaEncoderPreferencesDialog dlg(format, settings->formatPreferences.value(key).toMap(), this);
757 if (dlg.exec() == QDialog::Accepted) {
758 settings->formatPreferences.insert(key, dlg.preferences());
759 RecorderExportConfig(false).setFormatPreferences(settings->formatPreferences);
760 }
761#else
762 RecorderProfileSettings settingsDialog(this);
763
764 connect(&settingsDialog, &RecorderProfileSettings::requestPreview, [&](const QString & arguments) {
765 settingsDialog.setPreview(settings->ffmpegPath % " -y " % d->applyVariables(arguments).replace("\n", " ")
766 % " \"" % settings->videoFilePath % "\"");
767 });
768
769 if (settingsDialog.editProfile(
771 d->fillComboProfiles();
772 d->updateVideoFilePath();
774 }
775#endif
776}
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 802 of file recorder_export.cpp.

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

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

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

◆ onButtonLockRatioToggled

void RecorderExport::onButtonLockRatioToggled ( bool checked)
privateslot

Definition at line 690 of file recorder_export.cpp.

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

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

◆ onButtonRemoveSnapshotsClicked

void RecorderExport::onButtonRemoveSnapshotsClicked ( )
privateslot

Definition at line 883 of file recorder_export.cpp.

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

References d, and onCleanUpFinished().

◆ onButtonRestartClicked

void RecorderExport::onButtonRestartClicked ( )
privateslot

Definition at line 901 of file recorder_export.cpp.

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

References d.

◆ onButtonShowInFolderClicked

void RecorderExport::onButtonShowInFolderClicked ( )
privateslot

◆ onButtonWatchItClicked

void RecorderExport::onButtonWatchItClicked ( )
privateslot

◆ onCheckExtendResultToggled

void RecorderExport::onCheckExtendResultToggled ( bool checked)
privateslot

Definition at line 651 of file recorder_export.cpp.

652{
653 settings->extendResult = checked;
655 d->updateVideoDuration();
656}

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

◆ onCheckResizeToggled

void RecorderExport::onCheckResizeToggled ( bool checked)
privateslot

Definition at line 665 of file recorder_export.cpp.

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

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

◆ onCheckResultPreviewToggled

void RecorderExport::onCheckResultPreviewToggled ( bool checked)
privateslot

Definition at line 637 of file recorder_export.cpp.

638{
639 settings->resultPreview = checked;
641 d->updateVideoDuration();
642}

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

◆ onCleanUpFinished

void RecorderExport::onCleanUpFinished ( )
privateslot

Definition at line 906 of file recorder_export.cpp.

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

References d.

◆ onComboProfileIndexChanged

void RecorderExport::onComboProfileIndexChanged ( int index)
privateslot

Definition at line 736 of file recorder_export.cpp.

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

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

◆ onEditVideoPathChanged

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

Definition at line 779 of file recorder_export.cpp.

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

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

◆ onExporterFinished

void RecorderExport::onExporterFinished ( )
privateslot

Definition at line 850 of file recorder_export.cpp.

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

References d, settings, and RecorderExportSettings::videoFilePath.

◆ onExporterFinishedWithError

void RecorderExport::onExporterFinishedWithError ( QString error)
privateslot

Definition at line 859 of file recorder_export.cpp.

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

References d.

◆ onExporterProgressUpdated

void RecorderExport::onExporterProgressUpdated ( int frameNo)
privateslot

Definition at line 866 of file recorder_export.cpp.

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

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

◆ onExporterStarted

void RecorderExport::onExporterStarted ( )
privateslot

Definition at line 844 of file recorder_export.cpp.

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

References d.

◆ onFirstFrameSecValueChanged

void RecorderExport::onFirstFrameSecValueChanged ( int value)
privateslot

Definition at line 644 of file recorder_export.cpp.

645{
648 d->updateVideoDuration();
649}
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 627 of file recorder_export.cpp.

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

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

◆ onSpinInputFpsValueChanged

void RecorderExport::onSpinInputFpsValueChanged ( int value)
privateslot

Definition at line 618 of file recorder_export.cpp.

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

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

◆ onSpinScaleHeightValueChanged

void RecorderExport::onSpinScaleHeightValueChanged ( int value)
privateslot

Definition at line 681 of file recorder_export.cpp.

682{
683 settings->size.setHeight(value);
684 if (settings->lockRatio)
685 d->updateRatio(false);
687 d->updateWarningVisibility();
688}
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 672 of file recorder_export.cpp.

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

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

◆ reject

void RecorderExport::reject ( )
overrideprivateslot

Definition at line 602 of file recorder_export.cpp.

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

References d.

◆ setup()

void RecorderExport::setup ( )

Definition at line 537 of file recorder_export.cpp.

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

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: