First upgrade to Godot 4.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
extends Reference
|
||||
extends RefCounted
|
||||
|
||||
class_name GDB_Entity
|
||||
|
||||
@@ -8,58 +8,56 @@ var _properties := [].duplicate()
|
||||
var _property_ids := [].duplicate()
|
||||
|
||||
class _CommonWrapperProperty extends GDB_Property:
|
||||
var object : WeakRef
|
||||
func _init(object_ : Object, val, sig_name := "", flags := 0) -> void:
|
||||
self.object = weakref(object_)
|
||||
.set_type(typeof(val))
|
||||
.set_value(val)
|
||||
.set_flags(flags)
|
||||
func _init(val, sig : Signal = Signal(), flags := 0):
|
||||
super.set_type(typeof(val))
|
||||
super.set_value(val)
|
||||
super.set_flags(flags)
|
||||
|
||||
if sig_name != "":
|
||||
object_.connect(sig_name, self, "_on_object_value_changed")
|
||||
if !sig.is_null():
|
||||
sig.connect(self._on_object_value_changed)
|
||||
|
||||
func _on_object_value_changed(p0 = null, p1 = null, p2 = null, p3 = null) -> void:
|
||||
var obj : Object = self.object.get_ref()
|
||||
if obj: # shouldn't actually be null, who called the handler then?
|
||||
_value = obj.get(self.member)
|
||||
emit_signal("value_changed")
|
||||
_value = self.get_value()
|
||||
value_changed.emit()
|
||||
|
||||
class _WrapperProperty extends _CommonWrapperProperty:
|
||||
var object : WeakRef
|
||||
var member : String
|
||||
|
||||
func _init(object_ : Object, member_ : String, sig_name : String, flags : int) \
|
||||
.(object_, object_.get(member), sig_name, flags) -> void:
|
||||
func _init(object_ : Object, member_ : String, sig : Signal, flags : int):
|
||||
super(object_.get(member), sig, flags)
|
||||
self.object = object_
|
||||
self.member = member_
|
||||
.set_name(member_.capitalize())
|
||||
super.set_name(member_.capitalize())
|
||||
|
||||
func get_value():
|
||||
var obj : Object = self.object.get_ref()
|
||||
if obj:
|
||||
return obj.get(self.member)
|
||||
return .get_value()
|
||||
return super.get_value()
|
||||
|
||||
func set_value(value) -> void:
|
||||
var obj : Object = self.object.get_ref()
|
||||
if obj:
|
||||
obj.set(self.member, value)
|
||||
.set_value(obj.get(self.member))
|
||||
super.set_value(obj.get(self.member))
|
||||
else:
|
||||
.set_value(value)
|
||||
super.set_value(value)
|
||||
|
||||
class _ArrayWrapperProperty extends _WrapperProperty:
|
||||
func _init(object_ : Object, member_ : String, sig_name_added : String, sig_name_removed : String, flags : int) \
|
||||
.(object_, member_, "", flags) -> void:
|
||||
if sig_name_added != "":
|
||||
object_.connect(sig_name_added, self, "_on_object_value_added")
|
||||
if sig_name_removed != "":
|
||||
object_.connect(sig_name_added, self, "_on_object_value_removed")
|
||||
func _init(object_ : Object, member_ : String, sig_added : Signal = Signal(), sig_removed : Signal = Signal(), flags := 0):
|
||||
super(object_, member_, Signal(), flags)
|
||||
if !sig_added.is_null():
|
||||
sig_added.connect(self._on_object_value_added)
|
||||
if !sig_removed.is_null():
|
||||
sig_removed.connect(self._on_object_value_removed)
|
||||
|
||||
func _on_object_value_added(value, p0 = null, p1 = null, p2 = null, p3 = null) -> void:
|
||||
var obj : Object = self.object.get_ref()
|
||||
if obj:
|
||||
_value = obj.get(self.member)
|
||||
emit_signal("value_changed")
|
||||
emit_signal("value_added", value)
|
||||
value_changed.emit()
|
||||
value_added.emit(value)
|
||||
|
||||
func _on_object_value_removed(value, p0 = null, p1 = null, p2 = null, p3 = null) -> void:
|
||||
var obj : Object = self.object.get_ref()
|
||||
@@ -69,29 +67,29 @@ class _ArrayWrapperProperty extends _WrapperProperty:
|
||||
emit_signal("value_removed", value)
|
||||
|
||||
class _GetSetWrapperProperty extends _CommonWrapperProperty:
|
||||
var getter := ""
|
||||
var setter := ""
|
||||
var getter := Callable()
|
||||
var setter := Callable()
|
||||
|
||||
func _init(object_ : Object, getter_ : String, setter_ := "", sig_name := "", flags := 0) \
|
||||
.(object_, object.call(getter_), sig_name, flags) -> void:
|
||||
func _init(getter_ : Callable, setter_ := Callable(), sig : Signal = Signal(), flags := 0):
|
||||
super(getter_.call(), sig, flags)
|
||||
self.getter = getter_
|
||||
self.setter = setter_
|
||||
|
||||
func get_value():
|
||||
var obj : Object = self.object.get_ref()
|
||||
if obj:
|
||||
return obj.call(self.getter)
|
||||
return .get_value()
|
||||
return self.getter.call()
|
||||
return super.get_value()
|
||||
|
||||
func set_value(value) -> void:
|
||||
if !self.setter:
|
||||
if self.setter.is_null():
|
||||
return
|
||||
var obj : Object = self.object.get_ref()
|
||||
if obj:
|
||||
obj.call(self.setter, value)
|
||||
.set_value(obj.call(self.getter))
|
||||
self.setter.call(value)
|
||||
super.set_value(self.getter.call())
|
||||
else:
|
||||
.set_value(value)
|
||||
super.set_value(value)
|
||||
|
||||
################
|
||||
# public stuff #
|
||||
@@ -199,14 +197,14 @@ static func is_valid_entity(object : Object) -> bool:
|
||||
return object != null \
|
||||
&& object.has_method("get_properties")
|
||||
|
||||
static func make_property(object : Object, member : String, sig_name := "", flags := 0) -> GDB_Property:
|
||||
return _WrapperProperty.new(object, member, sig_name, flags)
|
||||
static func make_property(object : Object, member : String, sig := Signal(), flags := 0) -> GDB_Property:
|
||||
return _WrapperProperty.new(object, member, sig, flags)
|
||||
|
||||
static func make_getset_property(object : Object, getter : String, setter := "", sig_name := "", flags := 0) -> GDB_Property:
|
||||
return _GetSetWrapperProperty.new(object, getter, setter, sig_name, flags)
|
||||
static func make_getset_property(getter : Callable, setter := Callable(), sig := Signal(), flags := 0) -> GDB_Property:
|
||||
return _GetSetWrapperProperty.new(getter, setter, sig, flags)
|
||||
|
||||
static func make_array_property(object : Object, member : String, sig_name_added := "", sig_name_removed := "", array_type := TYPE_NIL, flags := 0) -> GDB_Property:
|
||||
var prop := _ArrayWrapperProperty.new(object, member, sig_name_added, sig_name_removed, flags)
|
||||
static func make_array_property(object : Object, member : String, sig_added := Signal(), sig_removed := Signal(), array_type := TYPE_NIL, flags := 0) -> GDB_Property:
|
||||
var prop := _ArrayWrapperProperty.new(object, member, sig_added, sig_removed, flags)
|
||||
prop.set_content_type(array_type)
|
||||
return prop
|
||||
|
||||
@@ -217,21 +215,21 @@ static func make_entity_title_property(entity : Object) -> Object:
|
||||
if property:
|
||||
return property
|
||||
if entity.get("title") is String:
|
||||
var sig_name := ""
|
||||
var sig := Signal()
|
||||
if entity.has_signal("title_changed"):
|
||||
sig_name = "title_changed"
|
||||
return make_property(entity, "title", sig_name)
|
||||
sig = entity.title_changed
|
||||
return make_property(entity, "title", sig)
|
||||
if entity.has_method("get_title"):
|
||||
var setter := ""
|
||||
var sig_name := ""
|
||||
var setter := Callable()
|
||||
var sig := Signal()
|
||||
var flags := 0
|
||||
if entity.has_method("set_title"):
|
||||
setter = "set_title"
|
||||
setter = entity.set_title
|
||||
else:
|
||||
flags |= GDB_Property.FLAG_READONLY
|
||||
if entity.has_signal("title_changed"):
|
||||
sig_name = "title_changed"
|
||||
return make_getset_property(entity, "get_title", setter, sig_name, flags)
|
||||
sig = entity.title_changed
|
||||
return make_getset_property(entity.get_title, setter, sig, flags)
|
||||
return null
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
extends Reference
|
||||
extends RefCounted
|
||||
|
||||
class_name GDB_Property
|
||||
|
||||
@@ -26,7 +26,7 @@ func get_name() -> String:
|
||||
func set_name(name : String) -> void:
|
||||
if _name != name:
|
||||
_name = name
|
||||
emit_signal("name_changed")
|
||||
name_changed.emit()
|
||||
|
||||
func get_icon() -> Texture:
|
||||
return _icon
|
||||
@@ -34,7 +34,7 @@ func get_icon() -> Texture:
|
||||
func set_icon(icon : Texture) -> void:
|
||||
if _icon != icon:
|
||||
_icon = icon
|
||||
emit_signal("icon_changed")
|
||||
icon_changed.emit()
|
||||
|
||||
func get_value():
|
||||
return _value
|
||||
@@ -42,7 +42,7 @@ func get_value():
|
||||
func set_value(value) -> void:
|
||||
if value != _value:
|
||||
_value = value
|
||||
emit_signal("value_changed")
|
||||
value_changed.emit()
|
||||
|
||||
func get_type() -> int:
|
||||
return _type
|
||||
@@ -50,7 +50,7 @@ func get_type() -> int:
|
||||
func set_type(type : int) -> void:
|
||||
if type != _type:
|
||||
_type = type
|
||||
emit_signal("type_changed")
|
||||
type_changed.emit()
|
||||
|
||||
func get_content_type() -> int:
|
||||
return _content_type
|
||||
@@ -58,7 +58,7 @@ func get_content_type() -> int:
|
||||
func set_content_type(type : int) -> void:
|
||||
if type != _content_type:
|
||||
_content_type = type
|
||||
emit_signal("type_changed")
|
||||
type_changed.emit()
|
||||
|
||||
func get_flags() -> int:
|
||||
return _flags
|
||||
@@ -66,7 +66,7 @@ func get_flags() -> int:
|
||||
func set_flags(flags : int) -> void:
|
||||
if flags != _flags:
|
||||
_flags = flags
|
||||
emit_signal("flags_changed")
|
||||
flags_changed.emit()
|
||||
|
||||
################
|
||||
# static stuff #
|
||||
@@ -97,7 +97,7 @@ static func is_prop_value_valid(property : Object, value) -> bool:
|
||||
return value is bool
|
||||
TYPE_INT:
|
||||
return value is int
|
||||
TYPE_REAL:
|
||||
TYPE_FLOAT:
|
||||
return value is float
|
||||
TYPE_STRING:
|
||||
return value is String
|
||||
|
||||
Reference in New Issue
Block a user