/* Copyright (C) 2012 Sebastian Herbord. All rights reserved. This file is part of Mod Organizer. Mod Organizer is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Mod Organizer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Mod Organizer. If not, see . */ #ifndef EDITEXECUTABLESDIALOG_H #define EDITEXECUTABLESDIALOG_H #include "tutorabledialog.h" #include #include "executableslist.h" #include "profile.h" #include "iplugingame.h" #include #include #include namespace Ui { class EditExecutablesDialog; } class ModList; class OrganizerCore; /** helper class to manage custom overwrites within the edit executables * dialog **/ class CustomOverwrites { public: struct Info { bool enabled; QString modName; }; void load(Profile* p, const ExecutablesList& exes); std::optional find(const QString& title) const; void setEnabled(const QString& title, bool b); void setMod(const QString& title, const QString& mod); void rename(const QString& oldTitle, const QString& newTitle); void remove(const QString& title); private: std::map m_map; }; /** helper class to manage forced libraries within the edit executables dialog **/ class ForcedLibraries { public: using list_type = QList; struct Info { bool enabled; list_type list; }; void load(Profile* p, const ExecutablesList& exes); std::optional find(const QString& title) const; void setEnabled(const QString& title, bool b); void setList(const QString& title, const list_type& list); void rename(const QString& oldTitle, const QString& newTitle); void remove(const QString& title); private: std::map m_map; }; /** * @brief Dialog to manage the list of executables **/ class EditExecutablesDialog : public MOBase::TutorableDialog { Q_OBJECT public: /** * @param executablesList current list of executables * @param parent parent widget **/ explicit EditExecutablesDialog(OrganizerCore& oc, QWidget* parent=nullptr); ~EditExecutablesDialog(); ExecutablesList getExecutablesList() const; const CustomOverwrites& getCustomOverwrites() const; const ForcedLibraries& getForcedLibraries() const; private slots: void on_list_itemSelectionChanged(); void on_add_clicked(); void on_remove_clicked(); void on_title_textChanged(const QString& s); void on_overwriteSteamAppID_toggled(bool checked); void on_createFilesInMod_toggled(bool checked); void on_forceLoadLibraries_toggled(bool checked); void on_browseBinary_clicked(); void on_browseWorkingDirectory_clicked(); void on_configureLibraries_clicked(); void on_buttons_accepted(); void on_buttons_rejected(); private: std::unique_ptr ui; OrganizerCore& m_organizerCore; const ExecutablesList m_originalExecutables; ExecutablesList m_executablesList; CustomOverwrites m_customOverwrites; ForcedLibraries m_forcedLibraries; bool m_settingUI; QListWidgetItem* selectedItem(); Executable* selectedExe(); void fillExecutableList(); QListWidgetItem* createListItem(const Executable& exe); void updateUI(const Executable* e); void clearEdits(); void setEdits(const Executable& e); void save(); void setJarBinary(const QString& binaryName); std::optional makeNonConflictingTitle(const QString& prefix); bool isTitleConflicting(const QString& s); void commitChanges(); }; #endif // EDITEXECUTABLESDIALOG_H