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
7 changes: 3 additions & 4 deletions SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@ void GlobalSettings::connect_row_with_download(const std::string& resource_slug,


GlobalSettings_Descriptor::GlobalSettings_Descriptor()
: PanelDescriptor(
: OptionsPanelDescriptor(
Color(),
"",
"Global Settings", "Global Settings",
Expand All @@ -406,9 +406,8 @@ GlobalSettings_Descriptor::GlobalSettings_Descriptor()
{}


GlobalSettingsPanel::GlobalSettingsPanel(const GlobalSettings_Descriptor& descriptor)
: SettingsPanelInstance(descriptor)
, settings(GlobalSettings::instance())
GlobalSettingsPanel::GlobalSettingsPanel()
: settings(GlobalSettings::instance())
{
PA_ADD_OPTION(settings);
}
Expand Down
10 changes: 5 additions & 5 deletions SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
//#include "Common/Cpp/Options/SimpleIntegerOption.h"
#include "Common/Cpp/Options/StringOption.h"
#include "Common/Cpp/Options/ButtonOption.h"
#include "CommonFramework/Panels/SettingsPanel.h"
#include "CommonFramework/Panels/OptionsPanel.h"
#include "CommonFramework/Panels/PanelTools.h"
#include "CommonFramework/ResourceDownload/SettingsResourceDownloadOptions.h"
#include "CommonFramework/ResourceDownload/SettingsResourceDownloadTable.h"
Expand Down Expand Up @@ -136,21 +136,21 @@ class GlobalSettings : public BatchOption, private ConfigOption::Listener, priva

class GlobalSettingsPanel;

class GlobalSettings_Descriptor : public PanelDescriptor{
class GlobalSettings_Descriptor : public OptionsPanelDescriptor{
public:
GlobalSettings_Descriptor();
public:
using Wrapper = PanelDescriptorWrapper<GlobalSettings_Descriptor, GlobalSettingsPanel>;
using Wrapper = OptionsPanelWrapper<GlobalSettings_Descriptor, GlobalSettingsPanel>;
static Wrapper& instance(){
static Wrapper wrapper;
return wrapper;
}
};


class GlobalSettingsPanel : public SettingsPanelInstance{
class GlobalSettingsPanel : public OptionsPanelInstance{
public:
GlobalSettingsPanel(const GlobalSettings_Descriptor& descriptor);
GlobalSettingsPanel();
private:
GlobalSettings& settings;
};
Expand Down
64 changes: 64 additions & 0 deletions SerialPrograms/Source/CommonFramework/Panels/OptionsPanel.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/* Options Panel
*
* From: https://github.com/PokemonAutomation/
*
*/

#include "Common/Cpp/Json/JsonValue.h"
#include "OptionsPanel.h"
#include "OptionsPanelSession.h"

namespace PokemonAutomation{



OptionsPanelDescriptor::OptionsPanelDescriptor(
Color color,
std::string identifier,
std::string category, std::string display_name,
std::string doc_link,
std::string description,
PanelDeprecation deprecation,
bool restore_defaults_button
)
: PanelDescriptor(
color,
std::move(identifier),
std::move(category), std::move(display_name),
std::move(doc_link),
std::move(description),
deprecation
)
, m_restore_defaults_button(restore_defaults_button)
{}
std::unique_ptr<PanelSession> OptionsPanelDescriptor::make_panel() const{
return std::make_unique<OptionsPanelSession>(*this);
}




OptionsPanelInstance::OptionsPanelInstance()
: m_options(LockMode::LOCK_WHILE_RUNNING)
{}

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







}
94 changes: 94 additions & 0 deletions SerialPrograms/Source/CommonFramework/Panels/OptionsPanel.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
/* Options Panel
*
* From: https://github.com/PokemonAutomation/
*
*/

#ifndef PokemonAutomation_OptionsPanel_H
#define PokemonAutomation_OptionsPanel_H

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

namespace PokemonAutomation{


class OptionsPanelInstance;



class OptionsPanelDescriptor : public PanelDescriptor{
public:
OptionsPanelDescriptor(
Color color,
std::string identifier,
std::string category, std::string display_name,
std::string doc_link,
std::string description,
PanelDeprecation deprecation = PanelDeprecation::NOT_DEPRECATED,
bool restore_defaults_button = true
);

bool restore_defaults_button() const{ return m_restore_defaults_button; }

virtual std::unique_ptr<PanelSession> make_panel() const override;
virtual std::unique_ptr<OptionsPanelInstance> make_instance() const = 0;


private:
const bool m_restore_defaults_button;
};



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


public:
OptionsPanelInstance();


public:
// Serialization
virtual JsonValue to_json() const;
virtual void load_json(const JsonValue& json);

virtual void restore_defaults();


protected:
friend class OptionsPanelSession;

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




template <typename Descriptor, typename Instance>
class OptionsPanelWrapper : public Descriptor{
public:
virtual std::unique_ptr<OptionsPanelInstance> make_instance() const override{
return std::make_unique<Instance>();
}
};


template <typename Descriptor, typename Instance>
std::unique_ptr<PanelDescriptor> make_OptionsPanel(){
return std::make_unique<OptionsPanelWrapper<Descriptor, Instance>>();
}




}
#endif


Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/* Options 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 "OptionsPanelSession.h"

namespace PokemonAutomation{



OptionsPanelSession::OptionsPanelSession(const OptionsPanelDescriptor& descriptor)
: UiState<OptionsPanelSession, PanelSession>(descriptor)
, m_descriptor(descriptor)
, m_instance(descriptor.make_instance())
{}

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


JsonValue OptionsPanelSession::to_json() const{
return m_instance->to_json();
}
void OptionsPanelSession::load_json(const JsonValue& json){
m_instance->load_json(json);
}



}
44 changes: 44 additions & 0 deletions SerialPrograms/Source/CommonFramework/Panels/OptionsPanelSession.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/* Options Panel Session
*
* From: https://github.com/PokemonAutomation/
*
*/

#ifndef PokemonAutomation_OptionsPanelSession_H
#define PokemonAutomation_OptionsPanelSession_H

#include "CommonFramework/Panels/PanelSession.h"
#include "OptionsPanel.h"

namespace PokemonAutomation{



class OptionsPanelSession final : public UiState<OptionsPanelSession, PanelSession>{
public:
OptionsPanelSession(const OptionsPanelDescriptor& descriptor);

void restore_defaults();


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

ConfigOption& options();


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


private:
const OptionsPanelDescriptor& m_descriptor;

std::unique_ptr<OptionsPanelInstance> m_instance;
};



}
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ PanelDescriptor::PanelDescriptor(
std::string category, std::string display_name,
std::string doc_link,
std::string description,
PanelDeprecation deprecation,
std::vector<std::string> required_resources
)
: m_color(color)
Expand All @@ -24,6 +25,7 @@ PanelDescriptor::PanelDescriptor(
, m_display_name(std::move(display_name))
, m_doc_link(std::move(doc_link))
, m_description(std::move(description))
, m_deprecation(deprecation)
, m_required_resources(std::move(required_resources))
{}
std::unique_ptr<PanelSession> PanelDescriptor::make_panel() const{
Expand Down
10 changes: 10 additions & 0 deletions SerialPrograms/Source/CommonFramework/Panels/PanelDescriptor.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ namespace PokemonAutomation{

class PanelSession;


enum class PanelDeprecation{
NOT_DEPRECATED,
DEPRECATED,
};


// Abstract base class that sets the interface for program descriptors.
// A program descriptor contains various information (descriptions) of a program panel UI.
// It can also use function `make_panel()` to create the corresponding panel.
Expand All @@ -27,6 +34,7 @@ class PanelDescriptor{
std::string category, std::string display_name,
std::string doc_link,
std::string description,
PanelDeprecation deprecation = PanelDeprecation::NOT_DEPRECATED,
std::vector<std::string> required_resources = {}
);
virtual ~PanelDescriptor() = default;
Expand All @@ -37,6 +45,7 @@ class PanelDescriptor{
const std::string& display_name() const{ return m_display_name; }
const std::string& doc_link() const{ return m_doc_link; }
const std::string& description() const{ return m_description; }
PanelDeprecation deprecation() const{ return m_deprecation; }
const std::vector<std::string>& required_resources() const{ return m_required_resources; }

virtual std::unique_ptr<PanelSession> make_panel() const = 0;
Expand All @@ -48,6 +57,7 @@ class PanelDescriptor{
const std::string m_display_name;
const std::string m_doc_link;
const std::string m_description;
const PanelDeprecation m_deprecation;
const std::vector<std::string> m_required_resources;
};

Expand Down
6 changes: 0 additions & 6 deletions SerialPrograms/Source/CommonFramework/Panels/PanelTools.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,6 @@ template <typename Descriptor, typename Instance>
std::unique_ptr<PanelDescriptor> make_panel(){
return std::make_unique<PanelDescriptorWrapper<Descriptor, Instance>>();
}
template <typename Descriptor, typename Instance>
std::unique_ptr<PanelDescriptor> make_settings(){
auto ret = std::make_unique<PanelDescriptorWrapper<Descriptor, Instance>>();
ret->make_panel()->load_json();
return ret;
}



Expand Down
Loading