/*
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