Add Launch Game button to config tool, rename executable to isle-config (#435)

* Add Launch Game option to config tool

* Rename executable from "config" to "isle-config"

* Add error popup if unable to find game executable

* Use one QMessageBox for both Win and *nix

Create one QMessageBox object to use for both Windows and non-Windows platforms. Additionally, set all relevant text during creation of QMessageBox, and show Warning icon as part of message box.

* Add tooltips to save, launch, and exit buttons

* Change "Launch Game" to "Save and Launch"

* Remove unnecessary Windows-specific code
This commit is contained in:
VoxelTek 2025-06-27 00:21:11 +10:00 committed by GitHub
parent 7797729a3f
commit 73bab24721
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 66 additions and 22 deletions

View File

@ -525,7 +525,7 @@ endif()
if (ISLE_BUILD_CONFIG) if (ISLE_BUILD_CONFIG)
find_package(Qt6 REQUIRED COMPONENTS Core Widgets) find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
qt_standard_project_setup() qt_standard_project_setup()
qt_add_executable(config WIN32 qt_add_executable(isle-config WIN32
LEGO1/mxdirectx/mxdirectxinfo.cpp LEGO1/mxdirectx/mxdirectxinfo.cpp
LEGO1/mxdirectx/legodxinfo.cpp LEGO1/mxdirectx/legodxinfo.cpp
CONFIG/config.cpp CONFIG/config.cpp
@ -535,22 +535,22 @@ if (ISLE_BUILD_CONFIG)
CONFIG/res/config.rc CONFIG/res/config.rc
CONFIG/res/config.qrc CONFIG/res/config.qrc
) )
target_link_libraries(config PRIVATE Qt6::Core Qt6::Widgets) target_link_libraries(isle-config PRIVATE Qt6::Core Qt6::Widgets)
set_property(TARGET config PROPERTY AUTOMOC ON) set_property(TARGET isle-config PROPERTY AUTOMOC ON)
set_property(TARGET config PROPERTY AUTORCC ON) set_property(TARGET isle-config PROPERTY AUTORCC ON)
set_property(TARGET config PROPERTY AUTOUIC ON) set_property(TARGET isle-config PROPERTY AUTOUIC ON)
set_property(TARGET config PROPERTY AUTOUIC_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/CONFIG/res") set_property(TARGET isle-config PROPERTY AUTOUIC_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/CONFIG/res")
list(APPEND isle_targets config) list(APPEND isle_targets isle-config)
target_compile_definitions(config PRIVATE _AFXDLL MXDIRECTX_FOR_CONFIG) target_compile_definitions(isle-config PRIVATE _AFXDLL MXDIRECTX_FOR_CONFIG)
target_include_directories(config PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/LEGO1") target_include_directories(isle-config PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/LEGO1")
target_include_directories(config PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/util>") target_include_directories(isle-config PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/util>")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14) if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14)
target_link_libraries(config PRIVATE DirectX5::DirectX5) target_link_libraries(isle-config PRIVATE DirectX5::DirectX5)
endif() endif()
target_compile_definitions(config PRIVATE DIRECT3D_VERSION=0x500) target_compile_definitions(isle-config PRIVATE DIRECT3D_VERSION=0x500)
target_link_libraries(config PRIVATE SDL3::SDL3 Isle::iniparser) target_link_libraries(isle-config PRIVATE SDL3::SDL3 Isle::iniparser)
if (NOT ISLE_MINIWIN) if (NOT ISLE_MINIWIN)
target_link_libraries(config PRIVATE ddraw dxguid) target_link_libraries(isle-config PRIVATE ddraw dxguid)
endif() endif()
endif() endif()
@ -564,8 +564,8 @@ if (MSVC)
if (TARGET isle) if (TARGET isle)
target_compile_definitions(isle PRIVATE "_CRT_SECURE_NO_WARNINGS") target_compile_definitions(isle PRIVATE "_CRT_SECURE_NO_WARNINGS")
endif() endif()
if (TARGET config) if (TARGET isle-config)
target_compile_definitions(config PRIVATE "_CRT_SECURE_NO_WARNINGS") target_compile_definitions(isle-config PRIVATE "_CRT_SECURE_NO_WARNINGS")
endif() endif()
endif() endif()
# Visual Studio 2017 version 15.7 needs "/Zc:__cplusplus" for __cplusplus # Visual Studio 2017 version 15.7 needs "/Zc:__cplusplus" for __cplusplus
@ -574,8 +574,8 @@ if (MSVC)
if (TARGET isle) if (TARGET isle)
target_compile_options(isle PRIVATE "-Zc:__cplusplus") target_compile_options(isle PRIVATE "-Zc:__cplusplus")
endif() endif()
if (TARGET config) if (TARGET isle-config)
target_compile_options(config PRIVATE "-Zc:__cplusplus") target_compile_options(isle-config PRIVATE "-Zc:__cplusplus")
endif() endif()
endif() endif()
endif() endif()
@ -633,7 +633,7 @@ install(TARGETS isle ${install_extra_targets}
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
) )
if (ISLE_BUILD_CONFIG) if (ISLE_BUILD_CONFIG)
install(TARGETS config install(TARGETS isle-config
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
) )
endif() endif()

View File

@ -11,6 +11,8 @@
#include "res/resource.h" #include "res/resource.h"
#include <QKeyEvent> #include <QKeyEvent>
#include <QMessageBox>
#include <QProcess>
#include <mxdirectx/legodxinfo.h> #include <mxdirectx/legodxinfo.h>
#include <ui_maindialog.h> #include <ui_maindialog.h>
@ -59,6 +61,7 @@ CMainDialog::CMainDialog(QWidget* pParent) : QDialog(pParent)
connect(m_ui->fullscreenCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxFullscreen); connect(m_ui->fullscreenCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxFullscreen);
connect(m_ui->okButton, &QPushButton::clicked, this, &CMainDialog::accept); connect(m_ui->okButton, &QPushButton::clicked, this, &CMainDialog::accept);
connect(m_ui->cancelButton, &QPushButton::clicked, this, &CMainDialog::reject); connect(m_ui->cancelButton, &QPushButton::clicked, this, &CMainDialog::reject);
connect(m_ui->launchButton, &QPushButton::clicked, this, &CMainDialog::launch);
connect(m_ui->dataPathOpen, &QPushButton::clicked, this, &CMainDialog::SelectDataPathDialog); connect(m_ui->dataPathOpen, &QPushButton::clicked, this, &CMainDialog::SelectDataPathDialog);
connect(m_ui->savePathOpen, &QPushButton::clicked, this, &CMainDialog::SelectSavePathDialog); connect(m_ui->savePathOpen, &QPushButton::clicked, this, &CMainDialog::SelectSavePathDialog);
@ -155,6 +158,30 @@ void CMainDialog::accept()
QDialog::accept(); QDialog::accept();
} }
void CMainDialog::launch()
{
if (m_modified) {
currentConfigApp->WriteRegisterSettings();
}
QDir::setCurrent(QCoreApplication::applicationDirPath());
QMessageBox msgBox = QMessageBox(
QMessageBox::Warning,
QString("Error!"),
QString("Unable to locate isle executable!"),
QMessageBox::Close
);
if (!QProcess::startDetached("./isle")) { // Check in isle-config directory
if (!QProcess::startDetached("isle")) { // Check in $PATH
msgBox.exec();
}
}
QDialog::accept();
}
// FUNCTION: CONFIG 0x00404360 // FUNCTION: CONFIG 0x00404360
void CMainDialog::UpdateInterface() void CMainDialog::UpdateInterface()
{ {

View File

@ -45,6 +45,7 @@ private slots:
void OnCheckboxFullscreen(bool checked); void OnCheckboxFullscreen(bool checked);
void accept() override; void accept() override;
void reject() override; void reject() override;
void launch();
void SelectDataPathDialog(); void SelectDataPathDialog();
void SelectSavePathDialog(); void SelectSavePathDialog();
void DataPathEdited(); void DataPathEdited();

View File

@ -508,8 +508,11 @@
</property> </property>
<item> <item>
<widget class="QPushButton" name="okButton"> <widget class="QPushButton" name="okButton">
<property name="toolTip">
<string>Save configuration and close the config tool.</string>
</property>
<property name="text"> <property name="text">
<string>OK</string> <string>Save and Exit</string>
</property> </property>
<property name="default"> <property name="default">
<bool>true</bool> <bool>true</bool>
@ -517,9 +520,22 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="cancelButton"> <widget class="QPushButton" name="launchButton">
<property name="toolTip">
<string>Save configuration and launch LEGO Island.</string>
</property>
<property name="text"> <property name="text">
<string>Cancel</string> <string>Save and Launch</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cancelButton">
<property name="toolTip">
<string>Discard changed settings and close the config tool.</string>
</property>
<property name="text">
<string>Exit without saving</string>
</property> </property>
</widget> </widget>
</item> </item>