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< Private > d
 
RecorderExportSettings * settings
 

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

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

541{
542}

Member Function Documentation

◆ closeEvent()

void RecorderExport::closeEvent ( QCloseEvent * event)
overrideprotected

Definition at line 603 of file recorder_export.cpp.

604{
605 if (!d->tryAbortExport())
606 event->ignore();
607}

References d.

◆ eventFilter()

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

Definition at line 924 of file recorder_export.cpp.

925{
926 if (obj == d->ui->editVideoFilePath && event->type() == QEvent::FocusOut)
927 d->updateVideoFilePath();
928
929 return QDialog::eventFilter(obj, event);
930}

References d.

◆ onButtonBrowseDirectoryClicked

void RecorderExport::onButtonBrowseDirectoryClicked ( )
privateslot

Definition at line 615 of file recorder_export.cpp.

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

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

◆ onButtonBrowseExportClicked

void RecorderExport::onButtonBrowseExportClicked ( )
privateslot

Definition at line 796 of file recorder_export.cpp.

797{
798 QString videoFileName = d->requestFile(settings->profiles[settings->profileIndex].extension, settings->videoDirectory);
799 if (!videoFileName.isEmpty()) {
800 QFileInfo fileInfo(videoFileName);
801 settings->videoDirectory = fileInfo.absolutePath();
802 settings->videoFileName = fileInfo.completeBaseName();
804 d->updateVideoFilePath();
805 }
806}
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 729 of file recorder_export.cpp.

730{
731 KoFileDialog dialog(this, KoFileDialog::OpenFile, "SelectFFmpeg");
732 dialog.setCaption(i18n("Select FFmpeg Executable File"));
733 dialog.setDefaultDir(settings->ffmpegPath);
734 QString file = dialog.filename();
735 if (!file.isEmpty()) {
738 d->checkExporter();
739 }
740}
void setFfmpegPath(const QString &value)

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

◆ onButtonCancelClicked

void RecorderExport::onButtonCancelClicked ( )
privateslot

Definition at line 837 of file recorder_export.cpp.

838{
839 if (d->cleaner) {
840 d->cleaner->stop();
841 d->cleaner->deleteLater();
842 d->cleaner = nullptr;
843 return;
844 }
845
846 if (d->tryAbortExport())
847 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageSettings);
848}

References d.

◆ onButtonEditProfileClicked

void RecorderExport::onButtonEditProfileClicked ( )
privateslot

Definition at line 756 of file recorder_export.cpp.

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

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

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

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

◆ onButtonLockRatioToggled

void RecorderExport::onButtonLockRatioToggled ( bool checked)
privateslot

Definition at line 697 of file recorder_export.cpp.

698{
699 settings->lockRatio = checked;
700 RecorderExportConfig config(false);
701 config.setLockRatio(checked);
702 if (settings->lockRatio) {
703 d->updateRatio(true);
704 config.setSize(settings->size);
705 }
706 d->ui->buttonLockRatio->setIcon(settings->lockRatio ? KisIconUtils::loadIcon("locked") : KisIconUtils::loadIcon("unlocked"));
707 d->updateWarningVisibility();
708}

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

◆ onButtonRemoveSnapshotsClicked

void RecorderExport::onButtonRemoveSnapshotsClicked ( )
privateslot

Definition at line 890 of file recorder_export.cpp.

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

References d, and onCleanUpFinished().

◆ onButtonRestartClicked

void RecorderExport::onButtonRestartClicked ( )
privateslot

Definition at line 908 of file recorder_export.cpp.

909{
910 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageSettings);
911}

References d.

◆ onButtonShowInFolderClicked

void RecorderExport::onButtonShowInFolderClicked ( )
privateslot

◆ onButtonWatchItClicked

void RecorderExport::onButtonWatchItClicked ( )
privateslot

◆ onCheckExtendResultToggled

void RecorderExport::onCheckExtendResultToggled ( bool checked)
privateslot

Definition at line 658 of file recorder_export.cpp.

659{
660 settings->extendResult = checked;
662 d->updateVideoDuration();
663}

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

◆ onCheckResizeToggled

void RecorderExport::onCheckResizeToggled ( bool checked)
privateslot

Definition at line 672 of file recorder_export.cpp.

673{
674 settings->resize = checked;
675 RecorderExportConfig(false).setResize(checked);
676 d->updateWarningVisibility();
677}

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

◆ onCheckResultPreviewToggled

void RecorderExport::onCheckResultPreviewToggled ( bool checked)
privateslot

Definition at line 644 of file recorder_export.cpp.

645{
646 settings->resultPreview = checked;
648 d->updateVideoDuration();
649}

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

◆ onCleanUpFinished

void RecorderExport::onCleanUpFinished ( )
privateslot

Definition at line 913 of file recorder_export.cpp.

914{
915 d->cleaner->deleteLater();
916 d->cleaner = nullptr;
917
918 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageDone);
919 d->ui->buttonRestart->hide();
920 d->ui->buttonRemoveSnapshots->hide();
921}

References d.

◆ onComboProfileIndexChanged

void RecorderExport::onComboProfileIndexChanged ( int index)
privateslot

Definition at line 743 of file recorder_export.cpp.

744{
745#ifdef Q_OS_ANDROID
746 QString format = d->ui->comboProfile->itemData(index).toString();
747 d->settings->selectedFormat = format;
748 RecorderExportConfig(false).setSelectedFormat(format);
749#else
750 settings->profileIndex = index;
751 d->updateVideoFilePath();
753#endif
754}

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

◆ onEditVideoPathChanged

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

Definition at line 786 of file recorder_export.cpp.

787{
788 QFileInfo fileInfo(videoFilePath);
789 if (!fileInfo.isRelative())
790 settings->videoDirectory = fileInfo.absolutePath();
791 settings->videoFileName = fileInfo.completeBaseName();
792}

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

◆ onExporterFinished

void RecorderExport::onExporterFinished ( )
privateslot

Definition at line 857 of file recorder_export.cpp.

858{
859 quint64 elapsed = d->elapsedTimer.elapsed();
860 d->ui->labelRenderTime->setText(d->formatDuration(elapsed));
861 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageDone);
862 d->ui->labelVideoPathDone->setText(settings->videoFilePath);
863 d->cleanupExporter();
864}

References d, settings, and RecorderExportSettings::videoFilePath.

◆ onExporterFinishedWithError

void RecorderExport::onExporterFinishedWithError ( QString error)
privateslot

Definition at line 866 of file recorder_export.cpp.

867{
868 d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageSettings);
869 QMessageBox::critical(this, windowTitle(), i18n("Export failed. Error message:") % "\n\n" % error);
870 d->cleanupExporter();
871}

References d.

◆ onExporterProgressUpdated

void RecorderExport::onExporterProgressUpdated ( int frameNo)
privateslot

Definition at line 873 of file recorder_export.cpp.

874{
875 d->ui->progressExport->setValue(frameNo * 100 / (settings->framesCount * settings->fps / static_cast<float>(settings->inputFps)));
876}

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

◆ onExporterStarted

void RecorderExport::onExporterStarted ( )
privateslot

Definition at line 851 of file recorder_export.cpp.

852{
853 d->ui->buttonCancelExport->setEnabled(true);
854 d->ui->labelStatus->setText(i18n("The timelapse video is being encoded..."));
855}

References d.

◆ onFirstFrameSecValueChanged

void RecorderExport::onFirstFrameSecValueChanged ( int value)
privateslot

Definition at line 651 of file recorder_export.cpp.

652{
655 d->updateVideoDuration();
656}
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 634 of file recorder_export.cpp.

635{
636 settings->fps = value;
637 RecorderExportConfig config(false);
638 config.setFps(value);
639 d->updateFps(config, false);
640 d->updateVideoDuration();
641 d->updateWarningVisibility();
642}

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

◆ onSpinInputFpsValueChanged

void RecorderExport::onSpinInputFpsValueChanged ( int value)
privateslot

Definition at line 625 of file recorder_export.cpp.

626{
628 RecorderExportConfig config(false);
629 config.setInputFps(value);
630 d->updateFps(config, true);
631 d->updateVideoDuration();
632}

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

◆ onSpinScaleHeightValueChanged

void RecorderExport::onSpinScaleHeightValueChanged ( int value)
privateslot

Definition at line 688 of file recorder_export.cpp.

689{
690 settings->size.setHeight(value);
691 if (settings->lockRatio)
692 d->updateRatio(false);
694 d->updateWarningVisibility();
695}
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 679 of file recorder_export.cpp.

680{
681 settings->size.setWidth(value);
682 if (settings->lockRatio)
683 d->updateRatio(true);
685 d->updateWarningVisibility();
686}

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

◆ reject

void RecorderExport::reject ( )
overrideprivateslot

Definition at line 609 of file recorder_export.cpp.

610{
611 if (d->tryAbortExport())
612 QDialog::reject();
613}

References d.

◆ setup()

void RecorderExport::setup ( )

Definition at line 544 of file recorder_export.cpp.

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

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: