Compare commits
12 commits
Author | SHA1 | Date | |
---|---|---|---|
4883b617fd | |||
e98a5e9d26 | |||
768bcd1e5f | |||
896c48290d | |||
34cba84362 | |||
3cb897ccda | |||
0ce8046728 | |||
13b2614af0 | |||
171fee333f | |||
1d7c08b3ca | |||
32c193a53b | |||
ae2a613879 |
33 changed files with 2571 additions and 488 deletions
|
@ -1,5 +1,5 @@
|
||||||
# wxMASSManager
|
# wxMASSManager
|
||||||
# Copyright (C) 2020 Guillaume Jacquemin
|
# Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -18,82 +18,23 @@ cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
project(wxMASSManager LANGUAGES CXX)
|
project(wxMASSManager LANGUAGES CXX)
|
||||||
|
|
||||||
|
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/modules/" ${CMAKE_MODULE_PATH})
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_EXTENSIONS ON)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
option(USE_CORRADE_SUBMODULE "Use Corrade from the Git submodule. If set to OFF, make sure you have Corrade 2020.06 or later installed to a path CMake can search in." ON)
|
option(USE_CORRADE_SUBMODULE "Use Corrade from the Git submodule. If set to OFF, make sure you have Corrade 2020.06 or later installed to a path CMake can search in." ON)
|
||||||
|
|
||||||
if(USE_CORRADE_SUBMODULE)
|
if(USE_CORRADE_SUBMODULE)
|
||||||
set(BUILD_STATIC ON CACHE BOOL "" FORCE)
|
set(BUILD_STATIC ON CACHE BOOL "" FORCE)
|
||||||
|
set(BUILD_STATIC_PIC ON CACHE BOOL "" FORCE)
|
||||||
|
set(BUILD_STATIC_UNIQUE_GLOBALS OFF CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
set(WITH_INTERCONNECT OFF CACHE BOOL "" FORCE)
|
set(WITH_INTERCONNECT OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_PLUGINMANAGER OFF CACHE BOOL "" FORCE)
|
set(WITH_PLUGINMANAGER OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_TESTSUITE OFF CACHE BOOL "" FORCE)
|
set(WITH_TESTSUITE OFF CACHE BOOL "" FORCE)
|
||||||
add_subdirectory(corrade EXCLUDE_FROM_ALL)
|
add_subdirectory(corrade EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(Corrade REQUIRED Containers Utility)
|
add_subdirectory(src)
|
||||||
|
|
||||||
include_directories(SYSTEM "C:/msys64/mingw64/lib/wx/include/msw-unicode-static-3.0")
|
|
||||||
include_directories(SYSTEM "C:/msys64/mingw64/include/wx-3.0")
|
|
||||||
|
|
||||||
set_directory_properties(PROPERTIES CORRADE_USE_PEDANTIC_FLAGS ON)
|
|
||||||
|
|
||||||
add_executable(wxMASSManager WIN32
|
|
||||||
main.cpp
|
|
||||||
GUI/MainFrame.fbp
|
|
||||||
GUI/MainFrame.h
|
|
||||||
GUI/MainFrame.cpp
|
|
||||||
GUI/EvtMainFrame.h
|
|
||||||
GUI/EvtMainFrame.cpp
|
|
||||||
GUI/NameChangeDialog.fbp
|
|
||||||
GUI/NameChangeDialog.h
|
|
||||||
GUI/NameChangeDialog.cpp
|
|
||||||
GUI/EvtNameChangeDialog.h
|
|
||||||
GUI/EvtNameChangeDialog.cpp
|
|
||||||
Maps/LastMissionId.h
|
|
||||||
Maps/StoryProgress.h
|
|
||||||
Mass/Mass.h
|
|
||||||
Mass/Mass.cpp
|
|
||||||
MassBuilderManager/MassBuilderManager.h
|
|
||||||
MassBuilderManager/MassBuilderManager.cpp
|
|
||||||
MassManager/MassManager.h
|
|
||||||
MassManager/MassManager.cpp
|
|
||||||
Profile/Profile.h
|
|
||||||
Profile/Profile.cpp
|
|
||||||
ProfileManager/ProfileManager.h
|
|
||||||
ProfileManager/ProfileManager.cpp
|
|
||||||
resource.rc)
|
|
||||||
|
|
||||||
target_compile_options(wxMASSManager PRIVATE -D_FILE_OFFSET_BITS=64 -D__WXMSW__ -fpermissive)
|
|
||||||
|
|
||||||
target_link_options(wxMASSManager PRIVATE -static -static-libgcc -static-libstdc++ -pipe -Wl,--subsystem,windows -mwindows)
|
|
||||||
|
|
||||||
target_link_libraries(wxMASSManager PRIVATE
|
|
||||||
Corrade::Containers
|
|
||||||
Corrade::Utility
|
|
||||||
wx_mswu_adv-3.0
|
|
||||||
wx_mswu_core-3.0
|
|
||||||
wx_baseu-3.0
|
|
||||||
wxregexu-3.0
|
|
||||||
wxexpat-3.0
|
|
||||||
wxtiff-3.0
|
|
||||||
wxjpeg-3.0
|
|
||||||
wxpng-3.0
|
|
||||||
wxzlib-3.0
|
|
||||||
rpcrt4
|
|
||||||
oleaut32
|
|
||||||
ole32
|
|
||||||
uuid
|
|
||||||
lzma
|
|
||||||
jbig
|
|
||||||
winspool
|
|
||||||
winmm
|
|
||||||
shell32
|
|
||||||
comctl32
|
|
||||||
comdlg32
|
|
||||||
advapi32
|
|
||||||
wsock32
|
|
||||||
gdi32
|
|
||||||
oleacc
|
|
||||||
wtsapi32)
|
|
||||||
|
|
|
@ -1,280 +0,0 @@
|
||||||
// wxMASSManager
|
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
|
||||||
//
|
|
||||||
// This program 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.
|
|
||||||
//
|
|
||||||
// This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#include <Corrade/version.h>
|
|
||||||
|
|
||||||
#if !(CORRADE_VERSION_YEAR * 100 + CORRADE_VERSION_MONTH >= 202006)
|
|
||||||
#error This application requires Corrade 2020.06 or later to build.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#include <Corrade/Containers/Array.h>
|
|
||||||
#include <Corrade/Utility/Directory.h>
|
|
||||||
#include <Corrade/Utility/FormatStl.h>
|
|
||||||
#include <Corrade/Utility/String.h>
|
|
||||||
|
|
||||||
#include <wx/wfstream.h>
|
|
||||||
#include <wx/zipstrm.h>
|
|
||||||
|
|
||||||
#include "Profile.h"
|
|
||||||
|
|
||||||
constexpr char company_name_locator[] = "CompanyName\0\x0c\0\0\0StrProperty";
|
|
||||||
constexpr char active_slot_locator[] = "ActiveFrameSlot\0\x0c\0\0\0IntProperty";
|
|
||||||
constexpr char credits_locator[] = "Credit\0\x0c\0\0\0IntProperty";
|
|
||||||
constexpr char story_progress_locator[] = "StoryProgress\0\x0c\0\0\0IntProperty";
|
|
||||||
constexpr char last_mission_id_locator[] = "LastMissionID\0\x0c\0\0\0IntProperty";
|
|
||||||
|
|
||||||
using namespace Corrade;
|
|
||||||
|
|
||||||
Profile::Profile(const std::string& path) {
|
|
||||||
auto map = Utility::Directory::mapRead(path);
|
|
||||||
|
|
||||||
if(!map) {
|
|
||||||
_lastError = "Couldn't memory-map " + Utility::Directory::filename(path);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_profileDirectory = Utility::Directory::path(path);
|
|
||||||
_filename = Utility::Directory::filename(path);
|
|
||||||
|
|
||||||
if(Utility::String::beginsWith(_filename, "Demo")) {
|
|
||||||
_type = ProfileType::Demo;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_type = ProfileType::FullGame;
|
|
||||||
}
|
|
||||||
|
|
||||||
_steamId = Utility::String::ltrim(Utility::String::rtrim(_filename, ".sav"), (_type == ProfileType::Demo ? "Demo" : "") + std::string{"Profile"});
|
|
||||||
|
|
||||||
auto it = std::search(map.begin(), map.end(), &company_name_locator[0], &company_name_locator[27]);
|
|
||||||
|
|
||||||
if(it == map.end()) {
|
|
||||||
_lastError = "Couldn't find a company name in " + _filename;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_companyName = std::string{it + 41};
|
|
||||||
|
|
||||||
_valid = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::valid() const -> bool {
|
|
||||||
return _valid;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::lastError() const -> std::string const& {
|
|
||||||
return _lastError;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::filename() const -> std::string const& {
|
|
||||||
return _filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::type() const -> ProfileType {
|
|
||||||
return _type;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::steamId() const -> std::string const& {
|
|
||||||
return _steamId;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::companyName() const -> std::string const& {
|
|
||||||
return _companyName;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::getCompanyName() -> std::string const& {
|
|
||||||
auto mmap = Utility::Directory::mapRead(Utility::Directory::join(_profileDirectory, _filename));
|
|
||||||
|
|
||||||
auto it = std::search(mmap.begin(), mmap.end(), &company_name_locator[0], &company_name_locator[27]);
|
|
||||||
|
|
||||||
if(it == mmap.end()) {
|
|
||||||
_lastError = "Couldn't find a company name in " + _filename;
|
|
||||||
_companyName = "";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_companyName = std::string{it + 41};
|
|
||||||
}
|
|
||||||
|
|
||||||
return _companyName;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::renameCompany(const std::string& new_name) -> bool {
|
|
||||||
char length_difference = static_cast<char>(_companyName.length() - new_name.length());
|
|
||||||
|
|
||||||
std::string profile_data = Utility::Directory::readString(Utility::Directory::join(_profileDirectory, _filename));
|
|
||||||
|
|
||||||
auto iter = std::search(profile_data.begin(), profile_data.end(), &company_name_locator[0], &company_name_locator[27]);
|
|
||||||
|
|
||||||
if(iter != profile_data.end()) {
|
|
||||||
|
|
||||||
*(iter + 0x1C) = *(iter + 0x1C) - length_difference;
|
|
||||||
*(iter + 0x25) = *(iter + 0x25) - length_difference;
|
|
||||||
|
|
||||||
while(*(iter + 0x29) != '\0') {
|
|
||||||
profile_data.erase(iter + 0x29);
|
|
||||||
}
|
|
||||||
|
|
||||||
profile_data.insert(iter + 0x29, new_name.cbegin(), new_name.cend());
|
|
||||||
|
|
||||||
if(!Utility::Directory::writeString(Utility::Directory::join(_profileDirectory, _filename), profile_data)) {
|
|
||||||
_lastError = "The file" + _filename + " couldn't be written to.";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_companyName = new_name;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_lastError = "Couldn't find the company name in " + _filename;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::activeFrameSlot() const -> std::int8_t {
|
|
||||||
return _activeFrameSlot;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::getActiveFrameSlot() -> std::int8_t {
|
|
||||||
auto mmap = Utility::Directory::mapRead(Utility::Directory::join(_profileDirectory, _filename));
|
|
||||||
|
|
||||||
auto iter = std::search(mmap.begin(), mmap.end(), &active_slot_locator[0], &active_slot_locator[31]);
|
|
||||||
|
|
||||||
if(iter == mmap.end()) {
|
|
||||||
if(std::search(mmap.begin(), mmap.end(), &credits_locator[0], &credits_locator[22]) != mmap.end()) {
|
|
||||||
_activeFrameSlot = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
|
|
||||||
_activeFrameSlot = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_activeFrameSlot = *(iter + 41);
|
|
||||||
}
|
|
||||||
|
|
||||||
return _activeFrameSlot;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::credits() const -> std::int32_t {
|
|
||||||
return _credits;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::getCredits() -> std::int32_t {
|
|
||||||
auto mmap = Utility::Directory::mapRead(Utility::Directory::join(_profileDirectory, _filename));
|
|
||||||
|
|
||||||
auto iter = std::search(mmap.begin(), mmap.end(), &credits_locator[0], &credits_locator[22]);
|
|
||||||
|
|
||||||
if(iter != mmap.end()) {
|
|
||||||
_credits = *reinterpret_cast<const std::int32_t*>(iter + 0x20);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
|
|
||||||
_credits = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _credits;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::storyProgress() const -> std::int32_t {
|
|
||||||
return _storyProgress;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::getStoryProgress() -> std::int32_t {
|
|
||||||
auto mmap = Utility::Directory::mapRead(Utility::Directory::join(_profileDirectory, _filename));
|
|
||||||
|
|
||||||
auto iter = std::search(mmap.begin(), mmap.end(), &story_progress_locator[0], &story_progress_locator[29]);
|
|
||||||
|
|
||||||
if(iter != mmap.end()) {
|
|
||||||
_storyProgress = *reinterpret_cast<const std::int32_t*>(iter + 0x27);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
|
|
||||||
_storyProgress = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _storyProgress;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::setStoryProgress(std::int32_t progress) -> bool {
|
|
||||||
auto mmap = Utility::Directory::map(Utility::Directory::join(_profileDirectory, _filename));
|
|
||||||
|
|
||||||
auto iter = std::search(mmap.begin(), mmap.end(), &story_progress_locator[0], &story_progress_locator[29]);
|
|
||||||
|
|
||||||
if(iter != mmap.end()) {
|
|
||||||
*reinterpret_cast<std::int32_t*>(iter + 0x27) = progress;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::lastMissionId() const -> std::int32_t {
|
|
||||||
return _lastMissionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::getLastMissionId() -> std::int32_t {
|
|
||||||
auto mmap = Utility::Directory::mapRead(Utility::Directory::join(_profileDirectory, _filename));
|
|
||||||
|
|
||||||
auto iter = std::search(mmap.begin(), mmap.end(), &last_mission_id_locator[0], &last_mission_id_locator[29]);
|
|
||||||
|
|
||||||
if(iter != mmap.end()) {
|
|
||||||
_lastMissionId = *reinterpret_cast<const std::int32_t*>(iter + 0x27);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
|
|
||||||
_lastMissionId = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _lastMissionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto Profile::backup(const std::string& filename) -> bool {
|
|
||||||
if(filename.empty() || (filename.length() < 5 && !Utility::String::endsWith(filename, ".zip"))) {
|
|
||||||
_lastError = "Invalid filename " + filename + " in Profile::backup()";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(Utility::Directory::exists(filename)) {
|
|
||||||
if(!Utility::Directory::rm(filename)) {
|
|
||||||
_lastError = "Couldn't overwrite " + filename + " in Profile::backup()";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
wxFFileOutputStream out{filename};
|
|
||||||
wxZipOutputStream zip{out};
|
|
||||||
|
|
||||||
{
|
|
||||||
zip.PutNextEntry(_filename);
|
|
||||||
wxFFileInputStream profile_stream{Utility::Directory::toNativeSeparators(Utility::Directory::join(_profileDirectory, _filename)), "rb"};
|
|
||||||
zip.Write(profile_stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i = 0; i < 32; ++i) {
|
|
||||||
std::string unit_file = Utility::Directory::join(_profileDirectory, Utility::formatString("{}Unit{:.2d}{}.sav", _type == ProfileType::Demo ? "Demo" : "", i, _steamId));
|
|
||||||
if(Utility::Directory::exists(unit_file)) {
|
|
||||||
zip.PutNextEntry(Utility::Directory::filename(unit_file));
|
|
||||||
wxFFileInputStream unit_stream{Utility::Directory::toNativeSeparators(unit_file)};
|
|
||||||
zip.Write(unit_stream);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
|
@ -1,68 +0,0 @@
|
||||||
#ifndef PROFILE_H
|
|
||||||
#define PROFILE_H
|
|
||||||
|
|
||||||
#include <cstdint>
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
enum class ProfileType : std::uint8_t {
|
|
||||||
Demo,
|
|
||||||
FullGame
|
|
||||||
};
|
|
||||||
|
|
||||||
class Profile {
|
|
||||||
public:
|
|
||||||
explicit Profile(const std::string& path);
|
|
||||||
|
|
||||||
auto valid() const -> bool;
|
|
||||||
|
|
||||||
auto lastError() const -> std::string const&;
|
|
||||||
|
|
||||||
auto filename() const -> std::string const&;
|
|
||||||
|
|
||||||
auto type() const -> ProfileType;
|
|
||||||
|
|
||||||
auto steamId() const -> std::string const&;
|
|
||||||
|
|
||||||
auto companyName() const -> std::string const&;
|
|
||||||
auto getCompanyName() -> std::string const&;
|
|
||||||
auto renameCompany(const std::string& new_name) -> bool;
|
|
||||||
|
|
||||||
auto activeFrameSlot() const -> std::int8_t;
|
|
||||||
auto getActiveFrameSlot() -> std::int8_t;
|
|
||||||
|
|
||||||
auto credits() const -> std::int32_t;
|
|
||||||
auto getCredits() -> std::int32_t;
|
|
||||||
|
|
||||||
auto storyProgress() const -> std::int32_t;
|
|
||||||
auto getStoryProgress() -> std::int32_t;
|
|
||||||
auto setStoryProgress(std::int32_t progress) -> bool;
|
|
||||||
|
|
||||||
auto lastMissionId() const -> std::int32_t;
|
|
||||||
auto getLastMissionId() -> std::int32_t;
|
|
||||||
|
|
||||||
auto backup(const std::string& filename) -> bool;
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::string _profileDirectory;
|
|
||||||
std::string _filename;
|
|
||||||
|
|
||||||
ProfileType _type;
|
|
||||||
|
|
||||||
std::string _steamId;
|
|
||||||
|
|
||||||
bool _valid = false;
|
|
||||||
std::string _lastError = "";
|
|
||||||
|
|
||||||
std::string _companyName;
|
|
||||||
|
|
||||||
std::int8_t _activeFrameSlot = 0;
|
|
||||||
|
|
||||||
std::int32_t _credits;
|
|
||||||
|
|
||||||
std::int32_t _storyProgress;
|
|
||||||
|
|
||||||
std::int32_t _lastMissionId;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //PROFILE_H
|
|
2
corrade
2
corrade
|
@ -1 +1 @@
|
||||||
Subproject commit 61d1b58cbcb159837bca506b5336a810da67f0a7
|
Subproject commit cc8824e8d2c00d739adba2263217dc7ae1c30dc5
|
623
modules/FindCorrade.cmake
Normal file
623
modules/FindCorrade.cmake
Normal file
|
@ -0,0 +1,623 @@
|
||||||
|
#.rst:
|
||||||
|
# Find Corrade
|
||||||
|
# ------------
|
||||||
|
#
|
||||||
|
# Finds the Corrade library. Basic usage::
|
||||||
|
#
|
||||||
|
# find_package(Corrade REQUIRED)
|
||||||
|
#
|
||||||
|
# This module tries to find the base Corrade library and then defines the
|
||||||
|
# following:
|
||||||
|
#
|
||||||
|
# Corrade_FOUND - Whether the base library was found
|
||||||
|
# CORRADE_LIB_SUFFIX_MODULE - Path to CorradeLibSuffix.cmake module
|
||||||
|
#
|
||||||
|
# This command will try to find only the base library, not the optional
|
||||||
|
# components, which are:
|
||||||
|
#
|
||||||
|
# Containers - Containers library
|
||||||
|
# PluginManager - PluginManager library
|
||||||
|
# TestSuite - TestSuite library
|
||||||
|
# Utility - Utility library
|
||||||
|
# rc - corrade-rc executable
|
||||||
|
#
|
||||||
|
# Example usage with specifying additional components is::
|
||||||
|
#
|
||||||
|
# find_package(Corrade REQUIRED Utility TestSuite)
|
||||||
|
#
|
||||||
|
# For each component is then defined:
|
||||||
|
#
|
||||||
|
# Corrade_*_FOUND - Whether the component was found
|
||||||
|
# Corrade::* - Component imported target
|
||||||
|
#
|
||||||
|
# The package is found if either debug or release version of each library is
|
||||||
|
# found. If both debug and release libraries are found, proper version is
|
||||||
|
# chosen based on actual build configuration of the project (i.e. Debug build
|
||||||
|
# is linked to debug libraries, Release build to release libraries).
|
||||||
|
#
|
||||||
|
# Corrade conditionally defines ``CORRADE_IS_DEBUG_BUILD`` preprocessor
|
||||||
|
# variable in case build configuration is ``Debug`` (not Corrade itself, but
|
||||||
|
# build configuration of the project using it). Useful e.g. for selecting
|
||||||
|
# proper plugin directory.
|
||||||
|
#
|
||||||
|
# Corrade defines the following custom target properties:
|
||||||
|
#
|
||||||
|
# CORRADE_CXX_STANDARD - C++ standard to require when compiling given
|
||||||
|
# target. Does nothing if :variable:`CMAKE_CXX_FLAGS` already contains
|
||||||
|
# particular standard setting flag or if given target contains
|
||||||
|
# :prop_tgt:`CMAKE_CXX_STANDARD` property. Allowed value is 11, 14 or 17.
|
||||||
|
# INTERFACE_CORRADE_CXX_STANDARD - C++ standard to require when using given
|
||||||
|
# target. Does nothing if :variable:`CMAKE_CXX_FLAGS` already contains
|
||||||
|
# particular standard setting flag or if given target contains
|
||||||
|
# :prop_tgt:`CMAKE_CXX_STANDARD` property. Allowed value is 11, 14 or 17.
|
||||||
|
# CORRADE_USE_PEDANTIC_FLAGS - Enable additional compiler/linker flags.
|
||||||
|
# Boolean.
|
||||||
|
#
|
||||||
|
# These properties are inherited from directory properties, meaning that if you
|
||||||
|
# set them on directories, they get implicitly set on all targets in given
|
||||||
|
# directory (with a possibility to do target-specific overrides). All Corrade
|
||||||
|
# libraries have the :prop_tgt:`INTERFACE_CORRADE_CXX_STANDARD` property set to
|
||||||
|
# 11, meaning that you will always have at least C++11 enabled once you link to
|
||||||
|
# any Corrade library.
|
||||||
|
#
|
||||||
|
# Features of found Corrade library are exposed in these variables:
|
||||||
|
#
|
||||||
|
# CORRADE_MSVC2019_COMPATIBILITY - Defined if compiled with compatibility
|
||||||
|
# mode for MSVC 2019
|
||||||
|
# CORRADE_MSVC2017_COMPATIBILITY - Defined if compiled with compatibility
|
||||||
|
# mode for MSVC 2017
|
||||||
|
# CORRADE_MSVC2015_COMPATIBILITY - Defined if compiled with compatibility
|
||||||
|
# mode for MSVC 2015
|
||||||
|
# CORRADE_BUILD_DEPRECATED - Defined if compiled with deprecated APIs
|
||||||
|
# included
|
||||||
|
# CORRADE_BUILD_STATIC - Defined if compiled as static libraries.
|
||||||
|
# Default are shared libraries.
|
||||||
|
# CORRADE_BUILD_STATIC_UNIQUE_GLOBALS - Defined if static libraries keep their
|
||||||
|
# globals unique even across different shared libraries. Enabled by default
|
||||||
|
# for static builds.
|
||||||
|
# CORRADE_BUILD_MULTITHREADED - Defined if compiled in a way that makes it
|
||||||
|
# possible to safely use certain Corrade features simultaneously in multiple
|
||||||
|
# threads
|
||||||
|
# CORRADE_TARGET_UNIX - Defined if compiled for some Unix flavor
|
||||||
|
# (Linux, BSD, macOS)
|
||||||
|
# CORRADE_TARGET_APPLE - Defined if compiled for Apple platforms
|
||||||
|
# CORRADE_TARGET_IOS - Defined if compiled for iOS (device or
|
||||||
|
# simulator)
|
||||||
|
# CORRADE_TARGET_IOS_SIMULATOR - Defined if compiled for iOS Simulator
|
||||||
|
# CORRADE_TARGET_WINDOWS - Defined if compiled for Windows
|
||||||
|
# CORRADE_TARGET_WINDOWS_RT - Defined if compiled for Windows RT
|
||||||
|
# CORRADE_TARGET_EMSCRIPTEN - Defined if compiled for Emscripten
|
||||||
|
# CORRADE_TARGET_ANDROID - Defined if compiled for Android
|
||||||
|
# CORRADE_TARGET_GCC - Defined if compiling with GCC or GCC-
|
||||||
|
# compatible Clang
|
||||||
|
# CORRADE_TARGET_CLANG - Defined if compiling with Clang or any of its
|
||||||
|
# variants
|
||||||
|
# CORRADE_TARGET_APPLE_CLANG - Defined if compiling with Apple's Clang
|
||||||
|
# CORRADE_TARGET_CLANG_CL - Defined if compiling with Clang-CL (Clang
|
||||||
|
# with a MSVC frontend)
|
||||||
|
# CORRADE_TARGET_MSVC - Defined if compiling with MSVC or Clang with
|
||||||
|
# a MSVC frontend
|
||||||
|
# CORRADE_TARGET_MINGW - Defined if compiling under MinGW
|
||||||
|
# CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT - Defined if PluginManager
|
||||||
|
# doesn't support dynamic plugin loading due to platform limitations
|
||||||
|
# CORRADE_TESTSUITE_TARGET_XCTEST - Defined if TestSuite is targetting Xcode
|
||||||
|
# XCTest
|
||||||
|
# CORRADE_UTILITY_USE_ANSI_COLORS - Defined if ANSI escape sequences are used
|
||||||
|
# for colored output with Utility::Debug on Windows
|
||||||
|
#
|
||||||
|
# Additionally these variables are defined for internal usage:
|
||||||
|
#
|
||||||
|
# CORRADE_INCLUDE_DIR - Root include dir
|
||||||
|
# CORRADE_*_LIBRARY_DEBUG - Debug version of given library, if found
|
||||||
|
# CORRADE_*_LIBRARY_RELEASE - Release version of given library, if found
|
||||||
|
# CORRADE_*_EXECUTABLE - Location of given executable, if found
|
||||||
|
# CORRADE_USE_MODULE - Path to UseCorrade.cmake module (included
|
||||||
|
# automatically)
|
||||||
|
# CORRADE_TESTSUITE_XCTEST_RUNNER - Path to XCTestRunner.mm.in file
|
||||||
|
# CORRADE_TESTSUITE_ADB_RUNNER - Path to AdbRunner.sh file
|
||||||
|
# CORRADE_PEDANTIC_COMPILER_OPTIONS - List of pedantic compiler options used
|
||||||
|
# for targets with :prop_tgt:`CORRADE_USE_PEDANTIC_FLAGS` enabled
|
||||||
|
# CORRADE_PEDANTIC_COMPILER_DEFINITIONS - List of pedantic compiler
|
||||||
|
# definitions used for targets with :prop_tgt:`CORRADE_USE_PEDANTIC_FLAGS`
|
||||||
|
# enabled
|
||||||
|
# CORRADE_CXX{11,14,17,20}_STANDARD_FLAG - Compiler flag to use for targeting
|
||||||
|
# C++11, 14, 17 or 20 in cases where it's not possible to use
|
||||||
|
# :prop_tgt:`CORRADE_CXX_STANDARD`. Not defined if a standard switch is
|
||||||
|
# already present in :variable:`CMAKE_CXX_FLAGS`.
|
||||||
|
#
|
||||||
|
# Corrade provides these macros and functions:
|
||||||
|
#
|
||||||
|
# .. command:: corrade_add_test
|
||||||
|
#
|
||||||
|
# Add unit test using Corrade's TestSuite::
|
||||||
|
#
|
||||||
|
# corrade_add_test(<test name>
|
||||||
|
# <sources>...
|
||||||
|
# [LIBRARIES <libraries>...]
|
||||||
|
# [FILES <files>...]
|
||||||
|
# [ARGUMENTS <arguments>...])
|
||||||
|
#
|
||||||
|
# Test name is also executable name. You can use ``LIBRARIES`` to specify
|
||||||
|
# libraries to link with instead of using :command:`target_link_libraries()`.
|
||||||
|
# The ``Corrade::TestSuite`` target is linked automatically to each test. Note
|
||||||
|
# that the :command:`enable_testing()` function must be called explicitly.
|
||||||
|
# Arguments passed after ``ARGUMENTS`` will be appended to the test
|
||||||
|
# command line. ``ARGUMENTS`` are supported everywhere except when
|
||||||
|
# ``CORRADE_TESTSUITE_TARGET_XCTEST`` is enabled.
|
||||||
|
#
|
||||||
|
# You can list files needed by the test in the ``FILES`` section. If given
|
||||||
|
# filename is relative, it is treated relatively to `CMAKE_CURRENT_SOURCE_DIR`.
|
||||||
|
# The files are added to the :prop_test:`REQUIRED_FILES` target property. On
|
||||||
|
# Emscripten they are bundled to the executable and available in the virtual
|
||||||
|
# filesystem root. On Android they are copied along the executable to the
|
||||||
|
# target. In case of Emscripten and Android, if the file is absolute or
|
||||||
|
# contains ``..``, only the leaf name is used. Alternatively you can have a
|
||||||
|
# filename formatted as ``<input>@<output>``, in which case the ``<input>`` is
|
||||||
|
# treated as local filesystem location and ``<output>`` as remote/virtual
|
||||||
|
# filesystem location. The remote location can't be absolute or contain ``..``
|
||||||
|
# / ``@`` characters.
|
||||||
|
#
|
||||||
|
# Unless :variable:`CORRADE_TESTSUITE_TARGET_XCTEST` is set, test cases on iOS
|
||||||
|
# targets are created as bundles with bundle identifier set to CMake project
|
||||||
|
# name by default. Use the cache variable :variable:`CORRADE_TESTSUITE_BUNDLE_IDENTIFIER_PREFIX`
|
||||||
|
# to change it to something else.
|
||||||
|
#
|
||||||
|
# .. command:: corrade_add_resource
|
||||||
|
#
|
||||||
|
# Compile data resources into application binary::
|
||||||
|
#
|
||||||
|
# corrade_add_resource(<name> <resources.conf>)
|
||||||
|
#
|
||||||
|
# Depends on ``Corrade::rc``, which is part of Corrade utilities. This command
|
||||||
|
# generates resource data using given configuration file in current build
|
||||||
|
# directory. Argument name is name under which the resources can be explicitly
|
||||||
|
# loaded. Variable ``<name>`` contains compiled resource filename, which is
|
||||||
|
# then used for compiling library / executable. On CMake >= 3.1 the
|
||||||
|
# `resources.conf` file can contain UTF-8-encoded filenames. Example usage::
|
||||||
|
#
|
||||||
|
# corrade_add_resource(app_resources resources.conf)
|
||||||
|
# add_executable(app source1 source2 ... ${app_resources})
|
||||||
|
#
|
||||||
|
# .. command:: corrade_add_plugin
|
||||||
|
#
|
||||||
|
# Add dynamic plugin::
|
||||||
|
#
|
||||||
|
# corrade_add_plugin(<plugin name>
|
||||||
|
# "<debug binary install dir>;<debug library install dir>"
|
||||||
|
# "<release binary install dir>;<release library install dir>"
|
||||||
|
# <metadata file>
|
||||||
|
# <sources>...)
|
||||||
|
#
|
||||||
|
# The macro adds a preprocessor directive ``CORRADE_DYNAMIC_PLUGIN`` when
|
||||||
|
# compiling ``<sources>``. Additional libraries can be linked in via
|
||||||
|
# :command:`target_link_libraries(plugin_name ...) <target_link_libraries>`.
|
||||||
|
# On DLL platforms, the plugin DLLs and metadata files are put into
|
||||||
|
# ``<debug binary install dir>`` / ``<release binary install dir>`` and the
|
||||||
|
# ``*.lib`` files into ``<debug library install dir>`` /
|
||||||
|
# ``<release library install dir>``. On non-DLL platforms everything is put
|
||||||
|
# into ``<debug library install dir>`` / ``<release library install dir>``.
|
||||||
|
#
|
||||||
|
# If the plugin interface disables plugin metadata files, the
|
||||||
|
# ``<metadata file>`` can be set to ``""``, in which case no metadata file is
|
||||||
|
# copied anywhere. Otherwise the metadata file is copied and renamed to
|
||||||
|
# ``<plugin name>``, retaining its original extension.
|
||||||
|
#
|
||||||
|
# corrade_add_plugin(<plugin name>
|
||||||
|
# <debug install dir>
|
||||||
|
# <release install dir>
|
||||||
|
# <metadata file>
|
||||||
|
# <sources>...)
|
||||||
|
#
|
||||||
|
# Unline the above version this puts everything into ``<debug install dir>`` on
|
||||||
|
# both DLL and non-DLL platforms. If ``<debug install dir>`` is set to
|
||||||
|
# :variable:`CMAKE_CURRENT_BINARY_DIR` (e.g. for testing purposes), the files
|
||||||
|
# are copied directly, without the need to perform install step. Note that the
|
||||||
|
# files are actually put into configuration-based subdirectory, i.e.
|
||||||
|
# ``${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}``. See documentation of
|
||||||
|
# :variable:`CMAKE_CFG_INTDIR` variable for more information.
|
||||||
|
#
|
||||||
|
# .. command:: corrade_add_static_plugin
|
||||||
|
#
|
||||||
|
# Add static plugin::
|
||||||
|
#
|
||||||
|
# corrade_add_static_plugin(<plugin name>
|
||||||
|
# "<binary install dir>;<library install dir>"
|
||||||
|
# <metadata file>
|
||||||
|
# <sources>...)
|
||||||
|
#
|
||||||
|
# The macro adds a preprocessor directive ``CORRADE_STATIC_PLUGIN`` when
|
||||||
|
# compiling ``<sources>``. Additional libraries can be linked in via
|
||||||
|
# :command:`target_link_libraries(plugin_name ...) <target_link_libraries>`.
|
||||||
|
# The ``<binary install dir>`` is ignored and included just for compatibility
|
||||||
|
# with the :command:`corrade_add_plugin` command, everything is installed into
|
||||||
|
# ``<library install dir>``. Note that plugins built in debug configuration
|
||||||
|
# (e.g. with :variable:`CMAKE_BUILD_TYPE` set to ``Debug``) have ``"-d"``
|
||||||
|
# suffix to make it possible to have both debug and release plugins installed
|
||||||
|
# alongside each other.
|
||||||
|
#
|
||||||
|
# If the plugin interface disables plugin metadata files, the
|
||||||
|
# ``<metadata file>`` can be set to ``""``, in which case no metadata file is
|
||||||
|
# used. Otherwise the metadata file is bundled and renamed to
|
||||||
|
# ``<plugin name>``, retaining its original extension.
|
||||||
|
#
|
||||||
|
# corrade_add_static_plugin(<plugin name>
|
||||||
|
# <install dir>
|
||||||
|
# <metadata file>
|
||||||
|
# <sources>...)
|
||||||
|
#
|
||||||
|
# Equivalent to the above with ``<library install dir>`` set to ``<install dir>``.
|
||||||
|
# If ``<install dir>`` is set to :variable:`CMAKE_CURRENT_BINARY_DIR` (e.g. for
|
||||||
|
# testing purposes), no installation rules are added.
|
||||||
|
#
|
||||||
|
# .. command:: corrade_find_dlls_for_libs
|
||||||
|
#
|
||||||
|
# Find corresponding DLLs for library files::
|
||||||
|
#
|
||||||
|
# corrade_find_dlls_for_libs(<output variable> <libs>...)
|
||||||
|
#
|
||||||
|
# Available only on Windows, for all ``*.lib`` files tries to find
|
||||||
|
# corresponding DLL file. Useful for bundling dependencies for e.g. WinRT
|
||||||
|
# packages.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# This file is part of Corrade.
|
||||||
|
#
|
||||||
|
# Copyright © 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,
|
||||||
|
# 2017, 2018, 2019, 2020, 2021
|
||||||
|
# Vladimír Vondruš <mosra@centrum.cz>
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
# copy of this software and associated documentation files (the "Software"),
|
||||||
|
# to deal in the Software without restriction, including without limitation
|
||||||
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
# and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
# Software is furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included
|
||||||
|
# in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
# DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Root include dir
|
||||||
|
find_path(CORRADE_INCLUDE_DIR
|
||||||
|
NAMES Corrade/Corrade.h)
|
||||||
|
mark_as_advanced(CORRADE_INCLUDE_DIR)
|
||||||
|
|
||||||
|
# Configuration file
|
||||||
|
find_file(_CORRADE_CONFIGURE_FILE configure.h
|
||||||
|
HINTS ${CORRADE_INCLUDE_DIR}/Corrade/)
|
||||||
|
mark_as_advanced(_CORRADE_CONFIGURE_FILE)
|
||||||
|
|
||||||
|
# We need to open configure.h file from CORRADE_INCLUDE_DIR before we check for
|
||||||
|
# the components. Bail out with proper error message if it wasn't found. The
|
||||||
|
# complete check with all components is further below.
|
||||||
|
if(NOT CORRADE_INCLUDE_DIR)
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(Corrade
|
||||||
|
REQUIRED_VARS CORRADE_INCLUDE_DIR _CORRADE_CONFIGURE_FILE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Read flags from configuration
|
||||||
|
file(READ ${_CORRADE_CONFIGURE_FILE} _corradeConfigure)
|
||||||
|
string(REGEX REPLACE ";" "\\\\;" _corradeConfigure "${_corradeConfigure}")
|
||||||
|
string(REGEX REPLACE "\n" ";" _corradeConfigure "${_corradeConfigure}")
|
||||||
|
set(_corradeFlags
|
||||||
|
MSVC2015_COMPATIBILITY
|
||||||
|
MSVC2017_COMPATIBILITY
|
||||||
|
MSVC2019_COMPATIBILITY
|
||||||
|
BUILD_DEPRECATED
|
||||||
|
BUILD_STATIC
|
||||||
|
BUILD_STATIC_UNIQUE_GLOBALS
|
||||||
|
BUILD_MULTITHREADED
|
||||||
|
TARGET_UNIX
|
||||||
|
TARGET_APPLE
|
||||||
|
TARGET_IOS
|
||||||
|
TARGET_IOS_SIMULATOR
|
||||||
|
TARGET_WINDOWS
|
||||||
|
TARGET_WINDOWS_RT
|
||||||
|
TARGET_EMSCRIPTEN
|
||||||
|
TARGET_ANDROID
|
||||||
|
# TARGET_X86 etc and TARGET_LIBCXX are not exposed to CMake as the meaning
|
||||||
|
# is unclear on platforms with multi-arch binaries or when mixing different
|
||||||
|
# STL implementations. TARGET_GCC etc are figured out via UseCorrade.cmake,
|
||||||
|
# as the compiler can be different when compiling the lib & when using it.
|
||||||
|
PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT
|
||||||
|
TESTSUITE_TARGET_XCTEST
|
||||||
|
UTILITY_USE_ANSI_COLORS)
|
||||||
|
foreach(_corradeFlag ${_corradeFlags})
|
||||||
|
list(FIND _corradeConfigure "#define CORRADE_${_corradeFlag}" _corrade_${_corradeFlag})
|
||||||
|
if(NOT _corrade_${_corradeFlag} EQUAL -1)
|
||||||
|
set(CORRADE_${_corradeFlag} 1)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
# CMake module dir
|
||||||
|
find_path(_CORRADE_MODULE_DIR
|
||||||
|
NAMES UseCorrade.cmake CorradeLibSuffix.cmake
|
||||||
|
PATH_SUFFIXES share/cmake/Corrade)
|
||||||
|
mark_as_advanced(_CORRADE_MODULE_DIR)
|
||||||
|
|
||||||
|
set(CORRADE_USE_MODULE ${_CORRADE_MODULE_DIR}/UseCorrade.cmake)
|
||||||
|
set(CORRADE_LIB_SUFFIX_MODULE ${_CORRADE_MODULE_DIR}/CorradeLibSuffix.cmake)
|
||||||
|
|
||||||
|
# Component distinction (listing them explicitly to avoid mistakes with finding
|
||||||
|
# unknown components)
|
||||||
|
set(_CORRADE_LIBRARY_COMPONENTS
|
||||||
|
Containers Interconnect Main PluginManager TestSuite Utility)
|
||||||
|
set(_CORRADE_HEADER_ONLY_COMPONENTS Containers)
|
||||||
|
if(NOT CORRADE_TARGET_WINDOWS)
|
||||||
|
# CorradeMain is a real library only on windows, a dummy target elsewhere
|
||||||
|
list(APPEND _CORRADE_HEADER_ONLY_COMPONENTS Main)
|
||||||
|
endif()
|
||||||
|
set(_CORRADE_EXECUTABLE_COMPONENTS rc)
|
||||||
|
# Currently everything is enabled implicitly. Keep in sync with Corrade's root
|
||||||
|
# CMakeLists.txt.
|
||||||
|
set(_CORRADE_IMPLICITLY_ENABLED_COMPONENTS
|
||||||
|
Containers Interconnect Main PluginManager TestSuite Utility rc)
|
||||||
|
|
||||||
|
# Inter-component dependencies
|
||||||
|
set(_CORRADE_Containers_DEPENDENCIES Utility)
|
||||||
|
set(_CORRADE_Interconnect_DEPENDENCIES Containers Utility)
|
||||||
|
set(_CORRADE_PluginManager_DEPENDENCIES Containers Utility rc)
|
||||||
|
set(_CORRADE_TestSuite_DEPENDENCIES Containers Utility Main) # see below
|
||||||
|
set(_CORRADE_Utility_DEPENDENCIES Containers rc)
|
||||||
|
|
||||||
|
# Ensure that all inter-component dependencies are specified as well
|
||||||
|
foreach(_component ${Corrade_FIND_COMPONENTS})
|
||||||
|
# Mark the dependencies as required if the component is also required
|
||||||
|
if(Corrade_FIND_REQUIRED_${_component})
|
||||||
|
foreach(_dependency ${_CORRADE_${_component}_DEPENDENCIES})
|
||||||
|
set(Corrade_FIND_REQUIRED_${_dependency} TRUE)
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND _CORRADE_ADDITIONAL_COMPONENTS ${_CORRADE_${_component}_DEPENDENCIES})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
# Main is linked only in corrade_add_test(), not to everything that depends on
|
||||||
|
# TestSuite, so remove it from the list again once we filled the above
|
||||||
|
# variables
|
||||||
|
set(_CORRADE_TestSuite_DEPENDENCIES Containers Utility)
|
||||||
|
|
||||||
|
# Join the lists, remove duplicate components
|
||||||
|
set(_CORRADE_ORIGINAL_FIND_COMPONENTS ${Corrade_FIND_COMPONENTS})
|
||||||
|
if(_CORRADE_ADDITIONAL_COMPONENTS)
|
||||||
|
list(INSERT Corrade_FIND_COMPONENTS 0 ${_CORRADE_ADDITIONAL_COMPONENTS})
|
||||||
|
endif()
|
||||||
|
if(Corrade_FIND_COMPONENTS)
|
||||||
|
list(REMOVE_DUPLICATES Corrade_FIND_COMPONENTS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Find all components
|
||||||
|
foreach(_component ${Corrade_FIND_COMPONENTS})
|
||||||
|
string(TOUPPER ${_component} _COMPONENT)
|
||||||
|
|
||||||
|
# Create imported target in case the library is found. If the project is
|
||||||
|
# added as subproject to CMake, the target already exists and all the
|
||||||
|
# required setup is already done from the build tree.
|
||||||
|
if(TARGET Corrade::${_component})
|
||||||
|
set(Corrade_${_component}_FOUND TRUE)
|
||||||
|
else()
|
||||||
|
# Library (and not header-only) components
|
||||||
|
if(_component IN_LIST _CORRADE_LIBRARY_COMPONENTS AND NOT _component IN_LIST _CORRADE_HEADER_ONLY_COMPONENTS)
|
||||||
|
add_library(Corrade::${_component} UNKNOWN IMPORTED)
|
||||||
|
|
||||||
|
# Try to find both debug and release version
|
||||||
|
find_library(CORRADE_${_COMPONENT}_LIBRARY_DEBUG Corrade${_component}-d)
|
||||||
|
find_library(CORRADE_${_COMPONENT}_LIBRARY_RELEASE Corrade${_component})
|
||||||
|
mark_as_advanced(CORRADE_${_COMPONENT}_LIBRARY_DEBUG
|
||||||
|
CORRADE_${_COMPONENT}_LIBRARY_RELEASE)
|
||||||
|
|
||||||
|
if(CORRADE_${_COMPONENT}_LIBRARY_RELEASE)
|
||||||
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
|
IMPORTED_CONFIGURATIONS RELEASE)
|
||||||
|
set_property(TARGET Corrade::${_component} PROPERTY
|
||||||
|
IMPORTED_LOCATION_RELEASE ${CORRADE_${_COMPONENT}_LIBRARY_RELEASE})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CORRADE_${_COMPONENT}_LIBRARY_DEBUG)
|
||||||
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
|
IMPORTED_CONFIGURATIONS DEBUG)
|
||||||
|
set_property(TARGET Corrade::${_component} PROPERTY
|
||||||
|
IMPORTED_LOCATION_DEBUG ${CORRADE_${_COMPONENT}_LIBRARY_DEBUG})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Header-only library components
|
||||||
|
if(_component IN_LIST _CORRADE_HEADER_ONLY_COMPONENTS)
|
||||||
|
add_library(Corrade::${_component} INTERFACE IMPORTED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Default include path names to look for for library / header-only
|
||||||
|
# components
|
||||||
|
if(_component IN_LIST _CORRADE_LIBRARY_COMPONENTS)
|
||||||
|
set(_CORRADE_${_COMPONENT}_INCLUDE_PATH_SUFFIX Corrade/${_component})
|
||||||
|
set(_CORRADE_${_COMPONENT}_INCLUDE_PATH_NAMES ${_component}.h)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Executable components
|
||||||
|
if(_component IN_LIST _CORRADE_EXECUTABLE_COMPONENTS)
|
||||||
|
add_executable(Corrade::${_component} IMPORTED)
|
||||||
|
|
||||||
|
find_program(CORRADE_${_COMPONENT}_EXECUTABLE corrade-${_component})
|
||||||
|
mark_as_advanced(CORRADE_${_COMPONENT}_EXECUTABLE)
|
||||||
|
|
||||||
|
if(CORRADE_${_COMPONENT}_EXECUTABLE)
|
||||||
|
set_property(TARGET Corrade::${_component} PROPERTY
|
||||||
|
IMPORTED_LOCATION ${CORRADE_${_COMPONENT}_EXECUTABLE})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# No special setup for Containers library
|
||||||
|
|
||||||
|
# Interconnect library
|
||||||
|
if(_component STREQUAL Interconnect)
|
||||||
|
# Disable /OPT:ICF on MSVC, which merges functions with identical
|
||||||
|
# contents and thus breaks signal comparison
|
||||||
|
if(CORRADE_TARGET_WINDOWS AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
if(CMAKE_VERSION VERSION_LESS 3.13)
|
||||||
|
set_property(TARGET Corrade::${_component} PROPERTY
|
||||||
|
INTERFACE_LINK_LIBRARIES "-OPT:NOICF,REF")
|
||||||
|
else()
|
||||||
|
set_property(TARGET Corrade::${_component} PROPERTY
|
||||||
|
INTERFACE_LINK_OPTIONS "/OPT:NOICF,REF")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Main library
|
||||||
|
elseif(_component STREQUAL Main)
|
||||||
|
set(_CORRADE_${_COMPONENT}_INCLUDE_PATH_SUFFIX Corrade)
|
||||||
|
set(_CORRADE_${_COMPONENT}_INCLUDE_PATH_NAMES Corrade.h)
|
||||||
|
|
||||||
|
if(CORRADE_TARGET_WINDOWS)
|
||||||
|
if(NOT MINGW)
|
||||||
|
# Abusing INTERFACE_LINK_LIBRARIES because
|
||||||
|
# INTERFACE_LINK_OPTIONS is only since 3.13. They treat
|
||||||
|
# things with `-` in front as linker flags and fortunately
|
||||||
|
# I can use `-ENTRY` instead of `/ENTRY`.
|
||||||
|
# https://gitlab.kitware.com/cmake/cmake/issues/16543
|
||||||
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
|
INTERFACE_LINK_LIBRARIES "-ENTRY:$<$<NOT:$<BOOL:$<TARGET_PROPERTY:WIN32_EXECUTABLE>>>:wmainCRTStartup>$<$<BOOL:$<TARGET_PROPERTY:WIN32_EXECUTABLE>>:wWinMainCRTStartup>")
|
||||||
|
else()
|
||||||
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
|
INTERFACE_LINK_LIBRARIES "-municode")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# PluginManager library
|
||||||
|
elseif(_component STREQUAL PluginManager)
|
||||||
|
# -ldl is handled by Utility now
|
||||||
|
|
||||||
|
# TestSuite library has some additional files
|
||||||
|
elseif(_component STREQUAL TestSuite)
|
||||||
|
# XCTest runner file
|
||||||
|
if(CORRADE_TESTSUITE_TARGET_XCTEST)
|
||||||
|
find_file(CORRADE_TESTSUITE_XCTEST_RUNNER XCTestRunner.mm.in
|
||||||
|
PATH_SUFFIXES share/corrade/TestSuite)
|
||||||
|
set(CORRADE_TESTSUITE_XCTEST_RUNNER_NEEDED CORRADE_TESTSUITE_XCTEST_RUNNER)
|
||||||
|
|
||||||
|
# ADB runner file
|
||||||
|
elseif(CORRADE_TARGET_ANDROID)
|
||||||
|
find_file(CORRADE_TESTSUITE_ADB_RUNNER AdbRunner.sh
|
||||||
|
PATH_SUFFIXES share/corrade/TestSuite)
|
||||||
|
set(CORRADE_TESTSUITE_ADB_RUNNER_NEEDED CORRADE_TESTSUITE_ADB_RUNNER)
|
||||||
|
|
||||||
|
# Emscripten runner file
|
||||||
|
elseif(CORRADE_TARGET_EMSCRIPTEN)
|
||||||
|
find_file(CORRADE_TESTSUITE_EMSCRIPTEN_RUNNER EmscriptenRunner.html.in
|
||||||
|
PATH_SUFFIXES share/corrade/TestSuite)
|
||||||
|
set(CORRADE_TESTSUITE_EMSCRIPTEN_RUNNER_NEEDED CORRADE_TESTSUITE_EMSCRIPTEN_RUNNER)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Utility library (contains all setup that is used by others)
|
||||||
|
elseif(_component STREQUAL Utility)
|
||||||
|
# Top-level include directory
|
||||||
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES ${CORRADE_INCLUDE_DIR})
|
||||||
|
|
||||||
|
# Require (at least) C++11 for users
|
||||||
|
set_property(TARGET Corrade::${_component} PROPERTY
|
||||||
|
INTERFACE_CORRADE_CXX_STANDARD 11)
|
||||||
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
|
COMPATIBLE_INTERFACE_NUMBER_MAX CORRADE_CXX_STANDARD)
|
||||||
|
|
||||||
|
# Directory::libraryLocation() needs this
|
||||||
|
if(CORRADE_TARGET_UNIX)
|
||||||
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
|
INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS})
|
||||||
|
endif()
|
||||||
|
# AndroidLogStreamBuffer class needs to be linked to log library
|
||||||
|
if(CORRADE_TARGET_ANDROID)
|
||||||
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
|
INTERFACE_LINK_LIBRARIES "log")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Find library includes
|
||||||
|
if(_component IN_LIST _CORRADE_LIBRARY_COMPONENTS)
|
||||||
|
find_path(_CORRADE_${_COMPONENT}_INCLUDE_DIR
|
||||||
|
NAMES ${_CORRADE_${_COMPONENT}_INCLUDE_PATH_NAMES}
|
||||||
|
HINTS ${CORRADE_INCLUDE_DIR}/${_CORRADE_${_COMPONENT}_INCLUDE_PATH_SUFFIX})
|
||||||
|
mark_as_advanced(_CORRADE_${_COMPONENT}_INCLUDE_DIR)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Add inter-library dependencies
|
||||||
|
if(_component IN_LIST _CORRADE_LIBRARY_COMPONENTS OR _component IN_LIST _CORRADE_HEADER_ONLY_COMPONENTS)
|
||||||
|
foreach(_dependency ${_CORRADE_${_component}_DEPENDENCIES})
|
||||||
|
if(_dependency IN_LIST _CORRADE_LIBRARY_COMPONENTS OR _dependency IN_LIST _CORRADE_HEADER_ONLY_COMPONENTS)
|
||||||
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
|
INTERFACE_LINK_LIBRARIES Corrade::${_dependency})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Decide if the component was found
|
||||||
|
if((_component IN_LIST _CORRADE_LIBRARY_COMPONENTS AND _CORRADE_${_COMPONENT}_INCLUDE_DIR AND (_component IN_LIST _CORRADE_HEADER_ONLY_COMPONENTS OR CORRADE_${_COMPONENT}_LIBRARY_RELEASE OR CORRADE_${_COMPONENT}_LIBRARY_DEBUG)) OR (_component IN_LIST _CORRADE_EXECUTABLE_COMPONENTS AND CORRADE_${_COMPONENT}_EXECUTABLE))
|
||||||
|
set(Corrade_${_component}_FOUND TRUE)
|
||||||
|
else()
|
||||||
|
set(Corrade_${_component}_FOUND FALSE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
# For CMake 3.16+ with REASON_FAILURE_MESSAGE, provide additional potentially
|
||||||
|
# useful info about the failed components.
|
||||||
|
if(NOT CMAKE_VERSION VERSION_LESS 3.16)
|
||||||
|
set(_CORRADE_REASON_FAILURE_MESSAGE )
|
||||||
|
# Go only through the originally specified find_package() components, not
|
||||||
|
# the dependencies added by us afterwards
|
||||||
|
foreach(_component ${_CORRADE_ORIGINAL_FIND_COMPONENTS})
|
||||||
|
if(Corrade_${_component}_FOUND)
|
||||||
|
continue()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# If it's not known at all, tell the user -- it might be a new library
|
||||||
|
# and an old Find module, or something platform-specific.
|
||||||
|
if(NOT _component IN_LIST _CORRADE_LIBRARY_COMPONENTS AND NOT _component IN_LIST _CORRADE_EXECUTABLE_COMPONENTS)
|
||||||
|
list(APPEND _CORRADE_REASON_FAILURE_MESSAGE "${_component} is not a known component on this platform.")
|
||||||
|
# Otherwise, if it's not among implicitly built components, hint that
|
||||||
|
# the user may need to enable it.
|
||||||
|
# TODO: currently, the _FOUND variable doesn't reflect if dependencies
|
||||||
|
# were found. When it will, this needs to be updated to avoid
|
||||||
|
# misleading messages.
|
||||||
|
elseif(NOT _component IN_LIST _CORRADE_IMPLICITLY_ENABLED_COMPONENTS)
|
||||||
|
string(TOUPPER ${_component} _COMPONENT)
|
||||||
|
list(APPEND _CORRADE_REASON_FAILURE_MESSAGE "${_component} is not built by default. Make sure you enabled WITH_${_COMPONENT} when building Corrade.")
|
||||||
|
# Otherwise we have no idea. Better be silent than to print something
|
||||||
|
# misleading.
|
||||||
|
else()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
string(REPLACE ";" " " _CORRADE_REASON_FAILURE_MESSAGE "${_CORRADE_REASON_FAILURE_MESSAGE}")
|
||||||
|
set(_CORRADE_REASON_FAILURE_MESSAGE REASON_FAILURE_MESSAGE "${_CORRADE_REASON_FAILURE_MESSAGE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(Corrade REQUIRED_VARS
|
||||||
|
CORRADE_INCLUDE_DIR
|
||||||
|
_CORRADE_MODULE_DIR
|
||||||
|
_CORRADE_CONFIGURE_FILE
|
||||||
|
${CORRADE_TESTSUITE_XCTEST_RUNNER_NEEDED}
|
||||||
|
${CORRADE_TESTSUITE_ADB_RUNNER_NEEDED}
|
||||||
|
${CORRADE_TESTSUITE_EMSCRIPTEN_RUNNER_NEEDED}
|
||||||
|
HANDLE_COMPONENTS
|
||||||
|
${_CORRADE_REASON_FAILURE_MESSAGE})
|
||||||
|
|
||||||
|
# Finalize the finding process
|
||||||
|
include(${CORRADE_USE_MODULE})
|
||||||
|
|
||||||
|
set(CORRADE_INCLUDE_INSTALL_DIR include/Corrade)
|
||||||
|
|
||||||
|
if(CORRADE_BUILD_DEPRECATED AND CORRADE_INCLUDE_INSTALL_PREFIX AND NOT CORRADE_INCLUDE_INSTALL_PREFIX STREQUAL ".")
|
||||||
|
message(DEPRECATION "CORRADE_INCLUDE_INSTALL_PREFIX is obsolete as its primary use was for old Android NDK versions. Please switch to the NDK r19+ layout instead of using this variable and recreate your build directory to get rid of this warning.")
|
||||||
|
set(CORRADE_INCLUDE_INSTALL_DIR ${CORRADE_INCLUDE_INSTALL_PREFIX}/${CORRADE_INCLUDE_INSTALL_DIR})
|
||||||
|
endif()
|
87
src/CMakeLists.txt
Normal file
87
src/CMakeLists.txt
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
# wxMASSManager
|
||||||
|
# Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
|
#
|
||||||
|
# This program 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.
|
||||||
|
#
|
||||||
|
# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
find_package(Corrade REQUIRED Containers Utility)
|
||||||
|
|
||||||
|
include_directories(SYSTEM "C:/msys64/mingw64/lib/wx/include/msw-unicode-static-3.0")
|
||||||
|
include_directories(SYSTEM "C:/msys64/mingw64/include/wx-3.0")
|
||||||
|
|
||||||
|
set_directory_properties(PROPERTIES CORRADE_USE_PEDANTIC_FLAGS ON)
|
||||||
|
|
||||||
|
add_executable(wxMASSManager WIN32
|
||||||
|
main.cpp
|
||||||
|
GUI/MainFrame.fbp
|
||||||
|
GUI/MainFrame.h
|
||||||
|
GUI/MainFrame.cpp
|
||||||
|
GUI/EvtMainFrame.h
|
||||||
|
GUI/EvtMainFrame.cpp
|
||||||
|
GUI/NameChangeDialog.fbp
|
||||||
|
GUI/NameChangeDialog.h
|
||||||
|
GUI/NameChangeDialog.cpp
|
||||||
|
GUI/EvtNameChangeDialog.h
|
||||||
|
GUI/EvtNameChangeDialog.cpp
|
||||||
|
Maps/LastMissionId.h
|
||||||
|
Maps/StoryProgress.h
|
||||||
|
Mass/Mass.h
|
||||||
|
Mass/Mass.cpp
|
||||||
|
MassBuilderManager/MassBuilderManager.h
|
||||||
|
MassBuilderManager/MassBuilderManager.cpp
|
||||||
|
MassManager/MassManager.h
|
||||||
|
MassManager/MassManager.cpp
|
||||||
|
Profile/Locators.h
|
||||||
|
Profile/Profile.h
|
||||||
|
Profile/Profile.cpp
|
||||||
|
ProfileManager/ProfileManager.h
|
||||||
|
ProfileManager/ProfileManager.cpp
|
||||||
|
resource.rc)
|
||||||
|
|
||||||
|
target_compile_options(wxMASSManager PRIVATE -D_FILE_OFFSET_BITS=64 -D__WXMSW__)
|
||||||
|
|
||||||
|
target_link_options(wxMASSManager PRIVATE -static -static-libgcc -static-libstdc++ -pipe -Wl,--subsystem,windows -mwindows)
|
||||||
|
|
||||||
|
target_link_libraries(wxMASSManager PRIVATE
|
||||||
|
Corrade::Containers
|
||||||
|
Corrade::Utility
|
||||||
|
wx_mswu_propgrid-3.0
|
||||||
|
wx_mswu_adv-3.0
|
||||||
|
wx_mswu_core-3.0
|
||||||
|
wx_baseu-3.0
|
||||||
|
wxregexu-3.0
|
||||||
|
wxexpat-3.0
|
||||||
|
wxtiff-3.0
|
||||||
|
wxjpeg-3.0
|
||||||
|
wxpng-3.0
|
||||||
|
wxzlib-3.0
|
||||||
|
rpcrt4
|
||||||
|
oleaut32
|
||||||
|
ole32
|
||||||
|
uuid
|
||||||
|
lzma
|
||||||
|
jbig
|
||||||
|
winspool
|
||||||
|
winmm
|
||||||
|
shell32
|
||||||
|
comctl32
|
||||||
|
comdlg32
|
||||||
|
advapi32
|
||||||
|
wsock32
|
||||||
|
gdi32
|
||||||
|
oleacc
|
||||||
|
wtsapi32)
|
|
@ -1,5 +1,5 @@
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
@ -167,7 +167,7 @@ void EvtMainFrame::backupSelectedProfileEvent(wxCommandEvent&) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EvtMainFrame::companyRenameEvent(wxMouseEvent&) {
|
void EvtMainFrame::companyRenameEvent(wxCommandEvent&) {
|
||||||
const static std::string error_prefix = "Rename failed:\n\n";
|
const static std::string error_prefix = "Rename failed:\n\n";
|
||||||
|
|
||||||
EvtNameChangeDialog dialog{this};
|
EvtNameChangeDialog dialog{this};
|
||||||
|
@ -210,6 +210,30 @@ void EvtMainFrame::companyRenameEvent(wxMouseEvent&) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EvtMainFrame::creditsEditEvent(wxCommandEvent&) {
|
||||||
|
const static std::string error_prefix = "Credits change failed:\n\n";
|
||||||
|
|
||||||
|
if(_unsafeMode == true || _mbManager.gameState() == GameState::NotRunning) {
|
||||||
|
long number = wxGetNumberFromUser("Please enter a number of credits between 0 and 2 000 000 000 included:", "Credits:", "Input credits",
|
||||||
|
_profileManager.currentProfile()->credits(), 0, 2000000000, this);
|
||||||
|
if(number == -1 || number == _profileManager.currentProfile()->credits()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!_profileManager.currentProfile()->setCredits(number)) {
|
||||||
|
errorMessage(error_prefix + _profileManager.currentProfile()->lastError());
|
||||||
|
}
|
||||||
|
|
||||||
|
updateProfileStats();
|
||||||
|
}
|
||||||
|
else if(_mbManager.gameState() == GameState::Unknown) {
|
||||||
|
errorMessage(error_prefix + "For security reasons, changing credits is disabled if the game's status is unknown.");
|
||||||
|
}
|
||||||
|
else if(_mbManager.gameState() == GameState::Running) {
|
||||||
|
errorMessage(error_prefix + "For security reasons, changing credits is disabled if the game is running.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EvtMainFrame::storyProgressSelectionEvent(wxCommandEvent& event) {
|
void EvtMainFrame::storyProgressSelectionEvent(wxCommandEvent& event) {
|
||||||
const static std::string error_prefix = "StoryProgress change failed:\n\n";
|
const static std::string error_prefix = "StoryProgress change failed:\n\n";
|
||||||
|
|
||||||
|
@ -241,6 +265,59 @@ void EvtMainFrame::openStoryProgressMenuEvent(wxCommandEvent&) {
|
||||||
PopupMenu(_storyProgressSelectionMenu.get());
|
PopupMenu(_storyProgressSelectionMenu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EvtMainFrame::inventoryChangeEvent(wxPropertyGridEvent& event) {
|
||||||
|
const static std::string error_prefix = "Inventory change failed:\n\n";
|
||||||
|
|
||||||
|
std::int32_t value = event.GetPropertyValue().GetInteger();
|
||||||
|
Profile* profile = _profileManager.currentProfile();
|
||||||
|
|
||||||
|
if(value > 1000000 || value < 0) {
|
||||||
|
event.SetValidationFailureMessage(error_prefix + "The value must not be higher than 1 million or lower than 0");
|
||||||
|
event.Veto();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_unsafeMode == true || _mbManager.gameState() == GameState::NotRunning) {
|
||||||
|
wxPGProperty* prop = event.GetProperty();
|
||||||
|
bool success = false;
|
||||||
|
|
||||||
|
if(prop == _verseSteel) { success = profile->setVerseSteel(value); }
|
||||||
|
else if(prop == _undinium) { success = profile->setUndinium(value); }
|
||||||
|
else if(prop == _necriumAlloy) { success = profile->setNecriumAlloy(value); }
|
||||||
|
else if(prop == _lunarite) { success = profile->setLunarite(value); }
|
||||||
|
else if(prop == _asterite) { success = profile->setAsterite(value); }
|
||||||
|
else if(prop == _ednil) { success = profile->setEdnil(value); }
|
||||||
|
else if(prop == _nuflalt) { success = profile->setNuflalt(value); }
|
||||||
|
else if(prop == _aurelene) { success = profile->setAurelene(value); }
|
||||||
|
else if(prop == _soldus) { success = profile->setSoldus(value); }
|
||||||
|
else if(prop == _synthesizedN) { success = profile->setSynthesizedN(value); }
|
||||||
|
else if(prop == _alcarbonite) { success = profile->setAlcarbonite(value); }
|
||||||
|
else if(prop == _keriphene) { success = profile->setKeriphene(value); }
|
||||||
|
else if(prop == _nitinolCM) { success = profile->setNitinolCM(value); }
|
||||||
|
else if(prop == _quarkium) { success = profile->setQuarkium(value); }
|
||||||
|
else if(prop == _alterene) { success = profile->setAlterene(value); }
|
||||||
|
|
||||||
|
else if(prop == _mixedComposition) { success = profile->setMixedComposition(value); }
|
||||||
|
else if(prop == _voidResidue) { success = profile->setVoidResidue(value); }
|
||||||
|
else if(prop == _muscularConstruction) { success = profile->setMuscularConstruction(value); }
|
||||||
|
else if(prop == _mineralExoskeletology) { success = profile->setMineralExoskeletology(value); }
|
||||||
|
else if(prop == _carbonizedSkin) { success = profile->setCarbonizedSkin(value); }
|
||||||
|
|
||||||
|
if(!success) {
|
||||||
|
event.SetValidationFailureMessage(error_prefix + profile->lastError());
|
||||||
|
event.Veto();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(_mbManager.gameState() == GameState::Unknown) {
|
||||||
|
event.SetValidationFailureMessage(error_prefix + "For security reasons, changing the inventory is disabled if the game's status is unknown.");
|
||||||
|
event.Veto();
|
||||||
|
}
|
||||||
|
else if(_mbManager.gameState() == GameState::Running) {
|
||||||
|
event.SetValidationFailureMessage(error_prefix + "For security reasons, changing the inventory is disabled if the game is running.");
|
||||||
|
event.Veto();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EvtMainFrame::importMassEvent(wxCommandEvent&) {
|
void EvtMainFrame::importMassEvent(wxCommandEvent&) {
|
||||||
const static std::string error_prefix = "Importing failed:\n\n";
|
const static std::string error_prefix = "Importing failed:\n\n";
|
||||||
|
|
||||||
|
@ -592,6 +669,30 @@ void EvtMainFrame::updateProfileStats() {
|
||||||
else {
|
else {
|
||||||
_lastMissionId->SetLabel(wxString::Format("0x%X", current_profile->lastMissionId()));
|
_lastMissionId->SetLabel(wxString::Format("0x%X", current_profile->lastMissionId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_verseSteel->SetValueFromInt(current_profile->getVerseSteel());
|
||||||
|
_undinium->SetValueFromInt(current_profile->getUndinium());
|
||||||
|
_necriumAlloy->SetValueFromInt(current_profile->getNecriumAlloy());
|
||||||
|
_lunarite->SetValueFromInt(current_profile->getLunarite());
|
||||||
|
_asterite->SetValueFromInt(current_profile->getAsterite());
|
||||||
|
_ednil->SetValueFromInt(current_profile->getEdnil());
|
||||||
|
_nuflalt->SetValueFromInt(current_profile->getNuflalt());
|
||||||
|
_aurelene->SetValueFromInt(current_profile->getAurelene());
|
||||||
|
_soldus->SetValueFromInt(current_profile->getSoldus());
|
||||||
|
_synthesizedN->SetValueFromInt(current_profile->getSynthesizedN());
|
||||||
|
_alcarbonite->SetValueFromInt(current_profile->getAlcarbonite());
|
||||||
|
_keriphene->SetValueFromInt(current_profile->getKeriphene());
|
||||||
|
_nitinolCM->SetValueFromInt(current_profile->getNitinolCM());
|
||||||
|
_quarkium->SetValueFromInt(current_profile->getQuarkium());
|
||||||
|
_alterene->SetValueFromInt(current_profile->getAlterene());
|
||||||
|
|
||||||
|
_mixedComposition->SetValueFromInt(current_profile->getMixedComposition());
|
||||||
|
_voidResidue->SetValueFromInt(current_profile->getVoidResidue());
|
||||||
|
_muscularConstruction->SetValueFromInt(current_profile->getMuscularConstruction());
|
||||||
|
_mineralExoskeletology->SetValueFromInt(current_profile->getMineralExoskeletology());
|
||||||
|
_carbonizedSkin->SetValueFromInt(current_profile->getCarbonizedSkin());
|
||||||
|
|
||||||
|
updateCommandsState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EvtMainFrame::initStoryProgressMenu() {
|
void EvtMainFrame::initStoryProgressMenu() {
|
||||||
|
@ -712,8 +813,17 @@ void EvtMainFrame::updateCommandsState() {
|
||||||
MassState mass_state = _massManager->massState(selection);
|
MassState mass_state = _massManager->massState(selection);
|
||||||
|
|
||||||
_companyRenameButton->Enable(_unsafeMode == true || game_state == GameState::NotRunning);
|
_companyRenameButton->Enable(_unsafeMode == true || game_state == GameState::NotRunning);
|
||||||
|
_creditsEditButton->Enable(_unsafeMode == true || game_state == GameState::NotRunning);
|
||||||
_storyProgressChangeButton->Enable(_unsafeMode == true || game_state == GameState::NotRunning);
|
_storyProgressChangeButton->Enable(_unsafeMode == true || game_state == GameState::NotRunning);
|
||||||
|
|
||||||
|
wxPropertyGridConstIterator it = _researchInventoryPropGrid->GetIterator(wxPG_ITERATE_NORMAL);
|
||||||
|
while(!it.AtEnd()) {
|
||||||
|
if(it.GetProperty()->IsCategory() == false) {
|
||||||
|
it.GetProperty()->Enable(it.GetProperty()->GetValue().GetInteger() != -1 && (_unsafeMode == true || game_state == GameState::NotRunning));
|
||||||
|
}
|
||||||
|
it.Next();
|
||||||
|
}
|
||||||
|
|
||||||
_importButton->Enable(selection != -1 && staged_selection != -1 && (_unsafeMode == true || game_state == GameState::NotRunning));
|
_importButton->Enable(selection != -1 && staged_selection != -1 && (_unsafeMode == true || game_state == GameState::NotRunning));
|
||||||
_exportButton->Enable(selection != -1);
|
_exportButton->Enable(selection != -1);
|
||||||
_moveButton->Enable(selection != -1 && (_unsafeMode == true || game_state == GameState::NotRunning) && mass_state == MassState::Valid);
|
_moveButton->Enable(selection != -1 && (_unsafeMode == true || game_state == GameState::NotRunning) && mass_state == MassState::Valid);
|
|
@ -2,7 +2,7 @@
|
||||||
#define __EvtMainFrame__
|
#define __EvtMainFrame__
|
||||||
|
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
@ -42,32 +42,34 @@ class EvtMainFrame: public MainFrame {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Profile-related events
|
// Profile-related events
|
||||||
void profileSelectionEvent(wxCommandEvent&);
|
void profileSelectionEvent(wxCommandEvent&) override;
|
||||||
void backupSelectedProfileEvent(wxCommandEvent&);
|
void backupSelectedProfileEvent(wxCommandEvent&) override;
|
||||||
void companyRenameEvent(wxMouseEvent&);
|
void companyRenameEvent(wxCommandEvent&) override;
|
||||||
|
void creditsEditEvent(wxCommandEvent&) override;
|
||||||
void storyProgressSelectionEvent(wxCommandEvent& event);
|
void storyProgressSelectionEvent(wxCommandEvent& event);
|
||||||
void openStoryProgressMenuEvent(wxCommandEvent&);
|
void openStoryProgressMenuEvent(wxCommandEvent&) override;
|
||||||
|
void inventoryChangeEvent(wxPropertyGridEvent& event) override;
|
||||||
|
|
||||||
// M.A.S.S.-related events
|
// M.A.S.S.-related events
|
||||||
void importMassEvent(wxCommandEvent&);
|
void importMassEvent(wxCommandEvent&) override;
|
||||||
void exportMassEvent(wxCommandEvent&);
|
void exportMassEvent(wxCommandEvent&) override;
|
||||||
void moveMassEvent(wxCommandEvent&);
|
void moveMassEvent(wxCommandEvent&) override;
|
||||||
void deleteMassEvent(wxCommandEvent&);
|
void deleteMassEvent(wxCommandEvent&) override;
|
||||||
void renameMassEvent(wxCommandEvent&);
|
void renameMassEvent(wxCommandEvent&) override;
|
||||||
void openSaveDirEvent(wxCommandEvent&);
|
void openSaveDirEvent(wxCommandEvent&) override;
|
||||||
void stagingSelectionEvent(wxCommandEvent&);
|
void stagingSelectionEvent(wxCommandEvent&) override;
|
||||||
void deleteStagedEvent(wxCommandEvent&);
|
void deleteStagedEvent(wxCommandEvent&) override;
|
||||||
void openStagingDirEvent(wxCommandEvent&);
|
void openStagingDirEvent(wxCommandEvent&) override;
|
||||||
void installedSelectionEvent(wxListEvent&);
|
void installedSelectionEvent(wxListEvent&);
|
||||||
void listColumnDragEvent(wxListEvent&);
|
void listColumnDragEvent(wxListEvent&);
|
||||||
|
|
||||||
// Screenshot-related events
|
// Screenshot-related events
|
||||||
void openScreenshotDirEvent(wxCommandEvent&);
|
void openScreenshotDirEvent(wxCommandEvent&) override;
|
||||||
|
|
||||||
// General events
|
// General events
|
||||||
void fileUpdateEvent(wxFileSystemWatcherEvent& event);
|
void fileUpdateEvent(wxFileSystemWatcherEvent& event);
|
||||||
void gameCheckTimerEvent(wxTimerEvent&);
|
void gameCheckTimerEvent(wxTimerEvent&) override;
|
||||||
void unsafeCheckboxEvent(wxCommandEvent& event);
|
void unsafeCheckboxEvent(wxCommandEvent& event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void saveFileEventHandler(int event_type, const wxString& event_file, const wxFileSystemWatcherEvent& event);
|
void saveFileEventHandler(int event_type, const wxString& event_file, const wxFileSystemWatcherEvent& event);
|
|
@ -1,5 +1,5 @@
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -2,7 +2,7 @@
|
||||||
#define __EvtNameChangeDialog__
|
#define __EvtNameChangeDialog__
|
||||||
|
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
|
MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
|
||||||
{
|
{
|
||||||
this->SetSizeHints( wxSize( -1,600 ), wxDefaultSize );
|
this->SetSizeHints( wxSize( -1,600 ), wxSize( -1,600 ) );
|
||||||
|
|
||||||
wxBoxSizer* bSizerMain;
|
wxBoxSizer* bSizerMain;
|
||||||
bSizerMain = new wxBoxSizer( wxVERTICAL );
|
bSizerMain = new wxBoxSizer( wxVERTICAL );
|
||||||
|
@ -114,6 +114,9 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co
|
||||||
_companyRenameButton = new wxButton( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("Rename company"), wxDefaultPosition, wxDefaultSize, 0 );
|
_companyRenameButton = new wxButton( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("Rename company"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizerProfileCommands->Add( _companyRenameButton, 0, wxALL, 5 );
|
bSizerProfileCommands->Add( _companyRenameButton, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
_creditsEditButton = new wxButton( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("Edit credits"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
bSizerProfileCommands->Add( _creditsEditButton, 0, wxALL, 5 );
|
||||||
|
|
||||||
_storyProgressChangeButton = new wxButton( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("Change story progress"), wxDefaultPosition, wxDefaultSize, 0 );
|
_storyProgressChangeButton = new wxButton( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("Change story progress"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizerProfileCommands->Add( _storyProgressChangeButton, 0, wxALL, 5 );
|
bSizerProfileCommands->Add( _storyProgressChangeButton, 0, wxALL, 5 );
|
||||||
|
|
||||||
|
@ -121,13 +124,53 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co
|
||||||
sbSizerGeneralInfo->Add( bSizerProfileCommands, 0, wxEXPAND, 5 );
|
sbSizerGeneralInfo->Add( bSizerProfileCommands, 0, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
bSizerProfilePanel->Add( sbSizerGeneralInfo, 1, wxEXPAND|wxALL, 5 );
|
bSizerProfilePanel->Add( sbSizerGeneralInfo, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
|
wxBoxSizer* bSizerBottomHalf;
|
||||||
|
bSizerBottomHalf = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
|
wxStaticBoxSizer* sbSizerResearchInv;
|
||||||
|
sbSizerResearchInv = new wxStaticBoxSizer( new wxStaticBox( _profilePanel, wxID_ANY, wxT("Research inventory") ), wxVERTICAL );
|
||||||
|
|
||||||
|
_researchInventoryPropGrid = new wxPropertyGrid(sbSizerResearchInv->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxPG_HIDE_MARGIN|wxPG_SPLITTER_AUTO_CENTER|wxPG_STATIC_LAYOUT|wxPG_STATIC_SPLITTER);
|
||||||
|
_materialsCategory = _researchInventoryPropGrid->Append( new wxPropertyCategory( wxT("Materials"), wxT("Materials") ) );
|
||||||
|
_verseSteel = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Verse Steel"), wxT("Verse Steel") ) );
|
||||||
|
_undinium = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Undinium"), wxT("Undinium") ) );
|
||||||
|
_necriumAlloy = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Necrium Alloy"), wxT("Necrium Alloy") ) );
|
||||||
|
_lunarite = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Lunarite"), wxT("Lunarite") ) );
|
||||||
|
_asterite = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Asterite"), wxT("Asterite") ) );
|
||||||
|
_ednil = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Ednil"), wxT("Ednil") ) );
|
||||||
|
_nuflalt = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Nuflalt"), wxT("Nuflalt") ) );
|
||||||
|
_aurelene = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Aurelene"), wxT("Aurelene") ) );
|
||||||
|
_soldus = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Soldus"), wxT("Soldus") ) );
|
||||||
|
_synthesizedN = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Synthesized N."), wxT("Synthesized N.") ) );
|
||||||
|
_alcarbonite = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Alcarbonite"), wxT("Alcarbonite") ) );
|
||||||
|
_keriphene = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Keriphene"), wxT("Keriphene") ) );
|
||||||
|
_nitinolCM = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Nitinol-CM"), wxT("Nitinol-CM") ) );
|
||||||
|
_quarkium = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Quarkium"), wxT("Quarkium") ) );
|
||||||
|
_alterene = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Alterene"), wxT("Alterene") ) );
|
||||||
|
_quarkDataCategory = _researchInventoryPropGrid->Append( new wxPropertyCategory( wxT("Quark Data"), wxT("Quark Data") ) );
|
||||||
|
_mixedComposition = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Mixed Composition"), wxT("Mixed Composition") ) );
|
||||||
|
_voidResidue = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Void Residue"), wxT("Void Residue") ) );
|
||||||
|
_muscularConstruction = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Muscular Construction"), wxT("Muscular Construction") ) );
|
||||||
|
_mineralExoskeletology = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Mineral Exoskeletology"), wxT("Mineral Exoskeletology") ) );
|
||||||
|
_carbonizedSkin = _researchInventoryPropGrid->Append( new wxIntProperty( wxT("Carbonized Skin"), wxT("Carbonized Skin") ) );
|
||||||
|
sbSizerResearchInv->Add( _researchInventoryPropGrid, 1, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizerBottomHalf->Add( sbSizerResearchInv, 1, wxEXPAND|wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizerBottomHalf->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizerProfilePanel->Add( bSizerBottomHalf, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
_profilePanel->SetSizer( bSizerProfilePanel );
|
_profilePanel->SetSizer( bSizerProfilePanel );
|
||||||
_profilePanel->Layout();
|
_profilePanel->Layout();
|
||||||
bSizerProfilePanel->Fit( _profilePanel );
|
bSizerProfilePanel->Fit( _profilePanel );
|
||||||
_managerNotebook->AddPage( _profilePanel, wxT("Profile details and stats"), false );
|
_managerNotebook->AddPage( _profilePanel, wxT("Profile details and stats"), true );
|
||||||
_massPanel = new wxPanel( _managerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
_massPanel = new wxPanel( _managerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||||
wxBoxSizer* bSizerMassPanel;
|
wxBoxSizer* bSizerMassPanel;
|
||||||
bSizerMassPanel = new wxBoxSizer( wxHORIZONTAL );
|
bSizerMassPanel = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
@ -258,7 +301,9 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co
|
||||||
_openScreenshotDirButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openScreenshotDirEvent ), NULL, this );
|
_openScreenshotDirButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openScreenshotDirEvent ), NULL, this );
|
||||||
_unsafeCheckbox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainFrame::unsafeCheckboxEvent ), NULL, this );
|
_unsafeCheckbox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainFrame::unsafeCheckboxEvent ), NULL, this );
|
||||||
_companyRenameButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::companyRenameEvent ), NULL, this );
|
_companyRenameButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::companyRenameEvent ), NULL, this );
|
||||||
|
_creditsEditButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::creditsEditEvent ), NULL, this );
|
||||||
_storyProgressChangeButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openStoryProgressMenuEvent ), NULL, this );
|
_storyProgressChangeButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openStoryProgressMenuEvent ), NULL, this );
|
||||||
|
_researchInventoryPropGrid->Connect( wxEVT_PG_CHANGING, wxPropertyGridEventHandler( MainFrame::inventoryChangeEvent ), NULL, this );
|
||||||
_moveButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::moveMassEvent ), NULL, this );
|
_moveButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::moveMassEvent ), NULL, this );
|
||||||
_deleteButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::deleteMassEvent ), NULL, this );
|
_deleteButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::deleteMassEvent ), NULL, this );
|
||||||
_renameButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::renameMassEvent ), NULL, this );
|
_renameButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::renameMassEvent ), NULL, this );
|
||||||
|
@ -279,7 +324,9 @@ MainFrame::~MainFrame()
|
||||||
_openScreenshotDirButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openScreenshotDirEvent ), NULL, this );
|
_openScreenshotDirButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openScreenshotDirEvent ), NULL, this );
|
||||||
_unsafeCheckbox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainFrame::unsafeCheckboxEvent ), NULL, this );
|
_unsafeCheckbox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainFrame::unsafeCheckboxEvent ), NULL, this );
|
||||||
_companyRenameButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::companyRenameEvent ), NULL, this );
|
_companyRenameButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::companyRenameEvent ), NULL, this );
|
||||||
|
_creditsEditButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::creditsEditEvent ), NULL, this );
|
||||||
_storyProgressChangeButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openStoryProgressMenuEvent ), NULL, this );
|
_storyProgressChangeButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::openStoryProgressMenuEvent ), NULL, this );
|
||||||
|
_researchInventoryPropGrid->Disconnect( wxEVT_PG_CHANGING, wxPropertyGridEventHandler( MainFrame::inventoryChangeEvent ), NULL, this );
|
||||||
_moveButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::moveMassEvent ), NULL, this );
|
_moveButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::moveMassEvent ), NULL, this );
|
||||||
_deleteButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::deleteMassEvent ), NULL, this );
|
_deleteButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::deleteMassEvent ), NULL, this );
|
||||||
_renameButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::renameMassEvent ), NULL, this );
|
_renameButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainFrame::renameMassEvent ), NULL, this );
|
|
@ -41,14 +41,14 @@
|
||||||
<property name="font"></property>
|
<property name="font"></property>
|
||||||
<property name="hidden">0</property>
|
<property name="hidden">0</property>
|
||||||
<property name="id">wxID_ANY</property>
|
<property name="id">wxID_ANY</property>
|
||||||
<property name="maximum_size"></property>
|
<property name="maximum_size">-1,600</property>
|
||||||
<property name="minimum_size">-1,600</property>
|
<property name="minimum_size">-1,600</property>
|
||||||
<property name="name">MainFrame</property>
|
<property name="name">MainFrame</property>
|
||||||
<property name="pos"></property>
|
<property name="pos"></property>
|
||||||
<property name="size">-1,-1</property>
|
<property name="size">-1,-1</property>
|
||||||
<property name="style">wxCAPTION|wxCLOSE_BOX|wxMINIMIZE_BOX|wxSYSTEM_MENU</property>
|
<property name="style">wxCAPTION|wxCLOSE_BOX|wxMINIMIZE_BOX|wxSYSTEM_MENU</property>
|
||||||
<property name="subclass">; ; forward_declare</property>
|
<property name="subclass">; ; forward_declare</property>
|
||||||
<property name="title">M.A.S.S. Builder Save Tool 2.2.0</property>
|
<property name="title">M.A.S.S. Builder Save Tool 2.3.0</property>
|
||||||
<property name="tooltip"></property>
|
<property name="tooltip"></property>
|
||||||
<property name="window_extra_style"></property>
|
<property name="window_extra_style"></property>
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND</property>
|
<property name="flag">wxEXPAND</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxBoxSizer" expanded="1">
|
<object class="wxBoxSizer" expanded="0">
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="name">bSizerProfile</property>
|
<property name="name">bSizerProfile</property>
|
||||||
<property name="orient">wxHORIZONTAL</property>
|
<property name="orient">wxHORIZONTAL</property>
|
||||||
|
@ -327,11 +327,11 @@
|
||||||
<event name="OnButtonClick">backupSelectedProfileEvent</event>
|
<event name="OnButtonClick">backupSelectedProfileEvent</event>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL</property>
|
<property name="flag">wxALL</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxButton" expanded="1">
|
<object class="wxButton" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -400,21 +400,21 @@
|
||||||
<event name="OnButtonClick">openScreenshotDirEvent</event>
|
<event name="OnButtonClick">openScreenshotDirEvent</event>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND</property>
|
<property name="flag">wxEXPAND</property>
|
||||||
<property name="proportion">1</property>
|
<property name="proportion">1</property>
|
||||||
<object class="spacer" expanded="1">
|
<object class="spacer" expanded="0">
|
||||||
<property name="height">0</property>
|
<property name="height">0</property>
|
||||||
<property name="permission">protected</property>
|
<property name="permission">protected</property>
|
||||||
<property name="width">0</property>
|
<property name="width">0</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxCheckBox" expanded="1">
|
<object class="wxCheckBox" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -537,7 +537,7 @@
|
||||||
<object class="notebookpage" expanded="1">
|
<object class="notebookpage" expanded="1">
|
||||||
<property name="bitmap"></property>
|
<property name="bitmap"></property>
|
||||||
<property name="label">Profile details and stats</property>
|
<property name="label">Profile details and stats</property>
|
||||||
<property name="select">0</property>
|
<property name="select">1</property>
|
||||||
<object class="wxPanel" expanded="1">
|
<object class="wxPanel" expanded="1">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
|
@ -596,8 +596,8 @@
|
||||||
<property name="permission">none</property>
|
<property name="permission">none</property>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxALL</property>
|
<property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">1</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticBoxSizer" expanded="1">
|
<object class="wxStaticBoxSizer" expanded="1">
|
||||||
<property name="id">wxID_ANY</property>
|
<property name="id">wxID_ANY</property>
|
||||||
<property name="label">General information</property>
|
<property name="label">General information</property>
|
||||||
|
@ -610,7 +610,7 @@
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND</property>
|
<property name="flag">wxEXPAND</property>
|
||||||
<property name="proportion">1</property>
|
<property name="proportion">1</property>
|
||||||
<object class="wxFlexGridSizer" expanded="1">
|
<object class="wxFlexGridSizer" expanded="0">
|
||||||
<property name="cols">2</property>
|
<property name="cols">2</property>
|
||||||
<property name="flexible_direction">wxBOTH</property>
|
<property name="flexible_direction">wxBOTH</property>
|
||||||
<property name="growablecols">1</property>
|
<property name="growablecols">1</property>
|
||||||
|
@ -622,11 +622,11 @@
|
||||||
<property name="permission">none</property>
|
<property name="permission">none</property>
|
||||||
<property name="rows">0</property>
|
<property name="rows">0</property>
|
||||||
<property name="vgap">0</property>
|
<property name="vgap">0</property>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL</property>
|
<property name="flag">wxALL</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticText" expanded="1">
|
<object class="wxStaticText" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -683,11 +683,11 @@
|
||||||
<property name="wrap">-1</property>
|
<property name="wrap">-1</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
<property name="flag">wxALL|wxEXPAND</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticText" expanded="1">
|
<object class="wxStaticText" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -744,11 +744,11 @@
|
||||||
<property name="wrap">-1</property>
|
<property name="wrap">-1</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL</property>
|
<property name="flag">wxALL</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticText" expanded="1">
|
<object class="wxStaticText" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -805,11 +805,11 @@
|
||||||
<property name="wrap">-1</property>
|
<property name="wrap">-1</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
<property name="flag">wxALL|wxEXPAND</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticText" expanded="1">
|
<object class="wxStaticText" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -866,11 +866,11 @@
|
||||||
<property name="wrap">-1</property>
|
<property name="wrap">-1</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL</property>
|
<property name="flag">wxALL</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticText" expanded="1">
|
<object class="wxStaticText" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -927,11 +927,11 @@
|
||||||
<property name="wrap">-1</property>
|
<property name="wrap">-1</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
<property name="flag">wxALL|wxEXPAND</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticText" expanded="1">
|
<object class="wxStaticText" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -988,11 +988,11 @@
|
||||||
<property name="wrap">-1</property>
|
<property name="wrap">-1</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL</property>
|
<property name="flag">wxALL</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticText" expanded="1">
|
<object class="wxStaticText" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -1049,11 +1049,11 @@
|
||||||
<property name="wrap">-1</property>
|
<property name="wrap">-1</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
<property name="flag">wxALL|wxEXPAND</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxStaticText" expanded="1">
|
<object class="wxStaticText" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -1194,6 +1194,79 @@
|
||||||
<event name="OnButtonClick">companyRenameEvent</event>
|
<event name="OnButtonClick">companyRenameEvent</event>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxButton" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="bitmap"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="current"></property>
|
||||||
|
<property name="default">0</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="disabled"></property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="focus"></property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Edit credits</property>
|
||||||
|
<property name="margins"></property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">_creditsEditButton</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="position"></property>
|
||||||
|
<property name="pressed"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="validator_data_type"></property>
|
||||||
|
<property name="validator_style">wxFILTER_NONE</property>
|
||||||
|
<property name="validator_type">wxDefaultValidator</property>
|
||||||
|
<property name="validator_variable"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnButtonClick">creditsEditEvent</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxALL</property>
|
<property name="flag">wxALL</property>
|
||||||
|
@ -1271,6 +1344,257 @@
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxEXPAND</property>
|
||||||
|
<property name="proportion">1</property>
|
||||||
|
<object class="wxBoxSizer" expanded="1">
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">bSizerBottomHalf</property>
|
||||||
|
<property name="orient">wxHORIZONTAL</property>
|
||||||
|
<property name="permission">none</property>
|
||||||
|
<object class="sizeritem" expanded="0">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxEXPAND|wxALL</property>
|
||||||
|
<property name="proportion">1</property>
|
||||||
|
<object class="wxStaticBoxSizer" expanded="0">
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Research inventory</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">sbSizerResearchInv</property>
|
||||||
|
<property name="orient">wxVERTICAL</property>
|
||||||
|
<property name="parent">1</property>
|
||||||
|
<property name="permission">none</property>
|
||||||
|
<object class="sizeritem" expanded="0">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL|wxEXPAND</property>
|
||||||
|
<property name="proportion">1</property>
|
||||||
|
<object class="wxPropertyGrid" expanded="0">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="bitmap"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="extra_style"></property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="include_advanced">1</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">_researchInventoryPropGrid</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style">wxPG_HIDE_MARGIN|wxPG_SPLITTER_AUTO_CENTER|wxPG_STATIC_LAYOUT|wxPG_STATIC_SPLITTER</property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnPropertyGridChanging">inventoryChangeEvent</event>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Materials</property>
|
||||||
|
<property name="name">_materialsCategory</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Category</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Verse Steel</property>
|
||||||
|
<property name="name">_verseSteel</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Undinium</property>
|
||||||
|
<property name="name">_undinium</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Necrium Alloy</property>
|
||||||
|
<property name="name">_necriumAlloy</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Lunarite</property>
|
||||||
|
<property name="name">_lunarite</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Asterite</property>
|
||||||
|
<property name="name">_asterite</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Ednil</property>
|
||||||
|
<property name="name">_ednil</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Nuflalt</property>
|
||||||
|
<property name="name">_nuflalt</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Aurelene</property>
|
||||||
|
<property name="name">_aurelene</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Soldus</property>
|
||||||
|
<property name="name">_soldus</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Synthesized N.</property>
|
||||||
|
<property name="name">_synthesizedN</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Alcarbonite</property>
|
||||||
|
<property name="name">_alcarbonite</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Keriphene</property>
|
||||||
|
<property name="name">_keriphene</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Nitinol-CM</property>
|
||||||
|
<property name="name">_nitinolCM</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Quarkium</property>
|
||||||
|
<property name="name">_quarkium</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Alterene</property>
|
||||||
|
<property name="name">_alterene</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Quark Data</property>
|
||||||
|
<property name="name">_quarkDataCategory</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Category</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Mixed Composition</property>
|
||||||
|
<property name="name">_mixedComposition</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Void Residue</property>
|
||||||
|
<property name="name">_voidResidue</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Muscular Construction</property>
|
||||||
|
<property name="name">_muscularConstruction</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Mineral Exoskeletology</property>
|
||||||
|
<property name="name">_mineralExoskeletology</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
<object class="propGridItem" expanded="0">
|
||||||
|
<property name="help"></property>
|
||||||
|
<property name="label">Carbonized Skin</property>
|
||||||
|
<property name="name">_carbonizedSkin</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="type">Int</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="0">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxEXPAND</property>
|
||||||
|
<property name="proportion">1</property>
|
||||||
|
<object class="spacer" expanded="0">
|
||||||
|
<property name="height">0</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="width">0</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
@ -1278,7 +1602,7 @@
|
||||||
<property name="bitmap"></property>
|
<property name="bitmap"></property>
|
||||||
<property name="label">M.A.S.S.es</property>
|
<property name="label">M.A.S.S.es</property>
|
||||||
<property name="select">0</property>
|
<property name="select">0</property>
|
||||||
<object class="wxPanel" expanded="1">
|
<object class="wxPanel" expanded="0">
|
||||||
<property name="BottomDockable">1</property>
|
<property name="BottomDockable">1</property>
|
||||||
<property name="LeftDockable">1</property>
|
<property name="LeftDockable">1</property>
|
||||||
<property name="RightDockable">1</property>
|
<property name="RightDockable">1</property>
|
||||||
|
@ -1329,16 +1653,16 @@
|
||||||
<property name="window_extra_style"></property>
|
<property name="window_extra_style"></property>
|
||||||
<property name="window_name"></property>
|
<property name="window_name"></property>
|
||||||
<property name="window_style">wxTAB_TRAVERSAL</property>
|
<property name="window_style">wxTAB_TRAVERSAL</property>
|
||||||
<object class="wxBoxSizer" expanded="1">
|
<object class="wxBoxSizer" expanded="0">
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="name">bSizerMassPanel</property>
|
<property name="name">bSizerMassPanel</property>
|
||||||
<property name="orient">wxHORIZONTAL</property>
|
<property name="orient">wxHORIZONTAL</property>
|
||||||
<property name="permission">none</property>
|
<property name="permission">none</property>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxALL</property>
|
<property name="flag">wxEXPAND|wxALL</property>
|
||||||
<property name="proportion">1</property>
|
<property name="proportion">1</property>
|
||||||
<object class="wxStaticBoxSizer" expanded="1">
|
<object class="wxStaticBoxSizer" expanded="0">
|
||||||
<property name="id">wxID_ANY</property>
|
<property name="id">wxID_ANY</property>
|
||||||
<property name="label">Installed M.A.S.S.es</property>
|
<property name="label">Installed M.A.S.S.es</property>
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
|
@ -1641,11 +1965,11 @@
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="1">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
|
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
|
||||||
<property name="proportion">0</property>
|
<property name="proportion">0</property>
|
||||||
<object class="wxBoxSizer" expanded="1">
|
<object class="wxBoxSizer" expanded="0">
|
||||||
<property name="minimum_size"></property>
|
<property name="minimum_size"></property>
|
||||||
<property name="name">bSizerSecondRow</property>
|
<property name="name">bSizerSecondRow</property>
|
||||||
<property name="orient">wxHORIZONTAL</property>
|
<property name="orient">wxHORIZONTAL</property>
|
|
@ -23,6 +23,8 @@
|
||||||
#include <wx/checkbox.h>
|
#include <wx/checkbox.h>
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
#include <wx/statbox.h>
|
#include <wx/statbox.h>
|
||||||
|
#include <wx/propgrid/propgrid.h>
|
||||||
|
#include <wx/propgrid/advprops.h>
|
||||||
#include <wx/panel.h>
|
#include <wx/panel.h>
|
||||||
#include <wx/listctrl.h>
|
#include <wx/listctrl.h>
|
||||||
#include <wx/listbox.h>
|
#include <wx/listbox.h>
|
||||||
|
@ -59,7 +61,31 @@ class MainFrame : public wxFrame
|
||||||
wxStaticText* _lastMissionIdLabel;
|
wxStaticText* _lastMissionIdLabel;
|
||||||
wxStaticText* _lastMissionId;
|
wxStaticText* _lastMissionId;
|
||||||
wxButton* _companyRenameButton;
|
wxButton* _companyRenameButton;
|
||||||
|
wxButton* _creditsEditButton;
|
||||||
wxButton* _storyProgressChangeButton;
|
wxButton* _storyProgressChangeButton;
|
||||||
|
wxPropertyGrid* _researchInventoryPropGrid;
|
||||||
|
wxPGProperty* _materialsCategory;
|
||||||
|
wxPGProperty* _verseSteel;
|
||||||
|
wxPGProperty* _undinium;
|
||||||
|
wxPGProperty* _necriumAlloy;
|
||||||
|
wxPGProperty* _lunarite;
|
||||||
|
wxPGProperty* _asterite;
|
||||||
|
wxPGProperty* _ednil;
|
||||||
|
wxPGProperty* _nuflalt;
|
||||||
|
wxPGProperty* _aurelene;
|
||||||
|
wxPGProperty* _soldus;
|
||||||
|
wxPGProperty* _synthesizedN;
|
||||||
|
wxPGProperty* _alcarbonite;
|
||||||
|
wxPGProperty* _keriphene;
|
||||||
|
wxPGProperty* _nitinolCM;
|
||||||
|
wxPGProperty* _quarkium;
|
||||||
|
wxPGProperty* _alterene;
|
||||||
|
wxPGProperty* _quarkDataCategory;
|
||||||
|
wxPGProperty* _mixedComposition;
|
||||||
|
wxPGProperty* _voidResidue;
|
||||||
|
wxPGProperty* _muscularConstruction;
|
||||||
|
wxPGProperty* _mineralExoskeletology;
|
||||||
|
wxPGProperty* _carbonizedSkin;
|
||||||
wxPanel* _massPanel;
|
wxPanel* _massPanel;
|
||||||
wxListView* _installedListView;
|
wxListView* _installedListView;
|
||||||
wxButton* _moveButton;
|
wxButton* _moveButton;
|
||||||
|
@ -84,7 +110,9 @@ class MainFrame : public wxFrame
|
||||||
virtual void openScreenshotDirEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void openScreenshotDirEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void unsafeCheckboxEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void unsafeCheckboxEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void companyRenameEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void companyRenameEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void creditsEditEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void openStoryProgressMenuEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void openStoryProgressMenuEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void inventoryChangeEvent( wxPropertyGridEvent& event ) { event.Skip(); }
|
||||||
virtual void moveMassEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void moveMassEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void deleteMassEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void deleteMassEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void renameMassEvent( wxCommandEvent& event ) { event.Skip(); }
|
virtual void renameMassEvent( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
@ -99,7 +127,7 @@ class MainFrame : public wxFrame
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MainFrame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("M.A.S.S. Builder Save Tool 2.2.0"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxCAPTION|wxCLOSE_BOX|wxMINIMIZE_BOX|wxSYSTEM_MENU|wxCLIP_CHILDREN|wxTAB_TRAVERSAL );
|
MainFrame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("M.A.S.S. Builder Save Tool 2.3.0"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxCAPTION|wxCLOSE_BOX|wxMINIMIZE_BOX|wxSYSTEM_MENU|wxCLIP_CHILDREN|wxTAB_TRAVERSAL );
|
||||||
|
|
||||||
~MainFrame();
|
~MainFrame();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -1,5 +1,5 @@
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -1,5 +1,5 @@
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -2,7 +2,7 @@
|
||||||
#define MASS_H
|
#define MASS_H
|
||||||
|
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -1,5 +1,5 @@
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -2,7 +2,7 @@
|
||||||
#define MASSBUILDERMANAGER_H
|
#define MASSBUILDERMANAGER_H
|
||||||
|
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -1,5 +1,5 @@
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -2,7 +2,7 @@
|
||||||
#define MASSMANAGER_H
|
#define MASSMANAGER_H
|
||||||
|
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
85
src/Profile/Locators.h
Normal file
85
src/Profile/Locators.h
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
// wxMASSManager
|
||||||
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
|
//
|
||||||
|
// This program 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.
|
||||||
|
//
|
||||||
|
// This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
constexpr char company_name_locator[] = "CompanyName\0\x0c\0\0\0StrProperty";
|
||||||
|
constexpr char active_slot_locator[] = "ActiveFrameSlot\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char credits_locator[] = "Credit\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char story_progress_locator[] = "StoryProgress\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char last_mission_id_locator[] = "LastMissionID\0\x0c\0\0\0IntProperty";
|
||||||
|
|
||||||
|
constexpr char verse_steel_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x00\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char undinium_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x01\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char necrium_alloy_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x02\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char lunarite_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x03\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char asterite_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x04\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char ednil_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x0a\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char nuflalt_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x0b\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char aurelene_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x0c\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char soldus_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x0d\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char synthesized_n_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x0e\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char alcarbonite_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x14\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char keriphene_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x15\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char nitinol_cm_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x16\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char quarkium_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x17\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char alterene_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\x18\x35\x0c\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
|
||||||
|
constexpr char mixed_composition_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\xa0\xbb\x0d\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char void_residue_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\xa1\xbb\x0d\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char muscular_construction_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\xa2\xbb\x0d\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char mineral_exoskeletology_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\xa3\xbb\x0d\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
||||||
|
constexpr char carbonized_skin_locator[] =
|
||||||
|
"ID_4_AAE08F17428E229EC7A2209F51081A21\0\x0c\0\0\0IntProperty\0\x04\0\0\0\0\0\0\0\0\xa4\xbb\x0d\0,\0\0\0"
|
||||||
|
"Quantity_3_560F09B5485C365D3041888910019CE3\0\x0c\0\0\0IntProperty";
|
1013
src/Profile/Profile.cpp
Normal file
1013
src/Profile/Profile.cpp
Normal file
File diff suppressed because it is too large
Load diff
171
src/Profile/Profile.h
Normal file
171
src/Profile/Profile.h
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
#ifndef PROFILE_H
|
||||||
|
#define PROFILE_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
enum class ProfileType : std::uint8_t {
|
||||||
|
Demo,
|
||||||
|
FullGame
|
||||||
|
};
|
||||||
|
|
||||||
|
class Profile {
|
||||||
|
public:
|
||||||
|
explicit Profile(const std::string& path);
|
||||||
|
|
||||||
|
auto valid() const -> bool;
|
||||||
|
|
||||||
|
auto lastError() const -> std::string const&;
|
||||||
|
|
||||||
|
auto filename() const -> std::string const&;
|
||||||
|
|
||||||
|
auto type() const -> ProfileType;
|
||||||
|
|
||||||
|
auto steamId() const -> std::string const&;
|
||||||
|
|
||||||
|
auto companyName() const -> std::string const&;
|
||||||
|
auto getCompanyName() -> std::string const&;
|
||||||
|
auto renameCompany(const std::string& new_name) -> bool;
|
||||||
|
|
||||||
|
auto activeFrameSlot() const -> std::int8_t;
|
||||||
|
auto getActiveFrameSlot() -> std::int8_t;
|
||||||
|
|
||||||
|
auto credits() const -> std::int32_t;
|
||||||
|
auto getCredits() -> std::int32_t;
|
||||||
|
auto setCredits(std::int32_t) -> bool;
|
||||||
|
|
||||||
|
auto storyProgress() const -> std::int32_t;
|
||||||
|
auto getStoryProgress() -> std::int32_t;
|
||||||
|
auto setStoryProgress(std::int32_t progress) -> bool;
|
||||||
|
|
||||||
|
auto lastMissionId() const -> std::int32_t;
|
||||||
|
auto getLastMissionId() -> std::int32_t;
|
||||||
|
|
||||||
|
auto verseSteel() const -> std::int32_t;
|
||||||
|
auto getVerseSteel() -> std::int32_t;
|
||||||
|
auto setVerseSteel(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto undinium() const -> std::int32_t;
|
||||||
|
auto getUndinium() -> std::int32_t;
|
||||||
|
auto setUndinium(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto necriumAlloy() const -> std::int32_t;
|
||||||
|
auto getNecriumAlloy() -> std::int32_t;
|
||||||
|
auto setNecriumAlloy(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto lunarite() const -> std::int32_t;
|
||||||
|
auto getLunarite() -> std::int32_t;
|
||||||
|
auto setLunarite(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto asterite() const -> std::int32_t;
|
||||||
|
auto getAsterite() -> std::int32_t;
|
||||||
|
auto setAsterite(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto ednil() const -> std::int32_t;
|
||||||
|
auto getEdnil() -> std::int32_t;
|
||||||
|
auto setEdnil(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto nuflalt() const -> std::int32_t;
|
||||||
|
auto getNuflalt() -> std::int32_t;
|
||||||
|
auto setNuflalt(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto aurelene() const -> std::int32_t;
|
||||||
|
auto getAurelene() -> std::int32_t;
|
||||||
|
auto setAurelene(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto soldus() const -> std::int32_t;
|
||||||
|
auto getSoldus() -> std::int32_t;
|
||||||
|
auto setSoldus(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto synthesizedN() const -> std::int32_t;
|
||||||
|
auto getSynthesizedN() -> std::int32_t;
|
||||||
|
auto setSynthesizedN(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto alcarbonite() const -> std::int32_t;
|
||||||
|
auto getAlcarbonite() -> std::int32_t;
|
||||||
|
auto setAlcarbonite(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto keriphene() const -> std::int32_t;
|
||||||
|
auto getKeriphene() -> std::int32_t;
|
||||||
|
auto setKeriphene(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto nitinolCM() const -> std::int32_t;
|
||||||
|
auto getNitinolCM() -> std::int32_t;
|
||||||
|
auto setNitinolCM(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto quarkium() const -> std::int32_t;
|
||||||
|
auto getQuarkium() -> std::int32_t;
|
||||||
|
auto setQuarkium(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto alterene() const -> std::int32_t;
|
||||||
|
auto getAlterene() -> std::int32_t;
|
||||||
|
auto setAlterene(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto mixedComposition() const -> std::int32_t;
|
||||||
|
auto getMixedComposition() -> std::int32_t;
|
||||||
|
auto setMixedComposition(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto voidResidue() const -> std::int32_t;
|
||||||
|
auto getVoidResidue() -> std::int32_t;
|
||||||
|
auto setVoidResidue(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto muscularConstruction() const -> std::int32_t;
|
||||||
|
auto getMuscularConstruction() -> std::int32_t;
|
||||||
|
auto setMuscularConstruction(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto mineralExoskeletology() const -> std::int32_t;
|
||||||
|
auto getMineralExoskeletology() -> std::int32_t;
|
||||||
|
auto setMineralExoskeletology(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto carbonizedSkin() const -> std::int32_t;
|
||||||
|
auto getCarbonizedSkin() -> std::int32_t;
|
||||||
|
auto setCarbonizedSkin(std::int32_t amount) -> bool;
|
||||||
|
|
||||||
|
auto backup(const std::string& filename) -> bool;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string _profileDirectory;
|
||||||
|
std::string _filename;
|
||||||
|
|
||||||
|
ProfileType _type;
|
||||||
|
|
||||||
|
std::string _steamId;
|
||||||
|
|
||||||
|
bool _valid = false;
|
||||||
|
std::string _lastError = "";
|
||||||
|
|
||||||
|
std::string _companyName;
|
||||||
|
|
||||||
|
std::int8_t _activeFrameSlot = 0;
|
||||||
|
|
||||||
|
std::int32_t _credits;
|
||||||
|
|
||||||
|
std::int32_t _storyProgress;
|
||||||
|
|
||||||
|
std::int32_t _lastMissionId;
|
||||||
|
|
||||||
|
std::int32_t _verseSteel;
|
||||||
|
std::int32_t _undinium;
|
||||||
|
std::int32_t _necriumAlloy;
|
||||||
|
std::int32_t _lunarite;
|
||||||
|
std::int32_t _asterite;
|
||||||
|
std::int32_t _ednil;
|
||||||
|
std::int32_t _nuflalt;
|
||||||
|
std::int32_t _aurelene;
|
||||||
|
std::int32_t _soldus;
|
||||||
|
std::int32_t _synthesizedN;
|
||||||
|
std::int32_t _alcarbonite;
|
||||||
|
std::int32_t _keriphene;
|
||||||
|
std::int32_t _nitinolCM;
|
||||||
|
std::int32_t _quarkium;
|
||||||
|
std::int32_t _alterene;
|
||||||
|
|
||||||
|
std::int32_t _mixedComposition;
|
||||||
|
std::int32_t _voidResidue;
|
||||||
|
std::int32_t _muscularConstruction;
|
||||||
|
std::int32_t _mineralExoskeletology;
|
||||||
|
std::int32_t _carbonizedSkin;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //PROFILE_H
|
|
@ -1,5 +1,5 @@
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -2,7 +2,7 @@
|
||||||
#define PROFILEMANAGER_H
|
#define PROFILEMANAGER_H
|
||||||
|
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
|
@ -1,5 +1,5 @@
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
Before Width: | Height: | Size: 486 KiB After Width: | Height: | Size: 486 KiB |
|
@ -1,5 +1,5 @@
|
||||||
// wxMASSManager
|
// wxMASSManager
|
||||||
// Copyright (C) 2020 Guillaume Jacquemin
|
// Copyright (C) 2020-2021 Guillaume Jacquemin
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
Loading…
Reference in a new issue