Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/windowing/StarWidgetParsing.hpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/windowing/StarWidgetParsing.hpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/windowing/StarWidgetParsing.hpp')
-rw-r--r--source/windowing/StarWidgetParsing.hpp76
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