void EditorHelp::_help_callback(const String& p_topic) { String what = p_topic.get_slice(":",0); String clss = p_topic.get_slice(":",1); String name; if (p_topic.get_slice_count(":")==3) name=p_topic.get_slice(":",2); _request_help(clss); //first go to class int line=0; if (what=="class_desc") { line=description_line; } else if (what=="class_signal") { if (signal_line.has(name)) line=signal_line[name]; } else if (what=="class_method" || what=="class_method_desc") { if (method_line.has(name)) line=method_line[name]; } else if (what=="class_property") { if (property_line.has(name)) line=property_line[name]; } else if (what=="class_constant") { if (constant_line.has(name)) line=constant_line[name]; } class_desc->scroll_to_line(line); }
void MeshLibraryEditor::_menu_cbk(int p_option) { option=p_option; switch(p_option) { case MENU_OPTION_ADD_ITEM: { theme->create_item(theme->get_last_unused_item_id()); } break; case MENU_OPTION_REMOVE_ITEM: { String p = editor->get_property_editor()->get_selected_path(); if (p.begins_with("/MeshLibrary/item") && p.get_slice_count("/")>=3) { to_erase = p.get_slice("/",3).to_int(); cd->set_text("Remove Item "+itos(to_erase)+"?"); cd->popup_centered(Size2(300,60)); } } break; case MENU_OPTION_IMPORT_FROM_SCENE: { file->popup_centered_ratio(); } break; case MENU_OPTION_UPDATE_FROM_SCENE: { cd->set_text("Update from existing scene?:\n"+String(theme->get_meta("_editor_source_scene"))); cd->popup_centered(Size2(500,60)); } break; } }
void TileSetEditor::_menu_cbk(int p_option) { option=p_option; switch(p_option) { case MENU_OPTION_ADD_ITEM: { tileset->create_tile(tileset->get_last_unused_tile_id()); } break; case MENU_OPTION_REMOVE_ITEM: { String p = editor->get_property_editor()->get_selected_path(); if (p.begins_with("/TileSet") && p.get_slice_count("/")>=2) { to_erase = p.get_slice("/",2).to_int(); cd->set_text("Remove Item "+itos(to_erase)+"?"); cd->popup_centered(Size2(300,60)); } } break; case MENU_OPTION_CREATE_FROM_SCENE: { cd->set_text("Create from scene?"); cd->popup_centered(Size2(300,60)); } break; case MENU_OPTION_MERGE_FROM_SCENE: { cd->set_text("Merge from scene?"); cd->popup_centered(Size2(300,60)); } break; } }
void ShaderEditor::_add_node_from_text(const String& p_text) { ERR_FAIL_COND( p_text.get_slice_count(" ") != 3 ); bool input = p_text.get_slice(" ",0)=="In:"; String name = p_text.get_slice(" ",1); bool vec = p_text.get_slice(" ",2)=="(vec3)"; _node_add( input? ( vec? VisualServer::NODE_VEC_IN : VisualServer::NODE_IN ) : ( vec? VisualServer::NODE_VEC_OUT : VisualServer::NODE_OUT ) ); shader_graph.node_set_param( last_id-1,name ); _write_shader_graph(); }
void IP_Address::_parse_ipv4(const String& p_string, int p_start, uint8_t* p_ret) { String ip; if (p_start != 0) { ip = p_string.substr(p_start, p_string.length() - p_start); } else { ip = p_string; }; int slices = ip.get_slice_count("."); if (slices!=4) { ERR_EXPLAIN("Invalid IP Address String: "+ip); ERR_FAIL(); } for(int i=0;i<4;i++) { p_ret[i]=ip.get_slicec('.',i).to_int(); } };
bool test_24() { OS::get_singleton()->print("\n\nTest 24: Slicing\n"); String s = "Mars,Jupiter,Saturn,Uranus"; const char *slices[4] = { "Mars", "Jupiter", "Saturn", "Uranus" }; OS::get_singleton()->print("\tSlicing \"%ls\" by \"%s\"..\n", s.c_str(), ","); for (int i = 0; i < s.get_slice_count(","); i++) { OS::get_singleton()->print("\t\t%i- %ls\n", i + 1, s.get_slice(",", i).c_str()); if (s.get_slice(",", i) != slices[i]) return false; } return true; }
IP_Address::IP_Address(const String &p_string) { clear(); if (p_string == "*") { // Wildcard (not a valid IP) wildcard = true; } else if (p_string.find(":") >= 0) { // IPv6 _parse_ipv6(p_string); valid = true; } else if (p_string.get_slice_count(".") == 4) { // IPv4 (mapped to IPv6 internally) field16[5] = 0xffff; _parse_ipv4(p_string, 0, &field8[12]); valid = true; } else { ERR_PRINT("Invalid IP address"); } }
void ScriptTextEditor::_load_theme_settings() { TextEdit *text_edit = code_editor->get_text_edit(); text_edit->clear_colors(); /* keyword color */ text_edit->set_custom_bg_color(EDITOR_DEF("text_editor/background_color",Color(0,0,0,0))); text_edit->add_color_override("completion_background_color", EDITOR_DEF("text_editor/completion_background_color", Color(0,0,0,0))); text_edit->add_color_override("completion_selected_color", EDITOR_DEF("text_editor/completion_selected_color", Color::html("434244"))); text_edit->add_color_override("completion_existing_color", EDITOR_DEF("text_editor/completion_existing_color", Color::html("21dfdfdf"))); text_edit->add_color_override("completion_scroll_color", EDITOR_DEF("text_editor/completion_scroll_color", Color::html("ffffff"))); text_edit->add_color_override("completion_font_color", EDITOR_DEF("text_editor/completion_font_color", Color::html("aaaaaa"))); text_edit->add_color_override("font_color",EDITOR_DEF("text_editor/text_color",Color(0,0,0))); text_edit->add_color_override("line_number_color",EDITOR_DEF("text_editor/line_number_color",Color(0,0,0))); text_edit->add_color_override("caret_color",EDITOR_DEF("text_editor/caret_color",Color(0,0,0))); text_edit->add_color_override("caret_background_color",EDITOR_DEF("text_editor/caret_background_color",Color(0,0,0))); text_edit->add_color_override("font_selected_color",EDITOR_DEF("text_editor/text_selected_color",Color(1,1,1))); text_edit->add_color_override("selection_color",EDITOR_DEF("text_editor/selection_color",Color(0.2,0.2,1))); text_edit->add_color_override("brace_mismatch_color",EDITOR_DEF("text_editor/brace_mismatch_color",Color(1,0.2,0.2))); text_edit->add_color_override("current_line_color",EDITOR_DEF("text_editor/current_line_color",Color(0.3,0.5,0.8,0.15))); text_edit->add_color_override("word_highlighted_color",EDITOR_DEF("text_editor/word_highlighted_color",Color(0.8,0.9,0.9,0.15))); text_edit->add_color_override("number_color",EDITOR_DEF("text_editor/number_color",Color(0.9,0.6,0.0,2))); text_edit->add_color_override("function_color",EDITOR_DEF("text_editor/function_color",Color(0.4,0.6,0.8))); text_edit->add_color_override("member_variable_color",EDITOR_DEF("text_editor/member_variable_color",Color(0.9,0.3,0.3))); text_edit->add_color_override("mark_color", EDITOR_DEF("text_editor/mark_color", Color(1.0,0.4,0.4,0.4))); text_edit->add_color_override("breakpoint_color", EDITOR_DEF("text_editor/breakpoint_color", Color(0.8,0.8,0.4,0.2))); text_edit->add_color_override("search_result_color",EDITOR_DEF("text_editor/search_result_color",Color(0.05,0.25,0.05,1))); text_edit->add_color_override("search_result_border_color",EDITOR_DEF("text_editor/search_result_border_color",Color(0.1,0.45,0.1,1))); text_edit->add_constant_override("line_spacing", EDITOR_DEF("text_editor/line_spacing",4)); Color keyword_color= EDITOR_DEF("text_editor/keyword_color",Color(0.5,0.0,0.2)); List<String> keywords; script->get_language()->get_reserved_words(&keywords); for(List<String>::Element *E=keywords.front();E;E=E->next()) { text_edit->add_keyword_color(E->get(),keyword_color); } //colorize core types Color basetype_color= EDITOR_DEF("text_editor/base_type_color",Color(0.3,0.3,0.0)); text_edit->add_keyword_color("Vector2",basetype_color); text_edit->add_keyword_color("Vector3",basetype_color); text_edit->add_keyword_color("Plane",basetype_color); text_edit->add_keyword_color("Quat",basetype_color); text_edit->add_keyword_color("AABB",basetype_color); text_edit->add_keyword_color("Matrix3",basetype_color); text_edit->add_keyword_color("Transform",basetype_color); text_edit->add_keyword_color("Color",basetype_color); text_edit->add_keyword_color("Image",basetype_color); text_edit->add_keyword_color("InputEvent",basetype_color); text_edit->add_keyword_color("Rect2",basetype_color); text_edit->add_keyword_color("NodePath",basetype_color); //colorize engine types Color type_color= EDITOR_DEF("text_editor/engine_type_color",Color(0.0,0.2,0.4)); List<StringName> types; ObjectTypeDB::get_type_list(&types); for(List<StringName>::Element *E=types.front();E;E=E->next()) { String n = E->get(); if (n.begins_with("_")) n = n.substr(1, n.length()); text_edit->add_keyword_color(n,type_color); } //colorize comments Color comment_color = EDITOR_DEF("text_editor/comment_color",Color::hex(0x797e7eff)); List<String> comments; script->get_language()->get_comment_delimiters(&comments); for(List<String>::Element *E=comments.front();E;E=E->next()) { String comment = E->get(); String beg = comment.get_slice(" ",0); String end = comment.get_slice_count(" ")>1?comment.get_slice(" ",1):String(); text_edit->add_color_region(beg,end,comment_color,end==""); } //colorize strings Color string_color = EDITOR_DEF("text_editor/string_color",Color::hex(0x6b6f00ff)); List<String> strings; script->get_language()->get_string_delimiters(&strings); for (List<String>::Element *E=strings.front();E;E=E->next()) { String string = E->get(); String beg = string.get_slice(" ",0); String end = string.get_slice_count(" ")>1?string.get_slice(" ",1):String(); text_edit->add_color_region(beg,end,string_color,end==""); } //colorize symbols Color symbol_color= EDITOR_DEF("text_editor/symbol_color",Color::hex(0x005291ff)); text_edit->set_symbol_color(symbol_color); }
void ScriptDebuggerLocal::debug(ScriptLanguage *p_script, bool p_can_continue) { print_line("Debugger Break, Reason: '" + p_script->debug_get_error() + "'"); print_line("*Frame " + itos(0) + " - " + p_script->debug_get_stack_level_source(0) + ":" + itos(p_script->debug_get_stack_level_line(0)) + " in function '" + p_script->debug_get_stack_level_function(0) + "'"); print_line("Enter \"help\" for assistance."); int current_frame = 0; int total_frames = p_script->debug_get_stack_level_count(); while (true) { OS::get_singleton()->print("debug> "); String line = OS::get_singleton()->get_stdin_string().strip_edges(); if (line == "") { print_line("Debugger Break, Reason: '" + p_script->debug_get_error() + "'"); print_line("*Frame " + itos(current_frame) + " - " + p_script->debug_get_stack_level_source(current_frame) + ":" + itos(p_script->debug_get_stack_level_line(current_frame)) + " in function '" + p_script->debug_get_stack_level_function(current_frame) + "'"); print_line("Enter \"help\" for assistance."); } else if (line == "c" || line == "continue") break; else if (line == "bt" || line == "breakpoint") { for (int i = 0; i < total_frames; i++) { String cfi = (current_frame == i) ? "*" : " "; //current frame indicator print_line(cfi + "Frame " + itos(i) + " - " + p_script->debug_get_stack_level_source(i) + ":" + itos(p_script->debug_get_stack_level_line(i)) + " in function '" + p_script->debug_get_stack_level_function(i) + "'"); } } else if (line.begins_with("fr") || line.begins_with("frame")) { if (line.get_slice_count(" ") == 1) { print_line("*Frame " + itos(current_frame) + " - " + p_script->debug_get_stack_level_source(current_frame) + ":" + itos(p_script->debug_get_stack_level_line(current_frame)) + " in function '" + p_script->debug_get_stack_level_function(current_frame) + "'"); } else { int frame = line.get_slicec(' ', 1).to_int(); if (frame < 0 || frame >= total_frames) { print_line("Error: Invalid frame."); } else { current_frame = frame; print_line("*Frame " + itos(frame) + " - " + p_script->debug_get_stack_level_source(frame) + ":" + itos(p_script->debug_get_stack_level_line(frame)) + " in function '" + p_script->debug_get_stack_level_function(frame) + "'"); } } } else if (line == "lv" || line == "locals") { List<String> locals; List<Variant> values; p_script->debug_get_stack_level_locals(current_frame, &locals, &values); List<Variant>::Element *V = values.front(); for (List<String>::Element *E = locals.front(); E; E = E->next()) { print_line(E->get() + ": " + String(V->get())); V = V->next(); } } else if (line == "gv" || line == "globals") { List<String> locals; List<Variant> values; p_script->debug_get_globals(&locals, &values); List<Variant>::Element *V = values.front(); for (List<String>::Element *E = locals.front(); E; E = E->next()) { print_line(E->get() + ": " + String(V->get())); V = V->next(); } } else if (line == "mv" || line == "members") { List<String> locals; List<Variant> values; p_script->debug_get_stack_level_members(current_frame, &locals, &values); List<Variant>::Element *V = values.front(); for (List<String>::Element *E = locals.front(); E; E = E->next()) { print_line(E->get() + ": " + String(V->get())); V = V->next(); } } else if (line.begins_with("p") || line.begins_with("print")) { if (line.get_slice_count(" ") <= 1) { print_line("Usage: print <expre>"); } else { String expr = line.get_slicec(' ', 2); String res = p_script->debug_parse_stack_level_expression(current_frame, expr); print_line(res); } } else if (line == "s" || line == "step") { set_depth(-1); set_lines_left(1); break; } else if (line.begins_with("n") || line.begins_with("next")) { set_depth(0); set_lines_left(1); break; } else if (line.begins_with("br") || line.begins_with("break")) { if (line.get_slice_count(" ") <= 1) { //show breakpoints } else { String bppos = line.get_slicec(' ', 1); String source = bppos.get_slicec(':', 0).strip_edges(); int line = bppos.get_slicec(':', 1).strip_edges().to_int(); source = breakpoint_find_source(source); insert_breakpoint(line, source); print_line("BreakPoint at " + source + ":" + itos(line)); } } else if (line.begins_with("delete")) { if (line.get_slice_count(" ") <= 1) { clear_breakpoints(); } else { String bppos = line.get_slicec(' ', 1); String source = bppos.get_slicec(':', 0).strip_edges(); int line = bppos.get_slicec(':', 1).strip_edges().to_int(); source = breakpoint_find_source(source); remove_breakpoint(line, source); print_line("Removed BreakPoint at " + source + ":" + itos(line)); } } else if (line == "h" || line == "help") { print_line("Built-In Debugger command list:\n"); print_line("\tc,continue :\t\t Continue execution."); print_line("\tbt,backtrace :\t\t Show stack trace (frames)."); print_line("\tfr,frame <frame>:\t Change current frame."); print_line("\tlv,locals :\t\t Show local variables for current frame."); print_line("\tmv,members :\t\t Show member variables for \"this\" in frame."); print_line("\tgv,globals :\t\t Show global variables."); print_line("\tp,print <expr> :\t Execute and print variable in expression."); print_line("\ts,step :\t\t Step to next line."); print_line("\tn,next :\t\t Next line."); print_line("\tbr,break source:line :\t Place a breakpoint."); print_line("\tdelete [source:line]:\t\t Delete one/all breakpoints."); } else { print_line("Error: Invalid command, enter \"help\" for assistance."); } } }
void FileDialog::update_file_list() { tree->clear(); dir_access->list_dir_begin(); TreeItem *root = tree->create_item(); Ref<Texture> folder = get_icon("folder"); List<String> files; List<String> dirs; bool isdir; bool ishidden; bool show_hidden = show_hidden_files; String item; while ((item = dir_access->get_next(&isdir)) != "") { if (item == "." || item == "..") continue; ishidden = dir_access->current_is_hidden(); if (show_hidden || !ishidden) { if (!isdir) files.push_back(item); else dirs.push_back(item); } } dirs.sort_custom<NaturalNoCaseComparator>(); files.sort_custom<NaturalNoCaseComparator>(); while (!dirs.empty()) { String &dir_name = dirs.front()->get(); TreeItem *ti = tree->create_item(root); ti->set_text(0, dir_name); ti->set_icon(0, folder); Dictionary d; d["name"] = dir_name; d["dir"] = true; ti->set_metadata(0, d); dirs.pop_front(); } dirs.clear(); List<String> patterns; // build filter if (filter->get_selected() == filter->get_item_count() - 1) { // match all } else if (filters.size() > 1 && filter->get_selected() == 0) { // match all filters for (int i = 0; i < filters.size(); i++) { String f = filters[i].get_slice(";", 0); for (int j = 0; j < f.get_slice_count(","); j++) { patterns.push_back(f.get_slice(",", j).strip_edges()); } } } else { int idx = filter->get_selected(); if (filters.size() > 1) idx--; if (idx >= 0 && idx < filters.size()) { String f = filters[idx].get_slice(";", 0); for (int j = 0; j < f.get_slice_count(","); j++) { patterns.push_back(f.get_slice(",", j).strip_edges()); } } } String base_dir = dir_access->get_current_dir(); while (!files.empty()) { bool match = patterns.empty(); String match_str; for (List<String>::Element *E = patterns.front(); E; E = E->next()) { if (files.front()->get().matchn(E->get())) { match_str = E->get(); match = true; break; } } if (match) { TreeItem *ti = tree->create_item(root); ti->set_text(0, files.front()->get()); if (get_icon_func) { Ref<Texture> icon = get_icon_func(base_dir.plus_file(files.front()->get())); ti->set_icon(0, icon); } if (mode == MODE_OPEN_DIR) { ti->set_custom_color(0, get_color("files_disabled")); ti->set_selectable(0, false); } Dictionary d; d["name"] = files.front()->get(); d["dir"] = false; ti->set_metadata(0, d); if (file->get_text() == files.front()->get() || match_str == files.front()->get()) ti->select(0); } files.pop_front(); } if (tree->get_root() && tree->get_root()->get_children() && tree->get_selected() == NULL) tree->get_root()->get_children()->select(0); files.clear(); }
void FileDialog::_action_pressed() { if (mode == MODE_OPEN_FILES) { TreeItem *ti = tree->get_next_selected(NULL); String fbase = dir_access->get_current_dir(); PoolVector<String> files; while (ti) { files.push_back(fbase.plus_file(ti->get_text(0))); ti = tree->get_next_selected(ti); } if (files.size()) { emit_signal("files_selected", files); hide(); } return; } String f = dir_access->get_current_dir().plus_file(file->get_text()); if ((mode == MODE_OPEN_ANY || mode == MODE_OPEN_FILE) && dir_access->file_exists(f)) { emit_signal("file_selected", f); hide(); } else if (mode == MODE_OPEN_ANY || mode == MODE_OPEN_DIR) { String path = dir_access->get_current_dir(); path = path.replace("\\", "/"); TreeItem *item = tree->get_selected(); if (item) { Dictionary d = item->get_metadata(0); if (d["dir"] && d["name"] != "..") { path = path.plus_file(d["name"]); } } emit_signal("dir_selected", path); hide(); } if (mode == MODE_SAVE_FILE) { bool valid = false; if (filter->get_selected() == filter->get_item_count() - 1) { valid = true; // match none } else if (filters.size() > 1 && filter->get_selected() == 0) { // match all filters for (int i = 0; i < filters.size(); i++) { String flt = filters[i].get_slice(";", 0); for (int j = 0; j < flt.get_slice_count(","); j++) { String str = flt.get_slice(",", j).strip_edges(); if (f.match(str)) { valid = true; break; } } if (valid) break; } } else { int idx = filter->get_selected(); if (filters.size() > 1) idx--; if (idx >= 0 && idx < filters.size()) { String flt = filters[idx].get_slice(";", 0); int filterSliceCount = flt.get_slice_count(","); for (int j = 0; j < filterSliceCount; j++) { String str = (flt.get_slice(",", j).strip_edges()); if (f.match(str)) { valid = true; break; } } if (!valid && filterSliceCount > 0) { String str = (flt.get_slice(",", 0).strip_edges()); f += str.substr(1, str.length() - 1); file->set_text(f.get_file()); valid = true; } } else { valid = true; } } if (!valid) { exterr->popup_centered_minsize(Size2(250, 80)); return; } if (dir_access->file_exists(f)) { confirm_save->set_text(RTR("File Exists, Overwrite?")); confirm_save->popup_centered(Size2(200, 80)); } else { emit_signal("file_selected", f); hide(); } } }
void EditorFileDialog::update_file_list() { int thumbnail_size = EditorSettings::get_singleton()->get("filesystem/file_dialog/thumbnail_size"); thumbnail_size *= EDSCALE; Ref<Texture> folder_thumbnail; Ref<Texture> file_thumbnail; item_list->clear(); if (display_mode == DISPLAY_THUMBNAILS) { item_list->set_max_columns(0); item_list->set_icon_mode(ItemList::ICON_MODE_TOP); item_list->set_fixed_column_width(thumbnail_size * 3 / 2); item_list->set_max_text_lines(2); item_list->set_fixed_icon_size(Size2(thumbnail_size, thumbnail_size)); if (!has_icon("ResizedFolder", "EditorIcons")) { Ref<ImageTexture> folder = get_icon("FolderBig", "EditorIcons"); Ref<Image> img = folder->get_data(); img = img->duplicate(); img->resize(thumbnail_size, thumbnail_size); Ref<ImageTexture> resized_folder = Ref<ImageTexture>(memnew(ImageTexture)); resized_folder->create_from_image(img, 0); Theme::get_default()->set_icon("ResizedFolder", "EditorIcons", resized_folder); } folder_thumbnail = get_icon("ResizedFolder", "EditorIcons"); if (!has_icon("ResizedFile", "EditorIcons")) { Ref<ImageTexture> file = get_icon("FileBig", "EditorIcons"); Ref<Image> img = file->get_data(); img = img->duplicate(); img->resize(thumbnail_size, thumbnail_size); Ref<ImageTexture> resized_file = Ref<ImageTexture>(memnew(ImageTexture)); resized_file->create_from_image(img, 0); Theme::get_default()->set_icon("ResizedFile", "EditorIcons", resized_file); } file_thumbnail = get_icon("ResizedFile", "EditorIcons"); preview_vb->hide(); } else { item_list->set_icon_mode(ItemList::ICON_MODE_LEFT); item_list->set_max_columns(1); item_list->set_max_text_lines(1); item_list->set_fixed_column_width(0); item_list->set_fixed_icon_size(Size2()); if (preview->get_texture().is_valid()) preview_vb->show(); } String cdir = dir_access->get_current_dir(); bool skip_pp = access == ACCESS_RESOURCES && cdir == "res://"; dir_access->list_dir_begin(); Ref<Texture> folder = get_icon("folder", "FileDialog"); List<String> files; List<String> dirs; bool isdir; bool ishidden; bool show_hidden = show_hidden_files; String item; while ((item = dir_access->get_next(&isdir)) != "") { ishidden = dir_access->current_is_hidden(); if (show_hidden || !ishidden) { if (!isdir) files.push_back(item); else if (item != ".." || !skip_pp) dirs.push_back(item); } } if (dirs.find("..") == NULL) { //may happen if lacking permissions dirs.push_back(".."); } dirs.sort_custom<NaturalNoCaseComparator>(); files.sort_custom<NaturalNoCaseComparator>(); while (!dirs.empty()) { const String &dir_name = dirs.front()->get(); item_list->add_item(dir_name + "/"); if (display_mode == DISPLAY_THUMBNAILS) { item_list->set_item_icon(item_list->get_item_count() - 1, folder_thumbnail); } else { item_list->set_item_icon(item_list->get_item_count() - 1, folder); } Dictionary d; d["name"] = dir_name; d["path"] = String(); d["dir"] = true; item_list->set_item_metadata(item_list->get_item_count() - 1, d); dirs.pop_front(); } dirs.clear(); List<String> patterns; // build filter if (filter->get_selected() == filter->get_item_count() - 1) { // match all } else if (filters.size() > 1 && filter->get_selected() == 0) { // match all filters for (int i = 0; i < filters.size(); i++) { String f = filters[i].get_slice(";", 0); for (int j = 0; j < f.get_slice_count(","); j++) { patterns.push_back(f.get_slice(",", j).strip_edges()); } } } else { int idx = filter->get_selected(); if (filters.size() > 1) idx--; if (idx >= 0 && idx < filters.size()) { String f = filters[idx].get_slice(";", 0); for (int j = 0; j < f.get_slice_count(","); j++) { patterns.push_back(f.get_slice(",", j).strip_edges()); } } } String base_dir = dir_access->get_current_dir(); while (!files.empty()) { bool match = patterns.empty(); for (List<String>::Element *E = patterns.front(); E; E = E->next()) { if (files.front()->get().matchn(E->get())) { match = true; break; } } if (match) { //TreeItem *ti=tree->create_item(root); //ti->set_text(0,files.front()->get()); item_list->add_item(files.front()->get()); if (get_icon_func) { Ref<Texture> icon = get_icon_func(base_dir.plus_file(files.front()->get())); //ti->set_icon(0,icon); if (display_mode == DISPLAY_THUMBNAILS) { item_list->set_item_icon(item_list->get_item_count() - 1, file_thumbnail); item_list->set_item_tag_icon(item_list->get_item_count() - 1, icon); } else { item_list->set_item_icon(item_list->get_item_count() - 1, icon); } } if (mode == MODE_OPEN_DIR) { //disabled mode? //ti->set_custom_color(0,get_color("files_disabled")); //ti->set_selectable(0,false); } Dictionary d; d["name"] = files.front()->get(); d["dir"] = false; String fullpath = base_dir.plus_file(files.front()->get()); if (display_mode == DISPLAY_THUMBNAILS) { EditorResourcePreview::get_singleton()->queue_resource_preview(fullpath, this, "_thumbnail_result", fullpath); } d["path"] = base_dir.plus_file(files.front()->get()); //ti->set_metadata(0,d); item_list->set_item_metadata(item_list->get_item_count() - 1, d); if (file->get_text() == files.front()->get()) item_list->set_current(item_list->get_item_count() - 1); } files.pop_front(); } if (favorites->get_current() >= 0) { favorites->unselect(favorites->get_current()); } favorite->set_pressed(false); fav_up->set_disabled(true); fav_down->set_disabled(true); for (int i = 0; i < favorites->get_item_count(); i++) { if (favorites->get_item_metadata(i) == base_dir) { favorites->select(i); favorite->set_pressed(true); if (i > 0) { fav_up->set_disabled(false); } if (i < favorites->get_item_count() - 1) { fav_down->set_disabled(false); } break; } } // ?? /* if (tree->get_root() && tree->get_root()->get_children()) tree->get_root()->get_children()->select(0); */ files.clear(); }
void EditorFileDialog::_action_pressed() { if (mode == MODE_OPEN_FILES) { String fbase = dir_access->get_current_dir(); PoolVector<String> files; for (int i = 0; i < item_list->get_item_count(); i++) { if (item_list->is_selected(i)) files.push_back(fbase.plus_file(item_list->get_item_text(i))); } if (files.size()) { _save_to_recent(); emit_signal("files_selected", files); hide(); } return; } String f = dir_access->get_current_dir().plus_file(file->get_text()); if ((mode == MODE_OPEN_ANY || mode == MODE_OPEN_FILE) && dir_access->file_exists(f)) { _save_to_recent(); emit_signal("file_selected", f); hide(); } else if (mode == MODE_OPEN_ANY || mode == MODE_OPEN_DIR) { String path = dir_access->get_current_dir(); path = path.replace("\\", "/"); for (int i = 0; i < item_list->get_item_count(); i++) { if (item_list->is_selected(i)) { Dictionary d = item_list->get_item_metadata(i); if (d["dir"]) { path = path.plus_file(d["name"]); break; } } } _save_to_recent(); emit_signal("dir_selected", path); hide(); } if (mode == MODE_SAVE_FILE) { bool valid = false; if (filter->get_selected() == filter->get_item_count() - 1) { valid = true; //match none } else if (filters.size() > 1 && filter->get_selected() == 0) { // match all filters for (int i = 0; i < filters.size(); i++) { String flt = filters[i].get_slice(";", 0); for (int j = 0; j < flt.get_slice_count(","); j++) { String str = flt.get_slice(",", j).strip_edges(); if (f.match(str)) { valid = true; break; } } if (valid) break; } } else { int idx = filter->get_selected(); if (filters.size() > 1) idx--; if (idx >= 0 && idx < filters.size()) { String flt = filters[idx].get_slice(";", 0); int filterSliceCount = flt.get_slice_count(","); for (int j = 0; j < filterSliceCount; j++) { String str = (flt.get_slice(",", j).strip_edges()); if (f.match(str)) { valid = true; break; } } if (!valid && filterSliceCount > 0) { String str = (flt.get_slice(",", 0).strip_edges()); f += str.substr(1, str.length() - 1); _request_single_thumbnail(get_current_dir().plus_file(f.get_file())); file->set_text(f.get_file()); valid = true; } } else { valid = true; } } if (!valid) { exterr->popup_centered_minsize(Size2(250, 80) * EDSCALE); return; } if (dir_access->file_exists(f) && !disable_overwrite_warning) { confirm_save->set_text(TTR("File Exists, Overwrite?")); confirm_save->popup_centered(Size2(200, 80)); } else { _save_to_recent(); emit_signal("file_selected", f); hide(); } } }
void ScriptTextEditor::_load_theme_settings() { get_text_edit()->clear_colors(); /* keyword color */ get_text_edit()->set_custom_bg_color(EDITOR_DEF("text_editor/background_color",Color(0,0,0,0))); get_text_edit()->add_color_override("font_color",EDITOR_DEF("text_editor/text_color",Color(0,0,0))); get_text_edit()->add_color_override("font_selected_color",EDITOR_DEF("text_editor/text_selected_color",Color(1,1,1))); get_text_edit()->add_color_override("selection_color",EDITOR_DEF("text_editor/selection_color",Color(0.2,0.2,1))); Color keyword_color= EDITOR_DEF("text_editor/keyword_color",Color(0.5,0.0,0.2)); get_text_edit()->set_syntax_coloring(true); List<String> keywords; script->get_language()->get_reserved_words(&keywords); for(List<String>::Element *E=keywords.front();E;E=E->next()) { get_text_edit()->add_keyword_color(E->get(),keyword_color); } //colorize core types Color basetype_color= EDITOR_DEF("text_editor/base_type_color",Color(0.3,0.3,0.0)); get_text_edit()->add_keyword_color("Vector2",basetype_color); get_text_edit()->add_keyword_color("Vector3",basetype_color); get_text_edit()->add_keyword_color("Plane",basetype_color); get_text_edit()->add_keyword_color("Quat",basetype_color); get_text_edit()->add_keyword_color("AABB",basetype_color); get_text_edit()->add_keyword_color("Matrix3",basetype_color); get_text_edit()->add_keyword_color("Transform",basetype_color); get_text_edit()->add_keyword_color("Color",basetype_color); get_text_edit()->add_keyword_color("Image",basetype_color); get_text_edit()->add_keyword_color("InputEvent",basetype_color); //colorize engine types Color type_color= EDITOR_DEF("text_editor/engine_type_color",Color(0.0,0.2,0.4)); List<String> types; ObjectTypeDB::get_type_list(&types); for(List<String>::Element *E=types.front();E;E=E->next()) { get_text_edit()->add_keyword_color(E->get(),type_color); } //colorize comments Color comment_color = EDITOR_DEF("text_editor/comment_color",Color::hex(0x797e7eff)); List<String> comments; script->get_language()->get_comment_delimiters(&comments); for(List<String>::Element *E=comments.front();E;E=E->next()) { String comment = E->get(); String beg = comment.get_slice(" ",0); String end = comment.get_slice_count(" ")>1?comment.get_slice(" ",1):String(); get_text_edit()->add_color_region(beg,end,comment_color,end==""); } //colorize strings Color string_color = EDITOR_DEF("text_editor/string_color",Color::hex(0x6b6f00ff)); List<String> strings; script->get_language()->get_string_delimiters(&strings); for (List<String>::Element *E=strings.front();E;E=E->next()) { String string = E->get(); String beg = string.get_slice(" ",0); String end = string.get_slice_count(" ")>1?string.get_slice(" ",1):String(); get_text_edit()->add_color_region(beg,end,string_color,end==""); } //colorize symbols Color symbol_color= EDITOR_DEF("text_editor/symbol_color",Color::hex(0x005291ff)); get_text_edit()->set_symbol_color(symbol_color); }