diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/windowing/StarWidgetParsing.hpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/windowing/StarWidgetParsing.hpp')
-rw-r--r-- | source/windowing/StarWidgetParsing.hpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/source/windowing/StarWidgetParsing.hpp b/source/windowing/StarWidgetParsing.hpp new file mode 100644 index 0000000..6065ef7 --- /dev/null +++ b/source/windowing/StarWidgetParsing.hpp @@ -0,0 +1,76 @@ +#ifndef STAR_PANE_OBJECT_PARSING_HPP +#define STAR_PANE_OBJECT_PARSING_HPP + +#include "StarWidget.hpp" + +namespace Star { + +STAR_CLASS(Widget); +STAR_CLASS(Pane); + +STAR_EXCEPTION(WidgetParserException, StarException); + +struct WidgetConstructResult { + WidgetConstructResult(); + WidgetConstructResult(WidgetPtr obj, String const& name, float zlevel); + + WidgetPtr obj; + String name; + float zlevel; +}; + +typedef std::function<WidgetConstructResult(String const& name, Json const& config)> ConstuctorFunc; + +class WidgetParser { +public: + WidgetParser(); + virtual ~WidgetParser() {} + + virtual void construct(Json const& config, Widget* widget = nullptr); + void registerCallback(String const& name, WidgetCallbackFunc callback); + WidgetPtr makeSingle(String const& name, Json const& config); + +protected: + void constructImpl(Json const& config, Widget* widget); + List<WidgetConstructResult> constructor(Json const& config); + + // Parents + WidgetConstructResult stackHandler(String const& name, Json const& config); + WidgetConstructResult scrollAreaHandler(String const& name, Json const& config); + + // Interactive + WidgetConstructResult radioGroupHandler(String const& name, Json const& config); + WidgetConstructResult buttonHandler(String const& name, Json const& config); + WidgetConstructResult spinnerHandler(String const& name, Json const& config); + WidgetConstructResult textboxHandler(String const& name, Json const& config); + WidgetConstructResult itemSlotHandler(String const& name, Json const& config); + WidgetConstructResult itemGridHandler(String const& name, Json const& config); + WidgetConstructResult listHandler(String const& name, Json const& config); + WidgetConstructResult sliderHandler(String const& name, Json const& config); + WidgetConstructResult largeCharPlateHandler(String const& name, Json const& config); + WidgetConstructResult tabSetHandler(String const& name, Json const& config); + + // Non-interactive + WidgetConstructResult widgetHandler(String const& name, Json const& config); + WidgetConstructResult imageHandler(String const& name, Json const& config); + WidgetConstructResult imageStretchHandler(String const& name, Json const& config); + WidgetConstructResult portraitHandler(String const& name, Json const& config); + WidgetConstructResult labelHandler(String const& name, Json const& config); + WidgetConstructResult canvasHandler(String const& name, Json const& config); + WidgetConstructResult fuelGaugeHandler(String const& name, Json const& config); + WidgetConstructResult progressHandler(String const& name, Json const& config); + WidgetConstructResult containerHandler(String const& name, Json const& config); + WidgetConstructResult layoutHandler(String const& name, Json const& config); + + // Utilities + void common(WidgetPtr widget, Json const& config); + ImageStretchSet parseImageStretchSet(Json const& config); + + Pane* m_pane; + StringMap<ConstuctorFunc> m_constructors; + StringMap<WidgetCallbackFunc> m_callbacks; +}; + +} + +#endif |