ScriptEditor: ctrl+click can open scenes/resources.

Closes #9654
This commit is contained in:
Andreas Haas 2017-08-02 19:20:27 +02:00
parent 0586524b9c
commit 708ddb05af
No known key found for this signature in database
GPG key ID: B5FFAE1B65FBD2E1
2 changed files with 28 additions and 1 deletions

View file

@ -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);

View file

@ -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--;
}