mirror of https://github.com/AxioDL/metaforce.git
Add ability to edit command line arguments, and enable cheats
This commit is contained in:
parent
39a8b1608d
commit
47a7383c6d
|
@ -0,0 +1,59 @@
|
||||||
|
#include "ArgumentEditor.hpp"
|
||||||
|
#include "ui_ArgumentEditor.h"
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QInputDialog>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
ArgumentEditor::ArgumentEditor(QWidget* parent)
|
||||||
|
: QDialog(parent)
|
||||||
|
, m_ui(new Ui::ArgumentEditor) {
|
||||||
|
m_ui->setupUi(this);
|
||||||
|
m_model.setStringList(QSettings().value("urde_arguments").toStringList());
|
||||||
|
m_ui->argumentEditor->setModel(&m_model);
|
||||||
|
}
|
||||||
|
|
||||||
|
ArgumentEditor::~ArgumentEditor() {
|
||||||
|
delete m_ui;
|
||||||
|
m_ui = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ArgumentEditor::on_addButton_clicked() {
|
||||||
|
QInputDialog input(this);
|
||||||
|
int code = input.exec();
|
||||||
|
if (code == DialogCode::Accepted) {
|
||||||
|
QStringList list = m_model.stringList();
|
||||||
|
list << input.textValue();
|
||||||
|
m_model.setStringList(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ArgumentEditor::on_editButton_clicked() {
|
||||||
|
QModelIndex index = m_ui->argumentEditor->currentIndex();
|
||||||
|
if (!index.isValid())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QInputDialog input(this);
|
||||||
|
input.setTextValue(m_model.stringList().value(index.row()));
|
||||||
|
int code = input.exec();
|
||||||
|
if (code == DialogCode::Accepted) {
|
||||||
|
QStringList list = m_model.stringList();
|
||||||
|
list[index.row()] = input.textValue();
|
||||||
|
m_model.setStringList(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ArgumentEditor::on_deleteButton_clicked() {
|
||||||
|
QModelIndex index = m_ui->argumentEditor->currentIndex();
|
||||||
|
if (index.isValid())
|
||||||
|
m_model.removeRows(index.row(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ArgumentEditor::on_buttonBox_clicked(QAbstractButton* button) {
|
||||||
|
QDialogButtonBox* buttonBox = qobject_cast<QDialogButtonBox*>(sender());
|
||||||
|
if (button == buttonBox->button(QDialogButtonBox::Ok)) {
|
||||||
|
QSettings().setValue("urde_arguments", m_model.stringList());
|
||||||
|
accept();
|
||||||
|
} else {
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QStringListModel>
|
||||||
|
|
||||||
|
class QAbstractButton;
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class ArgumentEditor;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ArgumentEditor : public QDialog {
|
||||||
|
Q_OBJECT
|
||||||
|
Ui::ArgumentEditor* m_ui;
|
||||||
|
QStringListModel m_model;
|
||||||
|
public:
|
||||||
|
explicit ArgumentEditor(QWidget* parent = 0);
|
||||||
|
virtual ~ArgumentEditor();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_addButton_clicked();
|
||||||
|
void on_editButton_clicked();
|
||||||
|
void on_deleteButton_clicked();
|
||||||
|
void on_buttonBox_clicked(QAbstractButton*);
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ArgumentEditor</class>
|
||||||
|
<widget class="QDialog" name="ArgumentEditor">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>613</width>
|
||||||
|
<height>525</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Argument Editor</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QPushButton" name="deleteButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Delete</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0" colspan="2">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
<property name="centerButtons">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" rowspan="4">
|
||||||
|
<widget class="QListView" name="argumentEditor"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QPushButton" name="addButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Add</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QPushButton" name="editButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Edit</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -38,6 +38,7 @@ include_directories(quazip/quazip)
|
||||||
add_definitions(-DQUAZIP_STATIC=1)
|
add_definitions(-DQUAZIP_STATIC=1)
|
||||||
|
|
||||||
add_executable(hecl-gui WIN32 MACOSX_BUNDLE
|
add_executable(hecl-gui WIN32 MACOSX_BUNDLE
|
||||||
|
ArgumentEditor.ui ArgumentEditor.cpp ArgumentEditor.hpp
|
||||||
MainWindow.ui MainWindow.hpp MainWindow.cpp
|
MainWindow.ui MainWindow.hpp MainWindow.cpp
|
||||||
LaunchMenu.hpp LaunchMenu.cpp
|
LaunchMenu.hpp LaunchMenu.cpp
|
||||||
EscapeSequenceParser.hpp EscapeSequenceParser.cpp
|
EscapeSequenceParser.hpp EscapeSequenceParser.cpp
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "LaunchMenu.hpp"
|
#include "LaunchMenu.hpp"
|
||||||
#include "hecl/CVarCommons.hpp"
|
#include "hecl/CVarCommons.hpp"
|
||||||
|
#include "ArgumentEditor.hpp"
|
||||||
|
#include <QList>
|
||||||
|
|
||||||
extern hecl::CVar* hecl::com_developer;
|
extern hecl::CVar* hecl::com_developer;
|
||||||
|
|
||||||
|
@ -12,6 +14,7 @@ LaunchMenu::LaunchMenu(hecl::CVarCommons& commons, QWidget* parent)
|
||||||
, m_apiGroup(this)
|
, m_apiGroup(this)
|
||||||
, m_msaaGroup(this)
|
, m_msaaGroup(this)
|
||||||
, m_anisoGroup(this) {
|
, m_anisoGroup(this) {
|
||||||
|
setToolTipsVisible(true);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
initApiAction(QStringLiteral("D3D11"));
|
initApiAction(QStringLiteral("D3D11"));
|
||||||
initApiAction(QStringLiteral("Vulkan"));
|
initApiAction(QStringLiteral("Vulkan"));
|
||||||
|
@ -42,9 +45,11 @@ LaunchMenu::LaunchMenu(hecl::CVarCommons& commons, QWidget* parent)
|
||||||
addMenu(&m_apiMenu)->setToolTip(m_commons.m_graphicsApi->rawHelp().data());
|
addMenu(&m_apiMenu)->setToolTip(m_commons.m_graphicsApi->rawHelp().data());
|
||||||
addMenu(&m_msaaMenu)->setToolTip(m_commons.m_drawSamples->rawHelp().data());
|
addMenu(&m_msaaMenu)->setToolTip(m_commons.m_drawSamples->rawHelp().data());
|
||||||
addMenu(&m_anisoMenu)->setToolTip(m_commons.m_texAnisotropy->rawHelp().data());
|
addMenu(&m_anisoMenu)->setToolTip(m_commons.m_texAnisotropy->rawHelp().data());
|
||||||
|
QAction* argumentEditor = addAction("Edit Runtime Arguments");
|
||||||
|
connect(argumentEditor, SIGNAL(triggered()), this, SLOT(editRuntimeArgs()));
|
||||||
initDeepColor();
|
initDeepColor();
|
||||||
initDeveloperMode();
|
initDeveloperMode();
|
||||||
|
initCheats();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LaunchMenu::initApiAction(const QString& action) {
|
void LaunchMenu::initApiAction(const QString& action) {
|
||||||
|
@ -87,6 +92,14 @@ void LaunchMenu::initDeveloperMode() {
|
||||||
connect(act, SIGNAL(triggered()), this, SLOT(developerModeTriggered()));
|
connect(act, SIGNAL(triggered()), this, SLOT(developerModeTriggered()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LaunchMenu::initCheats() {
|
||||||
|
QAction* act = addAction("Enable Cheats");
|
||||||
|
act->setToolTip(hecl::com_enableCheats->rawHelp().data());
|
||||||
|
act->setCheckable(true);
|
||||||
|
act->setChecked(hecl::com_enableCheats->toBoolean());
|
||||||
|
connect(act, SIGNAL(triggered()), this, SLOT(cheatsTriggered()));
|
||||||
|
}
|
||||||
|
|
||||||
void LaunchMenu::apiTriggered() {
|
void LaunchMenu::apiTriggered() {
|
||||||
QString apiStr = qobject_cast<QAction*>(sender())->text();
|
QString apiStr = qobject_cast<QAction*>(sender())->text();
|
||||||
apiStr = apiStr.remove('&');
|
apiStr = apiStr.remove('&');
|
||||||
|
@ -110,6 +123,34 @@ void LaunchMenu::deepColorTriggered() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void LaunchMenu::developerModeTriggered() {
|
void LaunchMenu::developerModeTriggered() {
|
||||||
hecl::CVarManager::instance()->setDeveloperMode(qobject_cast<QAction*>(sender())->isChecked(), true);
|
bool isChecked = qobject_cast<QAction*>(sender())->isChecked();
|
||||||
|
if (hecl::com_enableCheats->toBoolean() && !isChecked) {
|
||||||
|
for (QAction* action : actions()) {
|
||||||
|
QString text = action->text().remove('&');
|
||||||
|
if (text == "Enable Cheats" && action->isChecked())
|
||||||
|
action->setChecked(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hecl::CVarManager::instance()->setDeveloperMode(isChecked, true);
|
||||||
m_commons.serialize();
|
m_commons.serialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LaunchMenu::cheatsTriggered() {
|
||||||
|
bool isChecked = qobject_cast<QAction*>(sender())->isChecked();
|
||||||
|
if (!hecl::com_developer->toBoolean() && isChecked) {
|
||||||
|
for (QAction* action : actions()) {
|
||||||
|
QString text = action->text().remove('&');
|
||||||
|
if (text == "Developer Mode" && !action->isChecked())
|
||||||
|
action->setChecked(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hecl::CVarManager::instance()->setCheatsEnabled(isChecked, true);
|
||||||
|
m_commons.serialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LaunchMenu::editRuntimeArgs() {
|
||||||
|
ArgumentEditor editor(this);
|
||||||
|
editor.exec();
|
||||||
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ class LaunchMenu : public QMenu {
|
||||||
void initAnisoAction(const QString& action);
|
void initAnisoAction(const QString& action);
|
||||||
void initDeepColor();
|
void initDeepColor();
|
||||||
void initDeveloperMode();
|
void initDeveloperMode();
|
||||||
|
void initCheats();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LaunchMenu(hecl::CVarCommons& commons, QWidget* parent = Q_NULLPTR);
|
LaunchMenu(hecl::CVarCommons& commons, QWidget* parent = Q_NULLPTR);
|
||||||
|
@ -32,4 +33,6 @@ public slots:
|
||||||
void anisoTriggered();
|
void anisoTriggered();
|
||||||
void deepColorTriggered();
|
void deepColorTriggered();
|
||||||
void developerModeTriggered();
|
void developerModeTriggered();
|
||||||
|
void cheatsTriggered();
|
||||||
|
void editRuntimeArgs();
|
||||||
};
|
};
|
||||||
|
|
|
@ -59,8 +59,10 @@ MainWindow::MainWindow(QWidget* parent)
|
||||||
, m_ui(new Ui::MainWindow)
|
, m_ui(new Ui::MainWindow)
|
||||||
, m_heclProc(this)
|
, m_heclProc(this)
|
||||||
, m_dlManager(this)
|
, m_dlManager(this)
|
||||||
, m_launchMenu(m_cvarCommons, this)
|
, m_launchMenu(m_cvarCommons, this) {
|
||||||
, m_settings("AxioDL", "HECL", this) {
|
if (m_settings.value("urde_arguments").isNull())
|
||||||
|
m_settings.setValue("urde_arguments", QStringList() << "--no-shader-warmup");
|
||||||
|
|
||||||
m_ui->setupUi(this);
|
m_ui->setupUi(this);
|
||||||
m_ui->heclTabs->setCurrentIndex(0);
|
m_ui->heclTabs->setCurrentIndex(0);
|
||||||
|
|
||||||
|
@ -187,7 +189,9 @@ void MainWindow::onLaunch() {
|
||||||
m_heclProc.setProcessEnvironment(env);
|
m_heclProc.setProcessEnvironment(env);
|
||||||
disconnect(&m_heclProc, SIGNAL(finished(int)), nullptr, nullptr);
|
disconnect(&m_heclProc, SIGNAL(finished(int)), nullptr, nullptr);
|
||||||
connect(&m_heclProc, SIGNAL(finished(int)), this, SLOT(onLaunchFinished(int)));
|
connect(&m_heclProc, SIGNAL(finished(int)), this, SLOT(onLaunchFinished(int)));
|
||||||
m_heclProc.start(m_urdePath, {"--no-shader-warmup", m_path + "/out"}, QIODevice::ReadOnly | QIODevice::Unbuffered);
|
m_heclProc.start(m_urdePath, QStringList() << (m_path + "/out")
|
||||||
|
<< m_settings.value("urde_arguments").toStringList().join(' ').split(' '),
|
||||||
|
QIODevice::ReadOnly | QIODevice::Unbuffered);
|
||||||
|
|
||||||
m_ui->heclTabs->setCurrentIndex(0);
|
m_ui->heclTabs->setCurrentIndex(0);
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,9 @@ static QIcon MakeAppIcon() {
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
InitializePlatform();
|
InitializePlatform();
|
||||||
|
|
||||||
|
QApplication::setOrganizationName("AxioDL");
|
||||||
|
QApplication::setApplicationName("HECL");
|
||||||
|
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
||||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||||
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||||
|
|
Loading…
Reference in New Issue