diff --git a/SerialPrograms/Source/CommonFramework/Globals.cpp b/SerialPrograms/Source/CommonFramework/Globals.cpp index 39f4b60f5c..a81117d8ab 100644 --- a/SerialPrograms/Source/CommonFramework/Globals.cpp +++ b/SerialPrograms/Source/CommonFramework/Globals.cpp @@ -31,7 +31,7 @@ namespace PokemonAutomation{ #endif #ifndef PA_VERSION_PATCH -#define PA_VERSION_PATCH 4 +#define PA_VERSION_PATCH 5 #endif const bool IS_BETA_VERSION = PA_IS_BETA; diff --git a/SerialPrograms/Source/ComputerPrograms/ComputerProgram.cpp b/SerialPrograms/Source/ComputerPrograms/ComputerProgram.cpp index 35e618283c..c6a0c81d33 100644 --- a/SerialPrograms/Source/ComputerPrograms/ComputerProgram.cpp +++ b/SerialPrograms/Source/ComputerPrograms/ComputerProgram.cpp @@ -4,9 +4,9 @@ * */ -#include "Common/Cpp/Json/JsonObject.h" +#include "Common/Cpp/Json/JsonValue.h" #include "ComputerProgram.h" -#include "ComputerPrograms/Framework/ComputerProgramOption.h" +#include "ComputerPrograms/Framework/ComputerProgramSession.h" namespace PokemonAutomation{ @@ -26,7 +26,7 @@ ComputerProgramDescriptor::ComputerProgramDescriptor( ) {} std::unique_ptr ComputerProgramDescriptor::make_panel() const{ - return std::unique_ptr(new ComputerProgramOption(*this)); + return std::unique_ptr(new ComputerProgramSession(*this)); } diff --git a/SerialPrograms/Source/ComputerPrograms/ComputerProgram.h b/SerialPrograms/Source/ComputerPrograms/ComputerProgram.h index f2951772ed..6c1f6dc10e 100644 --- a/SerialPrograms/Source/ComputerPrograms/ComputerProgram.h +++ b/SerialPrograms/Source/ComputerPrograms/ComputerProgram.h @@ -76,7 +76,7 @@ class ComputerProgramInstance{ protected: - friend class ComputerProgramOption; + friend class ComputerProgramSession; BatchOption m_options; void add_option(ConfigOption& option, std::string serialization_string); diff --git a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramOption.cpp b/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramOption.cpp deleted file mode 100644 index 8a9d64711f..0000000000 --- a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramOption.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* Computer Program Option - * - * From: https://github.com/PokemonAutomation/ - * - */ - -#include "Common/Cpp/Json/JsonValue.h" -#include "ComputerProgramOption.h" -#include "ComputerProgramWidget.h" - -namespace PokemonAutomation{ - - - - -ComputerProgramOption::ComputerProgramOption(const ComputerProgramDescriptor& descriptor) - : PanelSession(descriptor) - , m_descriptor(descriptor) - , m_instance(descriptor.make_instance()) -{} - -JsonValue ComputerProgramOption::to_json() const{ - return m_instance->to_json(); -} -void ComputerProgramOption::load_json(const JsonValue& json){ - m_instance->load_json(json); -} - -ConfigOption& ComputerProgramOption::options(){ - return m_instance->m_options; -} - -std::string ComputerProgramOption::check_validity() const{ - return m_instance->check_validity(); -} -void ComputerProgramOption::restore_defaults(){ - m_instance->restore_defaults(); -} - - -QWidget* ComputerProgramOption::make_widget(QWidget& parent){ - return new ComputerProgramWidget(parent, *this); -} - - - -} diff --git a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramOption.h b/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramOption.h deleted file mode 100644 index 7a603c695d..0000000000 --- a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramOption.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Computer Program Option - * - * From: https://github.com/PokemonAutomation/ - * - * This class represents the serializable state of a computer program. - * This class maintains no UI and is not thread-safe. - * - * Note that this class does own the "ComputerProgramInstance", object - * which is controlled by the individual program itself. There the running - * program can do whatever it wants - including keeping run-time state. - * - */ - -#ifndef PokemonAutomation_ComputerPrograms_ComputerProgramOption_H -#define PokemonAutomation_ComputerPrograms_ComputerProgramOption_H - -#include "CommonFramework/Panels/PanelSession.h" -#include "ComputerPrograms/ComputerProgram.h" - -namespace PokemonAutomation{ - -class ConfigOption; -class ComputerProgramDescriptor; -class ComputerProgramInstance; - - - -class ComputerProgramOption final : public PanelSession{ -public: - ComputerProgramOption(const ComputerProgramDescriptor& descriptor); - - virtual JsonValue to_json() const override; - virtual void load_json(const JsonValue& json) override; - -public: - const ComputerProgramDescriptor& descriptor() const{ return m_descriptor; } - ComputerProgramInstance& instance(){ return *m_instance; } - ConfigOption& options(); - - std::string check_validity() const; - void restore_defaults(); - -private: - virtual QWidget* make_widget(QWidget& parent) override; - -private: - const ComputerProgramDescriptor& m_descriptor; - std::unique_ptr m_instance; -}; - - - - -} -#endif diff --git a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramSession.cpp b/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramSession.cpp index 684570cc37..92ed85e718 100644 --- a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramSession.cpp +++ b/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramSession.cpp @@ -5,15 +5,15 @@ */ #include "Common/Cpp/Exceptions.h" +#include "Common/Cpp/Json/JsonValue.h" #include "Common/Cpp/CancellableScope.h" #include "CommonFramework/Exceptions/FatalProgramException.h" #include "CommonFramework/Exceptions/ProgramFinishedException.h" #include "CommonFramework/Exceptions/OperationFailedExceptionWithScreenshot.h" #include "CommonFramework/Notifications/ProgramInfo.h" #include "CommonFramework/Notifications/ProgramNotifications.h" -#include "CommonFramework/Options/Environment/PerformanceOptions.h" -#include "ComputerProgramOption.h" #include "ComputerProgramSession.h" +#include "ComputerProgramWidget.h" //#include //using std::cout; @@ -22,9 +22,11 @@ namespace PokemonAutomation{ -ComputerProgramSession::ComputerProgramSession(ComputerProgramOption& option) - : ProgramSession(option.descriptor()) - , m_option(option) +ComputerProgramSession::ComputerProgramSession(const ComputerProgramDescriptor& descriptor) + : PanelSession(descriptor) + , ProgramSession(descriptor) + , m_descriptor(descriptor) + , m_instance(descriptor.make_instance()) {} ComputerProgramSession::~ComputerProgramSession(){ @@ -40,15 +42,28 @@ void ComputerProgramSession::restore_defaults(){ return; } logger().log("Restoring settings to defaults..."); - m_option.restore_defaults(); + m_instance->restore_defaults(); +} +ConfigOption& ComputerProgramSession::options(){ + return m_instance->m_options; } std::string ComputerProgramSession::check_validity() const{ - return m_option.check_validity(); + return m_instance->check_validity(); } +JsonValue ComputerProgramSession::to_json() const{ + return m_instance->to_json(); +} +void ComputerProgramSession::load_json(const JsonValue& json){ + m_instance->load_json(json); +} +QWidget* ComputerProgramSession::make_widget(QWidget& parent){ + return new ComputerProgramWidget(parent, *this); +} + void ComputerProgramSession::run_program_instance(ProgramEnvironment& env, CancellableScope& scope){ { @@ -65,7 +80,7 @@ void ComputerProgramSession::run_program_instance(ProgramEnvironment& env, Cance } try{ - m_option.instance().program(env, scope); + m_instance->program(env, scope); }catch (...){ WriteSpinLock lg(m_lock, PA_CURRENT_FUNCTION); m_scope = nullptr; @@ -95,12 +110,12 @@ void ComputerProgramSession::internal_run_program(){ return; } - m_option.options().reset_state(); + options().reset_state(); ProgramInfo program_info( identifier(), - m_option.descriptor().category(), - m_option.descriptor().display_name(), + m_descriptor.category(), + m_descriptor.display_name(), timestamp() ); CancellableHolder scope; @@ -119,7 +134,7 @@ void ComputerProgramSession::internal_run_program(){ }catch (ProgramCancelledException&){ }catch (ProgramFinishedException& e){ logger().log("Program finished early!", COLOR_BLUE); - send_program_finished_notification(env, m_option.instance().NOTIFICATION_PROGRAM_FINISH, e.message(), *e.screenshot()); + send_program_finished_notification(env, m_instance->NOTIFICATION_PROGRAM_FINISH, e.message(), *e.screenshot()); }catch (InvalidConnectionStateException&){ }catch (OperationFailedExceptionWithScreenshot& e){ logger().log("Program stopped with an exception!", COLOR_RED); @@ -128,7 +143,7 @@ void ComputerProgramSession::internal_run_program(){ message = e.name(); } report_error(message); - e.send_fatal_error_notif_and_telemetry_report(env, m_option.instance().NOTIFICATION_ERROR_FATAL); + e.send_fatal_error_notif_and_telemetry_report(env, m_instance->NOTIFICATION_ERROR_FATAL); }catch (OperationFailedException& e){ // no screenshot logger().log("Program stopped with an exception!", COLOR_RED); std::string message = e.message(); @@ -136,7 +151,7 @@ void ComputerProgramSession::internal_run_program(){ message = e.name(); } report_error(message); - e.send_fatal_error_notif_and_telemetry_report(env, m_option.instance().NOTIFICATION_ERROR_FATAL); + e.send_fatal_error_notif_and_telemetry_report(env, m_instance->NOTIFICATION_ERROR_FATAL); }catch (FatalProgramException& e){ logger().log("Program stopped with an exception!", COLOR_RED); std::string message = e.message(); @@ -144,7 +159,7 @@ void ComputerProgramSession::internal_run_program(){ message = e.name(); } report_error(message); - e.send_fatal_error_notif_and_telemetry_report(env, m_option.instance().NOTIFICATION_ERROR_FATAL); + e.send_fatal_error_notif_and_telemetry_report(env, m_instance->NOTIFICATION_ERROR_FATAL); }catch (Exception& e){ logger().log("Program stopped with an exception!", COLOR_RED); std::string message = e.message(); @@ -153,7 +168,7 @@ void ComputerProgramSession::internal_run_program(){ } report_error(message); send_program_fatal_error_notification( - env, m_option.instance().NOTIFICATION_ERROR_FATAL, + env, m_instance->NOTIFICATION_ERROR_FATAL, message ); }catch (std::exception& e){ @@ -164,14 +179,14 @@ void ComputerProgramSession::internal_run_program(){ } report_error(message); send_program_fatal_error_notification( - env, m_option.instance().NOTIFICATION_ERROR_FATAL, + env, m_instance->NOTIFICATION_ERROR_FATAL, message ); }catch (...){ logger().log("Program stopped with an exception!", COLOR_RED); report_error("Unknown error."); send_program_fatal_error_notification( - env, m_option.instance().NOTIFICATION_ERROR_FATAL, + env, m_instance->NOTIFICATION_ERROR_FATAL, "Unknown error." ); } diff --git a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramSession.h b/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramSession.h index aa9c898509..742b972719 100644 --- a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramSession.h +++ b/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramSession.h @@ -16,6 +16,7 @@ #define PokemonAutomation_ComputerPrograms_ComputerProgramSession_H #include "Common/Cpp/Concurrency/SpinLock.h" +#include "CommonFramework/Panels/PanelSession.h" #include "CommonFramework/ProgramSession.h" #include "ComputerPrograms/ComputerProgram.h" @@ -26,13 +27,19 @@ class ComputerProgramOption; class ProgramEnvironment; -class ComputerProgramSession final : public ProgramSession{ +class ComputerProgramSession final : public PanelSession, public ProgramSession{ public: virtual ~ComputerProgramSession(); - ComputerProgramSession(ComputerProgramOption& option); + ComputerProgramSession(const ComputerProgramDescriptor& descriptor); void restore_defaults(); + +public: + const ComputerProgramDescriptor& descriptor() const{ return m_descriptor; } + ConfigOption& options(); + + private: virtual std::string check_validity() const override; @@ -40,11 +47,19 @@ class ComputerProgramSession final : public ProgramSession{ virtual void internal_stop_program() override; +private: + virtual JsonValue to_json() const override; + virtual void load_json(const JsonValue& json) override; + virtual QWidget* make_widget(QWidget& parent) override; + + private: void run_program_instance(ProgramEnvironment& env, CancellableScope& scope); + private: - ComputerProgramOption& m_option; + const ComputerProgramDescriptor& m_descriptor; + std::unique_ptr m_instance; SpinLock m_lock; CancellableScope* m_scope = nullptr; diff --git a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramWidget.cpp b/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramWidget.cpp index 49422dfe1d..8a8ffb405e 100644 --- a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramWidget.cpp +++ b/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramWidget.cpp @@ -15,7 +15,6 @@ #include "CommonFramework/ProgramStats/StatsTracking.h" #include "CommonFramework/ResourceDownload/ProgramResourceDownloadWidget.h" #include "ComputerPrograms/ComputerProgram.h" -#include "ComputerPrograms/Framework/ComputerProgramOption.h" #include "ComputerProgramWidget.h" // #include @@ -33,15 +32,15 @@ ComputerProgramWidget::~ComputerProgramWidget(){ } ComputerProgramWidget::ComputerProgramWidget( QWidget& parent, - ComputerProgramOption& option + ComputerProgramSession& session ) : QWidget(&parent) - , m_session(option) + , m_session(session) { m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); - const ComputerProgramDescriptor& descriptor = option.descriptor(); + const ComputerProgramDescriptor& descriptor = m_session.descriptor(); CollapsibleGroupBox* header = make_panel_header( *this, @@ -62,7 +61,7 @@ ComputerProgramWidget::ComputerProgramWidget( QVBoxLayout* scroll_layout = new QVBoxLayout(scroll_inner); scroll_layout->setAlignment(Qt::AlignTop); - m_options = ConfigWidget::make_from_option(option.options(), this); + m_options = ConfigWidget::make_from_option(m_session.options(), this); scroll_layout->addWidget(&m_options->widget()); scroll_layout->addStretch(1); @@ -98,7 +97,7 @@ ComputerProgramWidget::ComputerProgramWidget( m_actions_bar, &RunnablePanelActionBar::defaults_clicked, this, [&]{ std::lock_guard lg(m_session.program_lock()); - option.restore_defaults(); + m_session.restore_defaults(); m_options->update_all(false); } ); diff --git a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramWidget.h b/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramWidget.h index 6ac08bc4e8..71c637a251 100644 --- a/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramWidget.h +++ b/SerialPrograms/Source/ComputerPrograms/Framework/ComputerProgramWidget.h @@ -35,7 +35,7 @@ class ComputerProgramWidget : public QWidget, private ProgramSession::Listener{ ~ComputerProgramWidget(); ComputerProgramWidget( QWidget& parent, - ComputerProgramOption& option + ComputerProgramSession& session ); private: @@ -49,7 +49,7 @@ class ComputerProgramWidget : public QWidget, private ProgramSession::Listener{ ProgramResourceDownloadTableWidget* ensure_downloads_table(); private: - ComputerProgramSession m_session; + ComputerProgramSession& m_session; QVBoxLayout* m_layout; ConfigWidget* m_options; StatsBar* m_stats_bar; diff --git a/SerialPrograms/Source/NintendoSwitch/NintendoSwitch_MultiSwitchProgram.h b/SerialPrograms/Source/NintendoSwitch/NintendoSwitch_MultiSwitchProgram.h index af7d8249a9..a7724cfddc 100644 --- a/SerialPrograms/Source/NintendoSwitch/NintendoSwitch_MultiSwitchProgram.h +++ b/SerialPrograms/Source/NintendoSwitch/NintendoSwitch_MultiSwitchProgram.h @@ -175,7 +175,6 @@ class MultiSwitchProgramInstance{ protected: - friend class MultiSwitchProgramOption; friend class MultiSwitchProgramSession; BatchOption m_options; diff --git a/SerialPrograms/cmake/SourceFiles.cmake b/SerialPrograms/cmake/SourceFiles.cmake index ad277940bf..56b8c43df0 100644 --- a/SerialPrograms/cmake/SourceFiles.cmake +++ b/SerialPrograms/cmake/SourceFiles.cmake @@ -865,8 +865,6 @@ file(GLOB LIBRARY_SOURCES Source/ComputerPrograms/ComputerProgram.h Source/ComputerPrograms/UnitTestRunner.cpp Source/ComputerPrograms/UnitTestRunner.h - Source/ComputerPrograms/Framework/ComputerProgramOption.cpp - Source/ComputerPrograms/Framework/ComputerProgramOption.h Source/ComputerPrograms/Framework/ComputerProgramSession.cpp Source/ComputerPrograms/Framework/ComputerProgramSession.h Source/ComputerPrograms/Framework/ComputerProgramWidget.cpp