/* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #pragma once #include "uilayer.h" #include "Classes.h" /* // helper, associated bool is set when the primary value was changed and expects processing at the observer's leisure template using changeable = std::pair; // helper, holds a set of changeable properties for a scene node struct item_properties { scene::basic_node const *node { nullptr }; // properties' owner changeable name {}; changeable location {}; changeable rotation {}; }; */ class itemproperties_panel : public ui_panel { public: itemproperties_panel(std::string const &Name, bool const Isopen) : ui_panel(Name, Isopen) {} void update(scene::basic_node const *Node); void render() override; private: // methods void update_group(); bool render_group(); // members scene::basic_node const *m_node{nullptr}; // scene node bound to the panel scene::group_handle m_grouphandle{null_handle}; // scene group bound to the panel std::string m_groupprefix; std::vector m_grouplines; }; class brush_object_list : public ui_panel { private: int idx; static bool VectorGetter(void *data, int idx, const char **out_text); std::string Template; public: brush_object_list(std::string const &Name, bool const Isopen); void render() override; void update(std::string nodeTemplate); // class use std::vector Objects; std::string *GetRandomObject(); bool useRandom = {false}; float spacing{1.0f}; }; class nodebank_panel : public ui_panel { public: enum edit_mode { MODIFY, COPY, ADD, BRUSH }; edit_mode mode = MODIFY; nodebank_panel(std::string const &Name, bool const Isopen); void nodebank_reload(); void render() override; void add_template(const std::string &desc); const std::string *get_active_template(); private: // methods: std::string generate_node_label(std::string Input) const; // members: std::vector>> m_nodebank; char m_nodesearch[128]; std::shared_ptr m_selectedtemplate; }; class functions_panel : public ui_panel { public: enum rotation_mode { RANDOM, FIXED, DEFAULT }; rotation_mode rot_mode = DEFAULT; float rot_value = 0.0f; bool rot_from_last = false; functions_panel(std::string const &Name, bool const Isopen) : ui_panel(Name, Isopen) {} void update(scene::basic_node const *Node); void render() override; private: // methods // members scene::basic_node const *m_node{nullptr}; // scene node bound to the panel scene::group_handle m_grouphandle{null_handle}; // scene group bound to the panel std::string m_groupprefix; std::vector m_grouplines; };