summaryrefslogtreecommitdiff
path: root/src/mainwindow.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainwindow.h')
-rw-r--r--src/mainwindow.h102
1 files changed, 63 insertions, 39 deletions
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 250f2a48..bbbbea2f 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -39,6 +39,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <imoinfo.h>
#include <iplugintool.h>
#include <iplugindiagnose.h>
+#include <ipluginmodpage.h>
#include "settings.h"
#include "downloadmanager.h"
#include "installationmanager.h"
@@ -49,6 +50,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "tutorialcontrol.h"
#include "savegameinfowidgetgamebryo.h"
#include "previewgenerator.h"
+#include "browserdialog.h"
#include <guessedvalue.h>
#include <directoryentry.h>
#include <boost/signals2.hpp>
@@ -62,11 +64,13 @@ class ModListSortProxy;
class ModListGroupCategoriesProxy;
-class MainWindow : public QMainWindow, public MOBase::IOrganizer, public MOBase::IPluginDiagnose
+class MainWindow : public QMainWindow, public MOBase::IPluginDiagnose
{
Q_OBJECT
Q_INTERFACES(MOBase::IPluginDiagnose)
+ friend class OrganizerProxy;
+
private:
struct SignalCombinerAnd
@@ -86,6 +90,7 @@ private:
};
typedef boost::signals2::signal<bool (const QString&), SignalCombinerAnd> SignalAboutToRunApplication;
+ typedef boost::signals2::signal<void (const QString&)> SignalModInstalled;
public:
explicit MainWindow(const QString &exeName, QSettings &initSettings, QWidget *parent = 0);
@@ -95,7 +100,6 @@ public:
bool addProfile();
void refreshLists();
- void refreshESPList();
void refreshBSAList();
void refreshDataTree();
void refreshSaveList();
@@ -104,7 +108,6 @@ public:
void setModListSorting(int index);
void setESPListSorting(int index);
- void setCompactDownloads(bool compact);
bool setCurrentProfile(int index);
bool setCurrentProfile(const QString &name);
@@ -116,34 +119,6 @@ public:
void loadPlugins();
- virtual MOBase::IGameInfo &gameInfo() const;
- virtual MOBase::IModRepositoryBridge *createNexusBridge() const;
- virtual QString profileName() const;
- virtual QString profilePath() const;
- virtual QString downloadsPath() const;
- virtual MOBase::VersionInfo appVersion() const;
- virtual MOBase::IModInterface *getMod(const QString &name);
- virtual MOBase::IModInterface *createMod(MOBase::GuessedValue<QString> &name);
- virtual bool removeMod(MOBase::IModInterface *mod);
- virtual void modDataChanged(MOBase::IModInterface *mod);
- virtual QVariant pluginSetting(const QString &pluginName, const QString &key) const;
- virtual void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value);
- virtual QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def = QVariant()) const;
- virtual void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync = true);
- virtual QString pluginDataPath() const;
- virtual void installMod(const QString &fileName);
- virtual QString resolvePath(const QString &fileName) const;
- virtual QStringList listDirectories(const QString &directoryName) const;
- virtual QStringList findFiles(const QString &path, const std::function<bool(const QString &)> &filter) const;
- virtual QList<FileInfo> findFileInfos(const QString &path, const std::function<bool(const FileInfo&)> &filter) const;
-
- virtual MOBase::IDownloadManager *downloadManager();
- virtual MOBase::IPluginList *pluginList();
- virtual MOBase::IModList *modList();
- virtual HANDLE startApplication(const QString &executable, const QStringList &args = QStringList(), const QString &cwd = "", const QString &profile = "");
- virtual bool onAboutToRun(const std::function<bool(const QString&)> &func);
- virtual void refreshModList(bool saveChanges = true);
-
virtual std::vector<unsigned int> activeProblems() const;
virtual QString shortDescription(unsigned int key) const;
virtual QString fullDescription(unsigned int key) const;
@@ -154,6 +129,12 @@ public:
void saveArchiveList();
+ void createStdoutPipe(HANDLE *stdOutRead, HANDLE *stdOutWrite);
+ std::string readFromPipe(HANDLE stdOutRead);
+ void processLOOTOut(const std::string &lootOut, std::string &reportURL, std::string &errorMessages, QProgressDialog &dialog);
+
+ HANDLE startApplication(const QString &executable, const QStringList &args = QStringList(), const QString &cwd = "", const QString &profile = "");
+
public slots:
void displayColumnSelection(const QPoint &pos);
@@ -164,6 +145,7 @@ public slots:
void directory_refreshed();
void toolPluginInvoke();
+ void modPagePluginInvoke();
signals:
@@ -195,9 +177,13 @@ protected:
private:
+ void refreshESPList();
+ void refreshModList(bool saveChanges = true);
+
void actionToToolButton(QAction *&sourceAction);
bool verifyPlugin(MOBase::IPlugin *plugin);
void registerPluginTool(MOBase::IPluginTool *tool);
+ void registerModPage(MOBase::IPluginModPage *modPage);
bool registerPlugin(QObject *pluginObj, const QString &fileName);
void updateToolBar();
@@ -205,10 +191,6 @@ private:
void setExecutableIndex(int index);
- bool nexusLogin();
-
- void saveCurrentESPList();
-
bool testForSteam();
void startSteam();
@@ -220,6 +202,13 @@ private:
bool refreshProfiles(bool selectProfile = true);
void refreshExecutablesList();
void installMod();
+ MOBase::IModInterface *installMod(const QString &fileName);
+ MOBase::IModInterface *getMod(const QString &name);
+ MOBase::IModInterface *createMod(MOBase::GuessedValue<QString> &name);
+ bool removeMod(MOBase::IModInterface *mod);
+
+ QList<MOBase::IOrganizer::FileInfo> findFileInfos(const QString &path, const std::function<bool (const MOBase::IOrganizer::FileInfo &)> &filter) const;
+
bool modifyExecutablesDialog();
void displayModInformation(ModInfo::Ptr modInfo, unsigned int index, int tab);
void displayModInformation(int row, int tab = 0);
@@ -236,8 +225,9 @@ private:
* the changes made in the menu (which is the delta between the current menu selection and the reference mod)
* @param menu the menu after editing by the user
* @param modRow index of the mod to edit
+ * @param referenceRow row of the reference mod
*/
- void addRemoveCategoriesFromMenu(QMenu *menu, int modRow);
+ void addRemoveCategoriesFromMenu(QMenu *menu, int modRow, int referenceRow);
/**
* Sets category selections from menu; for multiple mods, this will completely
@@ -262,7 +252,7 @@ private:
bool extractProgress(QProgressDialog &extractProgress, int percentage, std::string fileName);
- bool checkForProblems();
+ int checkForProblems();
int getBinaryExecuteInfo(const QFileInfo &targetInfo, QFileInfo &binaryInfo, QString &arguments);
QTreeWidgetItem *addFilterItem(QTreeWidgetItem *root, const QString &name, int categoryID);
@@ -288,12 +278,24 @@ private:
static void setupNetworkProxy(bool activate);
void activateProxy(bool activate);
void installTranslator(const QString &name);
+ void setBrowserGeometry(const QByteArray &geometry);
+
+ bool createBackup(const QString &filePath, const QDateTime &time);
+ QString queryRestore(const QString &filePath);
+
+ QMenu *modListContextMenu();
+
+ std::set<QString> managedArchives();
private:
static const unsigned int PROBLEM_PLUGINSNOTLOADED = 1;
static const unsigned int PROBLEM_TOOMANYPLUGINS = 2;
+ static const char *PATTERN_BACKUP_GLOB;
+ static const char *PATTERN_BACKUP_REGEX;
+ static const char *PATTERN_BACKUP_DATE;
+
private:
Ui::MainWindow *ui;
@@ -324,6 +326,7 @@ private:
QString m_GamePath;
int m_ContextRow;
+ QPersistentModelIndex m_ContextIdx;
QTreeWidgetItem *m_ContextItem;
QAction *m_ContextAction;
@@ -360,21 +363,26 @@ private:
MOBase::IGameInfo *m_GameInfo;
std::vector<MOBase::IPluginDiagnose*> m_DiagnosisPlugins;
+ std::vector<MOBase::IPluginModPage*> m_ModPages;
std::vector<QString> m_UnloadedPlugins;
QFile m_PluginsCheck;
SignalAboutToRunApplication m_AboutToRun;
+ SignalModInstalled m_ModInstalled;
QString m_CurrentLanguage;
std::vector<QTranslator*> m_Translators;
PreviewGenerator m_PreviewGenerator;
+ BrowserDialog m_IntegratedBrowser;
QFileSystemWatcher m_SavesWatcher;
std::vector<QTreeWidgetItem*> m_RemoveWidget;
+ uint m_ArchiveListHash;
+
private slots:
void showMessage(const QString &message);
@@ -440,6 +448,8 @@ private slots:
void linkClicked(const QString &url);
+ bool nexusLogin();
+
void loginSuccessful(bool necessary);
void loginSuccessfulUpdate(bool necessary);
void loginFailed(const QString &message);
@@ -471,6 +481,7 @@ private slots:
void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorString);
void editCategories();
+ void deselectFilters();
void displayModInformation(const QString &modName, int tab);
void modOpenNext();
@@ -483,6 +494,7 @@ private slots:
void hookUpWindowTutorials();
+ void resumeDownload(int downloadIndex);
void endorseMod(ModInfo::Ptr mod);
void cancelModListEditor();
@@ -536,6 +548,9 @@ private slots:
void about();
void delayedRemove();
+ void requestDownload(const QUrl &url, QNetworkReply *reply);
+ void profileRefresh();
+
private slots: // ui slots
// actions
void on_actionAdd_Profile_triggered();
@@ -551,14 +566,12 @@ private slots: // ui slots
void bsaList_itemMoved();
void on_btnRefreshData_clicked();
void on_categoriesList_customContextMenuRequested(const QPoint &pos);
- void on_compactBox_toggled(bool checked);
void on_conflictsCheckBox_toggled(bool checked);
void on_dataTree_customContextMenuRequested(const QPoint &pos);
void on_executablesListBox_currentIndexChanged(int index);
void on_modList_customContextMenuRequested(const QPoint &pos);
void on_modList_doubleClicked(const QModelIndex &index);
void on_profileBox_currentIndexChanged(int index);
- void on_profileRefreshBtn_clicked();
void on_savegameList_customContextMenuRequested(const QPoint &pos);
void on_startButton_clicked();
void on_tabWidget_currentChanged(int index);
@@ -571,6 +584,17 @@ private slots: // ui slots
void on_showHiddenBox_toggled(bool checked);
void on_bsaList_itemChanged(QTreeWidgetItem *item, int column);
void on_bossButton_clicked();
+
+ void on_saveButton_clicked();
+ void on_restoreButton_clicked();
+ void on_restoreModsButton_clicked();
+ void on_saveModsButton_clicked();
+ void on_actionCopy_Log_to_Clipboard_triggered();
+ void on_categoriesAndBtn_toggled(bool checked);
+ void on_categoriesOrBtn_toggled(bool checked);
+ void on_managedArchiveLabel_linkHovered(const QString &link);
};
+
+
#endif // MAINWINDOW_H