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;
55
56#define KIS_MIME_TYPE "application/x-krita"
57
62class KRITAUI_EXPORT KisDocument : public QObject
63{
64 Q_OBJECT
65protected:
66
67 explicit KisDocument(bool addStorage = true);
68
76 explicit KisDocument(const KisDocument &rhs, bool addStorage);
77
78public:
79 enum OpenFlag {
80 None = 0,
81 DontAddToRecent = 0x1,
82 RecoveryFile = 0x2
83 };
84 Q_DECLARE_FLAGS(OpenFlags, OpenFlag)
85
86
93
99 QString embeddedResourcesStorageId() const;
100
109 QString linkedResourcesStorageId() const;
110
115 KisDocument *clone(bool addStorage = false);
116
123 bool openPath(const QString &path, OpenFlags flags = None);
124
135 bool importDocument(const QString &path);
136
143 bool exportDocument(const QString &path, const QByteArray &mimeType,bool isAdvancedExporting = false, bool showWarnings = false, KisPropertiesConfigurationSP exportConfiguration = 0);
149 bool exportDocumentSync(const QString &path, const QByteArray &mimeType, KisPropertiesConfigurationSP exportConfiguration = 0);
150
151private:
152 bool exportDocumentImpl(const KritaUtils::ExportFileJob &job, KisPropertiesConfigurationSP exportConfiguration, bool isAdvancedExporting= false);
153
154public:
162 void setReadWrite(bool readwrite = true);
163
170 static QByteArray nativeFormatMimeType() { return KIS_MIME_TYPE; }
171
173 bool isNativeFormat(const QByteArray& mimeType) const;
174
178
182 QByteArray mimeType() const;
183
190 void setMimeType(const QByteArray & mimeType);
191
195 bool fileBatchMode() const;
196
200 void setFileBatchMode(const bool batchMode);
201
207 void setErrorMessage(const QString& errMsg);
208
213 QString errorMessage() const;
214
219 void setWarningMessage(const QString& warningMsg);
220
226 QString warningMessage() const;
227
232 QPixmap generatePreview(const QSize& size);
233
242 void setEmpty(bool empty = true);
243
250 QDomDocument createDomDocument(const QString& tagName, const QString& version) const;
251
260 static QDomDocument createDomDocument(const QString& appName, const QString& tagName, const QString& version);
261
268 bool loadNativeFormat(const QString & file);
269
275 void setAutoSaveActive(bool autoSaveIsActive);
276
282 bool isAutoSaveActive();
283
287 void setNormalAutoSaveInterval();
288
293 void setEmergencyAutoSaveInterval();
294
298 void setInfiniteAutoSaveInterval();
299
304 KoDocumentInfo *documentInfo() const;
305
309 void removeAutoSaveFiles(const QString &autosaveBaseName, bool wasRecovered);
310
314 bool isModified() const;
315
324 QString caption() const;
325
331 void resetPath();
332
336 void setMimeTypeAfterLoading(const QString& mimeType);
337
341 KoUnit unit() const;
342
346 void setUnit(const KoUnit &unit);
347
349 void setGridConfig(const KisGridConfig &config);
350
353 void setGuidesConfig(const KisGuidesConfig &data);
354
376 QList<KoResourceLoadResult> linkedDocumentResources();
377
383 void setPaletteList(const QList<KoColorSetSP> &paletteList, bool emitSignal = false);
384
388 StoryboardItemList getStoryboardItemList();
389
393 void setStoryboardItemList(const StoryboardItemList &storyboardItemList, bool emitSignal = false);
394
398 QVector<StoryboardComment> getStoryboardCommentsList();
399
403 void setStoryboardCommentList(const QVector<StoryboardComment> &storyboardCommentList, bool emitSignal = false);
404
405 QVector<QFileInfo> getAudioTracks() const;
406 void setAudioTracks(QVector<QFileInfo> f);
407
408 void setAudioVolume(qreal level);
409 qreal getAudioLevel();
410
412 void setMirrorAxisConfig(const KisMirrorAxisConfig& config);
413
414 void clearUndoHistory();
415
420 void setModified(bool _mod);
421
422 void setRecovered(bool value);
423 bool isRecovered() const;
424
425 void updateEditingTime(bool forceStoreElapsed);
426
431
432
438
444 QByteArray serializeToNativeByteArray();
445
446
451 bool isInSaving() const;
452
453Q_SIGNALS:
454
460 void unitChanged(const KoUnit &unit);
461
466 void statusBarMessage(const QString& text, int timeout = 0);
467
473
477 void modified(bool);
478
481 void sigPathChanged(const QString &path);
482
484
485 void sigSavingFinished(const QString &filePath);
486
488
489 void sigBackgroundSavingFinished(KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage);
490
491 void sigCompleteBackgroundSaving(const KritaUtils::ExportFileJob &job, KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage);
492
494
496
498
500
505 void sigPaletteListChanged(const QList<KoColorSetSP> &oldPaletteList, const QList<KoColorSetSP> &newPaletteList);
506
508
510
512
514
515 void sigAudioLevelChanged(qreal level);
516
517private Q_SLOTS:
518 void finishExportInBackground();
519 void slotChildCompletedSavingInBackground(KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage);
520 void slotCompleteAutoSaving(const KritaUtils::ExportFileJob &job, KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage);
521
522 void slotCompleteSavingDocument(const KritaUtils::ExportFileJob &job, KisImportExportErrorCode status, const QString &errorMessage, const QString &warningMessage);
523
524 void slotInitiateAsyncAutosaving(KisDocument *clonedDocument);
525 void slotDocumentCloningCancelled();
526
527 void slotPerformIdleRoutines();
528
529private:
530
531 friend class KisPart;
532 friend class SafeSavingLocker;
533
534 KritaUtils::BackgroudSavingStartResult initiateSavingInBackground(const QString actionName,
535 const QObject *receiverObject, const char *receiverMethod,
536 const KritaUtils::ExportFileJob &job,
537 KisPropertiesConfigurationSP exportConfiguration,
538 std::unique_ptr<KisDocument> &&optionalClonedDocument, bool isAdvancedExporting = false);
539
540 KritaUtils::BackgroudSavingStartResult initiateSavingInBackground(const QString actionName,
541 const QObject *receiverObject, const char *receiverMethod,
542 const KritaUtils::ExportFileJob &job,
543 KisPropertiesConfigurationSP exportConfiguration, bool isAdvancedExporting =false );
544
545 bool startExportInBackground(const QString &actionName, const QString &location,
546 const QString &realLocation,
547 const QByteArray &mimeType,
548 bool showWarnings,
549 KisPropertiesConfigurationSP exportConfiguration, bool isAdvancedExporting= false);
550
555 void setAutoSaveDelay(int delay);
556
560 QString newObjectName();
561
562 QString generateAutoSaveFileName(const QString & path) const;
563
574 bool openFile();
575
576public:
577
578 bool isAutosaving() const;
579
580public:
581
582 QString localFilePath() const;
583 void setLocalFilePath( const QString &localFilePath );
584
585 KoDocumentInfoDlg* createDocumentInfoDialog(QWidget *parent, KoDocumentInfo *docInfo) const;
586
587 bool isReadWrite() const;
588
589 QString path() const;
590 void setPath(const QString &path);
591
592 bool closePath(bool promptToSave = true);
593
594 bool saveAs(const QString &path, const QByteArray &mimeType, bool showWarnings, KisPropertiesConfigurationSP exportConfiguration = 0);
595
600 bool newImage(const QString& name, qint32 width, qint32 height, const KoColorSpace * cs, const KoColor &bgColor, KisConfig::BackgroundStyle bgStyle,
601 int numberOfLayers, const QString &imageDescription, const double imageResolution);
602
603 bool isSaving() const;
604 void waitForSavingToComplete();
605
606
608
617
621 void setCurrentImage(KisImageSP image, bool forceInitialUpdate = true, KisNodeSP preActivatedNode = nullptr);
622
632 void hackPreliminarySetImage(KisImageSP image);
633
634 KisUndoStore* createUndoStore();
635
641
642 KoShapeLayer *shapeForNode(KisNodeSP layer) const;
643
648 void setPreActivatedNode(KisNodeSP activatedNode);
649
655
658
660 void setAssistants(const QList<KisPaintingAssistantSP> &value);
661
662
663 void setAssistantsGlobalColor(QColor color);
664 QColor assistantsGlobalColor();
665
666 // Color history if per document (configuration dependent)
667 void setColorHistory(const QList<KoColor> &colors);
669
673 KisSharedPtr<KisReferenceImagesLayer> referenceImagesLayer() const;
674
675 void setReferenceImagesLayer(KisSharedPtr<KisReferenceImagesLayer> layer, bool updateImage);
676
677 bool save(bool showWarnings, KisPropertiesConfigurationSP exportConfiguration);
678
682 QRectF documentBounds() const;
683
687 void autoSaveOnPause();
688
689Q_SIGNALS:
690
691 void completed();
692 void canceled(const QString &);
693
694private Q_SLOTS:
695
696 void setImageModified();
697 void setImageModifiedWithoutUndo();
698
699 void slotAutoSave();
700
701 void slotUndoStackCleanChanged(bool value);
702
703 void slotConfigChanged();
704
705 void slotImageRootChanged();
706
707
708public:
714 KisDocument *lockAndCloneForSaving();
715
716 KisDocument *lockAndCreateSnapshot();
717
718 void copyFromDocument(const KisDocument &rhs);
719
720private:
721
723 CONSTRUCT = 0,
724 REPLACE
725 };
726
727 void copyFromDocumentImpl(const KisDocument &rhs, CopyPolicy policy);
728
729 QString exportErrorToUserMessage(KisImportExportErrorCode status, const QString &errorMessage);
730
731 QString prettyPath() const;
732
733 bool openPathInternal(const QString &path);
734
735 void slotAutoSaveImpl(std::unique_ptr<KisDocument> &&optionalClonedDocument);
736
740 bool resourceSavingFilter(const QString &path, const QByteArray &mimeType, KisPropertiesConfigurationSP exportConfiguration);
741
742 class Private;
743 Private *const d;
744};
745
746Q_DECLARE_OPERATORS_FOR_FLAGS(KisDocument::OpenFlags)
748
749#endif
float value(const T *src, size_t ch)
#define KIS_MIME_TYPE
Definition KisDocument.h:56
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
QList< KoColor > colorHistory()
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()
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)