Browse Source

Merge pull request #10046 from Hinsbart/script_open_resource

ScriptEditor: ctrl+click can open scenes & resources.
Rémi Verschelde 8 years ago
parent
commit
c936e9946e
2 changed files with 28 additions and 1 deletions
  1. 11 1
      editor/plugins/script_text_editor.cpp
  2. 17 0
      scene/gui/text_edit.cpp

+ 11 - 1
editor/plugins/script_text_editor.cpp

@@ -634,7 +634,17 @@ void ScriptTextEditor::_lookup_symbol(const String &p_symbol, int p_row, int p_c
 	}
 
 	ScriptLanguage::LookupResult result;
-	if (script->get_language()->lookup_code(code_editor->get_text_edit()->get_text_for_lookup_completion(), p_symbol, script->get_path().get_base_dir(), base, result) == OK) {
+	if (p_symbol.is_resource_file()) {
+		List<String> scene_extensions;
+		ResourceLoader::get_recognized_extensions_for_type("PackedScene", &scene_extensions);
+
+		if (scene_extensions.find(p_symbol.get_extension())) {
+			EditorNode::get_singleton()->load_scene(p_symbol);
+		} else {
+			EditorNode::get_singleton()->load_resource(p_symbol);
+		}
+
+	} else if (script->get_language()->lookup_code(code_editor->get_text_edit()->get_text_for_lookup_completion(), p_symbol, script->get_path().get_base_dir(), base, result) == OK) {
 
 		_goto_line(p_row);
 

+ 17 - 0
scene/gui/text_edit.cpp

@@ -4353,6 +4353,23 @@ String TextEdit::get_word_at_pos(const Vector2 &p_pos) const {
 
 		bool symbol = beg < s.length() && _is_symbol(s[beg]); //not sure if right but most editors behave like this
 
+		bool inside_quotes = false;
+		int qbegin, qend;
+		for (int i = 0; i < s.length(); i++) {
+			if (s[i] == '"') {
+				if (inside_quotes) {
+					qend = i;
+					inside_quotes = false;
+					if (col >= qbegin && col <= qend) {
+						return s.substr(qbegin, qend - qbegin);
+					}
+				} else {
+					qbegin = i + 1;
+					inside_quotes = true;
+				}
+			}
+		}
+
 		while (beg > 0 && s[beg - 1] > 32 && (symbol == _is_symbol(s[beg - 1]))) {
 			beg--;
 		}