فهرست منبع

Auto select custom property value field when pop up, user can start typing to change value right away.

marynate 11 سال پیش
والد
کامیت
8fb19e5843
3فایلهای تغییر یافته به همراه59 افزوده شده و 1 حذف شده
  1. 5 0
      scene/gui/line_edit.cpp
  2. 52 1
      tools/editor/property_editor.cpp
  3. 2 0
      tools/editor/property_editor.h

+ 5 - 0
scene/gui/line_edit.cpp

@@ -748,6 +748,11 @@ bool LineEdit::is_secret() const {
 
 void LineEdit::select(int p_from, int p_to) {
 
+	if (p_from==0 && p_to==0) {
+		selection_clear();
+		return;
+	}
+
 	int len = text.length();
 	if (p_from<0)
 		p_from=0;

+ 52 - 1
tools/editor/property_editor.cpp

@@ -51,7 +51,7 @@ void CustomPropertyEditor::_notification(int p_what) {
 			
 			VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2( 10,10,60, get_size().height-20 ), v );
 		}*/
-	}	
+	}
 }
 
 
@@ -1397,6 +1397,53 @@ void CustomPropertyEditor::_modified(String p_string) {
 	updating=false;
 }
 
+void CustomPropertyEditor::_focus_enter() {
+	switch(type) {
+		case Variant::REAL:
+		case Variant::STRING:
+		case Variant::VECTOR2:
+		case Variant::RECT2:
+		case Variant::VECTOR3:
+		case Variant::PLANE:
+		case Variant::QUAT:
+		case Variant::_AABB:
+		case Variant::MATRIX32:
+		case Variant::MATRIX3:
+		case Variant::TRANSFORM: {
+			for (int i=0;i<MAX_VALUE_EDITORS;++i) {
+				if (value_editor[i]->has_focus()) {
+					value_editor[i]->select_all();
+					break;
+				}
+			}
+		} break;
+		default: {}
+	}
+
+}
+
+void CustomPropertyEditor::_focus_exit() {
+	switch(type) {
+		case Variant::REAL:
+		case Variant::STRING:
+		case Variant::VECTOR2:
+		case Variant::RECT2:
+		case Variant::VECTOR3:
+		case Variant::PLANE:
+		case Variant::QUAT:
+		case Variant::_AABB:
+		case Variant::MATRIX32:
+		case Variant::MATRIX3:
+		case Variant::TRANSFORM: {
+			for (int i=0;i<MAX_VALUE_EDITORS;++i) {
+				value_editor[i]->select(0, 0);
+			}
+		} break;
+		default: {}
+	}
+
+}
+
 void CustomPropertyEditor::config_action_buttons(const List<String>& p_strings) {
 
 	int w=100;
@@ -1456,6 +1503,8 @@ void CustomPropertyEditor::config_value_editors(int p_amount, int p_columns,int
 
 void CustomPropertyEditor::_bind_methods() {
 	
+	ObjectTypeDB::bind_method("_focus_enter", &CustomPropertyEditor::_focus_enter);
+	ObjectTypeDB::bind_method("_focus_exit", &CustomPropertyEditor::_focus_exit);
 	ObjectTypeDB::bind_method("_modified",&CustomPropertyEditor::_modified);
 	ObjectTypeDB::bind_method("_scroll_modified",&CustomPropertyEditor::_scroll_modified);
 	ObjectTypeDB::bind_method("_action_pressed",&CustomPropertyEditor::_action_pressed);
@@ -1487,6 +1536,8 @@ CustomPropertyEditor::CustomPropertyEditor() {
 		value_editor[i]->hide();
 		value_label[i]->hide();
 		value_editor[i]->connect("text_entered", this,"_modified");
+		value_editor[i]->connect("focus_enter", this, "_focus_enter");
+		value_editor[i]->connect("focus_exit", this, "_focus_exit");
 	}
 	
 	for(int i=0;i<4;i++) {

+ 2 - 0
tools/editor/property_editor.h

@@ -105,6 +105,8 @@ class CustomPropertyEditor : public Popup {
 	void _file_selected(String p_file);
 	void _scroll_modified(double p_value);
 	void _modified(String p_string);
+	void _focus_enter();
+	void _focus_exit();
 	void _action_pressed(int p_which);
 	void _type_create_selected(int p_idx);