diff options
| author | Jeremy Rimpo <jrim@rimpo.org> | 2019-07-03 10:24:14 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-03 10:24:14 -0500 |
| commit | efec72a85a351f53880bffdba2438f6802d4f9ab (patch) | |
| tree | 94cf5dd724a16f29b458776ef5a83477ccfe2a52 /src/modinfodialogconflicts.h | |
| parent | 1822c1dc655e60c7693b528004ed715305df45f5 (diff) | |
| parent | 7fe637ce4421e0c6d6ee6b103db5fcc4ef676c25 (diff) | |
Merge pull request #782 from isanae/modinfodialog-rework
Mod info dialog rework
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 |
