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

#include <recorderdocker_dock.h>

+ Inheritance diagram for RecorderDockerDock:

Classes

class  Private
 

Public Member Functions

QString observerName () override
 
 RecorderDockerDock ()
 
void setCanvas (KoCanvasBase *canvas) override
 
void unsetCanvas () override
 
 ~RecorderDockerDock ()
 
- Public Member Functions inherited from KoCanvasObserverBase
 KoCanvasObserverBase ()
 
KoCanvasBaseobservedCanvas () const
 
void setObservedCanvas (KoCanvasBase *canvas)
 
void unsetObservedCanvas ()
 
virtual ~KoCanvasObserverBase ()
 

Private Slots

void onActiveRecording (bool valueWasIncreased)
 
void onAutoRecordToggled (bool checked)
 
void onCaptureIntervalChanged (double interval)
 
void onExportButtonClicked ()
 
void onFormatChanged (int format)
 
void onLowPerformanceWarning ()
 
void onMainWindowIsBeingCreated (KisMainWindow *window)
 
void onManageRecordingsButtonClicked ()
 
void onPausedTimeout ()
 
void onQualityChanged (int value)
 
void onRealTimeCaptureModeToggled (bool checked)
 
bool onRecordButtonToggled (bool checked)
 
void onRecorderStopWarning ()
 
void onRecordIsolateLayerModeToggled (bool checked)
 
void onResolutionChanged (int resolution)
 
void onThreadsChanged (int threads)
 
void onUpdateRecIndicator ()
 
void onVideoFPSChanged (double interval)
 
void onWarningTimeout ()
 
void onWriterFrameWriteFailed ()
 
void onWriterStarted ()
 
void onWriterStopped ()
 
void slotScrollerStateChanged (QScroller::State state)
 
void slotSelectSnapshotDirectory ()
 

Private Attributes

Private *const d
 
RecorderExportSettings *const exportSettings
 

Additional Inherited Members

Detailed Description

Definition at line 23 of file recorderdocker_dock.h.

Constructor & Destructor Documentation

◆ RecorderDockerDock()

RecorderDockerDock::RecorderDockerDock ( )

Definition at line 409 of file recorderdocker_dock.cpp.

410 : QDockWidget(i18nc("Title of the docker", "Recorder"))
412 , d(new Private(*exportSettings, this))
413{
414 QWidget* page = new QWidget(this);
415 d->ui->setupUi(page);
416
417 d->ui->buttonManageRecordings->setIcon(KisIconUtils::loadIcon("configure-thicker"));
418 d->ui->buttonBrowse->setIcon(KisIconUtils::loadIcon("folder"));
419 d->ui->buttonRecordToggle->setIcon(KisIconUtils::loadIcon("media-record"));
420 d->ui->buttonExport->setIcon(KisIconUtils::loadIcon("document-export-16"));
421 d->ui->sliderThreads->setTickPosition(QSlider::TickPosition::TicksBelow);
422 d->ui->sliderThreads->setMinimum(1);
423 d->ui->sliderThreads->setMaximum(ThreadSystemValue::MaxThreadCount);
424 d->ui->spinThreads->setMinimum(1);
425 d->ui->spinThreads->setMaximum(ThreadSystemValue::MaxThreadCount);
426 d->threadsSpinPalette = d->ui->spinThreads->palette();
427 d->threadsSliderPalette = d->ui->sliderThreads->palette();
428
429 d->loadSettings();
431 d->updateThreadUi();
432
433 d->ui->editDirectory->setText(d->snapshotDirectory);
434 d->ui->spinQuality->setValue(d->quality);
435 d->ui->spinThreads->setValue(d->writer.recorderThreads.get());
436 d->ui->comboResolution->setCurrentIndex(d->resolution);
437 d->ui->checkBoxRealTimeCaptureMode->setChecked(d->realTimeCaptureMode);
438 d->ui->checkBoxRecordIsolateMode->setChecked(d->recordIsolateLayerMode);
439 d->ui->checkBoxAutoRecord->setChecked(d->recordAutomatically);
440
442 d->recordToggleAction = actionRegistry->makeQAction(keyActionRecordToggle, this);
443 d->exportAction = actionRegistry->makeQAction(keyActionExport, this);
444
445 connect(d->recordToggleAction, SIGNAL(toggled(bool)), d->ui->buttonRecordToggle, SLOT(setChecked(bool)));
446 connect(d->exportAction, SIGNAL(triggered()), d->ui->buttonExport, SIGNAL(clicked()));
447 connect(d->ui->buttonRecordToggle, SIGNAL(toggled(bool)), d->ui->buttonExport, SLOT(setDisabled(bool)));
449 d->ui->buttonExport->setDisabled(true);
450
451 // Need to register toolbar actions before attaching canvas else it wont appear after restart.
452 // Is there any better way to do this?
453 connect(KisPart::instance(), SIGNAL(sigMainWindowIsBeingCreated(KisMainWindow *)),
455
456 connect(d->ui->buttonManageRecordings, SIGNAL(clicked()), this, SLOT(onManageRecordingsButtonClicked()));
457 connect(d->ui->buttonBrowse, SIGNAL(clicked()), this, SLOT(slotSelectSnapshotDirectory()));
458 connect(d->ui->comboFormat, SIGNAL(currentIndexChanged(int)), this, SLOT(onFormatChanged(int)));
459 connect(d->ui->spinQuality, SIGNAL(valueChanged(int)), this, SLOT(onQualityChanged(int)));
460 connect(d->ui->spinThreads, SIGNAL(valueChanged(int)), this, SLOT(onThreadsChanged(int)));
461 connect(d->ui->comboResolution, SIGNAL(currentIndexChanged(int)), this, SLOT(onResolutionChanged(int)));
462 connect(d->ui->checkBoxRealTimeCaptureMode, SIGNAL(toggled(bool)), this, SLOT(onRealTimeCaptureModeToggled(bool)));
463 connect(d->ui->checkBoxRecordIsolateMode, SIGNAL(toggled(bool)), this, SLOT(onRecordIsolateLayerModeToggled(bool)));
464 connect(d->ui->checkBoxAutoRecord, SIGNAL(toggled(bool)), this, SLOT(onAutoRecordToggled(bool)));
465 connect(d->ui->buttonRecordToggle, SIGNAL(toggled(bool)), this, SLOT(onRecordButtonToggled(bool)));
466 connect(d->ui->buttonExport, SIGNAL(clicked()), this, SLOT(onExportButtonClicked()));
467
468 connect(&d->writer.recorderThreads, SIGNAL(notifyInUseChange(bool)), this, SLOT(onActiveRecording(bool)));
469 connect(&d->writer.recorderThreads, SIGNAL(notifyInUseChange(bool)), this, SLOT(onUpdateRecIndicator()));
470 connect(&d->writer, SIGNAL(started()), this, SLOT(onWriterStarted()));
471 connect(&d->writer, SIGNAL(stopped()), this, SLOT(onWriterStopped()));
472 connect(&d->writer, SIGNAL(frameWriteFailed()), this, SLOT(onWriterFrameWriteFailed()));
473 connect(&d->writer, SIGNAL(recorderStopWarning()), this, SLOT(onRecorderStopWarning()));
474 connect(&d->writer, SIGNAL(lowPerformanceWarning()), this, SLOT(onLowPerformanceWarning()));
475
476
477 QScroller *scroller = KisKineticScroller::createPreconfiguredScroller(d->ui->scrollArea);
478 if (scroller) {
479 connect(scroller, SIGNAL(stateChanged(QScroller::State)),
480 this, SLOT(slotScrollerStateChanged(QScroller::State)));
481 }
482
483 // The system is not efficient enough for the RealTime Recording Feature
485 {
486 d->ui->checkBoxRealTimeCaptureMode->setCheckState(Qt::Unchecked);
487 d->ui->checkBoxRealTimeCaptureMode->setDisabled(true);
488 d->ui->checkBoxRealTimeCaptureMode->setToolTip(
489 i18n("Your system is not efficient enough for this feature"));
490 }
491
492 setWidget(page);
493}
QAction * makeQAction(const QString &name, QObject *parent=0)
static KisActionRegistry * instance()
Main window for Krita.
static KisPart * instance()
Definition KisPart.cpp:130
QScopedPointer< Ui::RecorderDocker > ui
void slotScrollerStateChanged(QScroller::State state)
RecorderExportSettings *const exportSettings
void onThreadsChanged(int threads)
void onQualityChanged(int value)
void onRecordIsolateLayerModeToggled(bool checked)
void onRealTimeCaptureModeToggled(bool checked)
void onResolutionChanged(int resolution)
bool onRecordButtonToggled(bool checked)
void onAutoRecordToggled(bool checked)
void onActiveRecording(bool valueWasIncreased)
void onMainWindowIsBeingCreated(KisMainWindow *window)
void onFormatChanged(int format)
ThreadCounter recorderThreads
unsigned int get() const
QIcon loadIcon(const QString &name)
KRITAWIDGETUTILS_EXPORT QScroller * createPreconfiguredScroller(QAbstractScrollArea *target)
const unsigned int MaxThreadCount
const unsigned int MaxRecordThreadCount

References KisKineticScroller::createPreconfiguredScroller(), d, RecorderDockerDock::Private::exportAction, ThreadCounter::get(), KisPart::instance(), KisActionRegistry::instance(), KisIconUtils::loadIcon(), RecorderDockerDock::Private::loadRelevantExportSettings(), RecorderDockerDock::Private::loadSettings(), KisActionRegistry::makeQAction(), ThreadSystemValue::MaxRecordThreadCount, ThreadSystemValue::MaxThreadCount, onActiveRecording(), onAutoRecordToggled(), onExportButtonClicked(), onFormatChanged(), onLowPerformanceWarning(), onMainWindowIsBeingCreated(), onManageRecordingsButtonClicked(), onQualityChanged(), onRealTimeCaptureModeToggled(), onRecordButtonToggled(), onRecorderStopWarning(), onRecordIsolateLayerModeToggled(), onResolutionChanged(), onThreadsChanged(), onUpdateRecIndicator(), onWriterFrameWriteFailed(), onWriterStarted(), onWriterStopped(), RecorderDockerDock::Private::quality, RecorderDockerDock::Private::realTimeCaptureMode, RecorderDockerDock::Private::recordAutomatically, RecorderWriterManager::recorderThreads, RecorderDockerDock::Private::recordIsolateLayerMode, RecorderDockerDock::Private::recordToggleAction, RecorderDockerDock::Private::resolution, slotScrollerStateChanged(), slotSelectSnapshotDirectory(), RecorderDockerDock::Private::snapshotDirectory, RecorderDockerDock::Private::threadsSliderPalette, RecorderDockerDock::Private::threadsSpinPalette, RecorderDockerDock::Private::ui, RecorderDockerDock::Private::updateThreadUi(), and RecorderDockerDock::Private::writer.

◆ ~RecorderDockerDock()

RecorderDockerDock::~RecorderDockerDock ( )

Definition at line 495 of file recorderdocker_dock.cpp.

496{
497 delete d;
498 delete exportSettings;
499}

References d, and exportSettings.

Member Function Documentation

◆ observerName()

QString RecorderDockerDock::observerName ( )
inlineoverridevirtual

Reimplemented from KoCanvasObserverBase.

Definition at line 29 of file recorderdocker_dock.h.

30 {
31 return "RecorderDockerDock";
32 }

◆ onActiveRecording

void RecorderDockerDock::onActiveRecording ( bool valueWasIncreased)
privateslot

Definition at line 751 of file recorderdocker_dock.cpp.

752{
753 if (!valueWasIncreased)
754 return;
755
756 d->paused = false;
757 d->pausedTimer.start();
758}

References d, RecorderDockerDock::Private::paused, and RecorderDockerDock::Private::pausedTimer.

◆ onAutoRecordToggled

void RecorderDockerDock::onAutoRecordToggled ( bool checked)
privateslot

◆ onCaptureIntervalChanged

void RecorderDockerDock::onCaptureIntervalChanged ( double interval)
privateslot

◆ onExportButtonClicked

void RecorderDockerDock::onExportButtonClicked ( )
privateslot

Definition at line 616 of file recorderdocker_dock.cpp.

617{
618 if (!d->canvas)
619 return;
620
621 KisDocument *document = d->canvas->imageView()->document();
622
623#ifndef Q_OS_ANDROID
624 exportSettings->videoFileName = QFileInfo(document->caption().trimmed()).completeBaseName();
625#endif
629
630 RecorderExport exportDialog(exportSettings, this);
631 exportDialog.setup();
632 exportDialog.exec();
633
635 d->ui->spinRate->setValue(exportSettings->fps);
636}

References RecorderDockerDock::Private::canvas, d, exportSettings, RecorderExportSettings::format, RecorderDockerDock::Private::format, RecorderExportSettings::fps, RecorderExportSettings::inputDirectory, RecorderDockerDock::Private::outputDirectory, RecorderExportSettings::realTimeCaptureMode, RecorderDockerDock::Private::realTimeCaptureMode, RecorderExport::setup(), RecorderDockerDock::Private::ui, and RecorderExportSettings::videoFileName.

◆ onFormatChanged

void RecorderDockerDock::onFormatChanged ( int format)
privateslot

◆ onLowPerformanceWarning

void RecorderDockerDock::onLowPerformanceWarning ( )
privateslot

Definition at line 777 of file recorderdocker_dock.cpp.

778{
779 if (d->realTimeCaptureMode) {
780 d->showWarning(i18n("Low performance warning. The recorder is not able to write all the frames in time during Real Time Capture mode.\nTry to reduce the frame rate for the ffmpeg export or reduce the scaling filtering in the canvas acceleration settings."));
781 } else {
782 d->showWarning(i18n("Low performance warning. The recorder is not able to write all the frames in time.\nTry to increase the capture interval or reduce the scaling filtering in the canvas acceleration settings."));
783 }
784}
void showWarning(const QString &hint)

References d, RecorderDockerDock::Private::realTimeCaptureMode, and RecorderDockerDock::Private::showWarning().

◆ onMainWindowIsBeingCreated

void RecorderDockerDock::onMainWindowIsBeingCreated ( KisMainWindow * window)
privateslot

Definition at line 545 of file recorderdocker_dock.cpp.

546{
547 KisKActionCollection *actionCollection = window->viewManager()->actionCollection();
548 actionCollection->addAction(keyActionRecordToggle, d->recordToggleAction);
549 actionCollection->addAction(keyActionExport, d->exportAction);
550}
A container for a set of QAction objects.
Q_INVOKABLE QAction * addAction(const QString &name, QAction *action)
KisViewManager * viewManager
virtual KisKActionCollection * actionCollection() const

References KisViewManager::actionCollection(), KisKActionCollection::addAction(), d, RecorderDockerDock::Private::exportAction, RecorderDockerDock::Private::recordToggleAction, and KisMainWindow::viewManager.

◆ onManageRecordingsButtonClicked

void RecorderDockerDock::onManageRecordingsButtonClicked ( )
privateslot

Definition at line 638 of file recorderdocker_dock.cpp.

639{
640 RecorderSnapshotsManager snapshotsManager(this);
641 snapshotsManager.execFor(d->snapshotDirectory);
642}

References d, RecorderSnapshotsManager::execFor(), and RecorderDockerDock::Private::snapshotDirectory.

◆ onPausedTimeout

void RecorderDockerDock::onPausedTimeout ( )
privateslot

◆ onQualityChanged

void RecorderDockerDock::onQualityChanged ( int value)
privateslot

◆ onRealTimeCaptureModeToggled

◆ onRecordButtonToggled

bool RecorderDockerDock::onRecordButtonToggled ( bool checked)
privateslot

Definition at line 552 of file recorderdocker_dock.cpp.

553{
554 QSignalBlocker blocker(d->ui->buttonRecordToggle);
555
556 // Ask the user to pick a directory if we don't have one. This should only
557 // happen on Android, other operating systems have a non-empty default that
558 // the user is not able to clear out via the user interface.
559 if (checked && d->snapshotDirectory.isEmpty()) {
561 if (d->snapshotDirectory.isEmpty()) {
562 d->ui->buttonRecordToggle->setChecked(false);
563 d->recordToggleAction->setChecked(false);
564 return false;
565 }
566 }
567
568 d->recordToggleAction->setChecked(checked);
569
570 if (!d->canvas)
571 return false;
572
573 const QString &id = d->canvas->imageView()->document()->linkedResourcesStorageId();
574
575 bool wasEmpty = !d->enabledIds.values().contains(true);
576
577 d->enabledIds[id] = checked;
578
579 bool isEmpty = !d->enabledIds.values().contains(true);
580
581 d->writer.setEnabled(checked);
582
583 if (isEmpty == wasEmpty) {
584 d->updateRecordStatus(checked);
585 return false;
586 }
587
588
589 d->ui->buttonRecordToggle->setEnabled(false);
590
591 if (checked) {
593 d->updateUiFormat();
594 d->writer.start();
595
596 // Calculate Rec symbol activity timeout depending on the capture interval
597 // The pausedTimer interval is set to a slightly greater value than the capture interval
598 // to avoid flickering for ongoing painting. This is also the reason for the min and max
599 // values 305 and 2005 (instead of 300 and 2000, respectively).
600 if (d->realTimeCaptureMode) {
601 d->pausedTimer.setInterval(qBound(305, static_cast<int>(1000.0/static_cast<double>(exportSettings->fps)) + 5,2005));
602 } else {
603 d->pausedTimer.setInterval(qBound(305, static_cast<int>(qMax(d->captureInterval, .1) * 1000.0) + 5, 2005));
604 }
605 } else {
606 d->writer.stop();
607 d->warningTimer.stop();
608 d->pausedTimer.stop();
609 d->statusBarWarningLabel->hide();
610 d->paused = true;
611 }
612
613 return true;
614}
void updateRecordStatus(bool isRecording)
void start(bool toggleEnabled=true)
bool stop(bool toggleEnabled=true)
void setEnabled(bool enabled)

References RecorderDockerDock::Private::canvas, RecorderDockerDock::Private::captureInterval, d, RecorderDockerDock::Private::enabledIds, exportSettings, RecorderExportSettings::fps, RecorderDockerDock::Private::paused, RecorderDockerDock::Private::pausedTimer, RecorderDockerDock::Private::realTimeCaptureMode, RecorderDockerDock::Private::recordToggleAction, RecorderWriterManager::setEnabled(), slotSelectSnapshotDirectory(), RecorderDockerDock::Private::snapshotDirectory, RecorderWriterManager::start(), RecorderDockerDock::Private::statusBarWarningLabel, RecorderWriterManager::stop(), RecorderDockerDock::Private::ui, RecorderDockerDock::Private::updateRecordStatus(), RecorderDockerDock::Private::updateUiFormat(), RecorderDockerDock::Private::updateWriterSettings(), RecorderDockerDock::Private::warningTimer, and RecorderDockerDock::Private::writer.

◆ onRecorderStopWarning

void RecorderDockerDock::onRecorderStopWarning ( )
privateslot

Definition at line 772 of file recorderdocker_dock.cpp.

773{
774 QMessageBox::warning(this, i18nc("@title:window", "Recorder"),
775 i18n("Krita was unable to stop the recorder probably. Please try to restart Krita."));
776}

◆ onRecordIsolateLayerModeToggled

void RecorderDockerDock::onRecordIsolateLayerModeToggled ( bool checked)
privateslot

◆ onResolutionChanged

void RecorderDockerDock::onResolutionChanged ( int resolution)
privateslot

Definition at line 721 of file recorderdocker_dock.cpp.

722{
723 d->resolution = resolution;
724 RecorderConfig(false).setResolution(resolution);
725 d->loadSettings();
726}
void setResolution(int value)

References d, RecorderDockerDock::Private::loadSettings(), RecorderDockerDock::Private::resolution, and RecorderConfig::setResolution().

◆ onThreadsChanged

◆ onUpdateRecIndicator

void RecorderDockerDock::onUpdateRecIndicator ( )
privateslot

Definition at line 746 of file recorderdocker_dock.cpp.

747{
749}

References d, and RecorderDockerDock::Private::updateRecIndicator().

◆ onVideoFPSChanged

void RecorderDockerDock::onVideoFPSChanged ( double interval)
privateslot

◆ onWarningTimeout

void RecorderDockerDock::onWarningTimeout ( )
privateslot

Definition at line 786 of file recorderdocker_dock.cpp.

787{
788 d->statusBarWarningLabel->hide();
789}

References d, and RecorderDockerDock::Private::statusBarWarningLabel.

◆ onWriterFrameWriteFailed

void RecorderDockerDock::onWriterFrameWriteFailed ( )
privateslot

Definition at line 766 of file recorderdocker_dock.cpp.

767{
768 QMessageBox::warning(this, i18nc("@title:window", "Recorder"),
769 i18n("The recorder has been stopped due to failure while writing a frame. Please check free disk space and start the recorder again."));
770}

◆ onWriterStarted

void RecorderDockerDock::onWriterStarted ( )
privateslot

Definition at line 736 of file recorderdocker_dock.cpp.

737{
738 d->updateRecordStatus(true);
739}

References d, and RecorderDockerDock::Private::updateRecordStatus().

◆ onWriterStopped

void RecorderDockerDock::onWriterStopped ( )
privateslot

Definition at line 741 of file recorderdocker_dock.cpp.

742{
743 d->updateRecordStatus(false);
744}

References d, and RecorderDockerDock::Private::updateRecordStatus().

◆ setCanvas()

void RecorderDockerDock::setCanvas ( KoCanvasBase * canvas)
overridevirtual

re-implement this method in your canvas observer. It will be called whenever a canvas becomes active. Note that you are responsible for not connecting more than one time to the signals of a canvas or any of the QObjects you can access through the canvas.

Implements KoCanvasObserverBase.

Definition at line 501 of file recorderdocker_dock.cpp.

502{
503 setEnabled(canvas != nullptr);
504
505 if (d->canvas == canvas)
506 return;
507
508 d->canvas = dynamic_cast<KisCanvas2*>(canvas);
510
511 if (!d->canvas)
512 return;
513
514 KisDocument *document = d->canvas->imageView()->document();
515 d->updateComboResolution(document->image()->width(), document->image()->height());
516
517 d->prefix = d->getPrefix();
518 bool wasToggled = false;
519 if (d->recordAutomatically && !d->snapshotDirectory.isEmpty()
520 && !d->enabledIds.contains(document->linkedResourcesStorageId()) && d->canRecord()) {
521 wasToggled = onRecordButtonToggled(true);
522 }
523 if (!wasToggled) { // onRecordButtonToggled(true) may call these, don't call them twice.
525 d->updateUiFormat();
526 }
528
529 bool enabled = d->enabledIds.value(document->linkedResourcesStorageId(), false);
530 d->writer.setEnabled(enabled);
531 d->updateRecordStatus(enabled);
532}
void updateComboResolution(quint32 width, quint32 height)
void setCanvas(QPointer< KisCanvas2 > canvas)

References RecorderDockerDock::Private::canRecord(), RecorderDockerDock::Private::canvas, d, RecorderDockerDock::Private::enabledIds, RecorderDockerDock::Private::getPrefix(), onRecordButtonToggled(), RecorderDockerDock::Private::prefix, RecorderDockerDock::Private::recordAutomatically, RecorderWriterManager::setCanvas(), RecorderWriterManager::setEnabled(), RecorderDockerDock::Private::snapshotDirectory, RecorderDockerDock::Private::updateComboResolution(), RecorderDockerDock::Private::updateRecordStatus(), RecorderDockerDock::Private::updateUiFormat(), RecorderDockerDock::Private::updateUiForRealTimeMode(), RecorderDockerDock::Private::updateWriterSettings(), and RecorderDockerDock::Private::writer.

◆ slotScrollerStateChanged

void RecorderDockerDock::slotScrollerStateChanged ( QScroller::State state)
privateslot

Definition at line 791 of file recorderdocker_dock.cpp.

792{
794}
KRITAWIDGETUTILS_EXPORT void updateCursor(QWidget *source, QScroller::State state)

References KisKineticScroller::updateCursor().

◆ slotSelectSnapshotDirectory

void RecorderDockerDock::slotSelectSnapshotDirectory ( )
privateslot

Definition at line 644 of file recorderdocker_dock.cpp.

645{
646 KoFileDialog dialog(this, KoFileDialog::OpenDirectory, "SelectRecordingsDirectory");
647 dialog.setCaption(i18n("Select a Directory for Recordings"));
648 dialog.setDefaultDir(d->ui->editDirectory->text());
649 QString directory = dialog.filename();
650 if (!directory.isEmpty()) {
651 d->ui->editDirectory->setText(directory);
652 RecorderConfig(false).setSnapshotDirectory(directory);
653 d->loadSettings();
654 }
655}
void setSnapshotDirectory(const QString &value)

References d, RecorderDockerDock::Private::loadSettings(), KoFileDialog::OpenDirectory, RecorderConfig::setSnapshotDirectory(), and RecorderDockerDock::Private::ui.

◆ unsetCanvas()

void RecorderDockerDock::unsetCanvas ( )
overridevirtual

Re-implement to notify the observer that its canvas is no longer among the living. The daisies, it is pushing up. This means you don't have to disconnect, it's dead.

The old canvas should be deleted already, so if you stored a pointer to it, don't touch!

Note that currently there is a bug where in certain specific circumstances unsetCanvas can be called when it shouldn't, see for example KWStatisticsDocker for a workaround for this problem.

Implements KoCanvasObserverBase.

Definition at line 534 of file recorderdocker_dock.cpp.

535{
536 d->updateRecordStatus(false);
537 d->recordToggleAction->setChecked(false);
538 setEnabled(false);
539 d->writer.stop();
540 d->writer.setCanvas(nullptr);
541 d->canvas = nullptr;
542 d->enabledIds.clear();
543}

References RecorderDockerDock::Private::canvas, d, RecorderDockerDock::Private::enabledIds, RecorderDockerDock::Private::recordToggleAction, RecorderWriterManager::setCanvas(), RecorderWriterManager::stop(), RecorderDockerDock::Private::updateRecordStatus(), and RecorderDockerDock::Private::writer.

Member Data Documentation

◆ d

Private* const RecorderDockerDock::d
private

Definition at line 74 of file recorderdocker_dock.h.

◆ exportSettings

RecorderExportSettings* const RecorderDockerDock::exportSettings
private

Definition at line 73 of file recorderdocker_dock.h.


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