summaryrefslogtreecommitdiff
path: root/src/modinfodialog.h
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-05-19 07:21:41 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-05-19 07:21:41 -0400
commitb0c5cf146c2d8eeb1e6dc945b069ed16b05154f8 (patch)
treed36dc6f1f5cda1f9ae405b483063e410f5717538 /src/modinfodialog.h
parent0232435e0a2fed46c864cf241fb2c42d9682bfed (diff)
added new FileRenamer class to handle user confirmations when hiding/unhiding files
conflict tree hooked up filetree shows the new dialogs, but doesn't handle buttons correctly yet
Diffstat (limited to 'src/modinfodialog.h')
-rw-r--r--src/modinfodialog.h140
1 files changed, 138 insertions, 2 deletions
diff --git a/src/modinfodialog.h b/src/modinfodialog.h
index 45745471..6af96c33 100644
--- a/src/modinfodialog.h
+++ b/src/modinfodialog.h
@@ -49,6 +49,141 @@ class QTreeView;
class CategoryFactory;
/**
+* 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();
+
+ /**
+ * 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);
+};
+
+
+/**
* this is a larger dialog used to visualise information abount the mod.
* @todo this would probably a good place for a plugin-system
**/
@@ -147,8 +282,8 @@ private:
void openIniFile(const QString &fileName);
bool allowNavigateFromTXT();
bool allowNavigateFromINI();
- bool hideFile(const QString &oldName);
- bool unhideFile(const QString &oldName);
+ FileRenamer::RenameResults hideFile(FileRenamer& renamer, const QString &oldName);
+ FileRenamer::RenameResults unhideFile(FileRenamer& renamer, const QString &oldName);
void addCheckedCategories(QTreeWidgetItem *tree);
void refreshPrimaryCategoriesBox();
@@ -254,6 +389,7 @@ private:
void previewDataFile(const QTreeWidgetItem* item);
void openDataFile(const QTreeWidgetItem* item);
+ void changeConflictFiles(bool hide);
};
#endif // MODINFODIALOG_H