#ifndef EDITOR_PROPERTIES_H #define EDITOR_PROPERTIES_H #include "editor/create_dialog.h" #include "editor/editor_file_system.h" #include "editor/editor_inspector.h" #include "editor/editor_spin_slider.h" #include "editor/property_selector.h" #include "editor/scene_tree_editor.h" #include "scene/gui/color_picker.h" class EditorPropertyText : public EditorProperty { GDCLASS(EditorPropertyText, EditorProperty) LineEdit *text; bool updating; void _text_changed(const String &p_string); protected: static void _bind_methods(); public: virtual void update_property(); EditorPropertyText(); }; class EditorPropertyMultilineText : public EditorProperty { GDCLASS(EditorPropertyMultilineText, EditorProperty) TextEdit *text; AcceptDialog *big_text_dialog; TextEdit *big_text; Button *open_big_text; void _big_text_changed(); void _text_changed(); void _open_big_text(); protected: void _notification(int p_what); static void _bind_methods(); public: virtual void update_property(); EditorPropertyMultilineText(); }; class EditorPropertyTextEnum : public EditorProperty { GDCLASS(EditorPropertyTextEnum, EditorProperty) OptionButton *options; void _option_selected(int p_which); protected: static void _bind_methods(); public: void setup(const Vector &p_options); virtual void update_property(); EditorPropertyTextEnum(); }; class EditorPropertyPath : public EditorProperty { GDCLASS(EditorPropertyPath, EditorProperty) Vector extensions; bool folder; bool global; EditorFileDialog *dialog; Button *path; void _path_selected(const String &p_path); void _path_pressed(); protected: static void _bind_methods(); public: void setup(const Vector &p_extensions, bool p_folder, bool p_global); virtual void update_property(); EditorPropertyPath(); }; class EditorPropertyMember : public EditorProperty { GDCLASS(EditorPropertyMember, EditorProperty) public: enum Type { MEMBER_METHOD_OF_VARIANT_TYPE, ///< a method of a type MEMBER_METHOD_OF_BASE_TYPE, ///< a method of a base type MEMBER_METHOD_OF_INSTANCE, ///< a method of an instance MEMBER_METHOD_OF_SCRIPT, ///< a method of a script & base MEMBER_PROPERTY_OF_VARIANT_TYPE, ///< a property of a type MEMBER_PROPERTY_OF_BASE_TYPE, ///< a property of a base type MEMBER_PROPERTY_OF_INSTANCE, ///< a property of an instance MEMBER_PROPERTY_OF_SCRIPT, ///< a property of a script & base }; private: Type hint; PropertySelector *selector; Button *property; String hint_text; void _property_selected(const String &p_selected); void _property_select(); protected: static void _bind_methods(); public: void setup(Type p_hint, const String &p_hint_text); virtual void update_property(); EditorPropertyMember(); }; class EditorPropertyCheck : public EditorProperty { GDCLASS(EditorPropertyCheck, EditorProperty) CheckBox *checkbox; void _checkbox_pressed(); protected: static void _bind_methods(); public: virtual void update_property(); EditorPropertyCheck(); }; class EditorPropertyEnum : public EditorProperty { GDCLASS(EditorPropertyEnum, EditorProperty) OptionButton *options; void _option_selected(int p_which); protected: static void _bind_methods(); public: void setup(const Vector &p_options); virtual void update_property(); EditorPropertyEnum(); }; class EditorPropertyFlags : public EditorProperty { GDCLASS(EditorPropertyFlags, EditorProperty) VBoxContainer *vbox; Vector flags; Vector flag_indices; void _flag_toggled(); protected: static void _bind_methods(); public: void setup(const Vector &p_options); virtual void update_property(); EditorPropertyFlags(); }; class EditorPropertyLayersGrid; class EditorPropertyLayers : public EditorProperty { GDCLASS(EditorPropertyLayers, EditorProperty) public: enum LayerType { LAYER_PHYSICS_2D, LAYER_RENDER_2D, LAYER_PHYSICS_3D, LAYER_RENDER_3D, }; private: EditorPropertyLayersGrid *grid; void _grid_changed(uint32_t p_grid); LayerType layer_type; PopupMenu *layers; Button *button; void _button_pressed(); void _menu_pressed(int p_menu); protected: static void _bind_methods(); public: void setup(LayerType p_layer_type); virtual void update_property(); EditorPropertyLayers(); }; class EditorPropertyInteger : public EditorProperty { GDCLASS(EditorPropertyInteger, EditorProperty) EditorSpinSlider *spin; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(int p_min, int p_max); EditorPropertyInteger(); }; class EditorPropertyObjectID : public EditorProperty { GDCLASS(EditorPropertyObjectID, EditorProperty) Button *edit; String base_type; void _edit_pressed(); protected: static void _bind_methods(); public: virtual void update_property(); void setup(const String &p_base_type); EditorPropertyObjectID(); }; class EditorPropertyFloat : public EditorProperty { GDCLASS(EditorPropertyFloat, EditorProperty) EditorSpinSlider *spin; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(double p_min, double p_max, double p_step, bool p_no_slider, bool p_exp_range); EditorPropertyFloat(); }; class EditorPropertyEasing : public EditorProperty { GDCLASS(EditorPropertyEasing, EditorProperty) Control *easing_draw; ToolButton *button_out, *button_in, *button_linear, *button_constant; ToolButton *button_in_out, *button_out_in; VBoxContainer *vb; bool flip; void _drag_easing(const Ref &p_ev); void _draw_easing(); void _notification(int p_what); void _set_preset(float p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(bool p_full, bool p_flip); EditorPropertyEasing(); }; class EditorPropertyVector2 : public EditorProperty { GDCLASS(EditorPropertyVector2, EditorProperty) EditorSpinSlider *spin[2]; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(double p_min, double p_max, double p_step, bool p_no_slider); EditorPropertyVector2(); }; class EditorPropertyRect2 : public EditorProperty { GDCLASS(EditorPropertyRect2, EditorProperty) EditorSpinSlider *spin[4]; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(double p_min, double p_max, double p_step, bool p_no_slider); EditorPropertyRect2(); }; class EditorPropertyVector3 : public EditorProperty { GDCLASS(EditorPropertyVector3, EditorProperty) EditorSpinSlider *spin[3]; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(double p_min, double p_max, double p_step, bool p_no_slider); EditorPropertyVector3(); }; class EditorPropertyPlane : public EditorProperty { GDCLASS(EditorPropertyPlane, EditorProperty) EditorSpinSlider *spin[4]; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(double p_min, double p_max, double p_step, bool p_no_slider); EditorPropertyPlane(); }; class EditorPropertyQuat : public EditorProperty { GDCLASS(EditorPropertyQuat, EditorProperty) EditorSpinSlider *spin[4]; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(double p_min, double p_max, double p_step, bool p_no_slider); EditorPropertyQuat(); }; class EditorPropertyAABB : public EditorProperty { GDCLASS(EditorPropertyAABB, EditorProperty) EditorSpinSlider *spin[6]; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(double p_min, double p_max, double p_step, bool p_no_slider); EditorPropertyAABB(); }; class EditorPropertyTransform2D : public EditorProperty { GDCLASS(EditorPropertyTransform2D, EditorProperty) EditorSpinSlider *spin[6]; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(double p_min, double p_max, double p_step, bool p_no_slider); EditorPropertyTransform2D(); }; class EditorPropertyBasis : public EditorProperty { GDCLASS(EditorPropertyBasis, EditorProperty) EditorSpinSlider *spin[9]; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(double p_min, double p_max, double p_step, bool p_no_slider); EditorPropertyBasis(); }; class EditorPropertyTransform : public EditorProperty { GDCLASS(EditorPropertyTransform, EditorProperty) EditorSpinSlider *spin[12]; bool setting; void _value_changed(double p_val); protected: static void _bind_methods(); public: virtual void update_property(); void setup(double p_min, double p_max, double p_step, bool p_no_slider); EditorPropertyTransform(); }; class EditorPropertyColor : public EditorProperty { GDCLASS(EditorPropertyColor, EditorProperty) ColorPickerButton *picker; void _color_changed(const Color &p_color); protected: static void _bind_methods(); public: virtual void update_property(); void setup(bool p_show_alpha); EditorPropertyColor(); }; class EditorPropertyNodePath : public EditorProperty { GDCLASS(EditorPropertyNodePath, EditorProperty) Button *assign; Button *clear; SceneTreeDialog *scene_tree; NodePath base_hint; void _node_selected(const NodePath &p_path); void _node_assign(); void _node_clear(); protected: static void _bind_methods(); void _notification(int p_what); public: virtual void update_property(); void setup(const NodePath &p_base_hint); EditorPropertyNodePath(); }; class EditorPropertyResource : public EditorProperty { GDCLASS(EditorPropertyResource, EditorProperty) enum MenuOption { OBJ_MENU_LOAD = 0, OBJ_MENU_EDIT = 1, OBJ_MENU_CLEAR = 2, OBJ_MENU_MAKE_UNIQUE = 3, OBJ_MENU_COPY = 4, OBJ_MENU_PASTE = 5, OBJ_MENU_NEW_SCRIPT = 6, OBJ_MENU_SHOW_IN_FILE_SYSTEM = 7, TYPE_BASE_ID = 100, CONVERT_BASE_ID = 1000 }; Button *assign; Button *edit; PopupMenu *menu; EditorFileDialog *file; Vector inheritors_array; String base_type; SceneTreeDialog *scene_tree; void _file_selected(const String &p_path); void _menu_option(int p_which); void _resource_preview(const String &p_path, const Ref &p_preview, ObjectID p_obj); void _resource_selected(); void _viewport_selected(const NodePath &p_path); void _update_menu(); protected: static void _bind_methods(); void _notification(int p_what); public: virtual void update_property(); void setup(const String &p_base_type); EditorPropertyResource(); }; /////////////////////////////////////////////////// /// \brief The EditorInspectorDefaultPlugin class /// class EditorInspectorDefaultPlugin : public EditorInspectorPlugin { GDCLASS(EditorInspectorDefaultPlugin, EditorInspectorPlugin) public: virtual bool can_handle(Object *p_object); virtual void parse_begin(Object *p_object); virtual bool parse_property(Object *p_object, Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, int p_usage); virtual void parse_end(); }; #endif // EDITOR_PROPERTIES_H