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

#include <KisWindowLayoutResource.h>

+ Inheritance diagram for KisWindowLayoutResource:

Classes

struct  Private
 

Public Member Functions

void applyLayout ()
 
KoResourceSP clone () const override
 
QString defaultFileExtension () const override
 
 KisWindowLayoutResource (const KisWindowLayoutResource &rhs)
 
 KisWindowLayoutResource (const QString &filename)
 
bool loadFromDevice (QIODevice *dev, KisResourcesInterfaceSP resourcesInterface) override
 
KisWindowLayoutResourceoperator= (const KisWindowLayoutResource &rhs)=delete
 
QPair< QString, QString > resourceType () const override
 
bool saveToDevice (QIODevice *dev) const override
 
 ~KisWindowLayoutResource () override
 
- Public Member Functions inherited from KoResource
bool active () const
 
void addMetaData (QString key, QVariant value)
 store the given key, value pair in the resource
 
virtual void clearSideLoadedResources ()
 
virtual QList< KoResourceLoadResultembeddedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
QString filename () const
 
QImage image () const
 
bool isDirty () const
 
virtual bool isEphemeral () const
 
virtual bool isSerializable () const
 
 KoResource ()
 
 KoResource (const KoResource &rhs)
 
 KoResource (const QString &filename)
 
virtual QList< KoResourceLoadResultlinkedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
bool load (KisResourcesInterfaceSP resourcesInterface)
 
QString md5Sum (bool generateIfEmpty=true) const
 
QMap< QString, QVariant > metadata () const
 get a map with all the metadata
 
virtual QString name () const
 
KoResourceoperator= (const KoResource &rhs)=delete
 
bool permanent () const
 
virtual QList< int > requiredCanvasResources () const
 
QList< KoResourceLoadResultrequiredResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
int resourceId () const
 
bool save ()
 
void setActive (bool active)
 
void setDirty (bool value)
 Mark the preset as modified but not saved.
 
void setFilename (const QString &filename)
 
void setImage (const QImage &image)
 
void setMD5Sum (const QString &md5sum)
 Set the md5sum of this resource. It must be in hex-encoded string format.
 
void setName (const QString &name)
 
void setPermanent (bool permanent)
 
void setResourceId (int id)
 
void setStorageLocation (const QString &location)
 
void setValid (bool valid)
 
void setVersion (int version)
 
virtual QList< KoResourceLoadResultsideLoadedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
KoResourceSignature signature () const
 
QString storageLocation () const
 
QList< KoResourceLoadResulttakeSideLoadedResources (KisResourcesInterfaceSP globalResourcesInterface)
 
virtual QImage thumbnail () const
 thumbnail the thumbnail image to use in resource selectors
 
virtual QString thumbnailPath () const
 thumbnailPath returns the path to a separate thumbnail image, outside the actual resource file itself. If the path is relative, it is supposed start in the same location as the resource itself. If it's absolute, that is, it starts with "/", it is from the root of the storage.
 
virtual void updateThumbnail ()
 updateThumbnail updates the thumbnail for this resource. Reimplement if your thumbnail is something else than the image set with setImage.
 
bool valid () const
 
int version () const
 Get the version of the resource.
 
virtual ~KoResource ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Static Public Member Functions

static KisWindowLayoutResourceSP fromCurrentWindows (const QString &filename, const QList< QPointer< KisMainWindow > > &mainWindows, bool showImageInAllWindows, bool primaryWorkspaceFollowsFocus, KisMainWindow *primaryWindow)
 

Protected Member Functions

virtual void loadXml (const QDomElement &root) const
 
virtual void saveXml (QDomDocument &doc, QDomElement &root) const
 
void setWindows (const QList< QPointer< KisMainWindow > > &mainWindows)
 

Private Attributes

QScopedPointer< Privated
 

Additional Inherited Members

- Public Attributes inherited from KoResource
bool active {true}
 
QString filename
 
QImage image
 
QString md5sum
 
QMap< QString, QVariant > metadata
 
bool modified {false}
 
QString name
 
bool permanent {false}
 
int resourceId {-1}
 
QString storageLocation
 
bool valid {false}
 
int version {-1}
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Detailed Description

Definition at line 18 of file KisWindowLayoutResource.h.

Constructor & Destructor Documentation

◆ KisWindowLayoutResource() [1/2]

KisWindowLayoutResource::KisWindowLayoutResource ( const QString & filename)
explicit

Definition at line 223 of file KisWindowLayoutResource.cpp.

225 , d(new Private)
226{}
QScopedPointer< Private > d
QString filename

◆ ~KisWindowLayoutResource()

KisWindowLayoutResource::~KisWindowLayoutResource ( )
override

Definition at line 228 of file KisWindowLayoutResource.cpp.

229{}

◆ KisWindowLayoutResource() [2/2]

KisWindowLayoutResource::KisWindowLayoutResource ( const KisWindowLayoutResource & rhs)

Definition at line 231 of file KisWindowLayoutResource.cpp.

232 : KoResource(rhs)
233 , d(new Private(*rhs.d))
234{
235}

Member Function Documentation

◆ applyLayout()

void KisWindowLayoutResource::applyLayout ( )

Definition at line 255 of file KisWindowLayoutResource.cpp.

256{
257 auto *kisPart = KisPart::instance();
258 auto *layoutManager= KisWindowLayoutManager::instance();
259
260 layoutManager->setLastUsedLayout(this);
261
262 QList<QPointer<KisMainWindow>> currentWindows = kisPart->mainWindows();
263 bool createWindows = d->windows.isEmpty();
264
265 if (createWindows) {
266 // No windows defined (e.g. fresh new session). Leave things as they are, but make sure there's at least one visible main window
267 if (kisPart->mainwindowCount() == 0) {
268 kisPart->createMainWindow();
269 } else {
270 kisPart->mainWindows().first()->show();
271 }
272 } else {
273 d->openNecessaryWindows(currentWindows);
274 }
275
276 // Wait for the windows to finish opening / closing before applying saved geometry.
277 // If we don't, the geometry may get reset after we apply it.
278 QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
279
280 Q_FOREACH(const auto &window, d->windows) {
281 QPointer<KisMainWindow> mainWindow = kisPart->windowById(window.windowId);
283
284 mainWindow->restoreGeometry(window.geometry.data);
285 mainWindow->restoreWorkspaceState(window.windowState);
286
287 mainWindow->setCanvasDetached(window.canvasDetached);
288 if (window.canvasDetached) {
289 QWidget *canvasWindow = mainWindow->canvasWindow();
290 canvasWindow->restoreGeometry(window.canvasWindowGeometry.data);
291 }
292 }
293
294 QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
295
296 QList<QScreen*> screens = d->getScreensInConsistentOrder();
297 Q_FOREACH(const auto &window, d->windows) {
298 Private::WindowGeometry geometry = window.geometry;
299 QPointer<KisMainWindow> mainWindow = kisPart->windowById(window.windowId);
301
302 if (geometry.screen >= 0 && geometry.screen < screens.size()) {
303 geometry.forceOntoCorrectScreen(mainWindow, screens);
304 }
305 if (window.canvasDetached) {
306 Private::WindowGeometry canvasWindowGeometry = window.canvasWindowGeometry;
307 if (canvasWindowGeometry.screen >= 0 && canvasWindowGeometry.screen < screens.size()) {
308 canvasWindowGeometry.forceOntoCorrectScreen(mainWindow->canvasWindow(), screens);
309 }
310 }
311 }
312
313 layoutManager->setShowImageInAllWindowsEnabled(d->showImageInAllWindows);
314 layoutManager->setPrimaryWorkspaceFollowsFocus(d->primaryWorkspaceFollowsFocus, d->primaryWindow);
315 if (!createWindows) {
316 d->closeUnneededWindows(currentWindows);
317 }
318}
static KisPart * instance()
Definition KisPart.cpp:131
static KisWindowLayoutManager * instance()
#define KIS_SAFE_ASSERT_RECOVER_BREAK(cond)
Definition kis_assert.h:127

References d, KisWindowLayoutResource::Private::WindowGeometry::forceOntoCorrectScreen(), KisPart::instance(), KisWindowLayoutManager::instance(), KIS_SAFE_ASSERT_RECOVER_BREAK, and KisWindowLayoutResource::Private::WindowGeometry::screen.

◆ clone()

KoResourceSP KisWindowLayoutResource::clone ( ) const
overridevirtual

Implements KoResource.

Definition at line 237 of file KisWindowLayoutResource.cpp.

238{
239 return KoResourceSP(new KisWindowLayoutResource(*this));
240}
KisWindowLayoutResource(const QString &filename)
QSharedPointer< KoResource > KoResourceSP

References KisWindowLayoutResource().

◆ defaultFileExtension()

QString KisWindowLayoutResource::defaultFileExtension ( ) const
overridevirtual
Returns
the default file extension which should be used when saving the resource

Reimplemented from KoResource.

Definition at line 422 of file KisWindowLayoutResource.cpp.

423{
424 return QString(".kwl");
425}

◆ fromCurrentWindows()

KisWindowLayoutResourceSP KisWindowLayoutResource::fromCurrentWindows ( const QString & filename,
const QList< QPointer< KisMainWindow > > & mainWindows,
bool showImageInAllWindows,
bool primaryWorkspaceFollowsFocus,
KisMainWindow * primaryWindow )
static

Definition at line 242 of file KisWindowLayoutResource.cpp.

246{
248 resource->setWindows(mainWindows);
249 resource->d->showImageInAllWindows = showImageInAllWindows;
250 resource->d->primaryWorkspaceFollowsFocus = primaryWorkspaceFollowsFocus;
251 resource->d->primaryWindow = primaryWindow->id();
252 return resource;
253}

References KoResource::filename, KisMainWindow::id, and KisWindowLayoutResource().

◆ loadFromDevice()

bool KisWindowLayoutResource::loadFromDevice ( QIODevice * dev,
KisResourcesInterfaceSP resourcesInterface )
overridevirtual

Implements KoResource.

Definition at line 337 of file KisWindowLayoutResource.cpp.

338{
339 Q_UNUSED(resourcesInterface);
340
341 QDomDocument doc;
342 if (!doc.setContent(dev)) {
343 return false;
344 }
345
346 QDomElement element = doc.documentElement();
347 setName(element.attribute("name"));
348
349 d->windows.clear();
350
351 loadXml(element);
352
353 setValid(true);
354 return true;
355}
virtual void loadXml(const QDomElement &root) const
void setValid(bool valid)
void setName(const QString &name)

References d, loadXml(), KoResource::setName(), and KoResource::setValid().

◆ loadXml()

void KisWindowLayoutResource::loadXml ( const QDomElement & root) const
protectedvirtual

Reimplemented in KisSessionResource.

Definition at line 382 of file KisWindowLayoutResource.cpp.

383{
384 d->showImageInAllWindows = KisDomUtils::toInt(element.attribute("showImageInAllWindows", "0"));
385 d->primaryWorkspaceFollowsFocus = KisDomUtils::toInt(element.attribute("primaryWorkspaceFollowsFocus", "0"));
386 d->primaryWindow = QUuid::fromString(element.attribute("primaryWindow"));
387
388#ifdef Q_OS_ANDROID
389 if (element.firstChildElement("window") != element.lastChildElement("window")) {
390 QMessageBox::warning(qApp->activeWindow(), i18nc("@title:window", "Krita"),
391 "Workspaces with multiple windows isn't supported on Android");
392 return;
393 }
394#endif
395
396 for (auto windowElement = element.firstChildElement("window");
397 !windowElement.isNull();
398 windowElement = windowElement.nextSiblingElement("window")) {
399
400 Private::Window window;
401
402 window.windowId = QUuid(windowElement.attribute("id", QUuid().toString()));
403 if (window.windowId.isNull()) {
404 window.windowId = QUuid::createUuid();
405 }
406
407 window.geometry = Private::WindowGeometry::load(windowElement);
408
409 QDomElement canvasWindowElement = windowElement.firstChildElement("canvasWindow");
410 if (!canvasWindowElement.isNull()) {
411 window.canvasDetached = true;
412 window.canvasWindowGeometry = Private::WindowGeometry::load(canvasWindowElement);
413 }
414
415 QDomElement state = windowElement.firstChildElement("windowState");
416 window.windowState = QByteArray::fromBase64(state.text().toLatin1());
417
418 d->windows.append(window);
419 }
420}
int toInt(const QString &str, bool *ok=nullptr)
QString toString(const QString &value)
static WindowGeometry load(const QDomElement &element)

References KisWindowLayoutResource::Private::Window::canvasDetached, KisWindowLayoutResource::Private::Window::canvasWindowGeometry, d, KisWindowLayoutResource::Private::Window::geometry, KisWindowLayoutResource::Private::WindowGeometry::load(), KisDomUtils::toInt(), KisWindowLayoutResource::Private::Window::windowId, and KisWindowLayoutResource::Private::Window::windowState.

◆ operator=()

KisWindowLayoutResource & KisWindowLayoutResource::operator= ( const KisWindowLayoutResource & rhs)
delete

◆ resourceType()

QPair< QString, QString > KisWindowLayoutResource::resourceType ( ) const
inlineoverridevirtual
Returns
the resource type

Implements KoResource.

Definition at line 40 of file KisWindowLayoutResource.h.

41 {
42 return QPair<QString, QString>(ResourceType::WindowLayouts, "");
43 }
const QString WindowLayouts

References ResourceType::WindowLayouts.

◆ saveToDevice()

bool KisWindowLayoutResource::saveToDevice ( QIODevice * dev) const
overridevirtual

Reimplemented from KoResource.

Definition at line 320 of file KisWindowLayoutResource.cpp.

321{
322 QDomDocument doc;
323 QDomElement root = doc.createElement("WindowLayout");
324 root.setAttribute("name", name());
325 root.setAttribute("version", WINDOW_LAYOUT_VERSION);
326
327 saveXml(doc, root);
328
329 doc.appendChild(root);
330
331 QTextStream textStream(dev);
333 doc.save(textStream, 4);
334 return true;
335}
static const int WINDOW_LAYOUT_VERSION
virtual void saveXml(QDomDocument &doc, QDomElement &root) const
void setUtf8OnStream(QTextStream &stream)
QString name

References KoResource::name, saveXml(), KisPortingUtils::setUtf8OnStream(), and WINDOW_LAYOUT_VERSION.

◆ saveXml()

void KisWindowLayoutResource::saveXml ( QDomDocument & doc,
QDomElement & root ) const
protectedvirtual

Reimplemented in KisSessionResource.

Definition at line 357 of file KisWindowLayoutResource.cpp.

358{
359 root.setAttribute("showImageInAllWindows", (int)d->showImageInAllWindows);
360 root.setAttribute("primaryWorkspaceFollowsFocus", (int)d->primaryWorkspaceFollowsFocus);
361 root.setAttribute("primaryWindow", d->primaryWindow.toString());
362
363 Q_FOREACH(const auto &window, d->windows) {
364 QDomElement elem = doc.createElement("window");
365 elem.setAttribute("id", window.windowId.toString());
366
367 window.geometry.save(doc, elem);
368
369 if (window.canvasDetached) {
370 QDomElement canvasWindowElement = doc.createElement("canvasWindow");
371 window.canvasWindowGeometry.save(doc, canvasWindowElement);
372 elem.appendChild(canvasWindowElement);
373 }
374
375 QDomElement state = doc.createElement("windowState");
376 state.appendChild(doc.createCDATASection(window.windowState.toBase64()));
377 elem.appendChild(state);
378 root.appendChild(elem);
379 }
380}

References d.

◆ setWindows()

void KisWindowLayoutResource::setWindows ( const QList< QPointer< KisMainWindow > > & mainWindows)
protected

Definition at line 427 of file KisWindowLayoutResource.cpp.

428{
429 d->windows.clear();
430
431 QList<QScreen*> screens = d->getScreensInConsistentOrder();
432
433 Q_FOREACH(auto window, mainWindows) {
434 if (!window->isVisible()) continue;
435
436 Private::Window state;
437 state.windowId = window->id();
438 state.windowState = window->saveState();
439 state.geometry = Private::WindowGeometry::fromWindow(window, screens);
440
441 state.canvasDetached = window->canvasDetached();
442 if (state.canvasDetached) {
443 state.canvasWindowGeometry = Private::WindowGeometry::fromWindow(window->canvasWindow(), screens);
444 }
445
446 d->windows.append(state);
447 }
448}
static WindowGeometry fromWindow(const QWidget *window, QList< QScreen * > screens)

References KisWindowLayoutResource::Private::Window::canvasDetached, KisWindowLayoutResource::Private::Window::canvasWindowGeometry, d, KisWindowLayoutResource::Private::WindowGeometry::fromWindow(), KisWindowLayoutResource::Private::Window::geometry, KisWindowLayoutResource::Private::Window::windowId, and KisWindowLayoutResource::Private::Window::windowState.

Member Data Documentation

◆ d

QScopedPointer<Private> KisWindowLayoutResource::d
private

Definition at line 57 of file KisWindowLayoutResource.h.


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