From e63fcd010fff0dd13e4103e08e299c60b12c0fbf Mon Sep 17 00:00:00 2001 From: Ted John Date: Wed, 6 May 2020 22:46:03 +0100 Subject: [PATCH] Add name get / set to widget --- src/openrct2-ui/scripting/CustomListView.h | 2 +- src/openrct2-ui/scripting/CustomWindow.cpp | 27 ++++++++++++++++++++++ src/openrct2-ui/scripting/CustomWindow.h | 2 ++ src/openrct2-ui/scripting/ScWidget.hpp | 20 ++++++++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/openrct2-ui/scripting/CustomListView.h b/src/openrct2-ui/scripting/CustomListView.h index 729d21a7ba..69af8b3eaa 100644 --- a/src/openrct2-ui/scripting/CustomListView.h +++ b/src/openrct2-ui/scripting/CustomListView.h @@ -101,7 +101,7 @@ namespace OpenRCT2::Ui::Windows std::optional HighlightedCell; std::optional LastHighlightedCell; std::optional SelectedCell; - std::optional ColumnHeaderPressed; + std::optional ColumnHeaderPressed; bool ColumnHeaderPressedCurrentState{}; bool ShowColumnHeaders{}; bool IsStriped{}; diff --git a/src/openrct2-ui/scripting/CustomWindow.cpp b/src/openrct2-ui/scripting/CustomWindow.cpp index 0b1fa7b928..4dab81905f 100644 --- a/src/openrct2-ui/scripting/CustomWindow.cpp +++ b/src/openrct2-ui/scripting/CustomWindow.cpp @@ -1102,6 +1102,33 @@ namespace OpenRCT2::Ui::Windows return std::nullopt; } + std::string GetWidgetName(rct_window* w, rct_widgetindex widgetIndex) + { + if (w->custom_info != nullptr) + { + const auto& customInfo = GetInfo(w); + auto customWidgetInfo = customInfo.GetCustomWidgetDesc(w, widgetIndex); + if (customWidgetInfo != nullptr) + { + return customWidgetInfo->Name; + } + } + return {}; + } + + void SetWidgetName(rct_window* w, rct_widgetindex widgetIndex, const std::string_view& name) + { + if (w->custom_info != nullptr) + { + auto& customInfo = GetInfo(w); + auto customWidgetInfo = customInfo.GetCustomWidgetDesc(w, widgetIndex); + if (customWidgetInfo != nullptr) + { + customWidgetInfo->Name = std::string(name); + } + } + } + CustomListView* GetCustomListView(rct_window* w, rct_widgetindex widgetIndex) { if (w->custom_info != nullptr) diff --git a/src/openrct2-ui/scripting/CustomWindow.h b/src/openrct2-ui/scripting/CustomWindow.h index 3a1bd2ceb4..a08a89984e 100644 --- a/src/openrct2-ui/scripting/CustomWindow.h +++ b/src/openrct2-ui/scripting/CustomWindow.h @@ -25,6 +25,8 @@ namespace OpenRCT2::Ui::Windows void UpdateWidgetText(rct_window* w, rct_widgetindex widget, const std::string_view& string_view); rct_window* FindCustomWindowByClassification(const std::string_view& classification); std::optional FindWidgetIndexByName(rct_window* w, const std::string_view& name); + std::string GetWidgetName(rct_window* w, rct_widgetindex widgetIndex); + void SetWidgetName(rct_window* w, rct_widgetindex widgetIndex, const std::string_view& name); CustomListView* GetCustomListView(rct_window* w, rct_widgetindex widgetIndex); } // namespace OpenRCT2::Ui::Windows diff --git a/src/openrct2-ui/scripting/ScWidget.hpp b/src/openrct2-ui/scripting/ScWidget.hpp index 85912da76b..b08a638352 100644 --- a/src/openrct2-ui/scripting/ScWidget.hpp +++ b/src/openrct2-ui/scripting/ScWidget.hpp @@ -43,6 +43,25 @@ namespace OpenRCT2::Scripting static DukValue ToDukValue(duk_context* ctx, rct_window* w, rct_widgetindex widgetIndex); private: + std::string name_get() const + { + auto w = GetWindow(); + if (w != nullptr && IsCustomWindow()) + { + return OpenRCT2::Ui::Windows::GetWidgetName(w, _widgetIndex); + } + return {}; + } + + void name_set(const std::string& value) + { + auto w = GetWindow(); + if (w != nullptr && IsCustomWindow()) + { + OpenRCT2::Ui::Windows::SetWidgetName(w, _widgetIndex, value); + } + } + std::string type_get() const { auto widget = GetWidget(); @@ -253,6 +272,7 @@ namespace OpenRCT2::Scripting static void Register(duk_context* ctx) { // Common + dukglue_register_property(ctx, &ScWidget::name_get, &ScWidget::name_set, "name"); dukglue_register_property(ctx, &ScWidget::type_get, nullptr, "type"); dukglue_register_property(ctx, &ScWidget::x_get, &ScWidget::x_set, "x"); dukglue_register_property(ctx, &ScWidget::y_get, &ScWidget::y_set, "y");