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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
/*
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 <http://www.gnu.org/licenses/>.
*/
#ifndef EDITEXECUTABLESDIALOG_H
#define EDITEXECUTABLESDIALOG_H
#include "tutorabledialog.h"
#include <QListWidgetItem>
#include "executableslist.h"
#include "profile.h"
#include "iplugingame.h"
#include <QTimer>
#include <QAbstractButton>
#include <optional>
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<Info> 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<QString, Info> m_map;
};
/** helper class to manage forced libraries within the edit executables dialog
**/
class ForcedLibraries
{
public:
using list_type = QList<MOBase::ExecutableForcedLoadSetting>;
struct Info
{
bool enabled;
list_type list;
};
void load(Profile* p, const ExecutablesList& exes);
std::optional<Info> 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<QString, Info> 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::EditExecutablesDialog> 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<QString> makeNonConflictingTitle(const QString& prefix);
bool isTitleConflicting(const QString& s);
void commitChanges();
};
#endif // EDITEXECUTABLESDIALOG_H
|