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

#include <KisPart.h>

+ Inheritance diagram for KisPart:

Public Slots

void openExistingFile (const QString &path)
 
void openTemplate (const QUrl &url)
 
void startCustomDocument (KisDocument *doc)
 startCustomDocument adds the given document to the document list and deletes the sender()
 

Signals

void documentClosed (const QString &ref)
 
void documentOpened (const QString &ref)
 
void playbackEngineChanged (KisPlaybackEngine *newPlaybackEngine)
 
void sigDocumentAdded (KisDocument *document)
 
void sigDocumentRemoved (const QString &filename)
 
void sigDocumentSaved (const QString &url)
 
void sigMainWindowCreated ()
 
void sigMainWindowIsBeingCreated (KisMainWindow *window)
 
void sigViewAdded (KisView *view)
 
void sigViewRemoved (KisView *view)
 

Public Member Functions

void addDocument (KisDocument *document, bool notify=true)
 
void addRecentURLToAllMainWindows (QUrl url, QUrl oldUrl=QUrl())
 
void addView (KisView *view)
 
KisAnimationCachePopulatorcachePopulator () const
 
bool closeSession (bool keepWindows=false)
 
bool closingSession () const
 
KisDocumentcreateDocument () const
 
KisMainWindowcreateMainWindow (QUuid id=QUuid())
 
KisDocumentcreateTemporaryDocument () const
 
KisViewcreateView (KisDocument *document, KisViewManager *viewManager, QWidget *parent)
 
KisInputManagercurrentInputManager ()
 
KisMainWindowcurrentMainwindow () const
 
QWidget * currentMainwindowAsQWidget () const
 
int documentCount () const
 
QList< QPointer< KisDocument > > documents () const
 
KisIdleWatcheridleWatcher () const
 
 KisPart ()
 
int mainwindowCount () const
 
const QList< QPointer< KisMainWindow > > & mainWindows () const
 
void notifyMainWindowIsBeingCreated (KisMainWindow *mainWindow)
 notifyMainWindowIsBeingCreated emits the sigMainWindowCreated signal
 
class KisPlaybackEngineplaybackEngine () const
 
void prioritizeFrameForCache (KisImageSP image, int frame)
 
 Private (KisPart *_part)
 
bool queryCloseDocument (KisDocument *document)
 
void queueAddRecentURLToAllMainWindowsOnFileSaved (QUrl url, QUrl oldUrl=QUrl())
 
void removeDocument (KisDocument *document, bool deleteDocument=true)
 
void removeMainWindow (KisMainWindow *mainWindow)
 
void removeView (KisView *view)
 
bool restoreSession (const QString &sessionName)
 
bool restoreSession (KisSessionResourceSP session)
 
void setCurrentSession (KisSessionResourceSP session)
 
void showSessionManager ()
 
void startBlankSession ()
 
void unloadPlaybackEngine ()
 
void upgradeToPlaybackEngineMLT (class KoCanvasBase *canvas)
 
int viewCount (KisDocument *doc) const
 
QList< QPointer< KisView > > views () const
 
KisMainWindowwindowById (QUuid id) const
 
 ~KisPart () override
 
 ~Private ()
 

Static Public Member Functions

static bool exists ()
 
static KisPartinstance ()
 

Public Attributes

KisAnimationCachePopulator animationCachePopulator
 
bool closingSession {false}
 
KisSessionResourceSP currentSession
 
QList< QPointer< KisDocument > > documents
 
KisIdleWatcher idleWatcher
 
QList< QPointer< KisMainWindow > > mainWindows
 
KisPartpart
 
QMap< QUrl, QUrl > pendingAddRecentUrlMap
 
QScopedPointer< KisPlaybackEngineplaybackEngine
 
QScopedPointer< KisSessionManagerDialogsessionManager
 
QList< QPointer< KisView > > views
 

Private Slots

void slotDocumentSaved (const QString &filePath)
 
void updateIdleWatcherConnections ()
 
void updateShortcuts ()
 

Private Member Functions

void setPlaybackEngine (KisPlaybackEngine *p_playbackEngine)
 
- Private Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Private Attributes

Private *const d
 
- Private Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Detailed Description

KisPart a singleton class which provides the main entry point to the application. Krita supports multiple documents, multiple main windows, and multiple components. KisPart manages these resources and provides them to the rest of Krita. It manages lists of Actions and shortcuts as well.

The terminology comes from KParts, which is a system allowing one KDE app to be run from inside another, like pressing F4 inside dolphin to run konsole.

Needless to say, KisPart hasn't got much to do with KParts anymore.

Definition at line 89 of file KisPart.cpp.

Constructor & Destructor Documentation

◆ ~Private()

KisPart::~Private ( )
inline

Definition at line 100 of file KisPart.cpp.

101 {
102 }

◆ KisPart()

KisPart::KisPart ( )
explicit

Constructor.

Parameters
parentmay be another KisDocument, or anything else. Usually passed by KPluginFactory::create.

Definition at line 147 of file KisPart.cpp.

148 : d(new Private(this))
149{
150 // Preload all the resources in the background
153 Q_UNUSED(KisColorManager::instance());
154
155 connect(this, SIGNAL(documentOpened(QString)),
156 this, SLOT(updateIdleWatcherConnections()));
157
158 connect(this, SIGNAL(documentClosed(QString)),
159 this, SLOT(updateIdleWatcherConnections()));
160
161 connect(KisActionRegistry::instance(), SIGNAL(shortcutsUpdated()),
162 this, SLOT(updateShortcuts()));
163 connect(&d->idleWatcher, SIGNAL(startedIdleMode()),
164 &d->animationCachePopulator, SLOT(slotRequestRegeneration()));
165 connect(&d->idleWatcher, SIGNAL(startedIdleMode()),
166 KisMemoryStatisticsServer::instance(), SLOT(tryForceUpdateMemoryStatisticsWhileIdle()));
167
168 // We start by loading the simple QTimer-based anim playback engine first.
169 // To save RAM, the MLT-based engine will be loaded later, once the KisImage in question becomes animated.
171
172 d->animationCachePopulator.slotRequestRegeneration();
173 KisBusyWaitBroker::instance()->setFeedbackCallback(&busyWaitWithFeedback);
174}
static KisActionRegistry * instance()
void setFeedbackCallback(std::function< void(KisImageSP)> callback)
static KisBusyWaitBroker * instance()
static KisColorManager * instance()
void updateShortcuts()
Definition KisPart.cpp:523
void setPlaybackEngine(KisPlaybackEngine *p_playbackEngine)
Definition KisPart.cpp:695
void documentClosed(const QString &ref)
Private *const d
Definition KisPart.h:328
void documentOpened(const QString &ref)
void updateIdleWatcherConnections()
Definition KisPart.cpp:193
The KisPlaybackEngineQT class is an implementation of KisPlaybackEngine that drives animation playbac...
static KisResourceServerProvider * instance()
static KisMemoryStatisticsServer * instance()
static KoResourceServerProvider * instance()

References d, documentClosed(), documentOpened(), KisColorManager::instance(), KisMemoryStatisticsServer::instance(), KisBusyWaitBroker::instance(), KisResourceServerProvider::instance(), KoResourceServerProvider::instance(), KisActionRegistry::instance(), KisBusyWaitBroker::setFeedbackCallback(), setPlaybackEngine(), updateIdleWatcherConnections(), and updateShortcuts().

◆ ~KisPart()

KisPart::~KisPart ( )
override

Destructor.

The destructor does not delete any attached KisView objects and it does not delete the attached widget as returned by widget().

Definition at line 176 of file KisPart.cpp.

177{
178 while (!d->documents.isEmpty()) {
179 delete d->documents.takeFirst();
180 }
181
182 while (!d->views.isEmpty()) {
183 delete d->views.takeFirst();
184 }
185
186 while (!d->mainWindows.isEmpty()) {
187 delete d->mainWindows.takeFirst();
188 }
189
190 delete d;
191}

References d.

Member Function Documentation

◆ addDocument()

void KisPart::addDocument ( KisDocument * document,
bool notify = true )

Add the specified document to the list of documents this KisPart manages.

Definition at line 211 of file KisPart.cpp.

212{
213 //dbgUI << "Adding document to part list" << document;
214 Q_ASSERT(document);
215 if (!d->documents.contains(document)) {
216 d->documents.append(document);
217 if (notify){
218 Q_EMIT documentOpened('/'+ objectName());
219 Q_EMIT sigDocumentAdded(document);
220 }
221 connect(document, SIGNAL(sigSavingFinished(QString)), SLOT(slotDocumentSaved(QString)));
222 }
223}
void sigDocumentAdded(KisDocument *document)
void slotDocumentSaved(const QString &filePath)
Definition KisPart.cpp:423

References d, documentOpened(), sigDocumentAdded(), and slotDocumentSaved().

◆ addRecentURLToAllMainWindows()

void KisPart::addRecentURLToAllMainWindows ( QUrl url,
QUrl oldUrl = QUrl() )

Definition at line 574 of file KisPart.cpp.

575{
576 // Add entry to recent documents list
577 // (call coming from KisDocument because it must work with cmd line, template dlg, file/open, etc.)
578 if (!url.isEmpty()) {
579 bool ok = true;
580 if (url.isLocalFile()) {
581 QString path = url.adjusted(QUrl::StripTrailingSlash).toLocalFile();
582 const QStringList tmpDirs = QStandardPaths::locateAll(QStandardPaths::TempLocation, "", QStandardPaths::LocateDirectory);
583 for (QStringList::ConstIterator it = tmpDirs.begin() ; ok && it != tmpDirs.end() ; ++it) {
584 if (path.contains(*it)) {
585 ok = false; // it's in the tmp resource
586 }
587 }
588
589 const QStringList templateDirs = KoResourcePaths::findDirs("templates");
590 for (QStringList::ConstIterator it = templateDirs.begin() ; ok && it != templateDirs.end() ; ++it) {
591 if (path.contains(*it)) {
592 ok = false; // it's in the templates directory.
593 break;
594 }
595 }
596 }
597 if (ok) {
598 if (!oldUrl.isEmpty()) {
600 }
602 }
603 }
604}
void remove(const QUrl &url)
static KisRecentFilesManager * instance()
static QStringList findDirs(const QString &type)

References KisRecentFilesManager::add(), KoResourcePaths::findDirs(), KisRecentFilesManager::instance(), and KisRecentFilesManager::remove().

◆ addView()

void KisPart::addView ( KisView * view)

Adds a view to the document. If the part doesn't know yet about the document, it is registered.

This calls KisView::updateReadWrite to tell the new view whether the document is readonly or not.

Definition at line 308 of file KisPart.cpp.

309{
310 if (!view)
311 return;
312
313 if (!d->views.contains(view)) {
314 d->views.append(view);
315 }
316
317 Q_EMIT sigViewAdded(view);
318}
void sigViewAdded(KisView *view)

References d, and sigViewAdded().

◆ cachePopulator()

KisAnimationCachePopulator * KisPart::cachePopulator ( ) const
Returns
the application-wide AnimationCachePopulator.

Definition at line 496 of file KisPart.cpp.

497{
498 return &d->animationCachePopulator;
499}

References d.

◆ closeSession()

bool KisPart::closeSession ( bool keepWindows = false)

Attempts to save the session and close all windows. This may involve asking the user to save open files.

Returns
false, if closing was cancelled by the user

Definition at line 382 of file KisPart.cpp.

383{
384 d->closingSession = true;
385
386 Q_FOREACH(auto document, d->documents) {
387 if (!d->queryCloseDocument(document.data())) {
388 d->closingSession = false;
389 return false;
390 }
391 }
392
393 if (d->currentSession) {
394 KisConfig kisCfg(false);
395 if (kisCfg.saveSessionOnQuit(false)) {
396
397 d->currentSession->storeCurrentWindows();
399 bool result = model.updateResource(d->currentSession);
400 Q_UNUSED(result);
401
402 KConfigGroup cfg = KSharedConfig::openConfig()->group("session");
403 cfg.writeEntry("previousSession", d->currentSession->name());
404 }
405
406 d->currentSession = nullptr;
407 }
408
409 if (!keepWindows) {
410 Q_FOREACH (auto window, d->mainWindows) {
411 window->close();
412 }
413
414 if (d->sessionManager) {
415 d->sessionManager->close();
416 }
417 }
418
419 d->closingSession = false;
420 return true;
421}
The KisResourceModel class provides the main access to resources. It is possible to filter the resour...
const QString Sessions

References d, KisConfig::saveSessionOnQuit(), ResourceType::Sessions, and KisResourceModel::updateResource().

◆ closingSession()

bool KisPart::closingSession ( ) const

Are we in the process of closing the application through closeSession().

◆ createDocument()

KisDocument * KisPart::createDocument ( ) const

create an empty document. The document is not automatically registered with the part.

Definition at line 230 of file KisPart.cpp.

231{
232 KisDocument *doc = new KisDocument();
233 return doc;
234}

◆ createMainWindow()

KisMainWindow * KisPart::createMainWindow ( QUuid id = QUuid())

Create a new main window.

Definition at line 260 of file KisPart.cpp.

261{
262 KisMainWindow *mw = new KisMainWindow(id);
263 dbgUI <<"mainWindow" << (void*)mw << "added to view" << this;
264 d->mainWindows.append(mw);
265
267
268 return mw;
269}
Main window for Krita.
void synchronizeDynamicActions()
#define dbgUI
Definition kis_debug.h:52

References d, dbgUI, and KisMainWindow::synchronizeDynamicActions().

◆ createTemporaryDocument()

KisDocument * KisPart::createTemporaryDocument ( ) const

create a throwaway empty document. The document does not register a resource storage

Definition at line 236 of file KisPart.cpp.

237{
238 KisDocument *doc = new KisDocument(false);
239 return doc;
240}

◆ createView()

KisView * KisPart::createView ( KisDocument * document,
KisViewManager * viewManager,
QWidget * parent )

Create a new view for the document. The view is added to the list of views, and if the document wasn't known yet, it's registered as well.

Definition at line 277 of file KisPart.cpp.

280{
281 // If creating the canvas fails, record this and disable OpenGL next time
282 KisConfig cfg(false);
283 KConfigGroup grp( KSharedConfig::openConfig(), "crashprevention");
284 if (grp.readEntry("CreatingCanvas", false)) {
285 cfg.disableOpenGL();
286 }
287 if (cfg.canvasState() == "OPENGL_FAILED") {
288 cfg.disableOpenGL();
289 }
290 grp.writeEntry("CreatingCanvas", true);
291 grp.sync();
292
293 KisView *view = nullptr;
294 {
295 KisCursorOverrideLock cursorLock(Qt::WaitCursor);
296 view = new KisView(document, viewManager, parent);
297 }
298
299 // Record successful canvas creation
300 grp.writeEntry("CreatingCanvas", false);
301 grp.sync();
302
303 addView(view);
304
305 return view;
306}
void addView(KisView *view)
Definition KisPart.cpp:308

References addView(), KisConfig::canvasState(), and KisConfig::disableOpenGL().

◆ currentInputManager()

KisInputManager * KisPart::currentInputManager ( )

Definition at line 619 of file KisPart.cpp.

620{
622 KisViewManager *manager = mw ? mw->viewManager() : 0;
623 return manager ? manager->inputManager() : 0;
624}
KisViewManager * viewManager
KisMainWindow * currentMainwindow() const
Definition KisPart.cpp:459
KisInputManager * inputManager() const
Filters events and sends them to canvas actions.

References currentMainwindow(), KisViewManager::inputManager(), and KisMainWindow::viewManager.

◆ currentMainwindow()

KisMainWindow * KisPart::currentMainwindow ( ) const
Returns
the currently active main window.

Definition at line 459 of file KisPart.cpp.

460{
461 QWidget *widget = qApp->activeWindow();
462 KisMainWindow *mainWindow = qobject_cast<KisMainWindow*>(widget);
463 while (!mainWindow && widget) {
464 widget = widget->parentWidget();
465 mainWindow = qobject_cast<KisMainWindow*>(widget);
466 }
467
468 if (!mainWindow && mainWindows().size() > 0) {
469 mainWindow = mainWindows().first();
470 }
471 return mainWindow;
472
473}
QList< QPointer< KisMainWindow > > mainWindows
Definition KisPart.cpp:107
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References mainWindows.

◆ currentMainwindowAsQWidget()

QWidget * KisPart::currentMainwindowAsQWidget ( ) const

Gets the currently active KisMainWindow as a QWidget, useful when you just need it to be used as a parent to a dialog or window without needing to include KisMainWindow.h.

Definition at line 475 of file KisPart.cpp.

476{
477 return currentMainwindow();
478}

References currentMainwindow().

◆ documentClosed

void KisPart::documentClosed ( const QString & ref)
signal

emitted when an old document is closed. (for the idle watcher)

◆ documentCount()

int KisPart::documentCount ( ) const
Returns
number of documents this part manages.

Definition at line 243 of file KisPart.cpp.

244{
245 return d->documents.size();
246}

References d.

◆ documentOpened

void KisPart::documentOpened ( const QString & ref)
signal

emitted when a new document is opened. (for the idle watcher)

◆ documents()

QList< QPointer< KisDocument > > KisPart::documents ( ) const
Returns
a list of all documents this part manages

◆ exists()

bool KisPart::exists ( )
static

This function returns true if the instance has already been initialized, false otherwise. This to prevent premature initialization that causes crash on android see 1fbb25506a

See also
QGlobalStatic::exists()

Definition at line 377 of file KisPart.cpp.

378{
379 return s_instance.exists();
380}

◆ idleWatcher()

KisIdleWatcher * KisPart::idleWatcher ( ) const
Returns
the application-wide KisIdleWatcher.

◆ instance()

KisPart * KisPart::instance ( )
static

Definition at line 131 of file KisPart.cpp.

132{
133 return s_instance;
134}

◆ mainwindowCount()

int KisPart::mainwindowCount ( ) const
Returns
the number of shells for the main window

Definition at line 453 of file KisPart.cpp.

454{
455 return d->mainWindows.count();
456}

References d.

◆ mainWindows()

const QList< QPointer< KisMainWindow > > & KisPart::mainWindows ( ) const
Returns
the list of main windows.

◆ notifyMainWindowIsBeingCreated()

void KisPart::notifyMainWindowIsBeingCreated ( KisMainWindow * mainWindow)

notifyMainWindowIsBeingCreated emits the sigMainWindowCreated signal

Parameters
mainWindow

Definition at line 271 of file KisPart.cpp.

272{
273 Q_EMIT sigMainWindowIsBeingCreated(mainWindow);
274}
void sigMainWindowIsBeingCreated(KisMainWindow *window)

References sigMainWindowIsBeingCreated().

◆ openExistingFile

void KisPart::openExistingFile ( const QString & path)
slot

This slot loads an existing file.

Parameters
paththe file to load

Definition at line 513 of file KisPart.cpp.

514{
515 // TODO: refactor out this method!
516
519
521}
bool openDocument(const QString &path, OpenFlags flags)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References currentMainwindow(), KIS_SAFE_ASSERT_RECOVER_RETURN, KisMainWindow::None, and KisMainWindow::openDocument().

◆ openTemplate

void KisPart::openTemplate ( const QUrl & url)
slot

This slot loads a template and deletes the sender.

Parameters
urlthe template to load

Definition at line 534 of file KisPart.cpp.

535{
536 KisCursorOverrideLock cursorLock(Qt::BusyCursor);
537
538 KisDocument *document = createDocument();
539
540 bool ok = document->loadNativeFormat(url.toLocalFile());
541 document->setModified(false);
542 document->undoStack()->clear();
543 document->documentInfo()->resetMetaData();
544
545 if (ok) {
546 QString mimeType = KisMimeDatabase::mimeTypeForFile(url.toLocalFile());
547 // in case this is a open document template remove the -template from the end
548 mimeType.remove( QRegularExpression( "-template$" ) );
549 document->setMimeTypeAfterLoading(mimeType);
550 document->resetPath();
551 document->setReadWrite(true);
552 }
553 else {
554 if (document->errorMessage().isEmpty()) {
555 QMessageBox::critical(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("Could not create document from template\n%1", document->localFilePath()));
556 }
557 else {
558 QMessageBox::critical(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("Could not create document from template\n%1\nReason: %2", document->localFilePath(), document->errorMessage()));
559 }
560 delete document;
561 return;
562 }
563 QMap<QString, QString> dictionary;
564 // XXX: fill the dictionary from the desktop file
566 document->image()->rootLayer()->accept(v);
567
568 addDocument(document);
569
572}
qreal v
KisView * addViewAndNotifyLoadingCompleted(KisDocument *document, QMdiSubWindow *subWindow=0)
static QString mimeTypeForFile(const QString &file, bool checkExistingFiles=true)
Find the mimetype for the given filename. The filename must include a suffix.
void addDocument(KisDocument *document, bool notify=true)
Definition KisPart.cpp:211
KisDocument * createDocument() const
Definition KisPart.cpp:230
KisTranslateLayerNamesVisitor::KisTranslateLayerNamesVisitor translates layer names from templates.

References addDocument(), KisMainWindow::addViewAndNotifyLoadingCompleted(), createDocument(), currentMainwindow(), KisMimeDatabase::mimeTypeForFile(), and v.

◆ playbackEngine()

class KisPlaybackEngine * KisPart::playbackEngine ( ) const

◆ playbackEngineChanged

void KisPart::playbackEngineChanged ( KisPlaybackEngine * newPlaybackEngine)
signal

Emitted when the animation PlaybackEngine is changed. GUI objects that want to control playback should watch this signal and connect to the new playbackEgine as needed.

◆ prioritizeFrameForCache()

void KisPart::prioritizeFrameForCache ( KisImageSP image,
int frame )

Adds a frame time index to a priority stack, which should be cached immediately and irregardless of whether it is the the currently occupied frame. The process of regeneration is started immediately.

Definition at line 506 of file KisPart.cpp.

506 {
507 KisImageAnimationInterface* animInterface = image->animationInterface();
508 if ( animInterface && animInterface->documentPlaybackRange().contains(frame)) {
509 d->animationCachePopulator.requestRegenerationWithPriorityFrame(image, frame);
510 }
511}
const KisTimeSpan & documentPlaybackRange() const
documentPlaybackRange
KisImageAnimationInterface * animationInterface() const
bool contains(int time) const

References KisImage::animationInterface(), KisTimeSpan::contains(), d, and KisImageAnimationInterface::documentPlaybackRange().

◆ Private()

KisPart::Private ( KisPart * _part)
inline

Definition at line 92 of file KisPart.cpp.

93 : part(_part)
94 , idleWatcher(2500)
96 , playbackEngine(nullptr)
97 {
98 }
KisAnimationCachePopulator animationCachePopulator
Definition KisPart.cpp:110
QScopedPointer< KisPlaybackEngine > playbackEngine
Definition KisPart.cpp:111
KisIdleWatcher idleWatcher
Definition KisPart.cpp:109
KisPart * part
Definition KisPart.cpp:104

◆ queryCloseDocument()

bool KisPart::queryCloseDocument ( KisDocument * document)
inline

Definition at line 119 of file KisPart.cpp.

119 {
120 Q_FOREACH(auto view, views) {
121 if (view && view->isVisible() && view->document() == document) {
122 return view->queryClose();
123 }
124 }
125
126 return true;
127 }
QList< QPointer< KisView > > views
Definition KisPart.cpp:106

◆ queueAddRecentURLToAllMainWindowsOnFileSaved()

void KisPart::queueAddRecentURLToAllMainWindowsOnFileSaved ( QUrl url,
QUrl oldUrl = QUrl() )

Registers a file path to be added to the recents list, but do not apply until the file has finished saving.

Definition at line 606 of file KisPart.cpp.

607{
608 d->pendingAddRecentUrlMap.insert(url, oldUrl);
609}

References d.

◆ removeDocument()

void KisPart::removeDocument ( KisDocument * document,
bool deleteDocument = true )

Definition at line 248 of file KisPart.cpp.

249{
250 if (document) {
251 d->documents.removeAll(document);
252 Q_EMIT documentClosed('/' + objectName());
253 Q_EMIT sigDocumentRemoved(document->path());
254 if (deleteDocument) {
255 document->deleteLater();
256 }
257 }
258}
void sigDocumentRemoved(const QString &filename)

References d, documentClosed(), and sigDocumentRemoved().

◆ removeMainWindow()

void KisPart::removeMainWindow ( KisMainWindow * mainWindow)

Removes a main window from the list of managed windows.

This is called by the MainWindow after it finishes its shutdown routine.

Definition at line 440 of file KisPart.cpp.

441{
442 dbgUI <<"mainWindow" << (void*)mainWindow <<"removed from doc" << this;
443 if (mainWindow) {
444 d->mainWindows.removeAll(mainWindow);
445 }
446}

References d, and dbgUI.

◆ removeView()

void KisPart::removeView ( KisView * view)

Removes a view of the document.

HACK ALERT: we check here explicitly if the document (or main window), is saving the stuff. If we close the document before the saving is completed, a crash will happen.

Definition at line 320 of file KisPart.cpp.

321{
322 if (!view) return;
323
331
332 Q_EMIT sigViewRemoved(view);
333
334 QPointer<KisDocument> doc = view->document();
335 d->views.removeAll(view);
336
337 if (doc) {
338 bool found = false;
339 Q_FOREACH (QPointer<KisView> view, d->views) {
340 if (view && view->document() == doc) {
341 found = true;
342 break;
343 }
344 }
345 if (!found) {
346 removeDocument(doc);
347 }
348 }
349}
bool hackIsSaving() const
void removeDocument(KisDocument *document, bool deleteDocument=true)
Definition KisPart.cpp:248
void sigViewRemoved(KisView *view)
KisMainWindow * mainWindow() const
Definition KisView.cpp:1089
QPointer< KisDocument > document
Definition KisView.cpp:121
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75

References d, KisView::document, KisMainWindow::hackIsSaving(), KIS_ASSERT_RECOVER_RETURN, KisView::mainWindow(), removeDocument(), and sigViewRemoved().

◆ restoreSession() [1/2]

bool KisPart::restoreSession ( const QString & sessionName)

Restores a saved session by name

Definition at line 644 of file KisPart.cpp.

645{
646 if (sessionName.isNull()) return false;
647
649 KisSessionResourceSP session = rserver->resource("", "", sessionName);
650 if (!session || !session->valid()) return false;
651
652 return restoreSession(session);
653}
bool restoreSession(const QString &sessionName)
Definition KisPart.cpp:644
KoResourceServer< KisSessionResource > * sessionServer()
QSharedPointer< T > resource(const QString &md5, const QString &fileName, const QString &name)
resource retrieves a resource. If the md5sum is not empty, the resource will only be retrieved if a r...

References KisResourceServerProvider::instance(), KoResourceServer< T >::resource(), restoreSession(), and KisResourceServerProvider::sessionServer().

◆ restoreSession() [2/2]

bool KisPart::restoreSession ( KisSessionResourceSP session)

Definition at line 655 of file KisPart.cpp.

656{
657 session->restore();
658 d->currentSession = session;
659 return true;
660}

References d.

◆ setCurrentSession()

void KisPart::setCurrentSession ( KisSessionResourceSP session)

Definition at line 662 of file KisPart.cpp.

663{
664 d->currentSession = session;
665}

References d.

◆ setPlaybackEngine()

void KisPart::setPlaybackEngine ( KisPlaybackEngine * p_playbackEngine)
private

Definition at line 695 of file KisPart.cpp.

696{
697 // make sure that the old engine is still alive until the end
698 // of the emitted signal
699 QScopedPointer backup(p_playbackEngine);
700 d->playbackEngine.swap(backup);
701
702 // Log all changes to playback engine for easier debugging.
703 // (See `krita.log` or `Help > Show Krita log for bug reports`.)
704 KisUsageLogger::log("Audio Playback Engine: " + QString(p_playbackEngine->metaObject()->className()));
705
706 Q_EMIT playbackEngineChanged(p_playbackEngine);
707}
void playbackEngineChanged(KisPlaybackEngine *newPlaybackEngine)
static void log(const QString &message)
Logs with date/time.

References d, KisUsageLogger::log(), and playbackEngineChanged().

◆ showSessionManager()

void KisPart::showSessionManager ( )

Definition at line 626 of file KisPart.cpp.

627{
628 if (d->sessionManager.isNull()) {
629 d->sessionManager.reset(new KisSessionManagerDialog());
630 }
631
632 d->sessionManager->show();
633 d->sessionManager->activateWindow();
634}

References d.

◆ sigDocumentAdded

void KisPart::sigDocumentAdded ( KisDocument * document)
signal

◆ sigDocumentRemoved

void KisPart::sigDocumentRemoved ( const QString & filename)
signal

◆ sigDocumentSaved

void KisPart::sigDocumentSaved ( const QString & url)
signal

◆ sigMainWindowCreated

void KisPart::sigMainWindowCreated ( )
signal

◆ sigMainWindowIsBeingCreated

void KisPart::sigMainWindowIsBeingCreated ( KisMainWindow * window)
signal

◆ sigViewAdded

void KisPart::sigViewAdded ( KisView * view)
signal

◆ sigViewRemoved

void KisPart::sigViewRemoved ( KisView * view)
signal

◆ slotDocumentSaved

void KisPart::slotDocumentSaved ( const QString & filePath)
privateslot

Definition at line 423 of file KisPart.cpp.

424{
425 // We used to use doc->path(), but it does not contain the correct output
426 // file path when doing an export, therefore we now pass it directly from
427 // the sigSavingFinished signal.
428 // KisDocument *doc = qobject_cast<KisDocument*>(sender());
429 Q_EMIT sigDocumentSaved(filePath);
430
431 QUrl url = QUrl::fromLocalFile(filePath);
433 if (!d->pendingAddRecentUrlMap.contains(url)) {
434 return;
435 }
436 QUrl oldUrl = d->pendingAddRecentUrlMap.take(url);
437 addRecentURLToAllMainWindows(url, oldUrl);
438}
void sigDocumentSaved(const QString &url)
void addRecentURLToAllMainWindows(QUrl url, QUrl oldUrl=QUrl())
Definition KisPart.cpp:574
static KisRecentFileIconCache * instance()
void reloadFileIcon(const QUrl &url)

References addRecentURLToAllMainWindows(), d, KisRecentFileIconCache::instance(), KisRecentFileIconCache::reloadFileIcon(), and sigDocumentSaved().

◆ startBlankSession()

void KisPart::startBlankSession ( )

Definition at line 636 of file KisPart.cpp.

637{
639 window->initializeGeometry();
640 window->show();
641
642}
KisMainWindow * createMainWindow(QUuid id=QUuid())
Definition KisPart.cpp:260

References createMainWindow(), and KisMainWindow::initializeGeometry().

◆ startCustomDocument

void KisPart::startCustomDocument ( KisDocument * doc)
slot

startCustomDocument adds the given document to the document list and deletes the sender()

Parameters
doc

Definition at line 611 of file KisPart.cpp.

612{
613 addDocument(doc);
616
617}

References addDocument(), KisMainWindow::addViewAndNotifyLoadingCompleted(), and currentMainwindow().

◆ unloadPlaybackEngine()

void KisPart::unloadPlaybackEngine ( )

Called on application to make sure that the engine is unloaded before the MLT library is actually unloaded

Definition at line 686 of file KisPart.cpp.

687{
688#ifdef HAVE_MLT
689
690 d->playbackEngine.reset();
691
692#endif //HAVE_MLT
693}

References d.

◆ updateIdleWatcherConnections

void KisPart::updateIdleWatcherConnections ( )
privateslot

Update memory stats on changing the amount of images open in Krita

Definition at line 193 of file KisPart.cpp.

194{
195 QVector<KisImageSP> images;
196
197 Q_FOREACH (QPointer<KisDocument> document, documents()) {
198 if (document->image()) {
199 images << document->image();
200 }
201 }
202
203 d->idleWatcher.setTrackedImages(images);
204
208 d->idleWatcher.forceImageModified();
209}
QList< QPointer< KisDocument > > documents
Definition KisPart.cpp:108

References d, and documents.

◆ updateShortcuts

void KisPart::updateShortcuts ( )
privateslot

Definition at line 523 of file KisPart.cpp.

524{
525 // Update the UI actions. KisActionRegistry also takes care of updating
526 // shortcut hints in tooltips.
527 Q_FOREACH (KisMainWindow *mainWindow, d->mainWindows) {
528 KisKActionCollection *ac = mainWindow->actionCollection();
529
530 ac->updateShortcuts();
531 }
532}
A container for a set of QAction objects.
virtual KisKActionCollection * actionCollection() const

References KisKXMLGUIClient::actionCollection(), d, and KisKActionCollection::updateShortcuts().

◆ upgradeToPlaybackEngineMLT()

void KisPart::upgradeToPlaybackEngineMLT ( class KoCanvasBase * canvas)

Definition at line 667 of file KisPart.cpp.

668{
669#ifdef HAVE_MLT
670
671 // TODO: This is a slightly hacky workaround to loading the MLT engine over itself,
672 // as the QT-based engine no longer supports audio. Is there a better way?
673 if (d->playbackEngine->supportsAudio()) {
674 return;
675 }
676
678
679 if (canvas) {
680 d->playbackEngine->setObservedCanvas(canvas);
681 }
682
683#endif //HAVE_MLT
684}
The KisPlaybackEngineMLT class is an implementation of KisPlaybackEngine that uses MLT (Media Lovin' ...
KisCanvas2 * canvas

References Private::canvas, d, and setPlaybackEngine().

◆ viewCount()

int KisPart::viewCount ( KisDocument * doc) const
Returns
number of views this document is displayed in

Definition at line 356 of file KisPart.cpp.

357{
358 if (!doc) {
359 return d->views.count();
360 }
361 else {
362 int count = 0;
363 Q_FOREACH (QPointer<KisView> view, d->views) {
364 if (view && view->isVisible() && view->document() == doc) {
365 count++;
366 }
367 }
368 return count;
369 }
370}

References d.

◆ views()

QList< QPointer< KisView > > KisPart::views ( ) const
Returns
a list of views this document is displayed in

◆ windowById()

KisMainWindow * KisPart::windowById ( QUuid id) const

Definition at line 480 of file KisPart.cpp.

481{
482 Q_FOREACH(QPointer<KisMainWindow> mainWindow, d->mainWindows) {
483 if (mainWindow->id() == id) {
484 return mainWindow;
485 }
486 }
487
488 return nullptr;
489}

References d.

Member Data Documentation

◆ animationCachePopulator

KisAnimationCachePopulator KisPart::animationCachePopulator

Definition at line 110 of file KisPart.cpp.

◆ closingSession

bool KisPart::closingSession {false}

Definition at line 114 of file KisPart.cpp.

114{false};

◆ currentSession

KisSessionResourceSP KisPart::currentSession

Definition at line 113 of file KisPart.cpp.

◆ d

Private* const KisPart::d
private

Definition at line 328 of file KisPart.h.

◆ documents

QList< QPointer< KisDocument > > KisPart::documents

Definition at line 108 of file KisPart.cpp.

◆ idleWatcher

KisIdleWatcher * KisPart::idleWatcher

Definition at line 109 of file KisPart.cpp.

◆ mainWindows

const QList< QPointer< KisMainWindow > > & KisPart::mainWindows

Definition at line 107 of file KisPart.cpp.

◆ part

KisPart* KisPart::part

Definition at line 104 of file KisPart.cpp.

◆ pendingAddRecentUrlMap

QMap<QUrl, QUrl> KisPart::pendingAddRecentUrlMap

Definition at line 117 of file KisPart.cpp.

◆ playbackEngine

KisPlaybackEngine * KisPart::playbackEngine

Definition at line 111 of file KisPart.cpp.

◆ sessionManager

QScopedPointer<KisSessionManagerDialog> KisPart::sessionManager

Definition at line 115 of file KisPart.cpp.

◆ views

QList< QPointer< KisView > > KisPart::views

Definition at line 106 of file KisPart.cpp.


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