digiKam
Loading...
Searching...
No Matches
editorwindow.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2006-01-20
7 * Description : core image editor GUI implementation
8 *
9 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2009-2011 by Andi Clemens <andi dot clemens at gmail dot com>
11 * SPDX-FileCopyrightText: 2015 by Mohamed_Anwer <m_dot_anwer at gmx dot com>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19// C++ includes
20
21#include <queue>
22
23// Qt includes
24
25#include <QColor>
26#include <QPointer>
27#include <QRect>
28#include <QString>
29#include <QProgressDialog>
30#include <QUrl>
31
32// Local includes
33
34#include "digikam_export.h"
35#include "digikam_config.h"
36#include "thumbbardock.h"
37#include "previewtoolbar.h"
38#include "savingcontext.h"
39#include "dxmlguiwindow.h"
40
41class QSplitter;
42class QMenu;
43class QAction;
44
45class KSelectAction;
46class KToolBarPopupAction;
47
48namespace Digikam
49{
50
51class DAdjustableLabel;
52class DCategorizedView;
53class Canvas;
54class DImageHistory;
55class EditorTool;
56class EditorStackView;
57class ExposureSettingsContainer;
58class IOFileSettings;
59class ICCSettingsContainer;
60class Sidebar;
61class SidebarSplitter;
62class StatusProgressBar;
63class VersionManager;
64class VersionFileOperation;
65class IccProfile;
66
67class DIGIKAM_EXPORT EditorWindow : public DXmlGuiWindow
68{
69 Q_OBJECT
70
71public:
72
80
81 const static QString CONFIG_GROUP_NAME;
82
83public:
84
85 explicit EditorWindow(const QString& name, QWidget* const parent = nullptr);
86 ~EditorWindow() override;
87
88 void registerExtraPluginsActions(QString& dom) override;
89 void loadTool(EditorTool* const tool);
90 bool actionEnabledState() const;
91
92public Q_SLOTS:
93
94 void slotSetup() override = 0;
95 virtual void slotSetupICC() = 0;
96
97Q_SIGNALS:
98
99 void signalSelectionChanged(const QRect&);
103
104protected:
105
106 bool m_nonDestructive = true;
107 bool m_setExifOrientationTag = true;
108 bool m_editingOriginalImage = true;
109 bool m_actionEnabledState = false;
110
111 DAdjustableLabel* m_resLabel = nullptr;
112
113 QColor m_bgColor;
114
115 SidebarSplitter* m_splitter = nullptr;
116
117 QAction* m_openVersionAction = nullptr;
118 QAction* m_saveAction = nullptr;
119 QAction* m_saveAsAction = nullptr;
120 KToolBarPopupAction* m_saveNewVersionAction = nullptr;
121 QAction* m_saveCurrentVersionAction = nullptr;
122 QAction* m_saveNewVersionAsAction = nullptr;
123 QMenu* m_saveNewVersionInFormatAction = nullptr;
124 QAction* m_exportAction = nullptr;
125 QAction* m_revertAction = nullptr;
126 QAction* m_discardChangesAction = nullptr;
127 QAction* m_fileDeleteAction = nullptr;
128 QAction* m_forwardAction = nullptr;
129 QAction* m_backwardAction = nullptr;
130
131 QAction* m_lastAction = nullptr;
132 QAction* m_firstAction = nullptr;
133
134 QAction* m_applyToolAction = nullptr;
135 QAction* m_closeToolAction = nullptr;
136
137 QAction* m_showBarAction = nullptr;
138
139 KToolBarPopupAction* m_undoAction = nullptr;
140 KToolBarPopupAction* m_redoAction = nullptr;
141
142 QMenu* m_contextMenu = nullptr;
143 QMenu* m_servicesMenu = nullptr;
144 QAction* m_serviceAction = nullptr;
145
146 EditorStackView* m_stackView = nullptr;
147 Canvas* m_canvas = nullptr;
148 StatusProgressBar* m_nameLabel = nullptr;
149 IOFileSettings* m_IOFileSettings = nullptr;
150 QPointer<QProgressDialog> m_savingProgressDialog = nullptr;
151
153
156
158 QVector<TransformType> m_transformQue;
159
160protected:
161
163 {
167 SaveVersionWithoutAsking = OverwriteWithoutAsking,
168 AlwaysNewVersion = AlwaysSaveAs
169 };
170
171protected:
172
173 void saveStandardSettings();
174 void readStandardSettings();
175 void applyStandardSettings();
176 void applyIOSettings();
177 void applyColorManagementSettings();
178
179 void setupStandardConnections();
180 void setupStandardActions();
181 void setupStatusBar();
182 void setupContextMenu();
183 void setupSelectToolsAction();
184 void toggleStandardActions(bool val);
185 void toggleZoomActions(bool val);
186 void toggleNonDestructiveActions();
187 void toggleToolActions(EditorTool* tool = nullptr);
188
189 bool promptForOverWrite();
190
191 bool promptUserDelete(const QUrl& url);
192 bool promptUserSave(const QUrl& url, SaveAskMode mode = AskIfNeeded, bool allowCancel = true);
193 bool waitForSavingToComplete();
194 void startingSave(const QUrl& url);
195 bool startingSaveAs(const QUrl& url);
196 bool startingSaveCurrentVersion(const QUrl& url);
197 bool startingSaveNewVersion(const QUrl& url);
198 bool startingSaveNewVersionAs(const QUrl& url);
199 bool startingSaveNewVersionInFormat(const QUrl& url, const QString& format);
200 bool checkPermissions(const QUrl& url);
201 bool checkOverwrite(const QUrl& url);
202 bool moveLocalFile(const QString& src, const QString& dest);
203 void movingSaveFileFinished(bool successful);
204 void colorManage();
205 void execSavingProgressDialog();
206
207 void resetOrigin();
208 void resetOriginSwitchFile();
209
210 void addServicesMenuForUrl(const QUrl& url);
211 void openWith(const QUrl& url, QAction* action);
212
213 SidebarSplitter* sidebarSplitter() const;
214 EditorStackView* editorStackView() const;
215 ExposureSettingsContainer* exposureSettings() const;
216
217 VersionFileOperation saveVersionFileOperation(const QUrl& url, bool fork);
218 VersionFileOperation saveAsVersionFileOperation(const QUrl& url, const QUrl& saveLocation, const QString& format);
219 VersionFileOperation saveInFormatVersionFileOperation(const QUrl& url, const QString& format);
220
221 virtual bool hasOriginalToRestore();
222 virtual DImageHistory resolvedImageHistory(const DImageHistory& history);
223
224 virtual void moveFile();
225 virtual void finishSaving(bool success);
226
227 virtual void readSettings();
228 virtual void saveSettings();
229 virtual void toggleActions(bool val);
230
231 virtual ThumbBarDock* thumbBar() const = 0;
232 virtual Sidebar* rightSideBar() const = 0;
233
234 virtual void setupConnections() = 0;
235 virtual void setupActions() = 0;
236 virtual void setupUserArea() = 0;
237
238 virtual void addServicesMenu() = 0;
239
240 virtual VersionManager* versionManager() const;
241
250 virtual QUrl saveDestinationUrl() = 0;
251
252 virtual void saveIsComplete() = 0;
253 virtual void saveAsIsComplete() = 0;
254 virtual void saveVersionIsComplete() = 0;
255
256protected Q_SLOTS:
257
258 void slotAboutToShowUndoMenu();
259 void slotAboutToShowRedoMenu();
260
261 void slotSelected(bool);
262
263 void slotLoadingProgress(const QString& filePath, float progress);
264 void slotSavingProgress(const QString& filePath, float progress);
265
266 void slotNameLabelCancelButtonPressed();
267
268 void slotComponentsInfo() override;
269
270 virtual void slotPrepareToLoad();
271 virtual void slotLoadingStarted(const QString& filename);
272 virtual void slotLoadingFinished(const QString& filename, bool success);
273 virtual void slotSavingStarted(const QString& filename);
274 virtual void slotFileOriginChanged(const QString& filePath);
275 virtual void slotDiscardChanges();
276 virtual void slotOpenOriginal();
277
278 virtual bool saveOrSaveAs();
279
280 virtual bool saveAs() = 0;
281 virtual bool save() = 0;
282 virtual bool saveNewVersion() = 0;
283 virtual bool saveCurrentVersion() = 0;
284 virtual bool saveNewVersionAs() = 0;
285 virtual bool saveNewVersionInFormat(const QString&) = 0;
287 virtual void slotDeleteCurrentItem() = 0;
288 virtual void slotBackward() = 0;
289 virtual void slotForward() = 0;
290 virtual void slotFirst() = 0;
291 virtual void slotLast() = 0;
292 virtual void slotUpdateItemInfo() = 0;
293 virtual void slotChanged() = 0;
294 virtual void slotContextMenu() = 0;
295 virtual void slotRevert() = 0;
296 virtual void slotAddedDropedItems(QDropEvent* e) = 0;
297 virtual void slotOpenWith(QAction* action = nullptr) = 0;
298
299private Q_SLOTS:
300
301 void slotSetUnderExposureIndicator(bool);
302 void slotSetOverExposureIndicator(bool);
303 void slotColorManagementOptionsChanged();
304 void slotToggleColorManagedView();
305 void slotSoftProofingOptions();
306 void slotUpdateSoftProofingState();
307 void slotSavingFinished(const QString& filename, bool success);
308 void slotZoomTo100Percents();
309 void slotZoomChanged(bool isMax, bool isMin, double zoom);
310 void slotSelectionChanged(const QRect& sel);
311 void slotSelectionSetText(const QRect& sel);
312 void slotToggleFitToWindow();
313 void slotToggleOffFitToWindow();
314 void slotFitToSelect();
315 void slotIncreaseZoom();
316 void slotDecreaseZoom();
317 void slotCloseTool();
318 void slotApplyTool();
319 void slotUndoStateChanged();
320 void slotThemeChanged();
321 void slotToggleRightSideBar() override;
322 void slotPreviousRightSideBarTab() override;
323 void slotNextRightSideBarTab() override;
324 void slotToolDone();
325
326 void slotRotateLeftIntoQue();
327 void slotRotateRightIntoQue();
328 void slotFlipHIntoQue();
329 void slotFlipVIntoQue();
330
331private:
332
333 void enterWaitingLoop();
334 void quitWaitingLoop();
335 void showSideBars(bool visible) override;
336 void showThumbBar(bool visible) override;
337 void customizedFullScreenMode(bool set) override;
338 bool thumbbarVisibility() const override;
339 void setColorManagedViewIndicatorToolTip(bool available, bool cmv);
340 void setUnderExposureToolTip(bool uei);
341 void setOverExposureToolTip(bool oei);
342
343 void setToolStartProgress(const QString& toolName);
344 void setToolProgress(int progress);
345 void setToolStopProgress();
346
347 void setToolInfoMessage(const QString& txt);
348
349 bool startingSaveVersion(const QUrl& url, bool subversion, bool saveAs, const QString& format);
350
351 void setPreviewModeMask(int mask);
352 PreviewToolBar::PreviewMode previewMode() const;
353
354 bool showFileSaveDialog(const QUrl& initialUrl, QUrl& newURL);
355
362 void setupTempSaveFile(const QUrl& url);
363
372 QString selectValidSavingFormat(const QUrl& targetUrl);
373
374 void addAction2ContextMenu(const QString& actionName, bool addDisabled = false);
375
376private:
377
378 class Private;
379 Private* const d = nullptr;
380
381 friend class EditorToolIface;
382};
383
384} // namespace Digikam
Definition canvas.h:44
Definition dexpanderbox.h:56
Definition dimagehistory.h:39
Definition dxmlguiwindow.h:84
Definition editorstackview.h:32
Definition editortooliface.h:35
Definition editortool.h:40
Definition editorwindow_p.h:149
Definition editorwindow.h:68
static const QString CONFIG_GROUP_NAME
Definition editorwindow.h:81
QString m_formatForRAWVersioning
Definition editorwindow.h:154
virtual void addServicesMenu()=0
void slotSetup() override=0
virtual void setupConnections()=0
virtual bool saveCurrentVersion()=0
virtual bool saveNewVersion()=0
virtual bool saveAs()=0
virtual bool saveNewVersionAs()=0
virtual Sidebar * rightSideBar() const =0
virtual void slotChanged()=0
void signalSelectionChanged(const QRect &)
virtual void setupUserArea()=0
void signalPreviewModeChanged(int)
virtual void slotRevert()=0
QString m_formatForSubversions
Definition editorwindow.h:155
QColor m_bgColor
Definition editorwindow.h:113
virtual void slotFileWithDefaultApplication()=0
virtual void setupActions()=0
virtual bool save()=0
virtual bool saveNewVersionInFormat(const QString &)=0
virtual QUrl saveDestinationUrl()=0
virtual void slotDeleteCurrentItem()=0
virtual void slotOpenWith(QAction *action=nullptr)=0
SaveAskMode
Definition editorwindow.h:163
@ AlwaysSaveAs
Definition editorwindow.h:166
@ AskIfNeeded
Definition editorwindow.h:164
@ OverwriteWithoutAsking
Definition editorwindow.h:165
QVector< TransformType > m_transformQue
NOTE: using QVector to store transforms.
Definition editorwindow.h:158
virtual void saveVersionIsComplete()=0
virtual void slotLast()=0
virtual void slotBackward()=0
virtual void slotForward()=0
virtual void slotUpdateItemInfo()=0
virtual void saveAsIsComplete()=0
virtual void saveIsComplete()=0
SavingContext m_savingContext
Definition editorwindow.h:152
virtual void slotAddedDropedItems(QDropEvent *e)=0
virtual void slotContextMenu()=0
virtual ThumbBarDock * thumbBar() const =0
virtual void slotFirst()=0
virtual void slotSetupICC()=0
TransformType
Definition editorwindow.h:74
@ RotateLeft
Definition editorwindow.h:75
@ FlipHorizontal
Definition editorwindow.h:77
@ RotateRight
Definition editorwindow.h:76
Definition exposurecontainer.h:29
Definition iofilesettings.h:26
PreviewMode
Definition previewtoolbar.h:40
Definition savingcontext.h:33
Definition sidebar.h:471
Definition sidebar.h:324
Definition statusprogressbar.h:33
Definition thumbbardock.h:74
Definition versionfileoperation.h:60
Definition versionmanager.h:36
Definition datefolderview.cpp:34