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