diff options
Diffstat (limited to 'src/modinfodialogconflicts.h')
| -rw-r--r-- | src/modinfodialogconflicts.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/src/modinfodialogconflicts.h b/src/modinfodialogconflicts.h new file mode 100644 index 00000000..a77c2ac9 --- /dev/null +++ b/src/modinfodialogconflicts.h @@ -0,0 +1,142 @@ +#ifndef MODINFODIALOGCONFLICTS_H +#define MODINFODIALOGCONFLICTS_H + +#include "modinfodialogtab.h" +#include "expanderwidget.h" +#include "filterwidget.h" +#include "directoryentry.h" +#include <QTreeWidget> +#include <optional> + +class ConflictsTab; +class OrganizerCore; +class ConflictItem; +class ConflictListModel; + +class GeneralConflictsTab : public QObject +{ + Q_OBJECT; + +public: + GeneralConflictsTab( + ConflictsTab* tab, Ui::ModInfoDialog* ui, OrganizerCore& oc); + + void clear(); + void saveState(Settings& s); + void restoreState(const Settings& s); + + bool update(); + +signals: + void modOpen(QString name); + +private: + struct Expanders + { + ExpanderWidget overwrite, overwritten, nonconflict; + }; + + ConflictsTab* m_tab; + Ui::ModInfoDialog* ui; + OrganizerCore& m_core; + Expanders m_expanders; + + ConflictListModel* m_overwriteModel; + ConflictListModel* m_overwrittenModel; + ConflictListModel* m_noConflictModel; + + ConflictItem createOverwriteItem( + MOShared::FileEntry::Index index, bool archive, + QString fileName, QString relativeName, + const MOShared::FileEntry::AlternativesVector& alternatives); + + ConflictItem createNoConflictItem( + MOShared::FileEntry::Index index, bool archive, + QString fileName, QString relativeName); + + ConflictItem createOverwrittenItem( + MOShared::FileEntry::Index index, int fileOrigin, bool archive, + QString fileName, QString relativeName); + + void onOverwriteActivated(const QModelIndex& index); + void onOverwrittenActivated(const QModelIndex& index); + + void onOverwriteTreeContext(const QPoint &pos); + void onOverwrittenTreeContext(const QPoint &pos); + void onNoConflictTreeContext(const QPoint &pos); +}; + + +class AdvancedConflictsTab : public QObject +{ + Q_OBJECT; + +public: + AdvancedConflictsTab( + ConflictsTab* tab, Ui::ModInfoDialog* ui, OrganizerCore& oc); + + void clear(); + void saveState(Settings& s); + void restoreState(const Settings& s); + + void update(); + +signals: + void modOpen(QString name); + +private: + ConflictsTab* m_tab; + Ui::ModInfoDialog* ui; + OrganizerCore& m_core; + FilterWidget m_filter; + ConflictListModel* m_model; + + std::optional<ConflictItem> createItem( + MOShared::FileEntry::Index index, int fileOrigin, bool archive, + QString fileName, QString relativeName, + const MOShared::FileEntry::AlternativesVector& alternatives); +}; + + +class ConflictsTab : public ModInfoDialogTab +{ + Q_OBJECT; + +public: + ConflictsTab(ModInfoDialogTabContext cx); + + void update() override; + void clear() override; + void saveState(Settings& s) override; + void restoreState(const Settings& s) override; + bool canHandleUnmanaged() const override; + + void openItems(QTreeView* tree); + void previewItems(QTreeView* tree); + void exploreItems(QTreeView* tree); + + void changeItemsVisibility(QTreeView* tree, bool visible); + + void showContextMenu(const QPoint &pos, QTreeView* tree); + +private: + struct Actions + { + QAction* hide = nullptr; + QAction* unhide = nullptr; + QAction* open = nullptr; + QAction* preview = nullptr; + QAction* explore = nullptr; + QMenu* gotoMenu = nullptr; + + std::vector<QAction*> gotoActions; + }; + + GeneralConflictsTab m_general; + AdvancedConflictsTab m_advanced; + + Actions createMenuActions(QTreeView* tree); + std::vector<QAction*> createGotoActions(const ConflictItem* item); +}; + +#endif // MODINFODIALOGCONFLICTS_H |
