diff options
Diffstat (limited to 'source/frontend')
-rw-r--r-- | source/frontend/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/frontend/StarBaseScriptPane.cpp | 65 | ||||
-rw-r--r-- | source/frontend/StarBaseScriptPane.hpp | 7 | ||||
-rw-r--r-- | source/frontend/StarContainerInterface.cpp | 2 | ||||
-rw-r--r-- | source/frontend/StarInterfaceLuaBindings.cpp | 12 | ||||
-rw-r--r-- | source/frontend/StarMainInterfaceTypes.cpp | 26 | ||||
-rw-r--r-- | source/frontend/StarMainInterfaceTypes.hpp | 2 | ||||
-rw-r--r-- | source/frontend/StarScriptPane.cpp | 19 | ||||
-rw-r--r-- | source/frontend/StarScriptPane.hpp | 3 | ||||
-rw-r--r-- | source/frontend/StarWidgetLuaBindings.cpp | 414 | ||||
-rw-r--r-- | source/frontend/StarWidgetLuaBindings.hpp | 26 |
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 |