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
 
std::unique_ptr< KisPlaybackEngineplaybackEngine
 
QPointer< 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 88 of file KisPart.cpp.

Constructor & Destructor Documentation

◆ ~Private()

KisPart::~Private ( )
inline

Definition at line 99 of file KisPart.cpp.

100 {
101 }

◆ KisPart()

KisPart::KisPart ( )
explicit

Constructor.

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

Definition at line 146 of file KisPart.cpp.

147 : d(new Private(this))
148{
149 // Preload all the resources in the background
152
153 connect(this, SIGNAL(documentOpened(QString)),
154 this, SLOT(updateIdleWatcherConnections()));
155
156 connect(this, SIGNAL(documentClosed(QString)),
157 this, SLOT(updateIdleWatcherConnections()));
158
159 connect(KisActionRegistry::instance(), SIGNAL(shortcutsUpdated()),
160 this, SLOT(updateShortcuts()));
161 connect(&d->idleWatcher, SIGNAL(startedIdleMode()),
162 &d->animationCachePopulator, SLOT(slotRequestRegeneration()));
163 connect(&d->idleWatcher, SIGNAL(startedIdleMode()),
164 KisMemoryStatisticsServer::instance(), SLOT(tryForceUpdateMemoryStatisticsWhileIdle()));
165
166 // We start by loading the simple QTimer-based anim playback engine first.
167 // To save RAM, the MLT-based engine will be loaded later, once the KisImage in question becomes animated.
169
170 d->animationCachePopulator.slotRequestRegeneration();
171 KisBusyWaitBroker::instance()->setFeedbackCallback(&busyWaitWithFeedback);
172}
static KisActionRegistry * instance()
void setFeedbackCallback(std::function< void(KisImageSP)> callback)
static KisBusyWaitBroker * instance()
void updateShortcuts()
Definition KisPart.cpp:521
void setPlaybackEngine(KisPlaybackEngine *p_playbackEngine)
Definition KisPart.cpp:694
void documentClosed(const QString &ref)
Private *const d
Definition KisPart.h:328
void documentOpened(const QString &ref)
void updateIdleWatcherConnections()
Definition KisPart.cpp:191
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(), 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 174 of file KisPart.cpp.

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

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 209 of file KisPart.cpp.

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

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

◆ addRecentURLToAllMainWindows()

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

Definition at line 572 of file KisPart.cpp.

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

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

References d, and sigViewAdded().

◆ cachePopulator()

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

Definition at line 494 of file KisPart.cpp.

495{
496 return &d->animationCachePopulator;
497}

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 380 of file KisPart.cpp.

381{
382 d->closingSession = true;
383
384 Q_FOREACH(auto document, d->documents) {
385 if (!d->queryCloseDocument(document.data())) {
386 d->closingSession = false;
387 return false;
388 }
389 }
390
391 if (d->currentSession) {
392 KisConfig kisCfg(false);
393 if (kisCfg.saveSessionOnQuit(false)) {
394
395 d->currentSession->storeCurrentWindows();
397 bool result = model.updateResource(d->currentSession);
398 Q_UNUSED(result);
399
400 KConfigGroup cfg = KSharedConfig::openConfig()->group("session");
401 cfg.writeEntry("previousSession", d->currentSession->name());
402 }
403
404 d->currentSession = nullptr;
405 }
406
407 if (!keepWindows) {
408 Q_FOREACH (auto window, d->mainWindows) {
409 window->close();
410 }
411
412 if (d->sessionManager) {
413 d->sessionManager->close();
414 }
415 }
416
417 d->closingSession = false;
418 return true;
419}
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 228 of file KisPart.cpp.

229{
230 KisDocument *doc = new KisDocument();
231 return doc;
232}

◆ createMainWindow()

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

Create a new main window.

Definition at line 258 of file KisPart.cpp.

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

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 234 of file KisPart.cpp.

235{
236 KisDocument *doc = new KisDocument(false);
237 return doc;
238}

◆ 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 275 of file KisPart.cpp.

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

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

◆ currentInputManager()

KisInputManager * KisPart::currentInputManager ( )

Definition at line 617 of file KisPart.cpp.

618{
620 KisViewManager *manager = mw ? mw->viewManager() : 0;
621 return manager ? manager->inputManager() : 0;
622}
KisViewManager * viewManager
KisMainWindow * currentMainwindow() const
Definition KisPart.cpp:457
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 457 of file KisPart.cpp.

458{
459 QWidget *widget = qApp->activeWindow();
460 KisMainWindow *mainWindow = qobject_cast<KisMainWindow*>(widget);
461 while (!mainWindow && widget) {
462 widget = widget->parentWidget();
463 mainWindow = qobject_cast<KisMainWindow*>(widget);
464 }
465
466 if (!mainWindow && mainWindows().size() > 0) {
467 mainWindow = mainWindows().first();
468 }
469 return mainWindow;
470
471}
QList< QPointer< KisMainWindow > > mainWindows
Definition KisPart.cpp:106
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 473 of file KisPart.cpp.

474{
475 return currentMainwindow();
476}

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 241 of file KisPart.cpp.

242{
243 return d->documents.size();
244}

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 375 of file KisPart.cpp.

376{
377 return s_instance.exists();
378}

◆ idleWatcher()

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

◆ instance()

KisPart * KisPart::instance ( )
static

Definition at line 130 of file KisPart.cpp.

131{
132 return s_instance;
133}

◆ mainwindowCount()

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

Definition at line 451 of file KisPart.cpp.

452{
453 return d->mainWindows.count();
454}

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 269 of file KisPart.cpp.

270{
271 Q_EMIT sigMainWindowIsBeingCreated(mainWindow);
272}
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 511 of file KisPart.cpp.

512{
513 // TODO: refactor out this method!
514
517
519}
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 532 of file KisPart.cpp.

533{
534 KisCursorOverrideLock cursorLock(Qt::BusyCursor);
535
536 KisDocument *document = createDocument();
537
538 bool ok = document->loadNativeFormat(url.toLocalFile());
539 document->setModified(false);
540 document->undoStack()->clear();
541 document->documentInfo()->resetMetaData();
542
543 if (ok) {
544 QString mimeType = KisMimeDatabase::mimeTypeForFile(url.toLocalFile());
545 // in case this is a open document template remove the -template from the end
546 mimeType.remove( QRegularExpression( "-template$" ) );
547 document->setMimeTypeAfterLoading(mimeType);
548 document->resetPath();
549 document->setReadWrite(true);
550 }
551 else {
552 if (document->errorMessage().isEmpty()) {
553 QMessageBox::critical(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("Could not create document from template\n%1", document->localFilePath()));
554 }
555 else {
556 QMessageBox::critical(qApp->activeWindow(), i18nc("@title:window", "Krita"), i18n("Could not create document from template\n%1\nReason: %2", document->localFilePath(), document->errorMessage()));
557 }
558 delete document;
559 return;
560 }
561 QMap<QString, QString> dictionary;
562 // XXX: fill the dictionary from the desktop file
564 document->image()->rootLayer()->accept(v);
565
566 addDocument(document);
567
570}
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:209
KisDocument * createDocument() const
Definition KisPart.cpp:228
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 504 of file KisPart.cpp.

504 {
505 KisImageAnimationInterface* animInterface = image->animationInterface();
506 if ( animInterface && animInterface->documentPlaybackRange().contains(frame)) {
507 d->animationCachePopulator.requestRegenerationWithPriorityFrame(image, frame);
508 }
509}
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 91 of file KisPart.cpp.

92 : part(_part)
93 , idleWatcher(2500)
95 , playbackEngine(nullptr)
96 {
97 }
KisAnimationCachePopulator animationCachePopulator
Definition KisPart.cpp:109
std::unique_ptr< KisPlaybackEngine > playbackEngine
Definition KisPart.cpp:110
KisIdleWatcher idleWatcher
Definition KisPart.cpp:108
KisPart * part
Definition KisPart.cpp:103

◆ queryCloseDocument()

bool KisPart::queryCloseDocument ( KisDocument * document)
inline

Definition at line 118 of file KisPart.cpp.

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

◆ 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 604 of file KisPart.cpp.

605{
606 d->pendingAddRecentUrlMap.insert(url, oldUrl);
607}

References d.

◆ removeDocument()

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

Definition at line 246 of file KisPart.cpp.

247{
248 if (document) {
249 d->documents.removeAll(document);
250 Q_EMIT documentClosed('/' + objectName());
251 Q_EMIT sigDocumentRemoved(document->path());
252 if (deleteDocument) {
253 document->deleteLater();
254 }
255 }
256}
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 438 of file KisPart.cpp.

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

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 318 of file KisPart.cpp.

319{
320 if (!view) return;
321
329
330 Q_EMIT sigViewRemoved(view);
331
332 QPointer<KisDocument> doc = view->document();
333 d->views.removeAll(view);
334
335 if (doc) {
336 bool found = false;
337 Q_FOREACH (QPointer<KisView> view, d->views) {
338 if (view && view->document() == doc) {
339 found = true;
340 break;
341 }
342 }
343 if (!found) {
344 removeDocument(doc);
345 }
346 }
347}
bool hackIsSaving() const
void removeDocument(KisDocument *document, bool deleteDocument=true)
Definition KisPart.cpp:246
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 643 of file KisPart.cpp.

644{
645 if (sessionName.isNull()) return false;
646
648 KisSessionResourceSP session = rserver->resource("", "", sessionName);
649 if (!session || !session->valid()) return false;
650
651 return restoreSession(session);
652}
bool restoreSession(const QString &sessionName)
Definition KisPart.cpp:643
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 654 of file KisPart.cpp.

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

References d.

◆ setCurrentSession()

void KisPart::setCurrentSession ( KisSessionResourceSP session)

Definition at line 661 of file KisPart.cpp.

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

References d.

◆ setPlaybackEngine()

void KisPart::setPlaybackEngine ( KisPlaybackEngine * p_playbackEngine)
private

Definition at line 694 of file KisPart.cpp.

695{
696 // make sure that the old engine is still alive until the end
697 // of the emitted signal
698 std::unique_ptr<KisPlaybackEngine> backup(p_playbackEngine);
699 d->playbackEngine.swap(backup);
700
701 // Log all changes to playback engine for easier debugging.
702 // (See `krita.log` or `Help > Show Krita log for bug reports`.)
703 KisUsageLogger::log("Animation Playback Engine: " + QString(p_playbackEngine->metaObject()->className()));
704
705 Q_EMIT playbackEngineChanged(p_playbackEngine);
706}
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 624 of file KisPart.cpp.

625{
626 if (d->sessionManager.isNull()) {
627 d->sessionManager = new KisSessionManagerDialog();
628 d->sessionManager->setAttribute(Qt::WA_DeleteOnClose);
629 }
630
631 d->sessionManager->show();
632 d->sessionManager->activateWindow();
633}

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 421 of file KisPart.cpp.

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

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

◆ startBlankSession()

void KisPart::startBlankSession ( )

Definition at line 635 of file KisPart.cpp.

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

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 609 of file KisPart.cpp.

610{
611 addDocument(doc);
614
615}

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 685 of file KisPart.cpp.

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

References d.

◆ updateIdleWatcherConnections

void KisPart::updateIdleWatcherConnections ( )
privateslot

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

Definition at line 191 of file KisPart.cpp.

192{
193 QVector<KisImageSP> images;
194
195 Q_FOREACH (QPointer<KisDocument> document, documents()) {
196 if (document->image()) {
197 images << document->image();
198 }
199 }
200
201 d->idleWatcher.setTrackedImages(images);
202
206 d->idleWatcher.forceImageModified();
207}
QList< QPointer< KisDocument > > documents
Definition KisPart.cpp:107

References d, and documents.

◆ updateShortcuts

void KisPart::updateShortcuts ( )
privateslot

Definition at line 521 of file KisPart.cpp.

522{
523 // Update the UI actions. KisActionRegistry also takes care of updating
524 // shortcut hints in tooltips.
525 Q_FOREACH (KisMainWindow *mainWindow, d->mainWindows) {
526 KisKActionCollection *ac = mainWindow->actionCollection();
527
528 ac->updateShortcuts();
529 }
530}
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 666 of file KisPart.cpp.

667{
668#ifdef HAVE_MLT
669
670 // TODO: This is a slightly hacky workaround to loading the MLT engine over itself,
671 // as the QT-based engine no longer supports audio. Is there a better way?
672 if (d->playbackEngine->supportsAudio()) {
673 return;
674 }
675
677
678 if (canvas) {
679 d->playbackEngine->setObservedCanvas(canvas);
680 }
681
682#endif //HAVE_MLT
683}
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 354 of file KisPart.cpp.

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

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 478 of file KisPart.cpp.

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

References d.

Member Data Documentation

◆ animationCachePopulator

KisAnimationCachePopulator KisPart::animationCachePopulator

Definition at line 109 of file KisPart.cpp.

◆ closingSession

bool KisPart::closingSession {false}

Definition at line 113 of file KisPart.cpp.

113{false};

◆ currentSession

KisSessionResourceSP KisPart::currentSession

Definition at line 112 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 107 of file KisPart.cpp.

◆ idleWatcher

KisIdleWatcher * KisPart::idleWatcher

Definition at line 108 of file KisPart.cpp.

◆ mainWindows

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

Definition at line 106 of file KisPart.cpp.

◆ part

KisPart* KisPart::part

Definition at line 103 of file KisPart.cpp.

◆ pendingAddRecentUrlMap

QMap<QUrl, QUrl> KisPart::pendingAddRecentUrlMap

Definition at line 116 of file KisPart.cpp.

◆ playbackEngine

KisPlaybackEngine * KisPart::playbackEngine

Definition at line 110 of file KisPart.cpp.

◆ sessionManager

QPointer<KisSessionManagerDialog> KisPart::sessionManager

Definition at line 114 of file KisPart.cpp.

◆ views

QList< QPointer< KisView > > KisPart::views

Definition at line 105 of file KisPart.cpp.


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