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 391 of file recorderdocker_dock.cpp.

392 : QDockWidget(i18nc("Title of the docker", "Recorder"))
394 , d(new Private(*exportSettings, this))
395{
396 QWidget* page = new QWidget(this);
397 d->ui->setupUi(page);
398
399 d->ui->buttonManageRecordings->setIcon(KisIconUtils::loadIcon("configure-thicker"));
400 d->ui->buttonBrowse->setIcon(KisIconUtils::loadIcon("folder"));
401 d->ui->buttonRecordToggle->setIcon(KisIconUtils::loadIcon("media-record"));
402 d->ui->buttonExport->setIcon(KisIconUtils::loadIcon("document-export-16"));
403 d->ui->sliderThreads->setTickPosition(QSlider::TickPosition::TicksBelow);
404 d->ui->sliderThreads->setMinimum(1);
405 d->ui->sliderThreads->setMaximum(ThreadSystemValue::MaxThreadCount);
406 d->ui->spinThreads->setMinimum(1);
407 d->ui->spinThreads->setMaximum(ThreadSystemValue::MaxThreadCount);
408 d->threadsSpinPalette = d->ui->spinThreads->palette();
409 d->threadsSliderPalette = d->ui->sliderThreads->palette();
410
411 d->loadSettings();
413 d->updateThreadUi();
414
415 d->ui->editDirectory->setText(d->snapshotDirectory);
416 d->ui->spinQuality->setValue(d->quality);
417 d->ui->spinThreads->setValue(d->writer.recorderThreads.get());
418 d->ui->comboResolution->setCurrentIndex(d->resolution);
419 d->ui->checkBoxRealTimeCaptureMode->setChecked(d->realTimeCaptureMode);
420 d->ui->checkBoxRecordIsolateMode->setChecked(d->recordIsolateLayerMode);
421 d->ui->checkBoxAutoRecord->setChecked(d->recordAutomatically);
422
424 d->recordToggleAction = actionRegistry->makeQAction(keyActionRecordToggle, this);
425 d->exportAction = actionRegistry->makeQAction(keyActionExport, this);
426
427 connect(d->recordToggleAction, SIGNAL(toggled(bool)), d->ui->buttonRecordToggle, SLOT(setChecked(bool)));
428 connect(d->exportAction, SIGNAL(triggered()), d->ui->buttonExport, SIGNAL(clicked()));
429 connect(d->ui->buttonRecordToggle, SIGNAL(toggled(bool)), d->ui->buttonExport, SLOT(setDisabled(bool)));
431 d->ui->buttonExport->setDisabled(true);
432
433 // Need to register toolbar actions before attaching canvas else it wont appear after restart.
434 // Is there any better way to do this?
435 connect(KisPart::instance(), SIGNAL(sigMainWindowIsBeingCreated(KisMainWindow *)),
437
438 connect(d->ui->buttonManageRecordings, SIGNAL(clicked()), this, SLOT(onManageRecordingsButtonClicked()));
439 connect(d->ui->buttonBrowse, SIGNAL(clicked()), this, SLOT(slotSelectSnapshotDirectory()));
440 connect(d->ui->comboFormat, SIGNAL(currentIndexChanged(int)), this, SLOT(onFormatChanged(int)));
441 connect(d->ui->spinQuality, SIGNAL(valueChanged(int)), this, SLOT(onQualityChanged(int)));
442 connect(d->ui->spinThreads, SIGNAL(valueChanged(int)), this, SLOT(onThreadsChanged(int)));
443 connect(d->ui->comboResolution, SIGNAL(currentIndexChanged(int)), this, SLOT(onResolutionChanged(int)));
444 connect(d->ui->checkBoxRealTimeCaptureMode, SIGNAL(toggled(bool)), this, SLOT(onRealTimeCaptureModeToggled(bool)));
445 connect(d->ui->checkBoxRecordIsolateMode, SIGNAL(toggled(bool)), this, SLOT(onRecordIsolateLayerModeToggled(bool)));
446 connect(d->ui->checkBoxAutoRecord, SIGNAL(toggled(bool)), this, SLOT(onAutoRecordToggled(bool)));
447 connect(d->ui->buttonRecordToggle, SIGNAL(toggled(bool)), this, SLOT(onRecordButtonToggled(bool)));
448 connect(d->ui->buttonExport, SIGNAL(clicked()), this, SLOT(onExportButtonClicked()));
449
450 connect(&d->writer.recorderThreads, SIGNAL(notifyInUseChange(bool)), this, SLOT(onActiveRecording(bool)));
451 connect(&d->writer.recorderThreads, SIGNAL(notifyInUseChange(bool)), this, SLOT(onUpdateRecIndicator()));
452 connect(&d->writer, SIGNAL(started()), this, SLOT(onWriterStarted()));
453 connect(&d->writer, SIGNAL(stopped()), this, SLOT(onWriterStopped()));
454 connect(&d->writer, SIGNAL(frameWriteFailed()), this, SLOT(onWriterFrameWriteFailed()));
455 connect(&d->writer, SIGNAL(recorderStopWarning()), this, SLOT(onRecorderStopWarning()));
456 connect(&d->writer, SIGNAL(lowPerformanceWarning()), this, SLOT(onLowPerformanceWarning()));
457
458
459 QScroller *scroller = KisKineticScroller::createPreconfiguredScroller(d->ui->scrollArea);
460 if (scroller) {
461 connect(scroller, SIGNAL(stateChanged(QScroller::State)),
462 this, SLOT(slotScrollerStateChanged(QScroller::State)));
463 }
464
465 // The system is not efficient enough for the RealTime Recording Feature
467 {
468 d->ui->checkBoxRealTimeCaptureMode->setCheckState(Qt::Unchecked);
469 d->ui->checkBoxRealTimeCaptureMode->setDisabled(true);
470 d->ui->checkBoxRealTimeCaptureMode->setToolTip(
471 i18n("Your system is not efficient enough for this feature"));
472 }
473
474 setWidget(page);
475}
QAction * makeQAction(const QString &name, QObject *parent=0)
static KisActionRegistry * instance()
Main window for Krita.
static KisPart * instance()
Definition KisPart.cpp:131
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 477 of file recorderdocker_dock.cpp.

478{
479 delete d;
480 delete exportSettings;
481}

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 731 of file recorderdocker_dock.cpp.

732{
733 if (!valueWasIncreased)
734 return;
735
736 d->paused = false;
737 d->pausedTimer.start();
738}

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 598 of file recorderdocker_dock.cpp.

599{
600 if (!d->canvas)
601 return;
602
603 KisDocument *document = d->canvas->imageView()->document();
604
605 exportSettings->videoFileName = QFileInfo(document->caption().trimmed()).completeBaseName();
609
610 RecorderExport exportDialog(exportSettings, this);
611 exportDialog.setup();
612 exportDialog.exec();
613
615 d->ui->spinRate->setValue(exportSettings->fps);
616}

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 757 of file recorderdocker_dock.cpp.

758{
759 if (d->realTimeCaptureMode) {
760 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."));
761 } else {
762 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."));
763 }
764}
void showWarning(const QString &hint)

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

◆ onMainWindowIsBeingCreated

void RecorderDockerDock::onMainWindowIsBeingCreated ( KisMainWindow * window)
privateslot

Definition at line 527 of file recorderdocker_dock.cpp.

528{
529 KisKActionCollection *actionCollection = window->viewManager()->actionCollection();
530 actionCollection->addAction(keyActionRecordToggle, d->recordToggleAction);
531 actionCollection->addAction(keyActionExport, d->exportAction);
532}
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 618 of file recorderdocker_dock.cpp.

619{
620 RecorderSnapshotsManager snapshotsManager(this);
621 snapshotsManager.execFor(d->snapshotDirectory);
622}

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 534 of file recorderdocker_dock.cpp.

535{
536 QSignalBlocker blocker(d->ui->buttonRecordToggle);
537
538 // Ask the user to pick a directory if we don't have one. This should only
539 // happen on Android, other operating systems have a non-empty default that
540 // the user is not able to clear out via the user interface.
541 if (checked && d->snapshotDirectory.isEmpty()) {
543 if (d->snapshotDirectory.isEmpty()) {
544 d->ui->buttonRecordToggle->setChecked(false);
545 d->recordToggleAction->setChecked(false);
546 return false;
547 }
548 }
549
550 d->recordToggleAction->setChecked(checked);
551
552 if (!d->canvas)
553 return false;
554
555 const QString &id = d->canvas->imageView()->document()->linkedResourcesStorageId();
556
557 bool wasEmpty = !d->enabledIds.values().contains(true);
558
559 d->enabledIds[id] = checked;
560
561 bool isEmpty = !d->enabledIds.values().contains(true);
562
563 d->writer.setEnabled(checked);
564
565 if (isEmpty == wasEmpty) {
566 d->updateRecordStatus(checked);
567 return false;
568 }
569
570
571 d->ui->buttonRecordToggle->setEnabled(false);
572
573 if (checked) {
575 d->updateUiFormat();
576 d->writer.start();
577
578 // Calculate Rec symbol activity timeout depending on the capture interval
579 // The pausedTimer interval is set to a slightly greater value than the capture interval
580 // to avoid flickering for ongoing painting. This is also the reason for the min and max
581 // values 305 and 2005 (instead of 300 and 2000, respectively).
582 if (d->realTimeCaptureMode) {
583 d->pausedTimer.setInterval(qBound(305, static_cast<int>(1000.0/static_cast<double>(exportSettings->fps)) + 5,2005));
584 } else {
585 d->pausedTimer.setInterval(qBound(305, static_cast<int>(qMax(d->captureInterval, .1) * 1000.0) + 5, 2005));
586 }
587 } else {
588 d->writer.stop();
589 d->warningTimer.stop();
590 d->pausedTimer.stop();
591 d->statusBarWarningLabel->hide();
592 d->paused = true;
593 }
594
595 return true;
596}
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 752 of file recorderdocker_dock.cpp.

753{
754 QMessageBox::warning(this, i18nc("@title:window", "Recorder"),
755 i18n("Krita was unable to stop the recorder probably. Please try to restart Krita."));
756}

◆ onRecordIsolateLayerModeToggled

void RecorderDockerDock::onRecordIsolateLayerModeToggled ( bool checked)
privateslot

◆ onResolutionChanged

void RecorderDockerDock::onResolutionChanged ( int resolution)
privateslot

Definition at line 701 of file recorderdocker_dock.cpp.

702{
703 d->resolution = resolution;
704 RecorderConfig(false).setResolution(resolution);
705 d->loadSettings();
706}
void setResolution(int value)

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

◆ onThreadsChanged

◆ onUpdateRecIndicator

void RecorderDockerDock::onUpdateRecIndicator ( )
privateslot

Definition at line 726 of file recorderdocker_dock.cpp.

727{
729}

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

◆ onVideoFPSChanged

void RecorderDockerDock::onVideoFPSChanged ( double interval)
privateslot

◆ onWarningTimeout

void RecorderDockerDock::onWarningTimeout ( )
privateslot

Definition at line 766 of file recorderdocker_dock.cpp.

767{
768 d->statusBarWarningLabel->hide();
769}

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

◆ onWriterFrameWriteFailed

void RecorderDockerDock::onWriterFrameWriteFailed ( )
privateslot

Definition at line 746 of file recorderdocker_dock.cpp.

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

◆ onWriterStarted

void RecorderDockerDock::onWriterStarted ( )
privateslot

Definition at line 716 of file recorderdocker_dock.cpp.

717{
718 d->updateRecordStatus(true);
719}

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

◆ onWriterStopped

void RecorderDockerDock::onWriterStopped ( )
privateslot

Definition at line 721 of file recorderdocker_dock.cpp.

722{
723 d->updateRecordStatus(false);
724}

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 483 of file recorderdocker_dock.cpp.

484{
485 setEnabled(canvas != nullptr);
486
487 if (d->canvas == canvas)
488 return;
489
490 d->canvas = dynamic_cast<KisCanvas2*>(canvas);
492
493 if (!d->canvas)
494 return;
495
496 KisDocument *document = d->canvas->imageView()->document();
497 d->updateComboResolution(document->image()->width(), document->image()->height());
498
499 d->prefix = d->getPrefix();
500 bool wasToggled = false;
501 if (d->recordAutomatically && !d->snapshotDirectory.isEmpty()
502 && !d->enabledIds.contains(document->linkedResourcesStorageId())) {
503 wasToggled = onRecordButtonToggled(true);
504 }
505 if (!wasToggled) { // onRecordButtonToggled(true) may call these, don't call them twice.
507 d->updateUiFormat();
508 }
510
511 bool enabled = d->enabledIds.value(document->linkedResourcesStorageId(), false);
512 d->writer.setEnabled(enabled);
513 d->updateRecordStatus(enabled);
514}
void updateComboResolution(quint32 width, quint32 height)
void setCanvas(QPointer< KisCanvas2 > canvas)

References 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 771 of file recorderdocker_dock.cpp.

772{
774}
KRITAWIDGETUTILS_EXPORT void updateCursor(QWidget *source, QScroller::State state)

References KisKineticScroller::updateCursor().

◆ slotSelectSnapshotDirectory

void RecorderDockerDock::slotSelectSnapshotDirectory ( )
privateslot

Definition at line 624 of file recorderdocker_dock.cpp.

625{
626 KoFileDialog dialog(this, KoFileDialog::OpenDirectory, "SelectRecordingsDirectory");
627 dialog.setCaption(i18n("Select a Directory for Recordings"));
628 dialog.setDefaultDir(d->ui->editDirectory->text());
629 QString directory = dialog.filename();
630 if (!directory.isEmpty()) {
631 d->ui->editDirectory->setText(directory);
632 RecorderConfig(false).setSnapshotDirectory(directory);
633 d->loadSettings();
634 }
635}
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 516 of file recorderdocker_dock.cpp.

517{
518 d->updateRecordStatus(false);
519 d->recordToggleAction->setChecked(false);
520 setEnabled(false);
521 d->writer.stop();
522 d->writer.setCanvas(nullptr);
523 d->canvas = nullptr;
524 d->enabledIds.clear();
525}

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: