summaryrefslogtreecommitdiff
path: root/src/filerenamer.h
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-06-15 17:58:23 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-07-02 10:10:16 -0400
commit59e0c4aa34fec9048d064705863c3269aacd86b5 (patch)
tree8e1c5859e68f2fd12ac4d2b6c7178feec031ae21 /src/filerenamer.h
parent67bc0d83277b36397766d97218d5ed9b4e25640a (diff)
moved filerenamer to its own .cpp/.h pair
Diffstat (limited to 'src/filerenamer.h')
-rw-r--r--src/filerenamer.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/filerenamer.h b/src/filerenamer.h
new file mode 100644
index 00000000..cd57244c
--- /dev/null
+++ b/src/filerenamer.h
@@ -0,0 +1,140 @@
+#ifndef FILERENAMER_H
+#define FILERENAMER_H
+
+#include <QWidget>
+
+/**
+* Renames individual files and handles dialog boxes to confirm replacements and
+* failures with the user
+**/
+class FileRenamer
+{
+public:
+ /**
+ * controls appearance and replacement behaviour; if RENAME_REPLACE_ALL and
+ * RENAME_REPLACE_NONE are not provided, the user will have the option to
+ * choose on the first replacement
+ **/
+ enum RenameFlags
+ {
+ /**
+ * this renamer will be used on multiple files, so display additional
+ * buttons to replace all and for canceling
+ **/
+ MULTIPLE = 0x01,
+
+ /**
+ * customizes some of the text shown on dialog to mention that files are
+ * being hidden
+ **/
+ HIDE = 0x02,
+
+ /**
+ * customizes some of the text shown on dialog to mention that files are
+ * being unhidden
+ **/
+ UNHIDE = 0x04,
+
+ /**
+ * silently replaces all existing files
+ **/
+ REPLACE_ALL = 0x08,
+
+ /**
+ * silently skips all existing files
+ **/
+ REPLACE_NONE = 0x10,
+ };
+
+
+ /** result of a single rename
+ *
+ **/
+ enum RenameResults
+ {
+ /**
+ * the user skipped this file
+ */
+ RESULT_SKIP,
+
+ /**
+ * the file was successfully renamed
+ */
+ RESULT_OK,
+
+ /**
+ * the user wants to cancel
+ */
+ RESULT_CANCEL
+ };
+
+
+ /**
+ * @param parent Parent widget for dialog boxes
+ **/
+ FileRenamer(QWidget* parent, QFlags<RenameFlags> flags);
+
+ /**
+ * renames the given file
+ * @param oldName current filename
+ * @param newName new filename
+ * @return whether the file was renamed, skipped or the user wants to cancel
+ **/
+ RenameResults rename(const QString& oldName, const QString& newName);
+
+private:
+ /**
+ *user's decision when replacing
+ **/
+ enum RenameDecision
+ {
+ /**
+ * replace the file
+ **/
+ DECISION_REPLACE,
+
+ /**
+ * skip the file
+ **/
+ DECISION_SKIP,
+
+ /**
+ * cancel the whole thing
+ **/
+ DECISION_CANCEL
+ };
+
+ /**
+ * parent widget for dialog boxes
+ **/
+ QWidget* m_parent;
+
+ /**
+ * flags
+ **/
+ QFlags<RenameFlags> m_flags;
+
+ /**
+ * asks the user to replace an existing file, may return early if the user
+ * has already selected to replace all/none
+ * @return whether to replace, skip or cancel
+ **/
+ RenameDecision confirmReplace(const QString& newName);
+
+ /**
+ * removal of a file failed, ask the user to continue or cancel
+ * @param name The name of the file that failed to be removed
+ * @return true to continue, false to stop
+ **/
+ bool removeFailed(const QString& name);
+
+ /**
+ * renaming a file failed, ask the user to continue or cancel
+ * @param oldName current filename
+ * @param newName new filename
+ * @return true to continue, false to stop
+ **/
+ bool renameFailed(const QString& oldName, const QString& newName);
+};
+
+#endif // FILERENAMER_H