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

summaryrefslogtreecommitdiff
path: root/source/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'source/frontend')
-rw-r--r--source/frontend/CMakeLists.txt2
-rw-r--r--source/frontend/StarBaseScriptPane.cpp65
-rw-r--r--source/frontend/StarBaseScriptPane.hpp7
-rw-r--r--source/frontend/StarContainerInterface.cpp2
-rw-r--r--source/frontend/StarInterfaceLuaBindings.cpp12
-rw-r--r--source/frontend/StarMainInterfaceTypes.cpp26
-rw-r--r--source/frontend/StarMainInterfaceTypes.hpp2
-rw-r--r--source/frontend/StarScriptPane.cpp19
-rw-r--r--source/frontend/StarScriptPane.hpp3
-rw-r--r--source/frontend/StarWidgetLuaBindings.cpp414
-rw-r--r--source/frontend/StarWidgetLuaBindings.hpp26
11 files changed, 57 insertions, 521 deletions
diff --git a/source/frontend/CMakeLists.txt b/source/frontend/CMakeLists.txt
index 4772aa0..ea6edc6 100644
--- a/source/frontend/CMakeLists.txt
+++ b/source/frontend/CMakeLists.txt
@@ -55,7 +55,6 @@ SET (star_frontend_HEADERS
StarSongbookInterface.hpp
StarStatusPane.hpp
StarTeleportDialog.hpp
- StarWidgetLuaBindings.hpp
StarWireInterface.hpp
)
@@ -104,7 +103,6 @@ SET (star_frontend_SOURCES
StarSongbookInterface.cpp
StarStatusPane.cpp
StarTeleportDialog.cpp
- StarWidgetLuaBindings.cpp
StarWireInterface.cpp
)
diff --git a/source/frontend/StarBaseScriptPane.cpp b/source/frontend/StarBaseScriptPane.cpp
index a174622..0254e46 100644
--- a/source/frontend/StarBaseScriptPane.cpp
+++ b/source/frontend/StarBaseScriptPane.cpp
@@ -24,15 +24,17 @@ BaseScriptPane::BaseScriptPane(Json config) : Pane() {
} else {
m_config = assets->fetchJson(config);
}
- m_reader.registerCallback("close", [this](Widget*) { dismiss(); });
+
+ m_reader = make_shared<GuiReader>();
+ m_reader->registerCallback("close", [this](Widget*) { dismiss(); });
for (auto const& callbackName : jsonToStringList(m_config.get("scriptWidgetCallbacks", JsonArray{}))) {
- m_reader.registerCallback(callbackName, [this, callbackName](Widget* widget) {
+ m_reader->registerCallback(callbackName, [this, callbackName](Widget* widget) {
m_script.invoke(callbackName, widget->name(), widget->data());
});
}
- m_reader.construct(assets->fetchJson(m_config.get("gui")), this);
+ m_reader->construct(assets->fetchJson(m_config.get("gui")), this);
for (auto pair : m_config.getObject("canvasClickCallbacks", {}))
m_canvasClickCallbacks.set(findChild<CanvasWidget>(pair.first), pair.second.toString());
@@ -53,7 +55,7 @@ void BaseScriptPane::displayed() {
Pane::displayed();
if (!m_callbacksAdded) {
m_script.addCallbacks("pane", makePaneCallbacks());
- m_script.addCallbacks("widget", LuaBindings::makeWidgetCallbacks(this, &m_reader));
+ m_script.addCallbacks("widget", LuaBindings::makeWidgetCallbacks(this, m_reader));
m_script.addCallbacks("config", LuaBindings::makeConfigCallbacks( [this](String const& name, Json const& def) {
return m_config.query(name, def);
}));
@@ -81,10 +83,6 @@ void BaseScriptPane::tick() {
m_script.invoke(p.second, (int)keyEvent.key, keyEvent.keyDown);
}
- m_playingSounds.filter([](pair<String, AudioInstancePtr> const& p) {
- return p.second->finished() == false;
- });
-
m_script.update(m_script.updateDt());
}
@@ -106,7 +104,7 @@ PanePtr BaseScriptPane::createTooltip(Vec2I const& screenPosition) {
return SimpleTooltipBuilder::buildTooltip(result->toString());
} else {
PanePtr tooltip = make_shared<Pane>();
- m_reader.construct(*result, tooltip.get());
+ m_reader->construct(*result, tooltip.get());
return tooltip;
}
} else {
@@ -131,53 +129,8 @@ Maybe<String> BaseScriptPane::cursorOverride(Vec2I const& screenPosition) {
return {};
}
-LuaCallbacks BaseScriptPane::makePaneCallbacks() {
- LuaCallbacks callbacks;
-
- callbacks.registerCallback("dismiss", [this]() { dismiss(); });
-
- callbacks.registerCallback("playSound",
- [this](String const& audio, Maybe<int> loops, Maybe<float> volume) {
- auto assets = Root::singleton().assets();
- auto config = Root::singleton().configuration();
- auto audioInstance = make_shared<AudioInstance>(*assets->audio(audio));
- audioInstance->setVolume(volume.value(1.0));
- audioInstance->setLoops(loops.value(0));
- auto& guiContext = GuiContext::singleton();
- guiContext.playAudio(audioInstance);
- m_playingSounds.append({audio, move(audioInstance)});
- });
-
- callbacks.registerCallback("stopAllSounds", [this](String const& audio) {
- m_playingSounds.filter([audio](pair<String, AudioInstancePtr> const& p) {
- if (p.first == audio) {
- p.second->stop();
- return false;
- }
- return true;
- });
- });
-
- callbacks.registerCallback("setTitle", [this](String const& title, String const& subTitle) {
- setTitleString(title, subTitle);
- });
-
- callbacks.registerCallback("setTitleIcon", [this](String const& image) {
- if (auto icon = as<ImageWidget>(titleIcon()))
- icon->setImage(image);
- });
-
- callbacks.registerCallback("addWidget", [this](Json const& newWidgetConfig, Maybe<String> const& newWidgetName) {
- String name = newWidgetName.value(strf("{}", Random::randu64()));
- WidgetPtr newWidget = m_reader.makeSingle(name, newWidgetConfig);
- this->addChild(name, newWidget);
- });
-
- callbacks.registerCallback("removeWidget", [this](String const& widgetName) {
- this->removeChild(widgetName);
- });
-
- return callbacks;
+GuiReaderPtr BaseScriptPane::reader() {
+ return m_reader;
}
}
diff --git a/source/frontend/StarBaseScriptPane.hpp b/source/frontend/StarBaseScriptPane.hpp
index f88cd40..b5aa502 100644
--- a/source/frontend/StarBaseScriptPane.hpp
+++ b/source/frontend/StarBaseScriptPane.hpp
@@ -12,6 +12,8 @@ STAR_CLASS(BaseScriptPane);
// A more 'raw' script pane that doesn't depend on a world being present.
// Requires a derived class to provide a Lua root.
+// Should maybe move into windowing?
+
class BaseScriptPane : public Pane {
public:
BaseScriptPane(Json config);
@@ -27,17 +29,16 @@ public:
PanePtr createTooltip(Vec2I const& screenPosition) override;
Maybe<String> cursorOverride(Vec2I const& screenPosition) override;
protected:
- virtual LuaCallbacks makePaneCallbacks();
+ virtual GuiReaderPtr reader();
Json m_config;
- GuiReader m_reader;
+ GuiReaderPtr m_reader;
Map<CanvasWidgetPtr, String> m_canvasClickCallbacks;
Map<CanvasWidgetPtr, String> m_canvasKeyCallbacks;
bool m_callbacksAdded;
LuaUpdatableComponent<LuaBaseComponent> m_script;
- List<pair<String, AudioInstancePtr>> m_playingSounds;
};
}
diff --git a/source/frontend/StarContainerInterface.cpp b/source/frontend/StarContainerInterface.cpp
index 9f80a94..10da82f 100644
--- a/source/frontend/StarContainerInterface.cpp
+++ b/source/frontend/StarContainerInterface.cpp
@@ -34,7 +34,7 @@ ContainerPane::ContainerPane(WorldClientPtr worldClient, PlayerPtr player, Conta
m_script.emplace();
m_script->setScripts(*scripts);
}
- m_script->addCallbacks("widget", LuaBindings::makeWidgetCallbacks(this, &m_reader));
+ m_script->addCallbacks("widget", LuaBindings::makeWidgetCallbacks(this));
m_script->addCallbacks("config", LuaBindings::makeConfigCallbacks( [guiConfig](String const& name, Json const& def) {
return guiConfig.query(name, def);
}));
diff --git a/source/frontend/StarInterfaceLuaBindings.cpp b/source/frontend/StarInterfaceLuaBindings.cpp
index a9257aa..65bcd68 100644
--- a/source/frontend/StarInterfaceLuaBindings.cpp
+++ b/source/frontend/StarInterfaceLuaBindings.cpp
@@ -3,6 +3,7 @@
#include "StarJsonExtra.hpp"
#include "StarLuaGameConverters.hpp"
#include "StarMainInterface.hpp"
+#include "StarGuiContext.hpp"
namespace Star {
@@ -15,6 +16,17 @@ LuaCallbacks LuaBindings::makeInterfaceCallbacks(MainInterface* mainInterface) {
return {};
});
+
+ callbacks.registerCallback("bindRegisteredPane", [mainInterface](String const& registeredPaneName) -> Maybe<LuaCallbacks> {
+ if (auto pane = mainInterface->paneManager()->maybeRegisteredPane(MainInterfacePanesNames.getLeft(registeredPaneName)))
+ return pane->makePaneCallbacks();
+ return {};
+ });
+
+ callbacks.registerCallback("scale", [mainInterface]() -> int {
+ return GuiContext::singleton().interfaceScale();
+ });
+
return callbacks;
}
diff --git a/source/frontend/StarMainInterfaceTypes.cpp b/source/frontend/StarMainInterfaceTypes.cpp
index 0731574..1d67292 100644
--- a/source/frontend/StarMainInterfaceTypes.cpp
+++ b/source/frontend/StarMainInterfaceTypes.cpp
@@ -6,6 +6,32 @@
namespace Star {
+EnumMap<MainInterfacePanes> const MainInterfacePanesNames{
+ {MainInterfacePanes::EscapeDialog, "EscapeDialog"},
+ {MainInterfacePanes::Inventory, "Inventory"},
+ {MainInterfacePanes::Codex, "Codex"},
+ {MainInterfacePanes::Cockpit, "Cockpit"},
+ {MainInterfacePanes::Tech, "Tech"},
+ {MainInterfacePanes::Songbook, "Songbook"},
+ {MainInterfacePanes::Ai, "Ai"},
+ {MainInterfacePanes::Popup, "Popup"},
+ {MainInterfacePanes::Confirmation, "Confirmation"},
+ {MainInterfacePanes::JoinRequest, "JoinRequest"},
+ {MainInterfacePanes::Options, "Options"},
+ {MainInterfacePanes::QuestLog, "QuestLog"},
+ {MainInterfacePanes::ActionBar, "ActionBar"},
+ {MainInterfacePanes::TeamBar, "TeamBar"},
+ {MainInterfacePanes::StatusPane, "StatusPane"},
+ {MainInterfacePanes::Chat, "Chat"},
+ {MainInterfacePanes::WireInterface, "WireInterface"},
+ {MainInterfacePanes::PlanetText, "PlanetText"},
+ {MainInterfacePanes::RadioMessagePopup, "RadioMessagePopup"},
+ {MainInterfacePanes::CraftingPlain, "CraftingPlain"},
+ {MainInterfacePanes::QuestTracker, "QuestTracker"},
+ {MainInterfacePanes::MmUpgrade, "MmUpgrade"},
+ {MainInterfacePanes::Collections, "Collections"}
+};
+
MainInterfaceConfigPtr MainInterfaceConfig::loadFromAssets() {
auto& root = Root::singleton();
auto assets = root.assets();
diff --git a/source/frontend/StarMainInterfaceTypes.hpp b/source/frontend/StarMainInterfaceTypes.hpp
index e09892c..70fdee1 100644
--- a/source/frontend/StarMainInterfaceTypes.hpp
+++ b/source/frontend/StarMainInterfaceTypes.hpp
@@ -37,6 +37,8 @@ enum class MainInterfacePanes {
Collections
};
+extern EnumMap<MainInterfacePanes> const MainInterfacePanesNames;
+
typedef RegisteredPaneManager<MainInterfacePanes> MainInterfacePaneManager;
struct MainInterfaceConfig {
diff --git a/source/frontend/StarScriptPane.cpp b/source/frontend/StarScriptPane.cpp
index b09211d..3de3c26 100644
--- a/source/frontend/StarScriptPane.cpp
+++ b/source/frontend/StarScriptPane.cpp
@@ -48,25 +48,10 @@ void ScriptPane::dismissed() {
}
void ScriptPane::tick() {
- BaseScriptPane::tick();
-
if (m_sourceEntityId != NullEntityId && !m_client->worldClient()->playerCanReachEntity(m_sourceEntityId))
dismiss();
- for (auto p : m_canvasClickCallbacks) {
- for (auto const& clickEvent : p.first->pullClickEvents())
- m_script.invoke(p.second, jsonFromVec2I(clickEvent.position), (uint8_t)clickEvent.button, clickEvent.buttonDown);
- }
- for (auto p : m_canvasKeyCallbacks) {
- for (auto const& keyEvent : p.first->pullKeyEvents())
- m_script.invoke(p.second, (int)keyEvent.key, keyEvent.keyDown);
- }
-
- m_playingSounds.filter([](pair<String, AudioInstancePtr> const& p) {
- return p.second->finished() == false;
- });
-
- m_script.update(m_script.updateDt());
+ BaseScriptPane::tick();
}
PanePtr ScriptPane::createTooltip(Vec2I const& screenPosition) {
@@ -76,7 +61,7 @@ PanePtr ScriptPane::createTooltip(Vec2I const& screenPosition) {
return SimpleTooltipBuilder::buildTooltip(result->toString());
} else {
PanePtr tooltip = make_shared<Pane>();
- m_reader.construct(*result, tooltip.get());
+ m_reader->construct(*result, tooltip.get());
return tooltip;
}
} else {
diff --git a/source/frontend/StarScriptPane.hpp b/source/frontend/StarScriptPane.hpp
index d994b68..229ebbb 100644
--- a/source/frontend/StarScriptPane.hpp
+++ b/source/frontend/StarScriptPane.hpp
@@ -22,9 +22,8 @@ public:
bool openWithInventory() const;
-private:
LuaCallbacks makePaneCallbacks() override;
-
+private:
UniverseClientPtr m_client;
EntityId m_sourceEntityId;
};
diff --git a/source/frontend/StarWidgetLuaBindings.cpp b/source/frontend/StarWidgetLuaBindings.cpp
deleted file mode 100644
index fb84ff8..0000000
--- a/source/frontend/StarWidgetLuaBindings.cpp
+++ /dev/null
@@ -1,414 +0,0 @@
-#include "StarWidgetLuaBindings.hpp"
-#include "StarJsonExtra.hpp"
-#include "StarLuaGameConverters.hpp"
-#include "StarGuiReader.hpp"
-#include "StarCanvasWidget.hpp"
-#include "StarLabelWidget.hpp"
-#include "StarListWidget.hpp"
-#include "StarButtonWidget.hpp"
-#include "StarButtonGroup.hpp"
-#include "StarTextBoxWidget.hpp"
-#include "StarProgressWidget.hpp"
-#include "StarSliderBar.hpp"
-#include "StarItemGridWidget.hpp"
-#include "StarItemSlotWidget.hpp"
-#include "StarItemDatabase.hpp"
-#include "StarFlowLayout.hpp"
-
-namespace Star {
-
-LuaMethods<CanvasWidgetPtr> LuaUserDataMethods<CanvasWidgetPtr>::make() {
- LuaMethods<CanvasWidgetPtr> methods;
-
- methods.registerMethodWithSignature<Vec2I, CanvasWidgetPtr>("size", mem_fn(&CanvasWidget::size));
- methods.registerMethodWithSignature<Vec2I, CanvasWidgetPtr>("mousePosition", mem_fn(&CanvasWidget::mousePosition));
-
- methods.registerMethodWithSignature<void, CanvasWidgetPtr>("clear", mem_fn(&CanvasWidget::clear));
-
- methods.registerMethod("drawDrawable", [](CanvasWidgetPtr canvasWidget, Drawable drawable) {
- canvasWidget->drawDrawable(move(drawable), Vec2F());
- });
-
- methods.registerMethod("drawDrawables", [](CanvasWidgetPtr canvasWidget, List<Drawable> drawables) {
- for (auto& drawable : drawables)
- canvasWidget->drawDrawable(move(drawable), Vec2F());
- });
-
- methods.registerMethod("drawImage",
- [](CanvasWidgetPtr canvasWidget, String image, Vec2F position, Maybe<float> scale, Maybe<Color> color, Maybe<bool> centered) {
- if (centered && *centered)
- canvasWidget->drawImageCentered(image, position, scale.value(1.0f), color.value(Color::White).toRgba());
- else
- canvasWidget->drawImage(image, position, scale.value(1.0f), color.value(Color::White).toRgba());
- });
- methods.registerMethod("drawImageDrawable",
- [](CanvasWidgetPtr canvasWidget, String image, Vec2F position, MVariant<Vec2F, float> scale, Maybe<Color> color, Maybe<float> rotation) {
- auto drawable = Drawable::makeImage(image, 1.0, true, {0.0, 0.0}, color.value(Color::White));
- if (auto s = scale.maybe<Vec2F>())
- drawable.transform(Mat3F::scaling(*s));
- else if(auto s = scale.maybe<float>())
- drawable.transform(Mat3F::scaling(*s));
- if (rotation)
- drawable.rotate(*rotation);
- canvasWidget->drawDrawable(drawable, position);
- });
- methods.registerMethod("drawImageRect",
- [](CanvasWidgetPtr canvasWidget, String image, RectF texCoords, RectF screenCoords, Maybe<Color> color) {
- canvasWidget->drawImageRect(image, texCoords, screenCoords, color.value(Color::White).toRgba());
- });
- methods.registerMethod("drawTiledImage",
- [](CanvasWidgetPtr canvasWidget, String image, Vec2D offset, RectF screenCoords, Maybe<float> scale, Maybe<Color> color) {
- canvasWidget->drawTiledImage(image, scale.value(1.0f), offset, screenCoords, color.value(Color::White).toRgba());
- });
- methods.registerMethod("drawLine",
- [](CanvasWidgetPtr canvasWidget, Vec2F begin, Vec2F end, Maybe<Color> color, Maybe<float> lineWidth) {
- canvasWidget->drawLine(begin, end, color.value(Color::White).toRgba(), lineWidth.value(1.0f));
- });
- methods.registerMethod("drawRect",
- [](CanvasWidgetPtr canvasWidget, RectF rect, Maybe<Color> color) {
- canvasWidget->drawRect(rect, color.value(Color::White).toRgba());
- });
- methods.registerMethod("drawPoly",
- [](CanvasWidgetPtr canvasWidget, PolyF poly, Maybe<Color> color, Maybe<float> lineWidth) {
- canvasWidget->drawPoly(poly, color.value(Color::White).toRgba(), lineWidth.value(1.0f));
- });
- methods.registerMethod("drawTriangles",
- [](CanvasWidgetPtr canvasWidget, List<PolyF> triangles, Maybe<Color> color) {
- auto tris = triangles.transformed([](PolyF const& poly) {
- if (poly.sides() != 3)
- throw StarException("Triangle must have exactly 3 sides");
- return tuple<Vec2F, Vec2F, Vec2F>(poly.vertex(0), poly.vertex(1), poly.vertex(2));
- });
- canvasWidget->drawTriangles(tris, color.value(Color::White).toRgba());
- });
- methods.registerMethod("drawText",
- [](CanvasWidgetPtr canvasWidget, String text, Json tp, unsigned fontSize, Maybe<Color> color, Maybe<float> lineSpacing, Maybe<String> font, Maybe<String> directives) {
- canvasWidget->drawText(text, TextPositioning(tp), fontSize, color.value(Color::White).toRgba(), FontMode::Normal, lineSpacing.value(DefaultLineSpacing), font.value(""), directives.value(""));
- });
-
- return methods;
-}
-
-LuaCallbacks LuaBindings::makeWidgetCallbacks(Widget* parentWidget, GuiReader* reader) {
- LuaCallbacks callbacks;
-
- // a bit miscellaneous, but put this here since widgets have access to gui context
-
- callbacks.registerCallback("playSound",
- [parentWidget](String const& audio, Maybe<int> loops, Maybe<float> volume) {
- parentWidget->context()->playAudio(audio, loops.value(0), volume.value(1.0f));
- });
-
- // widget userdata methods
-
- callbacks.registerCallback("bindCanvas", [parentWidget](String const& widgetName) -> Maybe<CanvasWidgetPtr> {
- if (auto canvas = parentWidget->fetchChild<CanvasWidget>(widgetName))
- return canvas;
- return {};
- });
-
- // generic widget callbacks
-
- callbacks.registerCallback("getPosition", [parentWidget](String const& widgetName) -> Maybe<Vec2I> {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- return widget->relativePosition();
- return {};
- });
- callbacks.registerCallback("setPosition", [parentWidget](String const& widgetName, Vec2I const& position) {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- widget->setPosition(position);
- });
-
- callbacks.registerCallback("getSize", [parentWidget](String const& widgetName) -> Maybe<Vec2I> {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- return widget->size();
- return {};
- });
- callbacks.registerCallback("setSize", [parentWidget](String const& widgetName, Vec2I const& size) {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- widget->setSize(size);
- });
-
- callbacks.registerCallback("setVisible", [parentWidget](String const& widgetName, bool visible) {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- widget->setVisibility(visible);
- });
-
- callbacks.registerCallback("active", [parentWidget](String const& widgetName) -> Maybe<bool> {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- return widget->active();
- return {};
- });
-
- callbacks.registerCallback("focus", [parentWidget](String const& widgetName) {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- widget->focus();
- });
-
- callbacks.registerCallback("hasFocus", [parentWidget](String const& widgetName) -> Maybe<bool> {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- return widget->hasFocus();
- return {};
- });
-
- callbacks.registerCallback("blur", [parentWidget](String const& widgetName) {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- widget->blur();
- });
-
- callbacks.registerCallback("getData", [parentWidget](String const& widgetName) {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- return widget->data();
- return Json();
- });
-
- callbacks.registerCallback("setData", [parentWidget](String const& widgetName, Json const& data) {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- widget->setData(data);
- });
-
- callbacks.registerCallback("getChildAt", [parentWidget](Vec2I const& screenPosition) -> Maybe<String> {
- if (auto widget = parentWidget->getChildAt(screenPosition))
- return widget->fullName();
- else
- return{};
- });
-
- callbacks.registerCallback("inMember", [parentWidget](String const& widgetName, Vec2I const& screenPosition) -> Maybe<bool> {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- return widget->inMember(screenPosition);
- else
- return {};
- });
-
- callbacks.registerCallback("addChild", [parentWidget, reader](String const& widgetName, Json const& newChildConfig, Maybe<String> const& newChildName) {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName)) {
- String name = newChildName.value(strf("{}", Random::randu64()));
- WidgetPtr newChild = reader->makeSingle(name, newChildConfig);
- widget->addChild(name, newChild);
- }
- });
-
- callbacks.registerCallback("removeAllChildren", [parentWidget](String const& widgetName) {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- widget->removeAllChildren();
- });
-
- callbacks.registerCallback("removeChild", [parentWidget](String const& widgetName, String const& childName) {
- if (auto widget = parentWidget->fetchChild<Widget>(widgetName))
- widget->removeChild(childName);
- });
-
- // callbacks only valid for specific widget types
-
- callbacks.registerCallback("getText", [parentWidget](String const& widgetName) -> Maybe<String> {
- if (auto textBox = parentWidget->fetchChild<TextBoxWidget>(widgetName))
- return textBox->getText();
- return {};
- });
-
- callbacks.registerCallback("setText", [parentWidget](String const& widgetName, String const& text) {
- if (auto label = parentWidget->fetchChild<LabelWidget>(widgetName))
- label->setText(text);
- else if (auto button = parentWidget->fetchChild<ButtonWidget>(widgetName))
- button->setText(text);
- else if (auto textBox = parentWidget->fetchChild<TextBoxWidget>(widgetName))
- textBox->setText(text);
- });
-
- callbacks.registerCallback("setFontColor", [parentWidget](String const& widgetName, Color const& color) {
- if (auto label = parentWidget->fetchChild<LabelWidget>(widgetName))
- label->setColor(color);
- else if (auto button = parentWidget->fetchChild<ButtonWidget>(widgetName))
- button->setFontColor(color);
- else if (auto textBox = parentWidget->fetchChild<TextBoxWidget>(widgetName))
- textBox->setColor(color);
- });
-
- callbacks.registerCallback("setImage", [parentWidget](String const& widgetName, String const& imagePath) {
- if (auto image = parentWidget->fetchChild<ImageWidget>(widgetName))
- image->setImage(imagePath);
- });
-
- callbacks.registerCallback("setImageScale", [parentWidget](String const& widgetName, float const& imageScale) {
- if (auto image = parentWidget->fetchChild<ImageWidget>(widgetName))
- image->setScale(imageScale);
- });
-
- callbacks.registerCallback("setImageRotation", [parentWidget](String const& widgetName, float const& imageRotation) {
- if (auto image = parentWidget->fetchChild<ImageWidget>(widgetName))
- image->setRotation(imageRotation);
- });
-
- callbacks.registerCallback("setButtonEnabled", [parentWidget](String const& widgetName, bool enabled) {
- if (auto button = parentWidget->fetchChild<ButtonWidget>(widgetName))
- button->setEnabled(enabled);
- });
-
- callbacks.registerCallback("setButtonImage", [parentWidget](String const& widgetName, String const& baseImage) {
- if (auto button = parentWidget->fetchChild<ButtonWidget>(widgetName))
- button->setImages(baseImage);
- });
-
- callbacks.registerCallback("setButtonImages", [parentWidget](String const& widgetName, Json const& imageSet) {
- if (auto button = parentWidget->fetchChild<ButtonWidget>(widgetName))
- button->setImages(imageSet.getString("base"), imageSet.getString("hover", ""), imageSet.getString("pressed", ""), imageSet.getString("disabled", ""));
- });
-
- callbacks.registerCallback("setButtonCheckedImages", [parentWidget](String const& widgetName, Json const& imageSet) {
- if (auto button = parentWidget->fetchChild<ButtonWidget>(widgetName))
- button->setCheckedImages(imageSet.getString("base"), imageSet.getString("hover", ""), imageSet.getString("pressed", ""), imageSet.getString("disabled", ""));
- });
-
- callbacks.registerCallback("setButtonOverlayImage", [parentWidget](String const& widgetName, String const& overlayImage) {
- if (auto button = parentWidget->fetchChild<ButtonWidget>(widgetName))
- button->setOverlayImage(overlayImage);
- });
-
- callbacks.registerCallback("getChecked", [parentWidget](String const& widgetName) -> Maybe<bool> {
- if (auto button = parentWidget->fetchChild<ButtonWidget>(widgetName))
- return button->isChecked();
- return {};
- });
-
- callbacks.registerCallback("setChecked", [parentWidget](String const& widgetName, bool checked) {
- if (auto button = parentWidget->fetchChild<ButtonWidget>(widgetName))
- button->setChecked(checked);
- });
-
- callbacks.registerCallback("getSelectedOption", [parentWidget](String const& widgetName) -> Maybe<int> {
- if (auto buttonGroup = parentWidget->fetchChild<ButtonGroupWidget>(widgetName))
- return buttonGroup->checkedId();
- return {};
- });
-
- callbacks.registerCallback("getSelectedData", [parentWidget](String const& widgetName) -> Json {
- if (auto buttonGroup = parentWidget->fetchChild<ButtonGroupWidget>(widgetName)) {
- if (auto button = buttonGroup->checkedButton())
- return button->data();
- }
- return {};
- });
-
- callbacks.registerCallback("setSelectedOption", [parentWidget](String const& widgetName, Maybe<int> index) {
- if (auto buttonGroup = parentWidget->fetchChild<ButtonGroupWidget>(widgetName))
- buttonGroup->select(index.value(ButtonGroup::NoButton));
- });
-
- callbacks.registerCallback("setOptionEnabled", [parentWidget](String const& widgetName, int index, bool enabled) {
- if (auto buttonGroup = parentWidget->fetchChild<ButtonGroupWidget>(widgetName)) {
- if (auto button = buttonGroup->button(index))
- button->setEnabled(enabled);
- }
- });
-
- callbacks.registerCallback("setOptionVisible", [parentWidget](String const& widgetName, int index, bool visible) {
- if (auto buttonGroup = parentWidget->fetchChild<ButtonGroupWidget>(widgetName)) {
- if (auto button = buttonGroup->button(index))
- button->setVisibility(visible);
- }
- });
-
- callbacks.registerCallback("setProgress", [parentWidget](String const& widgetName, float const& value) {
- if (auto progress = parentWidget->fetchChild<ProgressWidget>(widgetName))
- progress->setCurrentProgressLevel(value);
- });
-
- callbacks.registerCallback("setSliderEnabled", [parentWidget](String const& widgetName, bool enabled) {
- if (auto slider = parentWidget->fetchChild<SliderBarWidget>(widgetName))
- slider->setEnabled(enabled);
- });
-
- callbacks.registerCallback("getSliderValue", [parentWidget](String const& widgetName) -> Maybe<int> {
- if (auto slider = parentWidget->fetchChild<SliderBarWidget>(widgetName))
- return slider->val();
- return {};
- });
-
- callbacks.registerCallback("setSliderValue", [parentWidget](String const& widgetName, int newValue) {
- if (auto slider = parentWidget->fetchChild<SliderBarWidget>(widgetName))
- return slider->setVal(newValue);
- });
-
- callbacks.registerCallback("setSliderRange", [parentWidget](String const& widgetName, int newMin, int newMax, Maybe<int> newDelta) {
- if (auto slider = parentWidget->fetchChild<SliderBarWidget>(widgetName))
- return slider->setRange(newMin, newMax, newDelta.value(1));
- });
-
- callbacks.registerCallback("clearListItems", [parentWidget](String const& widgetName) {
- if (auto list = parentWidget->fetchChild<ListWidget>(widgetName))
- list->clear();
- });
-
- callbacks.registerCallback("addListItem", [parentWidget](String const& widgetName) -> Maybe<String> {
- if (auto list = parentWidget->fetchChild<ListWidget>(widgetName)) {
- auto newItem = list->addItem();
- return newItem->name();
- }
- return {};
- });
-
- callbacks.registerCallback("removeListItem", [parentWidget](String const& widgetName, size_t at) {
- if (auto list = parentWidget->fetchChild<ListWidget>(widgetName))
- list->removeItem(at);
- });
-
- callbacks.registerCallback("getListSelected", [parentWidget](String const& widgetName) -> Maybe<String> {
- if (auto list = parentWidget->fetchChild<ListWidget>(widgetName))
- if (list->selectedItem() != NPos)
- return list->selectedWidget()->name();
- return {};
- });
-
- callbacks.registerCallback("setListSelected", [parentWidget](String const& widgetName, String const& selectedName) {
- if (auto list = parentWidget->fetchChild<ListWidget>(widgetName))
- if (auto selected = list->fetchChild(selectedName))
- list->setSelectedWidget(selected);
- });
-
- callbacks.registerCallback("registerMemberCallback", [parentWidget](String const& widgetName, String const& name, LuaFunction callback) {
- if (auto list = parentWidget->fetchChild<ListWidget>(widgetName)){
- list->registerMemberCallback(name, [callback](Widget* widget) {
- callback.invoke(widget->name(), widget->data());
- });
- }
- });
-
- callbacks.registerCallback("itemGridItems", [parentWidget](String const& widgetName) {
- if (auto itemGrid = parentWidget->fetchChild<ItemGridWidget>(widgetName))
- return itemGrid->bag()->toJson();
- return Json();
- });
-
- callbacks.registerCallback("itemSlotItem", [parentWidget](String const& widgetName) -> Maybe<Json> {
- if (auto itemSlot = parentWidget->fetchChild<ItemSlotWidget>(widgetName)) {
- if (itemSlot->item())
- return itemSlot->item()->descriptor().toJson();
- }
- return {};
- });
-
- callbacks.registerCallback("setItemSlotItem", [parentWidget](String const& widgetName, Json const& item) {
- if (auto itemSlot = parentWidget->fetchChild<ItemSlotWidget>(widgetName)) {
- auto itemDb = Root::singleton().itemDatabase();
- itemSlot->setItem(itemDb->fromJson(item));
- }
- });
-
- callbacks.registerCallback("setItemSlotProgress", [parentWidget](String const& widgetName, float progress) {
- if (auto itemSlot = parentWidget->fetchChild<ItemSlotWidget>(widgetName)) {
- itemSlot->setProgress(progress);
- }
- });
-
- callbacks.registerCallback("addFlowImage", [parentWidget](String const& widgetName, String const& childName, String const& image) {
- if (auto flow = parentWidget->fetchChild<FlowLayout>(widgetName)) {
- WidgetPtr newChild = make_shared<ImageWidget>(image);
- flow->addChild(childName, newChild);
- }
- });
-
- return callbacks;
-}
-
-}
diff --git a/source/frontend/StarWidgetLuaBindings.hpp b/source/frontend/StarWidgetLuaBindings.hpp
deleted file mode 100644
index 48d6ab2..0000000
--- a/source/frontend/StarWidgetLuaBindings.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef STAR_WIDGET_LUA_BINDINGS_HPP
-#define STAR_WIDGET_LUA_BINDINGS_HPP
-
-#include "StarLua.hpp"
-#include "StarGuiReader.hpp"
-
-namespace Star {
-
-STAR_CLASS(Widget);
-STAR_CLASS(CanvasWidget);
-
-template <>
-struct LuaConverter<CanvasWidgetPtr> : LuaUserDataConverter<CanvasWidgetPtr> {};
-
-template <>
-struct LuaUserDataMethods<CanvasWidgetPtr> {
- static LuaMethods<CanvasWidgetPtr> make();
-};
-
-namespace LuaBindings {
- LuaCallbacks makeWidgetCallbacks(Widget* parentWidget, GuiReader* reader);
-}
-
-}
-
-#endif