File indexing completed on 2025-03-09 03:57:07
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2009-09-14 0007 * Description : a rename dialog for the AdvancedRename utility 0008 * 0009 * SPDX-FileCopyrightText: 2009-2012 by Andi Clemens <andi dot clemens at gmail dot com> 0010 * SPDX-FileCopyrightText: 2013-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #ifndef DIGIKAM_ADVANCED_RENAME_DIALOG_H 0017 #define DIGIKAM_ADVANCED_RENAME_DIALOG_H 0018 0019 // Qt includes 0020 0021 #include <QList> 0022 #include <QPair> 0023 #include <QTreeWidgetItem> 0024 #include <QUrl> 0025 #include <QDialog> 0026 0027 // Local includes 0028 0029 #include "iteminfo.h" 0030 #include "digikam_export.h" 0031 0032 class QEvent; 0033 class QMoveEvent; 0034 class QString; 0035 class QTreeWidget; 0036 0037 namespace Digikam 0038 { 0039 0040 class Parser; 0041 0042 class DIGIKAM_GUI_EXPORT AdvancedRenameListItem : public QTreeWidgetItem 0043 { 0044 public: 0045 0046 enum Column 0047 { 0048 OldName = 0, 0049 NewName 0050 }; 0051 0052 public: 0053 0054 explicit AdvancedRenameListItem(QTreeWidget* const view); 0055 AdvancedRenameListItem(QTreeWidget* const view, const QUrl& info); 0056 ~AdvancedRenameListItem() override; 0057 0058 void setImageUrl(const QUrl& url); 0059 QUrl imageUrl() const; 0060 0061 void setName(const QString& name); 0062 QString name() const; 0063 0064 void setNewName(const QString& name); 0065 QString newName() const; 0066 0067 void markInvalid(bool invalid); 0068 bool isNameEqual() const; 0069 0070 private: 0071 0072 // Disable 0073 AdvancedRenameListItem(const AdvancedRenameListItem&) = delete; 0074 AdvancedRenameListItem& operator=(const AdvancedRenameListItem&) = delete; 0075 0076 private: 0077 0078 class Private; 0079 Private* const d; 0080 }; 0081 0082 // -------------------------------------------------------- 0083 0084 typedef QPair<QUrl, QString> NewNameInfo; 0085 typedef QList<NewNameInfo> NewNamesList; 0086 0087 class DIGIKAM_GUI_EXPORT AdvancedRenameDialog : public QDialog 0088 { 0089 Q_OBJECT 0090 0091 public: 0092 0093 explicit AdvancedRenameDialog(QWidget* const parent = nullptr); 0094 ~AdvancedRenameDialog() override; 0095 0096 NewNamesList newNames() const; 0097 0098 public Q_SLOTS: 0099 0100 void slotAddImages(const QList<QUrl>& urls); 0101 0102 private Q_SLOTS: 0103 0104 void slotParseStringChanged(const QString&); 0105 void slotReturnPressed(); 0106 0107 void slotSortActionTriggered(QAction*); 0108 void slotSortDirectionTriggered(QAction*); 0109 0110 void slotShowContextMenu(const QPoint&); 0111 void slotHelp(); 0112 0113 private: 0114 0115 void setupWidgets(); 0116 void setupConnections(); 0117 0118 void initDialog(); 0119 void readSettings(); 0120 void writeSettings(); 0121 bool checkNewNames() const; 0122 0123 NewNamesList filterNewNames() const; 0124 0125 private: 0126 0127 // Disable 0128 AdvancedRenameDialog(const AdvancedRenameDialog&) = delete; 0129 AdvancedRenameDialog& operator=(const AdvancedRenameDialog&) = delete; 0130 0131 private: 0132 0133 class Private; 0134 Private* const d; 0135 }; 0136 0137 } // namespace Digikam 0138 0139 #endif // DIGIKAM_ADVANCED_RENAME_DIALOG_H