Repository: godotengine/godot
File: editor/inspector/editor_inspector.h (C/C++)

Code before:
		int horizontal_separation = 0;
		int vertical_separation = 0;
		int class_icon_size = 0;

		Color font_color;

		Ref<Font> bold_font;
		int bold_font_size = 0;

		Ref<Texture2D> icon_favorites;
		Ref<Texture2D> icon_unfavorite;
		Ref<Texture2D> icon_help;

		Ref<StyleBox> background;
	} theme_cache;

	PropertyInfo info;

	Ref<Texture2D> icon;
	String label;
	String doc_class_name;
	PopupMenu *menu = nullptr;
	bool is_favorite = false;
	bool menu_icon_dirty = true;

	void _collect_properties(const Object *p_object, Vector<String> &p_properties) const;
	void _handle_menu_option(int p_option);
	void _popup_context_menu(const Point2i &p_position);
	void _update_icon();

protected:
	static void _bind_methods();

	void _notification(int p_what);
	virtual void gui_input(const Ref<InputEvent> &p_event) override;

	void _accessibility_action_menu(const Variant &p_data);

public:
	void set_as_favorite();
	void set_property_info(const PropertyInfo &p_info);
	void set_doc_class_name(const String &p_name);

	virtual Size2 get_minimum_size() const override;
	virtual Control *make_custom_tooltip(const String &p_text) const override;

	EditorInspectorCategory();
};

class EditorInspectorSection : public Container {
	GDCLASS(EditorInspectorSection, Container);

Review comment (suggestion):
```suggestion
	void _collect_properties(const Object *p_object, LocalVector<String> &r_properties) const;
```

Code after:
};

class EditorInspectorPlugin : public RefCounted {
	GDCLASS(EditorInspectorPlugin, RefCounted);

public:
	friend class EditorInspector;
	struct AddedEditor {
		Control *property_editor = nullptr;
		Vector<String> properties;
		String label;
		bool add_to_end = false;
	};

	List<AddedEditor> added_editors;

protected:
	static void _bind_methods();

	GDVIRTUAL1RC(bool, _can_handle, Object *)
	GDVIRTUAL1(_parse_begin, Object *)
	GDVIRTUAL2(_parse_category, Object *, String)
	GDVIRTUAL2(_parse_group, Object *, String)
	GDVIRTUAL7R(bool, _parse_property, Object *, Variant::Type, String, PropertyHint, String, BitField<PropertyUsageFlags>, bool)
	GDVIRTUAL1(_parse_end, Object *)

#ifndef DISABLE_DEPRECATED
	void _add_property_editor_bind_compat_92322(const String &p_for_property, Control *p_prop, bool p_add_to_end);
	static void _bind_compatibility_methods();
#endif // DISABLE_DEPRECATED
public:
	void add_custom_control(Control *control);
	void add_property_editor(const String &p_for_property, Control *p_prop, bool p_add_to_end = false, const String &p_label = String());
	void add_property_editor_for_multiple_properties(const String &p_label, const Vector<String> &p_properties, Control *p_prop);

	virtual bool can_handle(Object *p_object);
	virtual void parse_begin(Object *p_object);
	virtual void parse_category(Object *p_object, const String &p_category);
	virtual void parse_group(Object *p_object, const String &p_group);
	virtual bool parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const BitField<PropertyUsageFlags> p_usage, const bool p_wide = false);
	virtual void parse_end(Object *p_object);
};

class EditorInspectorCategory : public Control {
	GDCLASS(EditorInspectorCategory, Control);

	friend class EditorInspector;

	// Right-click context menu options.
	enum ClassMenuOption {
		MENU_COPY_VALUE,