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
10 changes: 2 additions & 8 deletions SerialPrograms/Source/CommonFramework/Panels/PanelSession.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,20 @@
#ifndef PokemonAutomation_PanelSession_H
#define PokemonAutomation_PanelSession_H

#include "Common/Cpp/UiWrapper.h"
#include "PanelDescriptor.h"

class QWidget;

namespace PokemonAutomation{

class JsonValue;
struct PanelHolder;

// Class to represent one instance of a pokemon automation program.
// Since programs are listed in the program panels, so this class is called PanelSession.
// Its derived classes hold all the program data and program logic. It also calls
// `make_widget()` to generate the UI for the program.
class PanelSession{
class PanelSession : public UiState<PanelSession>{
public:
explicit PanelSession(const PanelDescriptor& descriptor);
virtual ~PanelSession() = default;
Expand All @@ -31,12 +31,6 @@ class PanelSession{
void validate_resource_list();


public:
// The implmentation is defined in "UI/PanelWidget.h" to avoid circular dependency
// Returns a UI/PanelWidget.h:PanelWidget
virtual QWidget* make_widget(QWidget& parent);


public:
// Serialization
void load_json();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace PokemonAutomation{


SettingsPanelInstance::SettingsPanelInstance(const PanelDescriptor& descriptor)
: PanelSession(descriptor)
: UiState<SettingsPanelInstance, PanelSession>(descriptor)
, m_options(LockMode::LOCK_WHILE_RUNNING)
{}

Expand Down
4 changes: 1 addition & 3 deletions SerialPrograms/Source/CommonFramework/Panels/SettingsPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,14 @@ namespace PokemonAutomation{



class SettingsPanelInstance : public PanelSession{
class SettingsPanelInstance : public UiState<SettingsPanelInstance, PanelSession>{
public:
SettingsPanelInstance(const PanelDescriptor& descriptor);

void add_option(ConfigOption& option, std::string serialization_string){
m_options.add_option(option, std::move(serialization_string));
}

virtual QWidget* make_widget(QWidget& parent) override;

public:
// Serialization
virtual JsonValue to_json() const override;
Expand Down
14 changes: 6 additions & 8 deletions SerialPrograms/Source/CommonFramework/Panels/UI/PanelWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,27 +15,25 @@

namespace PokemonAutomation{

template class RegisterUiStateQtWidget<PanelWidget>;


QWidget* PanelSession::make_widget(QWidget& parent){
return new PanelWidget(parent, *this);
}


PanelWidget::PanelWidget(
QWidget& parent,
PanelSession& instance
PanelSession& session
)
: QWidget(&parent)
, m_instance(instance)
, m_session(session)
{}

CollapsibleGroupBox* PanelWidget::make_header(){
return make_panel_header(
*this,
m_instance.descriptor().display_name(),
m_instance.descriptor().doc_link(),
m_instance.descriptor().description()
m_session.descriptor().display_name(),
m_session.descriptor().doc_link(),
m_session.descriptor().description()
);
}

Expand Down
21 changes: 13 additions & 8 deletions SerialPrograms/Source/CommonFramework/Panels/UI/PanelWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
#define PokemonAutomation_PanelWidget_H

#include <QWidget>
#include "Common/Qt/UiStateQtWidget.h"
#include "CommonFramework/Panels/PanelTools.h"
#include "CommonFramework/Panels/PanelSession.h"

namespace PokemonAutomation{

Expand All @@ -18,24 +20,27 @@ class CollapsibleGroupBox;
// A PanelSession can call make_widget() to create it.
// Its derived classes can call make_header() to create a collabspile program header
// that shows program title, link to online documentation and others.
class PanelWidget : public QWidget{
class PanelWidget : public QWidget, public UiComponentQtWidget{
public:
PanelWidget(
QWidget& parent,
PanelSession& instance
);
using ParentState = PanelSession;

public:
PanelWidget(QWidget& parent, PanelSession& session);
virtual ~PanelWidget() = default;

// return the panel instance
PanelSession& instance(){ return m_instance; }
// PanelSession& session(){ return m_session; }

virtual QWidget& widget() override{
return *this;
}

protected:
// Generate a collapsible UI element that shows the program panel header.
// It contains the name of the program and its description.
virtual CollapsibleGroupBox* make_header();

protected:
PanelSession& m_instance;
PanelSession& m_session;
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,17 @@
namespace PokemonAutomation{


QWidget* SettingsPanelInstance::make_widget(QWidget& parent){
return SettingsPanelWidget::make(parent, *this);
}
template class RegisterUiStateQtWidget<SettingsPanelWidget>;




SettingsPanelWidget* SettingsPanelWidget::make(
QWidget& parent,
SettingsPanelInstance& instance
){
SettingsPanelWidget* widget = new SettingsPanelWidget(parent, instance);
widget->construct();
return widget;
}
SettingsPanelWidget::SettingsPanelWidget(
QWidget& parent,
SettingsPanelInstance& instance
SettingsPanelInstance& session
)
: PanelWidget(parent, instance)
{}
void SettingsPanelWidget::construct(){
: PanelWidget(parent, session)
{
QVBoxLayout* layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(make_header());
Expand All @@ -54,7 +45,7 @@ QWidget* SettingsPanelWidget::make_options(QWidget& parent){
QVBoxLayout* options_layout = new QVBoxLayout(options_widget);
options_layout->setAlignment(Qt::AlignTop);

SettingsPanelInstance& instance = static_cast<SettingsPanelInstance&>(m_instance);
SettingsPanelInstance& instance = static_cast<SettingsPanelInstance&>(m_session);
m_options = static_cast<BatchWidget*>(ConfigWidget::make_from_option(instance.m_options, &parent));
options_layout->addWidget(m_options);
options_layout->addStretch();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,16 @@ namespace PokemonAutomation{
class BatchWidget;


class SettingsPanelWidget : public PanelWidget{
class SettingsPanelWidget final : public PanelWidget{
public:
static SettingsPanelWidget* make(
QWidget& parent,
SettingsPanelInstance& instance
);
using ParentState = SettingsPanelInstance;

public:
SettingsPanelWidget(QWidget& parent, SettingsPanelInstance& session);

void restore_defaults();

private:
SettingsPanelWidget(
QWidget& parent,
SettingsPanelInstance& instance
);
void construct();
QWidget* make_options(QWidget& parent);
QWidget* make_actions(QWidget& parent);

Expand Down
5 changes: 4 additions & 1 deletion SerialPrograms/Source/CommonFramework/Windows/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "Common/Cpp/Logging/MultiOutputLogger.h"
#include "Common/Cpp/Filesystem/Filesystem.h"
#include "Common/Cpp/CpuId/CpuId.h"
#include "Common/Qt/UiStateQtWidget.h"
#include "CommonFramework/Globals.h"
#include "CommonFramework/GlobalAutoPaths.h"
#include "CommonFramework/GlobalSettingsPanel.h"
Expand Down Expand Up @@ -395,7 +396,9 @@ void MainWindow::load_panel(
// Make new widget.
try{
check_new_version();
m_current_panel_widget = panel->make_widget(*this);
m_current_panel_widget = &dynamic_cast<UiComponentQtWidget*>(
panel->make_ui_component(this).release()
)->widget();
// cout << "load_panel() = " << m_current_panel_widget << endl;
m_current_panel_descriptor = std::move(descriptor);
m_current_panel = std::move(panel);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
#include "CommonFramework/Notifications/ProgramInfo.h"
#include "CommonFramework/Notifications/ProgramNotifications.h"
#include "ComputerProgramSession.h"
#include "ComputerProgramWidget.h"

//#include <iostream>
//using std::cout;
Expand All @@ -23,7 +22,7 @@ namespace PokemonAutomation{


ComputerProgramSession::ComputerProgramSession(const ComputerProgramDescriptor& descriptor)
: PanelSession(descriptor)
: UiState<ComputerProgramSession, PanelSession>(descriptor)
, ProgramSession(descriptor)
, m_descriptor(descriptor)
, m_instance(descriptor.make_instance())
Expand Down Expand Up @@ -60,9 +59,6 @@ JsonValue ComputerProgramSession::to_json() const{
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){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class ComputerProgramOption;
class ProgramEnvironment;


class ComputerProgramSession final : public PanelSession, public ProgramSession{
class ComputerProgramSession final : public UiState<ComputerProgramSession, PanelSession>, public ProgramSession{
public:
virtual ~ComputerProgramSession();
ComputerProgramSession(const ComputerProgramDescriptor& descriptor);
Expand All @@ -50,7 +50,6 @@ class ComputerProgramSession final : public PanelSession, public ProgramSession{
private:
virtual JsonValue to_json() const override;
virtual void load_json(const JsonValue& json) override;
virtual QWidget* make_widget(QWidget& parent) override;


private:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@

namespace PokemonAutomation{

template class RegisterUiStateQtWidget<ComputerProgramWidget>;


ComputerProgramWidget::~ComputerProgramWidget(){
m_session.remove_listener(*this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#ifndef PokemonAutomation_ComputerPrograms_ComputerProgramWidget_H
#define PokemonAutomation_ComputerPrograms_ComputerProgramWidget_H

#include "Common/Qt/UiStateQtWidget.h"
#include "CommonFramework/Panels/UI/PanelElements.h"
#include "ComputerPrograms/ComputerProgram.h"
#include "ComputerPrograms/Framework/ComputerProgramSession.h"
Expand All @@ -30,13 +31,21 @@ namespace PokemonAutomation{



class ComputerProgramWidget : public QWidget, private ProgramSession::Listener{
class ComputerProgramWidget
: public QWidget
, public UiComponentQtWidget
, private ProgramSession::Listener
{
public:
using ParentState = ComputerProgramSession;

public:
~ComputerProgramWidget();
ComputerProgramWidget(
QWidget& parent,
ComputerProgramSession& session
);
ComputerProgramWidget(QWidget& parent, ComputerProgramSession& session);

virtual QWidget& widget() override{
return *this;
}

private:
virtual void state_change(ProgramState state) override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
#include "CommonFramework/VideoPipeline/Stats/CpuUtilizationStats.h"
#include "CommonFramework/VideoPipeline/Stats/ThreadUtilizationStats.h"
#include "Integrations/ProgramTracker.h"
#include "Controllers/NullController.h"
#include "ConsoleSystemSession.h"

//#include <iostream>
Expand Down
26 changes: 9 additions & 17 deletions SerialPrograms/Source/ConsoleInfra/VirtualConsole.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
#include "VirtualConsole.h"

namespace PokemonAutomation{

template class RegisterUiStateQtWidget<ConsoleInfra::VirtualConsole_Widget>;


namespace ConsoleInfra{

VirtualConsole_Descriptor::VirtualConsole_Descriptor(size_t controllers)
Expand All @@ -34,7 +38,7 @@ VirtualConsole_Descriptor::VirtualConsole_Descriptor(size_t controllers)


VirtualConsole::VirtualConsole(const VirtualConsole_Descriptor& descriptor)
: PanelSession(descriptor)
: UiState<VirtualConsole, PanelSession>(descriptor)
, m_console_options(descriptor.m_controllers, true)
{}
JsonValue VirtualConsole::to_json() const{
Expand All @@ -43,31 +47,19 @@ JsonValue VirtualConsole::to_json() const{
void VirtualConsole::load_json(const JsonValue& json){
m_console_options.load_json(json);
}
QWidget* VirtualConsole::make_widget(QWidget& parent){
return VirtualConsole_Widget::make(parent, *this);
}



VirtualConsole_Widget* VirtualConsole_Widget::make(
QWidget& parent,
VirtualConsole& instance
){
VirtualConsole_Widget* widget = new VirtualConsole_Widget(parent, instance);
widget->construct();
return widget;
}
VirtualConsole_Widget::~VirtualConsole_Widget(){
delete m_console_widget;
}
VirtualConsole_Widget::VirtualConsole_Widget(
QWidget& parent,
VirtualConsole& instance
VirtualConsole& session
)
: PanelWidget(parent, instance)
, m_session(global_logger_raw(), instance.m_console_options, 0)
{}
void VirtualConsole_Widget::construct(){
: PanelWidget(parent, session)
, m_session(global_logger_raw(), session.m_console_options, 0)
{
QVBoxLayout* layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(make_header());
Expand Down
Loading