Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ class ComputerProgramOption;
class ProgramEnvironment;


class ComputerProgramSession final : public UiState<ComputerProgramSession, PanelSession>, public ProgramSession{
class ComputerProgramSession final
: public UiState<ComputerProgramSession, PanelSession>
, public ProgramSession
{
public:
virtual ~ComputerProgramSession();
ComputerProgramSession(const ComputerProgramDescriptor& descriptor);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ template class RegisterUiStateQtWidget<ComputerProgramWidget>;

ComputerProgramWidget::~ComputerProgramWidget(){
m_session.remove_listener(*this);
delete m_actions_bar;
delete m_stats_bar;
delete m_options;
}
ComputerProgramWidget::ComputerProgramWidget(
QWidget& parent,
Expand Down
71 changes: 71 additions & 0 deletions SerialPrograms/Source/ConsoleInfra/ConsolePanel.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/* Console Panel
*
* From: https://github.com/PokemonAutomation/
*
*/

#include "Common/Cpp/Json/JsonValue.h"
#include "ConsolePanel.h"
#include "ConsolePanelSession.h"

namespace PokemonAutomation{
namespace ConsoleInfra{



ConsolePanelDescriptor::ConsolePanelDescriptor(
Color color,
std::string identifier,
std::string category, std::string display_name,
std::string doc_link,
std::string description,
size_t num_controllers,
bool deprecated,
std::vector<std::string> required_resources
)
: PanelDescriptor(
color,
std::move(identifier),
std::move(category), std::move(display_name),
std::move(doc_link),
std::move(description),
std::move(required_resources)
)
, m_deprecated(deprecated)
, m_num_controllers(num_controllers)
{}
std::unique_ptr<PanelSession> ConsolePanelDescriptor::make_panel() const{
return std::make_unique<ConsolePanelSession>(*this);
}



ConsolePanelInstance::ConsolePanelInstance()
: m_options(LockMode::UNLOCK_WHILE_RUNNING)
{}

void ConsolePanelInstance::add_option(ConfigOption& option, std::string serialization_string){
m_options.add_option(option, std::move(serialization_string));
}
JsonValue ConsolePanelInstance::to_json() const{
return m_options.to_json();
}
void ConsolePanelInstance::load_json(const JsonValue& json){
m_options.load_json(json);
}
std::string ConsolePanelInstance::check_validity() const{
return m_options.check_validity();
}
void ConsolePanelInstance::restore_defaults(){
return m_options.restore_defaults();
}








}
}
108 changes: 108 additions & 0 deletions SerialPrograms/Source/ConsoleInfra/ConsolePanel.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/* Console Panel
*
* From: https://github.com/PokemonAutomation/
*
*/

#ifndef PokemonAutomation_ConsoleInfra_ConsolePanel_H
#define PokemonAutomation_ConsoleInfra_ConsolePanel_H

#include "Common/Cpp/Options/BatchOption.h"
#include "CommonFramework/Panels/PanelDescriptor.h"

namespace PokemonAutomation{
namespace ConsoleInfra{


class ConsoleSystemSession;
class ConsolePanelInstance;



class ConsolePanelDescriptor : public PanelDescriptor{
public:
ConsolePanelDescriptor(
Color color,
std::string identifier,
std::string category, std::string display_name,
std::string doc_link,
std::string description,
size_t num_controllers,
bool deprecated = false,
std::vector<std::string> required_resources = {}
);

bool deprecated() const{ return m_deprecated; }
size_t num_controllers() const{ return m_num_controllers; }

virtual std::unique_ptr<PanelSession> make_panel() const override;
virtual std::unique_ptr<ConsolePanelInstance> make_instance(ConsoleSystemSession& system) const = 0;


private:
const bool m_deprecated;
const std::vector<std::string> m_required_resources;
const size_t m_num_controllers;
};




class ConsolePanelInstance{
public:
virtual ~ConsolePanelInstance() = default;
ConsolePanelInstance(const ConsolePanelInstance&) = delete;
void operator=(const ConsolePanelInstance&) = delete;


public:
ConsolePanelInstance();


public:
// Settings

virtual JsonValue to_json() const;
virtual void load_json(const JsonValue& json);

virtual std::string check_validity() const;
virtual void restore_defaults();


protected:
friend class ConsolePanelSession;

BatchOption m_options;
void add_option(ConfigOption& option, std::string serialization_string);

};




template <typename Descriptor, typename Instance>
class ConsolePanelWrapper : public Descriptor{
public:
virtual std::unique_ptr<ConsolePanelInstance> make_instance(
ConsoleSystemSession& system
) const override{
if constexpr (std::is_constructible_v<ConsoleSystemSession&>){
return std::make_unique<Instance>(system);
}else{
return std::make_unique<Instance>();
}
}
};

// Create a program PanelDescriptor
template <typename Descriptor, typename Instance>
std::unique_ptr<PanelDescriptor> make_ConsolePanel(){
return std::make_unique<ConsolePanelWrapper<Descriptor, Instance>>();
}




}
}
#endif
64 changes: 64 additions & 0 deletions SerialPrograms/Source/ConsoleInfra/ConsolePanelSession.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/* Console Panel Session
*
* From: https://github.com/PokemonAutomation/
*
*/

#include "Common/Cpp/EarlyShutdown.h"
#include "Common/Cpp/Logging/GlobalLogger.h"
#include "Common/Cpp/Json/JsonValue.h"
#include "Common/Cpp/Json/JsonObject.h"
#include "ConsolePanelSession.h"

namespace PokemonAutomation{
namespace ConsoleInfra{



bool ConsolePanelSession::try_shutdown(){
return m_system.try_shutdown();
}
ConsolePanelSession::~ConsolePanelSession(){
blocking_shutdown(
m_system.logger(),
"ConsolePanelSession",
[this]{ return try_shutdown(); }
);
}
ConsolePanelSession::ConsolePanelSession(const ConsolePanelDescriptor& descriptor)
: UiState<ConsolePanelSession, PanelSession>(descriptor)
, m_descriptor(descriptor)
, m_system_option(descriptor.num_controllers(), true)
, m_system(global_logger_raw(), m_system_option, 0)
, m_instance(descriptor.make_instance(m_system))
{}

ConfigOption& ConsolePanelSession::options(){
return m_instance->m_options;
}
void ConsolePanelSession::restore_defaults(){
m_instance->restore_defaults();
}


JsonValue ConsolePanelSession::to_json() const{
JsonObject obj = std::move(*m_instance->to_json().to_object());
obj["ConsoleSetup"] = m_system_option.to_json();
return obj;
}
void ConsolePanelSession::load_json(const JsonValue& json){
const JsonObject* obj = json.to_object();
if (obj == nullptr){
return;
}
const JsonValue* value = obj->get_value("ConsoleSetup");
if (value){
m_system.load_json(*value);
}
m_instance->load_json(json);
}



}
}
56 changes: 56 additions & 0 deletions SerialPrograms/Source/ConsoleInfra/ConsolePanelSession.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/* Console Panel Session
*
* From: https://github.com/PokemonAutomation/
*
*/

#ifndef PokemonAutomation_ConsoleInfra_ConsolePanelSession_H
#define PokemonAutomation_ConsoleInfra_ConsolePanelSession_H

#include "CommonFramework/Panels/PanelSession.h"
#include "ConsoleSystemSession.h"
#include "ConsolePanel.h"

namespace PokemonAutomation{
namespace ConsoleInfra{



class ConsolePanelSession final : public UiState<ConsolePanelSession, PanelSession>{
public:
bool try_shutdown();
~ConsolePanelSession();
ConsolePanelSession(const ConsolePanelDescriptor& descriptor);

void restore_defaults();


public:
const ConsolePanelDescriptor& descriptor() const{ return m_descriptor; }

Logger& logger(){ return m_system.logger(); }
ConsoleSystemSession& system(){ return m_system; }
ConfigOption& options();


private:
virtual JsonValue to_json() const override;
virtual void load_json(const JsonValue& json) override;


private:
const ConsolePanelDescriptor& m_descriptor;

ConsoleSystemOption m_system_option;
ConsoleSystemSession m_system;

std::unique_ptr<ConsolePanelInstance> m_instance;
};





}
}
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#include <QPushButton>
#include "Common/Qt/CheckboxDropdown.h"
#include "CommonFramework/VideoPipeline/VideoOverlaySession.h"
#include "ConsoleSystemSession.h"
#include "ConsoleInfra/ConsoleSystemSession.h"

namespace PokemonAutomation{
namespace ConsoleInfra{
Expand Down
Loading