|
@@ -0,0 +1,83 @@
|
|
|
|
+.. _doc_inspector_plugins:
|
|
|
|
+
|
|
|
|
+Inspector Plugins
|
|
|
|
+=====================
|
|
|
|
+
|
|
|
|
+Introduction
|
|
|
|
+------------
|
|
|
|
+
|
|
|
|
+Godot 3.1 comes with a new inspector. Adding plugins to it is now possible.
|
|
|
|
+
|
|
|
|
+This tutorial will explain the process.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Inspector Plugin
|
|
|
|
+----------------
|
|
|
|
+
|
|
|
|
+This short tutorial will explain how to make a simple value editor.
|
|
|
|
+Create an EditorInspectorPlugin first. This is needed to initialize your plugin.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+.. tabs::
|
|
|
|
+ .. code-tab:: gdscript GDScript
|
|
|
|
+
|
|
|
|
+ # MyEditorPlugin.gd
|
|
|
|
+
|
|
|
|
+ extends EditorInspectorPlugin
|
|
|
|
+
|
|
|
|
+ func can_handle(object):
|
|
|
|
+ # if only editing a specific type
|
|
|
|
+ # return object is TheTypeIWant
|
|
|
|
+ # if everything is supported
|
|
|
|
+ return true
|
|
|
|
+
|
|
|
|
+ func parse_property(object,type,path,hint,hint_text,usage):
|
|
|
|
+ if (type==TYPE_INT):
|
|
|
|
+ add_custom_property_editor(path,MyEditor.new())
|
|
|
|
+ return true # I want this one
|
|
|
|
+ else:
|
|
|
|
+ return false
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Editor
|
|
|
|
+------
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Here is an editor for editing integers
|
|
|
|
+
|
|
|
|
+.. tabs::
|
|
|
|
+ .. code-tab:: gdscript GDScript
|
|
|
|
+
|
|
|
|
+ # MyEditor.gd
|
|
|
|
+ class_name MyEditor
|
|
|
|
+
|
|
|
|
+ var updating = false
|
|
|
|
+
|
|
|
|
+ func _spin_changed(value):
|
|
|
|
+ if (updating):
|
|
|
|
+ return
|
|
|
|
+
|
|
|
|
+ emit_changed( get_property(), value )
|
|
|
|
+
|
|
|
|
+ func update_property():
|
|
|
|
+ var new_value = get_edited_object()[ get_edited_property() ]
|
|
|
|
+
|
|
|
|
+ updating=true
|
|
|
|
+ spin.set_value( new_value )
|
|
|
|
+ updating=false
|
|
|
|
+
|
|
|
|
+ var spin = EditorSpinSlider.new() # use the new spin slider
|
|
|
|
+ func _init():
|
|
|
|
+ # if you want to put the editor below the label
|
|
|
|
+ # set_bottom_editor( spin )
|
|
|
|
+ # else use:
|
|
|
|
+ add_child( spin )
|
|
|
|
+ # to remember focus when selected back
|
|
|
|
+ add_focusable( spin )
|
|
|
|
+ spin.set_min(0)
|
|
|
|
+ spin.set_max(1000)
|
|
|
|
+ spin.connect("value_changed",self,"_spin_changed")
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|