Krita Source Code Documentation
Loading...
Searching...
No Matches
KisDocument.h
Go to the documentation of this file.
1/* This file is part of the Krita project
2 *
3 * SPDX-FileCopyrightText: 2014 Boudewijn Rempt <boud@valdyas.org>
4 *
5 * SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7
8#ifndef KISDOCUMENT_H
9#define KISDOCUMENT_H
10
11#include <QDateTime>
12#include <QList>
13#include <QFileInfo>
14
15#include <klocalizedstring.h>
16
17#include <kundo2stack.h>
18#include <KoColorSet.h>
19
20#include <kis_image.h>
23#include <kis_types.h>
25#include <KisReferenceImage.h>
26#include <kis_debug.h>
28#include <kis_config.h>
29#include "StoryboardItem.h"
30
31#include "kritaui_export.h"
32
33#include <memory>
34
35class QString;
36
37class KUndo2Command;
38class KoUnit;
39
40class KoColor;
41class KoColorSpace;
43class KoShapeLayer;
44class KoStore;
45class KoDocumentInfo;
48class KisUndoStore;
49class KisPart;
50class KisGridConfig;
51class KisGuidesConfig;
53class QDomDocument;
56
57#define KIS_MIME_TYPE "application/x-krita"
58
63class KRITAUI_EXPORT KisDocument : public QObject
64{
65 Q_OBJECT
66protected:
67
68 explicit KisDocument(bool addStorage = true);
69
77 explicit KisDocument(const KisDocument &rhs, bool addStorage);
78
79public:
80 enum OpenFlag {
81 None = 0,
82 DontAddToRecent = 0x1,
83 RecoveryFile = 0x2
84 };
85 Q_DECLARE_FLAGS(OpenFlags, OpenFlag)
86
87
94
100 QString embeddedResourcesStorageId() const;
101
110 QString linkedResourcesStorageId() const;
111
116 KisDocument *clone(bool addStorage = false);
117
124 bool openPath(const QString &path, OpenFlags flags = None);
125
136 bool importDocument(const QString &path);
137
144 bool exportDocument(const QString &path, const QByteArray &mimeType,bool isAdvancedExporting = false, bool showWarnings = false, KisPropertiesConfigurationSP exportConfiguration = 0);
150 bool exportDocumentSync(const QString &path, const QByteArray &mimeType, KisPropertiesConfigurationSP exportConfiguration = 0);
151
152private:
153 bool exportDocumentImpl(const KritaUtils::ExportFileJob &job, KisPropertiesConfigurationSP exportConfiguration, bool isAdvancedExporting= false);
154
155public:
163 void setReadWrite(bool readwrite = true);
164
171 static QByteArray nativeFormatMimeType() { return KIS_MIME_TYPE; }
172
174 bool isNativeFormat(const QByteArray& mimeType) const;
175
179
183 QByteArray mimeType() const;
184
191 void setMimeType(const QByteArray & mimeType);
192
196 bool fileBatchMode() const;
197
201 void setFileBatchMode(const bool batchMode);
202
208 void setErrorMessage(const QString& errMsg);
209
214 QString errorMessage() const;
215
220 void setWarningMessage(const QString& warningMsg);
221
227 QString warningMessage() const;
228
233 QPixmap generatePreview(const QSize& size);
234
243 void setEmpty(bool empty = true);
244
251 QDomDocument createDomDocument(const QString& tagName, const QString& version) const;
252
261 static QDomDocument createDomDocument(const QString& appName, const QString& tagName, const QString& version);
262
269 bool loadNativeFormat(const QString & file);
270
276 void setAutoSaveActive(bool autoSaveIsActive);
277
283 bool isAutoSaveActive();
284
288 void setNormalAutoSaveInterval();
289
294 void setEmergencyAutoSaveInterval();
295
299 void setInfiniteAutoSaveInterval();
300
305 KoDocumentInfo *documentInfo() const;
306
310 void removeAutoSaveFiles(const QString &autosaveBaseName, bool wasRecovered);
311
315 bool isModified() const;
316
325 QString caption() const;
326
332 void resetPath();
333
337 void setMimeTypeAfterLoading(const QString& mimeType);
338
342 KoUnit unit() const;
343
347 void setUnit(const KoUnit &unit);
348
350 void setGridConfig(const KisGridConfig &config);
351
354 void setGuidesConfig(const KisGuidesConfig &data);
355
377 QList<KoResourceLoadResult> linkedDocumentResources();
378
384 void setPaletteList(const QList<KoColorSetSP> &paletteList, bool emitSignal = false);
385
389 StoryboardItemList getStoryboardItemList();
390
394 void setStoryboardItemList(const StoryboardItemList &storyboardItemList, bool emitSignal = false);
395
399 QVector<StoryboardComment> getStoryboardCommentsList();
400
404 void setStoryboardCommentList(const QVector<StoryboardComment> &storyboardCommentList, bool emitSignal = false);
405
406 QVector<QFileInfo> getAudioTracks() const;
407 void setAudioTracks(QVector<QFileInfo> f);
408
409 void setAudioVolume(qreal level);
410 qreal getAudioLevel();
411
413 void setMirrorAxisConfig(const KisMirrorAxisConfig& config);
414
415 void clearUndoHistory();
416
421 void setModified(bool _mod);
422
423 void setRecovered(bool value);
424 bool isRecovered() const;
425
426 void updateEditingTime(bool forceStoreElapsed);
427
432
433
439
445 QByteArray serializeToNativeByteArray();
446
447
452 bool isInSaving() const;
453
454Q_SIGNALS:
455
461 void unitChanged(const KoUnit &unit);
462
467 void statusBarMessage(const QString& text, int timeout = 0);
468
474
478 void modified(bool);
479
482 void sigPathChanged(const QString &path);
483
485
486 void sigSavingFinished(const QString &filePath);
487
489
490 void sigBackgroundSavingFinished(KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage);
491
492 void sigCompleteBackgroundSaving(const KritaUtils::ExportFileJob &job, KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage);
493
495
497
499
501
506 void sigPaletteListChanged(const QList<KoColorSetSP> &oldPaletteList, const QList<KoColorSetSP> &newPaletteList);
507
509
511
513
515
516 void sigAudioLevelChanged(qreal level);
517
518private Q_SLOTS:
519 void finishExportInBackground();
520 void slotChildCompletedSavingInBackground(KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage);
521 void slotCompleteAutoSaving(const KritaUtils::ExportFileJob &job, KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage);
522
523 void slotCompleteSavingDocument(const KritaUtils::ExportFileJob &job, KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage);
524
525 void slotInitiateAsyncAutosaving(KisDocument *clonedDocument);
526 void slotDocumentCloningCancelled();
527
528 void slotPerformIdleRoutines();
529
530private:
531
532 friend class KisPart;
533 friend class SafeSavingLocker;
534
535 KritaUtils::BackgroudSavingStartResult initiateSavingInBackground(const QString actionName,
536 const QObject *receiverObject, const char *receiverMethod,
537 const KritaUtils::ExportFileJob &job,
538 KisPropertiesConfigurationSP exportConfiguration,
539 std::unique_ptr<KisDocument> &&optionalClonedDocument, bool isAdvancedExporting = false);
540
541 KritaUtils::BackgroudSavingStartResult initiateSavingInBackground(const QString actionName,
542 const QObject *receiverObject, const char *receiverMethod,
543 const KritaUtils::ExportFileJob &job,
544 KisPropertiesConfigurationSP exportConfiguration, bool isAdvancedExporting =false );
545
546 KisImportExportErrorCode startExportInBackground(const QString &actionName, const QString &location,
547 const QString &realLocation,
548 const QByteArray &mimeType,
549 bool showWarnings,
550 KisPropertiesConfigurationSP exportConfiguration, bool isAdvancedExporting= false);
551
556 void setAutoSaveDelay(int delay);
557
561 QString newObjectName();
562
563 QString generateAutoSaveFileName(const QString & path) const;
564
575 bool openFile();
576
577public:
578
579 bool isAutosaving() const;
580
581public:
582
583 QString localFilePath() const;
584 void setLocalFilePath( const QString &localFilePath );
585
586 KoDocumentInfoDlg* createDocumentInfoDialog(QWidget *parent, KoDocumentInfo *docInfo) const;
587
588 bool isReadWrite() const;
589
590 QString path() const;
591 void setPath(const QString &path);
592
593 bool closePath(bool promptToSave = true);
594
595 bool saveAs(const QString &path, const QByteArray &mimeType, bool showWarnings, KisPropertiesConfigurationSP exportConfiguration = 0);
596
601 bool newImage(const QString& name, qint32 width, qint32 height, const KoColorSpace * cs, const KoColor &bgColor, KisConfig::BackgroundStyle bgStyle,
602 int numberOfLayers, const QString &imageDescription, const double imageResolution);
603
604 bool isSaving() const;
605 void waitForSavingToComplete();
606
607
609
618
622 void setCurrentImage(KisImageSP image, bool forceInitialUpdate = true, KisNodeSP preActivatedNode = nullptr);
623
633 void hackPreliminarySetImage(KisImageSP image);
634
635 KisUndoStore* createUndoStore();
636
642
643 KoShapeLayer *shapeForNode(KisNodeSP layer) const;
644
649 void setPreActivatedNode(KisNodeSP activatedNode);
650
656
659
661 void setAssistants(const QList<KisPaintingAssistantSP> &value);
662
663
664 void setAssistantsGlobalColor(QColor color);
665 QColor assistantsGlobalColor();
666
674 void setColorHistoryColors(const QList<KoColor> &colors);
675
683 QList<KoColor> colorHistoryColors() const;
684
691
695 KisSharedPtr<KisReferenceImagesLayer> referenceImagesLayer() const;
696
697 void setReferenceImagesLayer(KisSharedPtr<KisReferenceImagesLayer> layer, bool updateImage);
698
699 bool save(bool showWarnings, KisPropertiesConfigurationSP exportConfiguration);
700
704 QRectF documentBounds() const;
705
709 void autoSaveOnPause();
710
711Q_SIGNALS:
712
713 void completed();
714 void canceled(const QString &);
715
716private Q_SLOTS:
717
718 void setImageModified();
719 void setImageModifiedWithoutUndo();
720
721 void slotAutoSave();
722
723 void slotUndoStackCleanChanged(bool value);
724
725 void slotConfigChanged();
726
727 void slotImageRootChanged();
728
729
730public:
736 KisDocument *lockAndCloneForSaving();
737
738 KisDocument *lockAndCreateSnapshot();
739
740 void copyFromDocument(const KisDocument &rhs);
741
742private:
743
745 CONSTRUCT = 0,
746 REPLACE
747 };
748
749 void copyFromDocumentImpl(const KisDocument &rhs, CopyPolicy policy);
750
751 QString exportErrorToUserMessage(KisImportExportErrorCode status, const QString &errorMessage);
752
753 QString prettyPath() const;
754
755 bool openPathInternal(const QString &path);
756
757 void slotAutoSaveImpl(std::unique_ptr<KisDocument> &&optionalClonedDocument);
758
762 bool resourceSavingFilter(const QString &path, const QByteArray &mimeType, KisPropertiesConfigurationSP exportConfiguration);
763
764 class Private;
765 Private *const d;
766};
767
768Q_DECLARE_OPERATORS_FOR_FLAGS(KisDocument::OpenFlags)
770
771#endif
float value(const T *src, size_t ch)
#define KIS_MIME_TYPE
Definition KisDocument.h:57
QList< QString > QStringList
Q_DECLARE_FLAGS(KisUpdaterContextSnapshotEx, KisUpdaterContextSnapshotExTag)
void completed()
const KisMirrorAxisConfig & mirrorAxisConfig() const
void clearStatusBarMessage()
void sigStoryboardCommentListChanged()
void sigBackgroundSavingFinished(KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage)
KisGridConfig gridConfig() const
QList< KisPaintingAssistantSP > assistants() const
const KisGuidesConfig & guidesConfig() const
returns the guides data for this document.
static QStringList extraNativeMimeTypes()
KisImportExportManager * importExportManager() const
importExportManager gives access to the internal import/export manager
void statusBarMessage(const QString &text, int timeout=0)
KoUnit unit() const
KisImageSP savingImage() const
savingImage provides a detached, shallow copy of the original image that must be used when saving....
void sigAudioLevelChanged(qreal level)
void sigAssistantsChanged()
QByteArray mimeType() const
void sigStoryboardItemListChanged()
void sigPaletteListChanged(const QList< KoColorSetSP > &oldPaletteList, const QList< KoColorSetSP > &newPaletteList)
void sigLoadingFinished()
void sigReadWriteChanged(bool value)
void setEmpty(bool empty=true)
Sets the document to empty.
KUndo2Stack * undoStack()
KoShapeControllerBase * shapeController() const
void sigGuidesConfigChanged(const KisGuidesConfig &config)
static QByteArray nativeFormatMimeType()
void sigAudioTracksChanged()
void canceled(const QString &)
KisImageWSP image() const
Private *const d
void sigGridConfigChanged(const KisGridConfig &config)
void sigSavingFinished(const QString &filePath)
void unitChanged(const KoUnit &unit)
bool isAutosaving() const
KisNodeSP preActivatedNode() const
void modified(bool)
void sigPathChanged(const QString &path)
void sigCompleteBackgroundSaving(const KritaUtils::ExportFileJob &job, KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage)
void sigReferenceImagesLayerChanged(KisSharedPtr< KisReferenceImagesLayer > layer)
void sigRecoveredChanged(bool value)
bool isRecovered() const
bool isInSaving() const
isInSaving shown if the document has any (background) saving process or not
void sigReferenceImagesChanged()
KisUniqueColorSet * colorHistoryModel()
void sigMirrorAxisConfigChanged()
The class managing all the filters.
The KisMirrorAxisConfig class stores configuration for the KisMirrorAxis canvas decoration....
The dialog that shows information about the document.
The class containing all meta information about a document.
Q_DECLARE_OPERATORS_FOR_FLAGS(KisBaseRectsWalker::SubtreeVisitFlags)
Q_DECLARE_METATYPE(KisPaintopLodLimitations)