mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-08 18:24:55 +00:00
YAML read/write refactor
This commit is contained in:
@@ -15,8 +15,6 @@ namespace RUDE
|
||||
{
|
||||
class ViewManager;
|
||||
|
||||
struct SpaceState : Athena::io::DNAYaml<Athena::BigEndian> {Delete _d;};
|
||||
|
||||
class Space
|
||||
{
|
||||
public:
|
||||
@@ -27,42 +25,58 @@ public:
|
||||
TestSpace,
|
||||
ResourceOutliner,
|
||||
};
|
||||
|
||||
struct StateHead : Athena::io::DNAYaml<Athena::BigEndian>
|
||||
{
|
||||
DECL_YAML
|
||||
Value<Class> cls;
|
||||
};
|
||||
struct State : Athena::io::DNAYaml<Athena::BigEndian> {Delete _d;};
|
||||
|
||||
static Space* NewSpaceFromYAMLStream(ViewManager& vm, Athena::io::YAMLDocReader& r);
|
||||
|
||||
protected:
|
||||
friend class ViewManager;
|
||||
ViewManager& m_vm;
|
||||
Class m_class = Class::None;
|
||||
std::unique_ptr<Specter::Space> m_space;
|
||||
Space(ViewManager& vm, Class cls) : m_vm(vm), m_class(cls) {}
|
||||
Space(ViewManager& vm, Class cls, Athena::io::IStreamReader& r) : m_vm(vm), m_class(cls)
|
||||
{if (spaceState()) spaceState()->read(r);}
|
||||
void writeState(Athena::io::IStreamWriter& w) const;
|
||||
|
||||
/* Allows common Space code to access DNA-encoded state */
|
||||
virtual SpaceState* spaceState() {return nullptr;}
|
||||
virtual Space::State& spaceState()=0;
|
||||
|
||||
/* Structural control */
|
||||
virtual bool usesToolbar() const {return false;}
|
||||
virtual void buildToolbar(Specter::ViewResources& res, Specter::Toolbar& tb) {}
|
||||
virtual Specter::View* buildContent(Specter::ViewResources& res)=0;
|
||||
Specter::Space* buildSpace(Specter::ViewResources& res);
|
||||
virtual void buildToolbarView(Specter::ViewResources& res, Specter::Toolbar& tb) {}
|
||||
virtual Specter::View* buildContentView(Specter::ViewResources& res)=0;
|
||||
Specter::Space* buildSpaceView(Specter::ViewResources& res);
|
||||
public:
|
||||
};
|
||||
|
||||
class SplitSpace : public Space
|
||||
{
|
||||
friend class ViewManager;
|
||||
std::unique_ptr<Space> m_a;
|
||||
std::unique_ptr<Space> m_b;
|
||||
std::unique_ptr<Specter::SplitView> m_splitView;
|
||||
struct State : SpaceState
|
||||
struct State : Space::State
|
||||
{
|
||||
DECL_YAML
|
||||
Value<float> m_split;
|
||||
Value<float> split;
|
||||
} m_state;
|
||||
SpaceState* spaceState() {return &m_state;}
|
||||
Space::State& spaceState() {return m_state;}
|
||||
|
||||
public:
|
||||
SplitSpace(ViewManager& vm)
|
||||
: Space(vm, Class::SplitSpace) {}
|
||||
Specter::View* buildContent(Specter::ViewResources& res);
|
||||
SplitSpace(ViewManager& vm) : Space(vm, Class::SplitSpace) {}
|
||||
SplitSpace(ViewManager& vm, Athena::io::YAMLDocReader& r)
|
||||
: SplitSpace(vm)
|
||||
{
|
||||
m_state.read(r);
|
||||
m_a.reset(NewSpaceFromYAMLStream(vm, r));
|
||||
m_b.reset(NewSpaceFromYAMLStream(vm, r));
|
||||
}
|
||||
|
||||
Specter::View* buildContentView(Specter::ViewResources& res);
|
||||
};
|
||||
|
||||
class TestSpace : public Space
|
||||
@@ -81,20 +95,20 @@ public:
|
||||
: Space(vm, Class::TestSpace), m_contentStr(content), m_buttonStr(button), m_binding(binding)
|
||||
{}
|
||||
|
||||
struct State : SpaceState
|
||||
struct State : Space::State
|
||||
{
|
||||
DECL_YAML
|
||||
} m_state;
|
||||
SpaceState* spaceState() {return &m_state;}
|
||||
Space::State& spaceState() {return m_state;}
|
||||
|
||||
bool usesToolbar() const {return true;}
|
||||
void buildToolbar(Specter::ViewResources& res, Specter::Toolbar& tb)
|
||||
void buildToolbarView(Specter::ViewResources& res, Specter::Toolbar& tb)
|
||||
{
|
||||
m_button.reset(new Specter::Button(res, tb, m_binding, m_buttonStr));
|
||||
tb.push_back(m_button.get());
|
||||
}
|
||||
|
||||
Specter::View* buildContent(Specter::ViewResources& res)
|
||||
Specter::View* buildContentView(Specter::ViewResources& res)
|
||||
{
|
||||
m_textView.reset(new Specter::MultiLineTextView(res, *m_space, res.m_heading14));
|
||||
m_textView->setBackground(res.themeData().viewportBackground());
|
||||
|
||||
Reference in New Issue
Block a user