1 /* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2005-02-06
7 * Description : undo actions manager for image editor.
8 *
9 * Copyright (C) 2005 by Renchi Raju <renchi dot raju at gmail dot com>
10 * Copyright (C) 2005 by Joern Ahrens <joern dot ahrens at kdemail dot net>
11 * Copyright (C) 2006-2021 by Gilles Caulier <caulier dot gilles at gmail dot com>
12 *
13 * This program is free software; you can redistribute it
14 * and/or modify it under the terms of the GNU General
15 * Public License as published by the Free Software Foundation;
16 * either version 2, or (at your option)
17 * any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * ============================================================ */
25
26 #include "undoaction.h"
27
28 // KDE includes
29
30 #include <klocalizedstring.h>
31
32 // Local includes
33
34 #include "digikam_debug.h"
35 #include "editorcore.h"
36
37 namespace Digikam
38 {
39
fromImage(const DImg & img)40 UndoMetadataContainer UndoMetadataContainer::fromImage(const DImg& img)
41 {
42 UndoMetadataContainer container;
43 container.history = img.getItemHistory();
44 container.profile = img.getIccProfile();
45
46 return container;
47 }
48
toImage(DImg & img) const49 void UndoMetadataContainer::toImage(DImg& img) const
50 {
51 img.setItemHistory(history);
52 img.setIccProfile(profile);
53 }
54
changesIccProfile(const DImg & target) const55 bool UndoMetadataContainer::changesIccProfile(const DImg& target) const
56 {
57 return !(profile == target.getIccProfile());
58 }
59
60 // ---------------------------------------------------------------------------------------------
61
62 class Q_DECL_HIDDEN UndoAction::Private
63 {
64 public:
65
Private()66 explicit Private()
67 {
68 }
69
70 QString title;
71 QVariant fileOrigin;
72
73 UndoMetadataContainer container;
74 DImageHistory fileOriginResolvedHistory;
75 };
76
UndoAction(EditorCore * const core)77 UndoAction::UndoAction(EditorCore* const core)
78 : d(new Private)
79 {
80 d->container = UndoMetadataContainer::fromImage(*core->getImg());
81 }
82
~UndoAction()83 UndoAction::~UndoAction()
84 {
85 delete d;
86 }
87
setTitle(const QString & title)88 void UndoAction::setTitle(const QString& title)
89 {
90 d->title = title;
91 }
92
getTitle() const93 QString UndoAction::getTitle() const
94 {
95 return d->title;
96 }
97
setMetadata(const UndoMetadataContainer & c)98 void UndoAction::setMetadata(const UndoMetadataContainer& c)
99 {
100 d->container = c;
101 }
102
getMetadata() const103 UndoMetadataContainer UndoAction::getMetadata() const
104 {
105 return d->container;
106 }
107
hasFileOriginData() const108 bool UndoAction::hasFileOriginData() const
109 {
110 return !d->fileOrigin.isNull();
111 }
112
setFileOriginData(const QVariant & data,const DImageHistory & resolvedInitialHistory)113 void UndoAction::setFileOriginData(const QVariant& data,
114 const DImageHistory& resolvedInitialHistory)
115 {
116 d->fileOrigin = data;
117 d->fileOriginResolvedHistory = resolvedInitialHistory;
118 }
119
fileOriginData() const120 QVariant UndoAction::fileOriginData() const
121 {
122 return d->fileOrigin;
123 }
124
fileOriginResolvedHistory() const125 DImageHistory UndoAction::fileOriginResolvedHistory() const
126 {
127 return d->fileOriginResolvedHistory;
128 }
129
130 // ---------------------------------------------------------------------------------------------
131
UndoActionReversible(EditorCore * const core,const DImgBuiltinFilter & reversibleFilter)132 UndoActionReversible::UndoActionReversible(EditorCore* const core,
133 const DImgBuiltinFilter& reversibleFilter)
134 : UndoAction(core),
135 m_filter (reversibleFilter)
136 {
137 setTitle(m_filter.i18nDisplayableName());
138 }
139
getFilter() const140 DImgBuiltinFilter UndoActionReversible::getFilter() const
141 {
142 return m_filter;
143 }
144
getReverseFilter() const145 DImgBuiltinFilter UndoActionReversible::getReverseFilter() const
146 {
147 return m_filter.reverseFilter();
148 }
149
150 // ---------------------------------------------------------------------------------------------
151
UndoActionIrreversible(EditorCore * const core,const QString & title)152 UndoActionIrreversible::UndoActionIrreversible(EditorCore* const core,
153 const QString& title)
154 : UndoAction(core)
155 {
156 setTitle(title.isNull() ? i18nc("@title: menu entry to undo unknown previous action", "Unknown") : title);
157 }
158
~UndoActionIrreversible()159 UndoActionIrreversible::~UndoActionIrreversible()
160 {
161 }
162
163 } // namespace Digikam
164