File indexing completed on 2025-03-09 03:57:08

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2010-08-08
0007  * Description : a class that manages the files to be renamed
0008  *
0009  * SPDX-FileCopyrightText: 2009-2012 by Andi Clemens <andi dot clemens at gmail dot com>
0010  *
0011  * SPDX-License-Identifier: GPL-2.0-or-later
0012  *
0013  * ============================================================ */
0014 
0015 #ifndef DIGIKAM_ADVANCED_RENAME_MANAGER_H
0016 #define DIGIKAM_ADVANCED_RENAME_MANAGER_H
0017 
0018 // Qt includes
0019 
0020 #include <QUrl>
0021 #include <QString>
0022 #include <QStringList>
0023 #include <QObject>
0024 
0025 // Local includes
0026 
0027 #include "digikam_export.h"
0028 
0029 namespace Digikam
0030 {
0031 
0032 class AdvancedRenameWidget;
0033 class Parser;
0034 class ParseSettings;
0035 
0036 class DIGIKAM_GUI_EXPORT AdvancedRenameManager : public QObject
0037 {
0038     Q_OBJECT
0039 
0040 public:
0041 
0042     enum ParserType
0043     {
0044         DefaultParser = 0,
0045         ImportParser
0046     };
0047 
0048     enum SortAction
0049     {
0050         SortName = 0,
0051         SortDate,
0052         SortSize,
0053         SortCustom
0054     };
0055 
0056     enum SortDirection
0057     {
0058         SortAscending = 0,
0059         SortDescending
0060     };
0061 
0062 public:
0063 
0064     AdvancedRenameManager();
0065     explicit AdvancedRenameManager(const QList<ParseSettings>& files);
0066     ~AdvancedRenameManager()                                                  override;
0067 
0068     void addFiles(const QList<ParseSettings>& files);
0069     void reset();
0070 
0071     void parseFiles();
0072     void parseFiles(const ParseSettings& settings);
0073     void parseFiles(const QString& parseString);
0074     void parseFiles(const QString& parseString, const ParseSettings& settings);
0075 
0076     void setParserType(ParserType type);
0077     Parser* getParser()                                                 const;
0078 
0079     void setSortAction(SortAction action);
0080     SortAction sortAction()                                             const;
0081 
0082     void setSortDirection(SortDirection direction);
0083     SortDirection sortDirection()                                       const;
0084 
0085     void setStartIndex(int index);
0086     void setCutFileName(int index);
0087 
0088     void setWidget(AdvancedRenameWidget* widget);
0089 
0090     int indexOfFile(const QString& filename);
0091     int indexOfFolder(const QString& filename);
0092     int indexOfFileGroup(const QString& filename);
0093     int indexOfFileCounter(const QString& filename);
0094 
0095     QString randomStringOfIndex(int index);
0096     QString newName(const QString& filename)                            const;
0097 
0098     QStringList            fileList()                                   const;
0099     QMap<QString, QString> newFileList(bool checkFileSystem = false)    const;
0100 
0101 Q_SIGNALS:
0102 
0103     void signalSortingChanged(QList<QUrl>);
0104 
0105 private:
0106 
0107     void addFile(const QString& filename)                               const;
0108     void addFile(const QString& filename, const QDateTime& datetime)    const;
0109     bool initialize();
0110     void initializeFileList();
0111     void resetState();
0112 
0113     QString fileGroupKey(const QString& filename)                       const;
0114 
0115     void clearMappings();
0116     void clearAll();
0117 
0118 private:
0119 
0120     // Disable
0121     AdvancedRenameManager(QObject*)                                = delete;
0122     AdvancedRenameManager(const AdvancedRenameManager&)            = delete;
0123     AdvancedRenameManager& operator=(const AdvancedRenameManager&) = delete;
0124 
0125 private:
0126 
0127     class Private;
0128     Private* const d;
0129 };
0130 
0131 } // namespace Digikam
0132 
0133 #endif // DIGIKAM_ADVANCED_RENAME_MANAGER_H