From b0be30d9efb11aba10fd97c71fec47e34ea88ca1 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Tue, 25 Aug 2015 23:09:41 -0300 Subject: [PATCH] make sure array is created if not existing, as noted by Guilherme Felipe --- core/ustring.cpp | 5 ++--- tools/editor/array_property_edit.cpp | 11 +++++++++-- tools/editor/array_property_edit.h | 3 ++- tools/editor/property_editor.cpp | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/core/ustring.cpp b/core/ustring.cpp index 32ef1eb5ff9..ff7c8984fad 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -3057,12 +3057,11 @@ String String::world_wrap(int p_chars_per_line) const { if (i-from>=p_chars_per_line) { if (last_space==-1) { ret+=substr(from,i-from+1)+"\n"; - from=i+1; } else { ret+=substr(from,last_space-from)+"\n"; - i=last_space; - from=i+1; + i=last_space; //rewind } + from=i+1; last_space=-1; } else if (operator[](i)==' ' || operator[](i)=='\t') { last_space=i; diff --git a/tools/editor/array_property_edit.cpp b/tools/editor/array_property_edit.cpp index 61081b73d19..9cd443270b8 100644 --- a/tools/editor/array_property_edit.cpp +++ b/tools/editor/array_property_edit.cpp @@ -9,7 +9,12 @@ Variant ArrayPropertyEdit::get_array() const{ Object*o = ObjectDB::get_instance(obj); if (!o) return Array(); - return o->get(property); + Variant arr=o->get(property); + if (!arr.is_array()) { + Variant::CallError ce; + arr=Variant::construct(default_type,NULL,0,ce); + } + return arr; } void ArrayPropertyEdit::_notif_change() { @@ -195,11 +200,12 @@ void ArrayPropertyEdit::_get_property_list( List *p_list) const{ } -void ArrayPropertyEdit::edit(Object* p_obj,const StringName& p_prop) { +void ArrayPropertyEdit::edit(Object* p_obj,const StringName& p_prop,Variant::Type p_deftype) { page=0; property=p_prop; obj=p_obj->get_instance_ID(); + default_type=p_deftype; } @@ -220,5 +226,6 @@ ArrayPropertyEdit::ArrayPropertyEdit() vtypes+=","; vtypes+=Variant::get_type_name( Variant::Type(i) ); } + default_type=Variant::NIL; } diff --git a/tools/editor/array_property_edit.h b/tools/editor/array_property_edit.h index 0bf7468eeb0..acfb8e68ede 100644 --- a/tools/editor/array_property_edit.h +++ b/tools/editor/array_property_edit.h @@ -12,6 +12,7 @@ class ArrayPropertyEdit : public Reference { StringName property; String vtypes; Variant get_array() const; + Variant::Type default_type; void _notif_change(); void _notif_changev(const String& p_v); @@ -27,7 +28,7 @@ protected: public: - void edit(Object* p_obj,const StringName& p_prop); + void edit(Object* p_obj, const StringName& p_prop, Variant::Type p_deftype); ArrayPropertyEdit(); }; diff --git a/tools/editor/property_editor.cpp b/tools/editor/property_editor.cpp index 39b9c72313f..7e367e17b8d 100644 --- a/tools/editor/property_editor.cpp +++ b/tools/editor/property_editor.cpp @@ -3143,7 +3143,7 @@ void PropertyEditor::_edit_button(Object *p_item, int p_column, int p_button) { } Ref ape = memnew( ArrayPropertyEdit ); - ape->edit(obj,n); + ape->edit(obj,n,Variant::Type(t)); EditorNode::get_singleton()->push_item(ape.ptr()); }