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