diff options
author | hop311 <hop3114@gmail.com> | 2024-03-03 14:40:20 +0100 |
---|---|---|
committer | hop311 <hop3114@gmail.com> | 2024-03-03 14:40:20 +0100 |
commit | 9ee1940ac3d15aa4c0a87b84d1c4ab8958184f63 (patch) | |
tree | 8c319b540020aaf382592c9b513a27e9fcaaa603 /extension/src/openvic-extension/classes/GUIListBox.hpp | |
parent | d45d6270c8924f571b53d71ac8eb9ce5a7788255 (diff) |
Add GUIListBox + GUIScrollbar tweaksgui-listbox
Diffstat (limited to 'extension/src/openvic-extension/classes/GUIListBox.hpp')
-rw-r--r-- | extension/src/openvic-extension/classes/GUIListBox.hpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/extension/src/openvic-extension/classes/GUIListBox.hpp b/extension/src/openvic-extension/classes/GUIListBox.hpp new file mode 100644 index 0000000..9d49840 --- /dev/null +++ b/extension/src/openvic-extension/classes/GUIListBox.hpp @@ -0,0 +1,58 @@ +#pragma once + +#include <godot_cpp/classes/container.hpp> + +#include <openvic-simulation/interface/GUI.hpp> + +#include "openvic-extension/classes/GUIScrollbar.hpp" + +namespace OpenVic { + class GUIListBox : public godot::Container { + GDCLASS(GUIListBox, godot::Container) + + GUI::ListBox const* PROPERTY(gui_listbox); + + GUIScrollbar* scrollbar; + + struct child_data_t { + Control* child; + real_t start_pos, height; + }; + + std::vector<child_data_t> children_data; + + /* The children_data index of the topmost visible child element. */ + int32_t PROPERTY(scroll_index); + int32_t PROPERTY(max_scroll_index); + + godot::Error _calculate_child_arrangement(); + godot::Error _update_child_positions(); + + protected: + static void _bind_methods(); + + void _notification(int what); + + public: + GUIListBox(); + + godot::Vector2 _get_minimum_size() const override; + void _gui_input(godot::Ref<godot::InputEvent> const& event) override; + + /* Reset gui_listbox to nullptr, and remove all child elements. */ + void clear(); + + /* Remove all child elements except for the scrollbar. */ + void clear_children(); + + void set_scroll_index(int32_t new_scroll_index); + + /* Set the GUI::ListBox. This does not affect any existing child elements. */ + godot::Error set_gui_listbox(GUI::ListBox const* new_gui_listbox); + + /* Return the name of the GUI::ListBox, or an empty String if it's null. */ + godot::String get_gui_listbox_name() const; + + GUIScrollbar* get_scrollbar() const; + }; +} |