diff options
Diffstat (limited to 'src/mainwindow.h')
| -rw-r--r-- | src/mainwindow.h | 102 |
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 |
