summaryrefslogtreecommitdiff
path: root/src/modlistviewactions.h
blob: 33442ce7047709ed94fc03b237242826ce9c325f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#ifndef MODLISTVIEWACTIONS_H
#define MODLISTVIEWACTIONS_H

#include <QObject>
#include <QString>

#include "modinfo.h"
#include "modinfodialogfwd.h"

class CategoryFactory;
class FilterList;
class MainWindow;
class ModListView;
class OrganizerCore;

class ModListViewActions : public QObject
{
  Q_OBJECT

public:

  // currently passing the main window itself because a lots of stuff needs it but
  // it would be nice to avoid passing it at some point
  //
  ModListViewActions(
    OrganizerCore& core,
    FilterList& filters,
    CategoryFactory& categoryFactory,
    MainWindow* mainWindow,
    ModListView* view);

  // install the mod from the given archive
  //
  void installMod(const QString& archivePath = "") const;

  // create an empty mod/a separator before the given mod or at
  // the end of the list if the index is -1
  //
  void createEmptyMod(int modIndex) const;
  void createSeparator(int modIndex) const;

  // check all mods for update
  //
  void checkModsForUpdates() const;

  // start the "Export Mod List" dialog
  //
  void exportModListCSV() const;

  // display mod information
  //
  void displayModInformation(const QString& modName, ModInfoTabIDs tabID = ModInfoTabIDs::None) const;
  void displayModInformation(unsigned int index, ModInfoTabIDs tab = ModInfoTabIDs::None) const;
  void displayModInformation(ModInfo::Ptr modInfo, unsigned int modIndex, ModInfoTabIDs tabID = ModInfoTabIDs::None) const;

  // move mods to top/bottom, start the "Send to priority" and "Send to separator" dialog
  //
  void sendModsToTop(const QModelIndexList& index) const;
  void sendModsToBottom(const QModelIndexList& index) const;
  void sendModsToPriority(const QModelIndexList& index) const;
  void sendModsToSeparator(const QModelIndexList& index) const;

  // actions for most regular mods
  //
  void renameMod(const QModelIndex& index) const;
  void removeMods(const QModelIndexList& indices) const;
  void ignoreMissingData(const QModelIndexList& indices) const;
  void markConverted(const QModelIndexList& indices) const;
  void visitOnNexus(const QModelIndexList& indices) const;
  void visitWebPage(const QModelIndexList& indices) const;

  // set/reset color of the given selection, using the given reference index (index
  // at which the context menu was shown)
  //
  void setColor(const QModelIndexList& indices, const QModelIndex& refIndex) const;
  void resetColor(const QModelIndexList& indices, const QModelIndex& refIndex) const;

  // set the category of the mod in the given list, using the given index as reference
  // - the categories are set as-is on the refernce mod
  // - for the other mods, the category is only set if the current state of the category
  //   on the reference is different
  //
  void setCategories(const QModelIndexList& selected, const QModelIndex& ref,
    const std::vector<std::pair<int, bool>>& categories) const;

  // open the Windows explorer for the specified mods
  //
  void openExplorer(const QModelIndexList& index) const;

  // backup-specific actions
  //
  void restoreBackup(const QModelIndex& index) const;

  // overwrite-specific actions
  //
  void createModFromOverwrite() const;
  void moveOverwriteContentToExistingMod() const;
  void clearOverwrite() const;

signals:

  // emitted when the overwrite mod has been clear
  //
  void overwriteCleared() const;

private:

  // move the contents of the overwrite to the given path
  //
  void moveOverwriteContentsTo(const QString& absolutePath) const;

  // set the category of the given mod based on the given array
  //
  void setCategories(ModInfo::Ptr mod, const std::vector<std::pair<int, bool>>& categories) const;

  // set the category of the given mod if the category from the reference mod does not match
  // the one in the array of categories
  //
  void setCategoriesIf(ModInfo::Ptr mod, ModInfo::Ptr ref, const std::vector<std::pair<int, bool>>& categories) const;

private:

  OrganizerCore& m_core;
  FilterList& m_filters;
  CategoryFactory& m_categories;
  MainWindow* m_main;
  ModListView* m_view;
};

#endif