diff options
Diffstat (limited to 'tools/editor')
37 files changed, 1567 insertions, 189 deletions
diff --git a/tools/editor/animation_editor.cpp b/tools/editor/animation_editor.cpp index 9eb6b4013f..aa0156b0c0 100644 --- a/tools/editor/animation_editor.cpp +++ b/tools/editor/animation_editor.cpp @@ -4075,12 +4075,22 @@ AnimationKeyEditor::AnimationKeyEditor() { track_editor->set_h_size_flags(SIZE_EXPAND_FILL); + track_pos = memnew( Control ); track_pos->set_area_as_parent_rect(); track_pos->set_ignore_mouse(true); track_editor->add_child(track_pos); track_pos->connect("draw",this,"_track_pos_draw"); + select_anim_warning = memnew( Label ); + track_editor->add_child(select_anim_warning); + select_anim_warning->set_area_as_parent_rect(); + select_anim_warning->set_text(TTR("Select an AnimationPlayer from the Scene Tree to edit animations.")); + select_anim_warning->set_autowrap(true); + select_anim_warning->set_align(Label::ALIGN_CENTER); + select_anim_warning->set_valign(Label::VALIGN_CENTER); + + v_scroll = memnew( VScrollBar ); hb->add_child(v_scroll); diff --git a/tools/editor/animation_editor.h b/tools/editor/animation_editor.h index 131100a205..3078b3288b 100644 --- a/tools/editor/animation_editor.h +++ b/tools/editor/animation_editor.h @@ -268,6 +268,7 @@ class AnimationKeyEditor : public VBoxContainer { EditorSelection *editor_selection; + Label *select_anim_warning; float _get_zoom_scale() const; @@ -343,6 +344,7 @@ public: void insert_value_key(const String& p_property, const Variant& p_value, bool p_advance); void insert_transform_key(Spatial *p_node,const String& p_sub,const Transform& p_xform); + void show_select_node_warning(bool p_show) { select_anim_warning->set_hidden(!p_show); } AnimationKeyEditor(); ~AnimationKeyEditor(); }; diff --git a/tools/editor/code_editor.cpp b/tools/editor/code_editor.cpp index 71ae171dfe..6c8d25aa01 100644 --- a/tools/editor/code_editor.cpp +++ b/tools/editor/code_editor.cpp @@ -133,8 +133,9 @@ bool FindReplaceBar::_search(uint32_t p_flags, int p_from_line, int p_from_col) if (found) { if (!preserve_cursor) { - text_edit->cursor_set_line(line); - text_edit->cursor_set_column(col+text.length()); + text_edit->cursor_set_line(line, false); + text_edit->cursor_set_column(col+text.length(), false); + text_edit->center_viewport_to_cursor(); } text_edit->set_search_text(text); diff --git a/tools/editor/create_dialog.cpp b/tools/editor/create_dialog.cpp index 210b799f3d..3ab2e35242 100644 --- a/tools/editor/create_dialog.cpp +++ b/tools/editor/create_dialog.cpp @@ -154,6 +154,9 @@ void CreateDialog::_update_search() { TreeItem *root = search_options->create_item(); root->set_text(0,base_type); + if (has_icon(base_type,"EditorIcons")) { + root->set_icon(0,get_icon(base_type,"EditorIcons")); + } List<StringName>::Element *I=type_list.front(); TreeItem *to_select=NULL; @@ -161,8 +164,11 @@ void CreateDialog::_update_search() { for(;I;I=I->next()) { + String type=I->get(); + if (base_type=="Node" && type.begins_with("Editor")) + continue; // do not show editor nodes if (!ObjectTypeDB::can_instance(type)) continue; // cant create what can't be instanced diff --git a/tools/editor/editor_file_system.cpp b/tools/editor/editor_file_system.cpp index cb7cefea26..582b9e2490 100644 --- a/tools/editor/editor_file_system.cpp +++ b/tools/editor/editor_file_system.cpp @@ -657,7 +657,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir,DirAccess da->change_dir(".."); } } else { - ERR_PRINTS(TTR("Cannot go into subdir:")+" "+E->get()); + ERR_PRINTS("Cannot go into subdir: "+E->get()); } p_progress.update(idx,total); diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp index dee521beb3..30b89cacc5 100644 --- a/tools/editor/editor_node.cpp +++ b/tools/editor/editor_node.cpp @@ -565,8 +565,8 @@ void EditorNode::save_resource_in_path(const Ref<Resource>& p_resource,const Str int flg=0; if (EditorSettings::get_singleton()->get("on_save/compress_binary_resources")) flg|=ResourceSaver::FLAG_COMPRESS; - if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) - flg|=ResourceSaver::FLAG_RELATIVE_PATHS; + //if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) + // flg|=ResourceSaver::FLAG_RELATIVE_PATHS; String path = Globals::get_singleton()->localize_path(p_path); Error err = ResourceSaver::save(path,p_resource,flg|ResourceSaver::FLAG_REPLACE_SUBRESOURCE_PATHS); @@ -1012,8 +1012,8 @@ void EditorNode::_save_scene(String p_file, int idx) { int flg=0; if (EditorSettings::get_singleton()->get("on_save/compress_binary_resources")) flg|=ResourceSaver::FLAG_COMPRESS; - if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) - flg|=ResourceSaver::FLAG_RELATIVE_PATHS; + //if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) + // flg|=ResourceSaver::FLAG_RELATIVE_PATHS; flg|=ResourceSaver::FLAG_REPLACE_SUBRESOURCE_PATHS; @@ -1175,6 +1175,8 @@ void EditorNode::_dialog_action(String p_file) { case SETTINGS_PICK_MAIN_SCENE: { Globals::get_singleton()->set("application/main_scene",p_file); + Globals::get_singleton()->set_persisting("application/main_scene",true); + Globals::get_singleton()->save(); //would be nice to show the project manager opened with the hilighted field.. } break; case FILE_SAVE_OPTIMIZED: { @@ -3820,7 +3822,12 @@ void EditorNode::request_instance_scene(const String &p_path) { } -ScenesDock *EditorNode::get_scenes_dock() { +void EditorNode::request_instance_scenes(const Vector<String>& p_files) { + + scene_tree_dock->instance_scenes(p_files); +} + +FileSystemDock *EditorNode::get_scenes_dock() { return scenes_dock; } @@ -3829,10 +3836,9 @@ SceneTreeDock *EditorNode::get_scene_tree_dock() { return scene_tree_dock; } -void EditorNode::_instance_request(const String& p_path){ - +void EditorNode::_instance_request(const Vector<String>& p_files) { - request_instance_scene(p_path); + request_instance_scenes(p_files); } void EditorNode::_property_keyed(const String& p_keyed,const Variant& p_value,bool p_advance) { @@ -6160,7 +6166,7 @@ EditorNode::EditorNode() { //node_dock->set_undoredo(&editor_data.get_undo_redo()); dock_slot[DOCK_SLOT_RIGHT_BL]->add_child(node_dock); - scenes_dock = memnew( ScenesDock(this) ); + scenes_dock = memnew( FileSystemDock(this) ); scenes_dock->set_name(TTR("FileSystem")); scenes_dock->set_use_thumbnails(int(EditorSettings::get_singleton()->get("file_dialog/display_mode"))==EditorFileDialog::DISPLAY_THUMBNAILS); dock_slot[DOCK_SLOT_LEFT_UR]->add_child(scenes_dock); diff --git a/tools/editor/editor_node.h b/tools/editor/editor_node.h index d18de1c531..793c148671 100644 --- a/tools/editor/editor_node.h +++ b/tools/editor/editor_node.h @@ -42,7 +42,7 @@ #include "scene/gui/split_container.h" #include "scene/gui/center_container.h" #include "scene/gui/texture_progress.h" -#include "tools/editor/scenes_dock.h" +#include "tools/editor/filesystem_dock.h" #include "tools/editor/scene_tree_editor.h" #include "tools/editor/property_editor.h" #include "tools/editor/create_dialog.h" @@ -275,7 +275,7 @@ private: PropertyEditor *property_editor; NodeDock *node_dock; VBoxContainer *prop_editor_vb; - ScenesDock *scenes_dock; + FileSystemDock *scenes_dock; EditorRunNative *run_native; HBoxContainer *search_bar; @@ -452,7 +452,7 @@ private: void _save_scene(String p_file, int idx = -1); - void _instance_request(const String& p_path); + void _instance_request(const Vector<String>& p_files); void _property_keyed(const String& p_keyed, const Variant& p_value, bool p_advance); void _transform_keyed(Object *sp,const String& p_sub,const Transform& p_key); @@ -666,7 +666,8 @@ public: static VSplitContainer *get_top_split() { return singleton->top_split; } void request_instance_scene(const String &p_path); - ScenesDock *get_scenes_dock(); + void request_instance_scenes(const Vector<String>& p_files); + FileSystemDock *get_scenes_dock(); SceneTreeDock *get_scene_tree_dock(); static UndoRedo* get_undo_redo() { return &singleton->editor_data.get_undo_redo(); } diff --git a/tools/editor/editor_profiler.cpp b/tools/editor/editor_profiler.cpp index c9ee60cd54..13327f0be9 100644 --- a/tools/editor/editor_profiler.cpp +++ b/tools/editor/editor_profiler.cpp @@ -135,6 +135,8 @@ void EditorProfiler::_item_edited() { frame_delay->set_wait_time(0.1); frame_delay->start(); } + + _update_plot(); } void EditorProfiler::_update_plot() { diff --git a/tools/editor/editor_settings.cpp b/tools/editor/editor_settings.cpp index c150e62754..9dcf71e256 100644 --- a/tools/editor/editor_settings.cpp +++ b/tools/editor/editor_settings.cpp @@ -611,8 +611,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { set("on_save/compress_binary_resources",true); set("on_save/save_modified_external_resources",true); - set("on_save/save_paths_as_relative",false); - set("on_save/save_paths_without_extension",false); + //set("on_save/save_paths_as_relative",false); + //set("on_save/save_paths_without_extension",false); set("text_editor/create_signal_callbacks",true); diff --git a/tools/editor/scenes_dock.cpp b/tools/editor/filesystem_dock.cpp index 75c983994e..378edd6667 100644 --- a/tools/editor/scenes_dock.cpp +++ b/tools/editor/filesystem_dock.cpp @@ -26,7 +26,7 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "scenes_dock.h" +#include "filesystem_dock.h" #include "os/dir_access.h" #include "os/file_access.h" #include "globals.h" @@ -39,7 +39,7 @@ #include "scene/main/viewport.h" -bool ScenesDock::_create_tree(TreeItem *p_parent,EditorFileSystemDirectory *p_dir) { +bool FileSystemDock::_create_tree(TreeItem *p_parent,EditorFileSystemDirectory *p_dir) { TreeItem *item = tree->create_item(p_parent); @@ -66,7 +66,7 @@ bool ScenesDock::_create_tree(TreeItem *p_parent,EditorFileSystemDirectory *p_di } -void ScenesDock::_update_tree() { +void FileSystemDock::_update_tree() { tree->clear(); updating_tree=true; @@ -97,7 +97,7 @@ void ScenesDock::_update_tree() { } -void ScenesDock::_notification(int p_what) { +void FileSystemDock::_notification(int p_what) { switch(p_what) { @@ -208,7 +208,7 @@ void ScenesDock::_notification(int p_what) { -void ScenesDock::_dir_selected() { +void FileSystemDock::_dir_selected() { TreeItem *ti = tree->get_selected(); if (!ti) @@ -241,7 +241,7 @@ void ScenesDock::_dir_selected() { } -void ScenesDock::_favorites_pressed() { +void FileSystemDock::_favorites_pressed() { TreeItem *sel = tree->get_selected(); if (!sel) @@ -270,7 +270,7 @@ void ScenesDock::_favorites_pressed() { } -String ScenesDock::get_selected_path() const { +String FileSystemDock::get_selected_path() const { TreeItem *sel = tree->get_selected(); if (!sel) @@ -279,12 +279,12 @@ String ScenesDock::get_selected_path() const { return "res://"+path; } -String ScenesDock::get_current_path() const { +String FileSystemDock::get_current_path() const { return path; } -void ScenesDock::_thumbnail_done(const String& p_path,const Ref<Texture>& p_preview, const Variant& p_udata) { +void FileSystemDock::_thumbnail_done(const String& p_path,const Ref<Texture>& p_preview, const Variant& p_udata) { bool valid=false; @@ -312,7 +312,7 @@ void ScenesDock::_thumbnail_done(const String& p_path,const Ref<Texture>& p_prev } -void ScenesDock::_change_file_display() { +void FileSystemDock::_change_file_display() { if (display_mode->is_pressed()) { display_mode->set_icon( get_icon("FileThumbnail","EditorIcons")); @@ -324,7 +324,7 @@ void ScenesDock::_change_file_display() { _update_files(true); } -void ScenesDock::_search(EditorFileSystemDirectory *p_path,List<FileInfo>* matches,int p_max_items) { +void FileSystemDock::_search(EditorFileSystemDirectory *p_path,List<FileInfo>* matches,int p_max_items) { if (matches->size()>p_max_items) return; @@ -371,7 +371,7 @@ void ScenesDock::_search(EditorFileSystemDirectory *p_path,List<FileInfo>* match } } -void ScenesDock::_update_files(bool p_keep_selection) { +void FileSystemDock::_update_files(bool p_keep_selection) { Set<String> cselection; @@ -584,13 +584,13 @@ void ScenesDock::_update_files(bool p_keep_selection) { } -void ScenesDock::_select_file(int p_idx) { +void FileSystemDock::_select_file(int p_idx) { files->select(p_idx,true); _file_option(FILE_OPEN); } -void ScenesDock::_go_to_tree() { +void FileSystemDock::_go_to_tree() { tree->show(); file_list_vb->hide(); @@ -602,7 +602,7 @@ void ScenesDock::_go_to_tree() { //file_options->hide(); } -void ScenesDock::_go_to_dir(const String& p_dir){ +void FileSystemDock::_go_to_dir(const String& p_dir){ DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES); if (da->change_dir(p_dir)==OK) { @@ -615,7 +615,7 @@ void ScenesDock::_go_to_dir(const String& p_dir){ } -void ScenesDock::_preview_invalidated(const String& p_path) { +void FileSystemDock::_preview_invalidated(const String& p_path) { if (p_path.get_base_dir()==path && search_box->get_text()==String() && file_list_vb->is_visible()) { @@ -635,7 +635,7 @@ void ScenesDock::_preview_invalidated(const String& p_path) { } } -void ScenesDock::_fs_changed() { +void FileSystemDock::_fs_changed() { button_hist_prev->set_disabled(history_pos==0); button_hist_next->set_disabled(history_pos+1==history.size()); @@ -656,7 +656,7 @@ void ScenesDock::_fs_changed() { set_process(false); } -void ScenesDock::_set_scannig_mode() { +void FileSystemDock::_set_scannig_mode() { split_box->hide(); button_hist_prev->set_disabled(true); @@ -671,7 +671,7 @@ void ScenesDock::_set_scannig_mode() { } -void ScenesDock::_fw_history() { +void FileSystemDock::_fw_history() { if (history_pos<history.size()-1) history_pos++; @@ -695,7 +695,7 @@ void ScenesDock::_fw_history() { } -void ScenesDock::_bw_history() { +void FileSystemDock::_bw_history() { if (history_pos>0) history_pos--; @@ -719,7 +719,7 @@ void ScenesDock::_bw_history() { } -void ScenesDock::_push_to_history() { +void FileSystemDock::_push_to_history() { history.resize(history_pos+1); if (history[history_pos]!=path) { @@ -733,7 +733,7 @@ void ScenesDock::_push_to_history() { } -void ScenesDock::_find_inside_move_files(EditorFileSystemDirectory *efsd,Vector<String>& files) { +void FileSystemDock::_find_inside_move_files(EditorFileSystemDirectory *efsd,Vector<String>& files) { for(int i=0;i<efsd->get_subdir_count();i++) { _find_inside_move_files(efsd->get_subdir(i),files); @@ -744,7 +744,7 @@ void ScenesDock::_find_inside_move_files(EditorFileSystemDirectory *efsd,Vector< } -void ScenesDock::_find_remaps(EditorFileSystemDirectory *efsd,Map<String,String> &renames,List<String>& to_remaps) { +void FileSystemDock::_find_remaps(EditorFileSystemDirectory *efsd,Map<String,String> &renames,List<String>& to_remaps) { for(int i=0;i<efsd->get_subdir_count();i++) { _find_remaps(efsd->get_subdir(i),renames,to_remaps); @@ -761,7 +761,7 @@ void ScenesDock::_find_remaps(EditorFileSystemDirectory *efsd,Map<String,String> } -void ScenesDock::_rename_operation(const String& p_to_path) { +void FileSystemDock::_rename_operation(const String& p_to_path) { if (move_files[0]==p_to_path) { EditorNode::get_singleton()->show_warning(TTR("Same source and destination files, doing nothing.")); @@ -808,7 +808,7 @@ void ScenesDock::_rename_operation(const String& p_to_path) { } -void ScenesDock::_move_operation(const String& p_to_path) { +void FileSystemDock::_move_operation(const String& p_to_path) { if (p_to_path==path) { EditorNode::get_singleton()->show_warning(TTR("Same source and destination paths, doing nothing.")); @@ -901,7 +901,7 @@ void ScenesDock::_move_operation(const String& p_to_path) { } -void ScenesDock::_file_option(int p_option) { +void FileSystemDock::_file_option(int p_option) { switch(p_option) { @@ -950,13 +950,20 @@ void ScenesDock::_file_option(int p_option) { } break; case FILE_INSTANCE: { - for (int i = 0; i<files->get_item_count(); i++) { + Vector<String> paths; + for (int i = 0; i<files->get_item_count(); i++) { + if (!files->is_selected(i)) + continue; String path =files->get_item_metadata(i); if (EditorFileSystem::get_singleton()->get_file_type(path)=="PackedScene") { - emit_signal("instance",path); + paths.push_back(path); } } + + if (!paths.empty()) { + emit_signal("instance", paths); + } } break; case FILE_DEPENDENCIES: { @@ -1085,7 +1092,7 @@ void ScenesDock::_file_option(int p_option) { } } -void ScenesDock::_open_pressed(){ +void FileSystemDock::_open_pressed(){ TreeItem *sel = tree->get_selected(); @@ -1116,7 +1123,7 @@ void ScenesDock::_open_pressed(){ } -void ScenesDock::_search_changed(const String& p_text) { +void FileSystemDock::_search_changed(const String& p_text) { if (!search_box->is_visible()) return; //wtf @@ -1124,29 +1131,29 @@ void ScenesDock::_search_changed(const String& p_text) { _update_files(false); } -void ScenesDock::_rescan() { +void FileSystemDock::_rescan() { _set_scannig_mode(); EditorFileSystem::get_singleton()->scan(); } -void ScenesDock::fix_dependencies(const String& p_for_file) { +void FileSystemDock::fix_dependencies(const String& p_for_file) { deps_editor->edit(p_for_file); } -void ScenesDock::focus_on_filter() { +void FileSystemDock::focus_on_filter() { } -void ScenesDock::set_use_thumbnails(bool p_use) { +void FileSystemDock::set_use_thumbnails(bool p_use) { display_mode->set_pressed(!p_use); } -Variant ScenesDock::get_drag_data_fw(const Point2& p_point,Control* p_from) { +Variant FileSystemDock::get_drag_data_fw(const Point2& p_point,Control* p_from) { if (p_from==tree) { @@ -1223,7 +1230,7 @@ Variant ScenesDock::get_drag_data_fw(const Point2& p_point,Control* p_from) { return Variant(); } -bool ScenesDock::can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const{ +bool FileSystemDock::can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const{ Dictionary drag_data = p_data; @@ -1289,7 +1296,7 @@ bool ScenesDock::can_drop_data_fw(const Point2& p_point,const Variant& p_data,Co return false; } -void ScenesDock::drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from){ +void FileSystemDock::drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from){ if (!can_drop_data_fw(p_point,p_data,p_from)) return; @@ -1441,7 +1448,7 @@ void ScenesDock::drop_data_fw(const Point2& p_point,const Variant& p_data,Contro } -void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) { +void FileSystemDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) { Vector<String> filenames; @@ -1564,43 +1571,43 @@ void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) { } -void ScenesDock::_bind_methods() { +void FileSystemDock::_bind_methods() { - ObjectTypeDB::bind_method(_MD("_update_tree"),&ScenesDock::_update_tree); - ObjectTypeDB::bind_method(_MD("_rescan"),&ScenesDock::_rescan); - ObjectTypeDB::bind_method(_MD("_favorites_pressed"),&ScenesDock::_favorites_pressed); + ObjectTypeDB::bind_method(_MD("_update_tree"),&FileSystemDock::_update_tree); + ObjectTypeDB::bind_method(_MD("_rescan"),&FileSystemDock::_rescan); + ObjectTypeDB::bind_method(_MD("_favorites_pressed"),&FileSystemDock::_favorites_pressed); // ObjectTypeDB::bind_method(_MD("_instance_pressed"),&ScenesDock::_instance_pressed); - ObjectTypeDB::bind_method(_MD("_open_pressed"),&ScenesDock::_open_pressed); + ObjectTypeDB::bind_method(_MD("_open_pressed"),&FileSystemDock::_open_pressed); - ObjectTypeDB::bind_method(_MD("_thumbnail_done"),&ScenesDock::_thumbnail_done); - ObjectTypeDB::bind_method(_MD("_select_file"), &ScenesDock::_select_file); - ObjectTypeDB::bind_method(_MD("_go_to_tree"), &ScenesDock::_go_to_tree); - ObjectTypeDB::bind_method(_MD("_go_to_dir"), &ScenesDock::_go_to_dir); - ObjectTypeDB::bind_method(_MD("_change_file_display"), &ScenesDock::_change_file_display); - ObjectTypeDB::bind_method(_MD("_fw_history"), &ScenesDock::_fw_history); - ObjectTypeDB::bind_method(_MD("_bw_history"), &ScenesDock::_bw_history); - ObjectTypeDB::bind_method(_MD("_fs_changed"), &ScenesDock::_fs_changed); - ObjectTypeDB::bind_method(_MD("_dir_selected"), &ScenesDock::_dir_selected); - ObjectTypeDB::bind_method(_MD("_file_option"), &ScenesDock::_file_option); - ObjectTypeDB::bind_method(_MD("_move_operation"), &ScenesDock::_move_operation); - ObjectTypeDB::bind_method(_MD("_rename_operation"), &ScenesDock::_rename_operation); + ObjectTypeDB::bind_method(_MD("_thumbnail_done"),&FileSystemDock::_thumbnail_done); + ObjectTypeDB::bind_method(_MD("_select_file"), &FileSystemDock::_select_file); + ObjectTypeDB::bind_method(_MD("_go_to_tree"), &FileSystemDock::_go_to_tree); + ObjectTypeDB::bind_method(_MD("_go_to_dir"), &FileSystemDock::_go_to_dir); + ObjectTypeDB::bind_method(_MD("_change_file_display"), &FileSystemDock::_change_file_display); + ObjectTypeDB::bind_method(_MD("_fw_history"), &FileSystemDock::_fw_history); + ObjectTypeDB::bind_method(_MD("_bw_history"), &FileSystemDock::_bw_history); + ObjectTypeDB::bind_method(_MD("_fs_changed"), &FileSystemDock::_fs_changed); + ObjectTypeDB::bind_method(_MD("_dir_selected"), &FileSystemDock::_dir_selected); + ObjectTypeDB::bind_method(_MD("_file_option"), &FileSystemDock::_file_option); + ObjectTypeDB::bind_method(_MD("_move_operation"), &FileSystemDock::_move_operation); + ObjectTypeDB::bind_method(_MD("_rename_operation"), &FileSystemDock::_rename_operation); - ObjectTypeDB::bind_method(_MD("_search_changed"), &ScenesDock::_search_changed); + ObjectTypeDB::bind_method(_MD("_search_changed"), &FileSystemDock::_search_changed); - ObjectTypeDB::bind_method(_MD("get_drag_data_fw"), &ScenesDock::get_drag_data_fw); - ObjectTypeDB::bind_method(_MD("can_drop_data_fw"), &ScenesDock::can_drop_data_fw); - ObjectTypeDB::bind_method(_MD("drop_data_fw"), &ScenesDock::drop_data_fw); - ObjectTypeDB::bind_method(_MD("_files_list_rmb_select"),&ScenesDock::_files_list_rmb_select); + ObjectTypeDB::bind_method(_MD("get_drag_data_fw"), &FileSystemDock::get_drag_data_fw); + ObjectTypeDB::bind_method(_MD("can_drop_data_fw"), &FileSystemDock::can_drop_data_fw); + ObjectTypeDB::bind_method(_MD("drop_data_fw"), &FileSystemDock::drop_data_fw); + ObjectTypeDB::bind_method(_MD("_files_list_rmb_select"),&FileSystemDock::_files_list_rmb_select); - ObjectTypeDB::bind_method(_MD("_preview_invalidated"),&ScenesDock::_preview_invalidated); + ObjectTypeDB::bind_method(_MD("_preview_invalidated"),&FileSystemDock::_preview_invalidated); - ADD_SIGNAL(MethodInfo("instance")); + ADD_SIGNAL(MethodInfo("instance", PropertyInfo(Variant::STRING_ARRAY, "files"))); ADD_SIGNAL(MethodInfo("open")); } -ScenesDock::ScenesDock(EditorNode *p_editor) { +FileSystemDock::FileSystemDock(EditorNode *p_editor) { editor=p_editor; @@ -1766,6 +1773,6 @@ ScenesDock::ScenesDock(EditorNode *p_editor) { add_constant_override("separation",3); } -ScenesDock::~ScenesDock() { +FileSystemDock::~FileSystemDock() { } diff --git a/tools/editor/scenes_dock.h b/tools/editor/filesystem_dock.h index 0973fce250..171dbd16e9 100644 --- a/tools/editor/scenes_dock.h +++ b/tools/editor/filesystem_dock.h @@ -26,8 +26,8 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef SCENES_DOCK_H -#define SCENES_DOCK_H +#ifndef FILESYSTEM_DOCK_H +#define FILESYSTEM_DOCK_H #include "scene/main/timer.h" #include "scene/gui/control.h" @@ -51,8 +51,8 @@ class EditorNode; -class ScenesDock : public VBoxContainer { - OBJ_TYPE( ScenesDock, VBoxContainer ); +class FileSystemDock : public VBoxContainer { + OBJ_TYPE( FileSystemDock, VBoxContainer ); enum FileMenu { FILE_OPEN, @@ -184,8 +184,8 @@ public: void set_use_thumbnails(bool p_use); - ScenesDock(EditorNode *p_editor); - ~ScenesDock(); + FileSystemDock(EditorNode *p_editor); + ~FileSystemDock(); }; diff --git a/tools/editor/icons/2x/icon_group.png b/tools/editor/icons/2x/icon_group.png Binary files differindex 062e1bf3fe..158efa5fe4 100644 --- a/tools/editor/icons/2x/icon_group.png +++ b/tools/editor/icons/2x/icon_group.png diff --git a/tools/editor/icons/2x/icon_object.png b/tools/editor/icons/2x/icon_object.png Binary files differindex 36ac3457bf..dc0a94aacd 100644 --- a/tools/editor/icons/2x/icon_object.png +++ b/tools/editor/icons/2x/icon_object.png diff --git a/tools/editor/icons/2x/icon_ungroup.png b/tools/editor/icons/2x/icon_ungroup.png Binary files differindex 8aaccb40a1..bb46185370 100644 --- a/tools/editor/icons/2x/icon_ungroup.png +++ b/tools/editor/icons/2x/icon_ungroup.png diff --git a/tools/editor/icons/SCsub b/tools/editor/icons/SCsub index 7132968c88..f2f5dcca48 100644 --- a/tools/editor/icons/SCsub +++ b/tools/editor/icons/SCsub @@ -65,7 +65,7 @@ def make_editor_icons_action(target, source, env): s.write("static Ref<ImageTexture> make_icon(const uint8_t* p_png,const uint8_t* p_hidpi_png) {\n") s.write("\tRef<ImageTexture> texture( memnew( ImageTexture ) );\n") s.write("\tImage img((editor_is_hidpi()&&p_hidpi_png)?p_hidpi_png:p_png);\n") - s.write("\tif (editor_is_hidpi() && !p_hidpi_png) img.expand_x2_hq2x();\n") + s.write("\tif (editor_is_hidpi() && !p_hidpi_png) { img.convert(Image::FORMAT_RGBA); img.expand_x2_hq2x(); }\n") s.write("\ttexture->create_from_image( img,ImageTexture::FLAG_FILTER );\n") s.write("\treturn texture;\n") s.write("}\n\n") diff --git a/tools/editor/icons/icon_group.png b/tools/editor/icons/icon_group.png Binary files differindex e45ba2d892..5ffc90455e 100644 --- a/tools/editor/icons/icon_group.png +++ b/tools/editor/icons/icon_group.png diff --git a/tools/editor/icons/icon_object.png b/tools/editor/icons/icon_object.png Binary files differindex 7aef54bc05..f4f018c863 100644 --- a/tools/editor/icons/icon_object.png +++ b/tools/editor/icons/icon_object.png diff --git a/tools/editor/icons/icon_ungroup.png b/tools/editor/icons/icon_ungroup.png Binary files differindex 9553ef5654..b4c2e01814 100644 --- a/tools/editor/icons/icon_ungroup.png +++ b/tools/editor/icons/icon_ungroup.png diff --git a/tools/editor/icons/source/icon_group.svg b/tools/editor/icons/source/icon_group.svg index bccb23ade3..c8d20af9dd 100644 --- a/tools/editor/icons/source/icon_group.svg +++ b/tools/editor/icons/source/icon_group.svg @@ -15,7 +15,7 @@ id="svg2" version="1.1" inkscape:version="0.91 r13725" - inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png" + inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_ungroup.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" sodipodi:docname="icon_group.svg"> @@ -28,9 +28,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="31.999999" - inkscape:cx="6.3400278" - inkscape:cy="8.8086774" + inkscape:zoom="22.627417" + inkscape:cx="10.459761" + inkscape:cy="9.5219725" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -46,7 +46,11 @@ inkscape:window-height="1016" inkscape:window-x="0" inkscape:window-y="27" - inkscape:window-maximized="1"> + inkscape:window-maximized="1" + inkscape:snap-midpoints="false" + inkscape:snap-smooth-nodes="false" + inkscape:object-nodes="false" + showguides="false"> <inkscape:grid type="xygrid" id="grid3336" @@ -70,9 +74,1044 @@ id="layer1" transform="translate(0,-1036.3622)"> <path - style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="M 8 1 C 4.1340068 1 1 4.134 1 8 C 1 11.866 4.1340068 15 8 15 C 11.865993 15 15 11.866 15 8 C 15 4.134 11.865993 1 8 1 z M 8 3 A 2 2 0 0 1 10 5 A 2 2 0 0 1 8 7 A 2 2 0 0 1 6 5 A 2 2 0 0 1 8 3 z M 5 8 A 2 2 0 0 1 7 10 A 2 2 0 0 1 5 12 A 2 2 0 0 1 3 10 A 2 2 0 0 1 5 8 z M 11 8 A 2 2 0 0 1 13 10 A 2 2 0 0 1 11 12 A 2 2 0 0 1 9 10 A 2 2 0 0 1 11 8 z " - transform="translate(0,1036.3622)" - id="path4154" /> + style="opacity:1;fill:#e0e0e0;fill-opacity:0.39215687;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 7 1 L 7 3 L 7 7 L 3 7 C 3 6.9999766 2.554 7 2 7 C 1.446 7 1 6.9999766 1 7 L 1 9 L 1 13 C 1 13.000023 1.446 13 2 13 C 2.554 13 3 13.000023 3 13 L 3 9 L 7 9 L 7 13 L 3 13 C 2.9999766 13 3 13.446 3 14 C 3 14.554 2.9999766 15 3 15 L 7 15 C 7 15.000023 7.446 15 8 15 C 8.554 15 9 15.000023 9 15 L 9 13 L 9 9 L 13 9 C 13 9.0000234 13.446 9 14 9 C 14.554 9 15 9.0000234 15 9 L 15 7 L 15 3 C 15 2.9999766 14.554 3 14 3 C 13.446 3 13 2.9999766 13 3 L 13 7 L 9 7 L 9 3 L 13 3 C 13.000023 3 13 2.554 13 2 C 13 1.446 13.000023 1 13 1 L 9 1 C 9 0.99997659 8.554 1 8 1 C 7.446 1 7 0.99997659 7 1 z " + id="rect4697" + transform="translate(0,1036.3622)" /> + <rect + ry="4.3456585e-05" + rx="4.5000234" + y="996.36218" + x="-20.000004" + height="15.999995" + width="36.000008" + id="rect4379" + style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="8.6913296e-06" + rx="24" + y="17.999989" + x="998.36218" + height="1" + width="12" + id="rect4153" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="matrix(0,1,-1,0,0,0)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4151" + width="12" + height="1" + x="-17.999989" + y="997.36218" + rx="24" + ry="8.6913296e-06" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + transform="matrix(0,1,-1,0,0,0)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4155" + width="12" + height="1" + x="998.36218" + y="4.99999" + rx="24" + ry="8.6913296e-06" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="8.6913296e-06" + rx="24" + y="1010.3622" + x="-17.999989" + height="1" + width="12" + id="rect4157" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + transform="matrix(0,1,-1,0,0,0)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4159" + width="4.9999809" + height="1.0000036" + x="1003.3622" + y="15.999995" + rx="9.9999619" + ry="8.6913606e-06" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="4.3456628e-05" + rx="2.0000134" + y="11.000003" + x="1002.3622" + height="4.9999976" + width="1.0000067" + id="rect4161" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="matrix(0,1,-1,0,0,0)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="8.6913606e-06" + rx="9.9999619" + y="9.9999886" + x="1003.3622" + height="1.0000036" + width="4.9999809" + id="rect4163" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="matrix(0,1,-1,0,0,0)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + transform="matrix(0,1,-1,0,0,0)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4165" + width="1.0000067" + height="4.9999976" + x="1008.3622" + y="11.000002" + rx="2.0000134" + ry="4.3456628e-05" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4167" + sodipodi:type="arc" + sodipodi:cx="-17.999989" + sodipodi:cy="998.36218" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m -17.999989,999.36218 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + d="m 5.9999948,999.36218 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="998.36218" + sodipodi:cx="5.9999948" + sodipodi:type="arc" + id="path4169" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="scale(-1,1)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + transform="scale(-1,1)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4171" + sodipodi:type="arc" + sodipodi:cx="5.9999948" + sodipodi:cy="1010.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m 5.9999948,1011.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + d="m -17.999994,1011.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1010.3622" + sodipodi:cx="-17.999994" + sodipodi:type="arc" + id="path4173" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4175" + sodipodi:type="arc" + sodipodi:cx="-15.999995" + sodipodi:cy="1008.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m -15.999995,1009.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + d="m -15.999995,1004.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1003.3622" + sodipodi:cx="-15.999995" + sodipodi:type="arc" + id="path4177-3" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + d="m 10.999986,1009.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1008.3622" + sodipodi:cx="10.999986" + sodipodi:type="arc" + id="path4179-6" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="scale(-1,1)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4181" + sodipodi:type="arc" + sodipodi:cx="10.999986" + sodipodi:cy="1003.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m 10.999986,1004.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" + transform="scale(-1,1)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + inkscape:connector-curvature="0" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m -12.99999,999.36232 a 1,1 0 0 0 -0.865235,0.5 1,1 0 0 0 -0.134765,0.52348 l 0,0.9765 c 0.361502,0 0.445997,0 1,0 l 0,-1 5,0 0,1 0,1.5 0,2.5 -1,0 0,1 1,0 a 1,1 0 0 0 0.865234,-0.5 1,1 0 0 0 0.134766,-0.5 l 0,-2.5 0,-2.4765 a 1,1 0 0 0 0,-0.024 1,1 0 0 0 -0.134766,-0.49998 1,1 0 0 0 -0.865234,-0.5 l -5,-10e-5 z" + id="rect4183" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="8.6913606e-06" + rx="9.9999619" + y="-4.0000043" + x="1003.3622" + height="1.0000036" + width="4.9999809" + id="rect4389" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="matrix(0,1,-1,0,0,0)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + transform="matrix(0,1,-1,0,0,0)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4391" + width="1.0000067" + height="4.9999976" + x="1002.3622" + y="-8.9999962" + rx="2.0000134" + ry="4.3456628e-05" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + transform="matrix(0,1,-1,0,0,0)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4393" + width="4.9999809" + height="1.0000036" + x="1003.3622" + y="-10.00001" + rx="9.9999619" + ry="8.6913606e-06" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="4.3456628e-05" + rx="2.0000134" + y="-8.9999971" + x="1008.3622" + height="4.9999976" + width="1.0000067" + id="rect4395" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="matrix(0,1,-1,0,0,0)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + d="m 4.0000043,1009.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1008.3622" + sodipodi:cx="4.0000043" + sodipodi:type="arc" + id="path4405" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4407" + sodipodi:type="arc" + sodipodi:cx="4.0000043" + sodipodi:cy="1003.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m 4.0000043,1004.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + transform="scale(-1,1)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4409" + sodipodi:type="arc" + sodipodi:cx="-9.0000134" + sodipodi:cy="1008.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m -9.0000133,1009.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 -10e-8,-1 1,1 0 0 1 0.8660255,-0.5 l -10e-8,1 z" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + transform="scale(-1,1)" + d="m -9.0000133,1004.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 -10e-8,-1 1,1 0 0 1 0.8660255,-0.5 l -10e-8,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1003.3622" + sodipodi:cx="-9.0000134" + sodipodi:type="arc" + id="path4411" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + id="path4413" + d="m 7.0000094,999.36232 a 1,1 0 0 0 -0.865235,0.5 1,1 0 0 0 -0.134765,0.52348 l 0,0.9765 c 0.361502,0 0.445997,0 1,0 l 0,-1 5.0000006,0 0,1 0,1.5 0,2.5 -1,0 0,1 1,0 a 1,1 0 0 0 0.865234,-0.5 1,1 0 0 0 0.134766,-0.5 l 0,-2.5 0,-2.4765 a 1,1 0 0 0 0,-0.024 1,1 0 0 0 -0.134766,-0.49998 1,1 0 0 0 -0.865234,-0.5 l -5.0000006,-10e-5 z" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:connector-curvature="0" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4415" + width="36.000008" + height="15.999995" + x="-19.999994" + y="1012.3622" + rx="4.5000234" + ry="4.3456585e-05" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + d="m -16.000053,1020.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1019.3622" + sodipodi:cx="-16.000053" + sodipodi:type="arc" + id="path4417" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + d="m 11.000043,1025.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1024.3622" + sodipodi:cx="11.000043" + sodipodi:type="arc" + id="path4419" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="scale(-1,1)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4421" + width="2" + height="5" + x="-19.000053" + y="1020.3622" + rx="2.00001" + ry="4.3456599e-05" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="1.7382426e-05" + rx="5.000021" + y="1018.3622" + x="-17.00005" + height="1.9999754" + width="4.9999962" + id="rect4423" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="4.3456599e-05" + rx="2.00001" + y="1020.3622" + x="-12.000043" + height="5" + width="2" + id="rect4425" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4427" + width="2" + height="5" + x="1025.3622" + y="12.000043" + rx="2.00001" + ry="4.3456599e-05" + transform="matrix(0,1,-1,0,0,0)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4429" + sodipodi:type="arc" + sodipodi:cx="-17.000048" + sodipodi:cy="1020.3622" + sodipodi:rx="2" + sodipodi:ry="2" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m -17.000048,1022.3622 a 2,2 0 0 1 -1.73205,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.73205,-1 l 0,2 z" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + d="m -17.000048,1027.3622 a 2,2 0 0 1 -1.73205,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.73205,-1 l 0,2 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="2" + sodipodi:rx="2" + sodipodi:cy="1025.3622" + sodipodi:cx="-17.000048" + sodipodi:type="arc" + id="path4431" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + d="m 12.000043,1022.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1 l 0,2 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="2" + sodipodi:rx="2" + sodipodi:cy="1020.3622" + sodipodi:cx="12.000043" + sodipodi:type="arc" + id="path4433" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="scale(-1,1)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4435" + sodipodi:type="arc" + sodipodi:cx="12.000043" + sodipodi:cy="1025.3622" + sodipodi:rx="2" + sodipodi:ry="2" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m 12.000043,1027.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1 l 0,2 z" + transform="scale(-1,1)" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + inkscape:connector-curvature="0" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m -12.000048,1013.3622 a 2,2 0 0 0 -1.732422,1 2,2 0 0 0 -0.265625,1 l -0.0019,0 0,1 2,0 0,-1 2.5000001,0 2.5,0 0,3 0,2 -1,0 0,2 1,0 a 2,2 0 0 0 1.732422,-1 2,2 0 0 0 0.265625,-1 l 0.002,0 0,-5 -0.002,0 a 2,2 0 0 0 -0.265625,-1 2,2 0 0 0 -1.732422,-1 l -2.5,0 -2.5000001,0 z" + id="path4437" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + inkscape:connector-curvature="0" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m -17.000048,1013.3622 a 2,2 0 0 0 -1.732422,1 2,2 0 0 0 -0.265625,1 c 0,0 -0.0019,0 -0.0019,0 l 0,7 c 0,0 0.446,0 1,0 0.554,0 1,0 1,0 l 0,-5 0,-2 5,0 5.0000001,0 0,-2 -5.0000001,0 -5,0 z m 10.0000001,5 0,7 -4.5000001,0 -4.5,0 0,2 4.5,0 4.5000001,0 a 2,2 0 0 0 1.732422,-1 2,2 0 0 0 0.265625,-1 c 0,0 0.002,0 0.002,0 l 0,-7 c 0,0 -0.446,0 -1,0 -0.554,0 -1,0 -1,0 z" + id="path4439" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4441" + width="2" + height="2" + x="-14.000048" + y="1016.3622" + rx="2.00001" + ry="3.3799501e-05" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="3.3799501e-05" + rx="2.00001" + y="1020.3622" + x="-10.000052" + height="2" + width="2" + id="rect4443" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4445" + sodipodi:type="arc" + sodipodi:cx="3.9999421" + sodipodi:cy="1019.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m 3.9999421,1020.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + transform="scale(-1,1)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4447" + sodipodi:type="arc" + sodipodi:cx="-8.9999523" + sodipodi:cy="1024.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m -8.9999523,1025.3622 a 1,1 0 0 1 -0.8660254,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.8660254,-0.5 l 0,1 z" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="4.3456599e-05" + rx="2.00001" + y="1020.3622" + x="0.99994206" + height="5" + width="2" + id="rect4449" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4451" + width="4.9999962" + height="1.9999754" + x="2.9999459" + y="1018.3622" + rx="5.000021" + ry="1.7382426e-05" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4453" + width="2" + height="5" + x="7.9999528" + y="1020.3622" + rx="2.00001" + ry="4.3456599e-05" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + transform="matrix(0,1,-1,0,0,0)" + ry="4.3456599e-05" + rx="2.00001" + y="-7.9999528" + x="1025.3622" + height="5" + width="2" + id="rect4455" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + d="m 2.9999478,1022.3622 a 2,2 0 0 1 -1.7320508,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1 l 0,2 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="2" + sodipodi:rx="2" + sodipodi:cy="1020.3622" + sodipodi:cx="2.9999478" + sodipodi:type="arc" + id="path4457" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4459" + sodipodi:type="arc" + sodipodi:cx="2.9999478" + sodipodi:cy="1025.3622" + sodipodi:rx="2" + sodipodi:ry="2" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m 2.9999478,1027.3622 a 2,2 0 0 1 -1.7320508,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1 l 0,2 z" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + transform="scale(-1,1)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4461" + sodipodi:type="arc" + sodipodi:cx="-7.9999528" + sodipodi:cy="1020.3622" + sodipodi:rx="2" + sodipodi:ry="2" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m -7.9999527,1022.3622 a 2,2 0 0 1 -1.7320509,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1 l 0,2 z" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + transform="scale(-1,1)" + d="m -7.9999527,1027.3622 a 2,2 0 0 1 -1.7320509,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1 l 0,2 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="2" + sodipodi:rx="2" + sodipodi:cy="1025.3622" + sodipodi:cx="-7.9999528" + sodipodi:type="arc" + id="path4463" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <path + id="path4465" + d="m 7.9999475,1013.3622 a 2,2 0 0 0 -1.732422,1 2,2 0 0 0 -0.265625,1 l -0.0019,0 0,1 2,0 0,-1 2.5000005,0 2.5,0 0,3 0,2 -1,0 0,2 1,0 a 2,2 0 0 0 1.732422,-1 2,2 0 0 0 0.265625,-1 l 0.002,0 0,-5 -0.002,0 a 2,2 0 0 0 -0.265625,-1 2,2 0 0 0 -1.732422,-1 l -2.5,0 -2.5000005,0 z" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:connector-curvature="0" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + ry="3.3799501e-05" + rx="2.00001" + y="1016.3622" + x="5.999948" + height="2" + width="2" + id="rect4469" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4471" + width="2" + height="2" + x="9.9999428" + y="1020.3622" + rx="2.00001" + ry="3.3799501e-05" + inkscape:export-filename="/home/djrm/rect4471.png" + inkscape:export-xdpi="180" + inkscape:export-ydpi="180" /> + <rect + transform="matrix(0,1,-1,0,0,0)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4473" + width="12" + height="1" + x="1038.3622" + y="-35.500008" + rx="24" + ry="8.6913296e-06" /> + <rect + ry="8.6913296e-06" + rx="24" + y="1037.3622" + x="35.500008" + height="1" + width="12" + id="rect4475" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + ry="8.6913296e-06" + rx="24" + y="-48.500004" + x="1038.3622" + height="1" + width="12" + id="rect4477" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="matrix(0,1,-1,0,0,0)" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4479" + width="12" + height="1" + x="35.500008" + y="1050.3622" + rx="24" + ry="8.6913296e-06" /> + <rect + ry="8.6913606e-06" + rx="9.9999619" + y="-37.5" + x="1043.3622" + height="1.0000036" + width="4.9999809" + id="rect4481" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="matrix(0,1,-1,0,0,0)" /> + <rect + transform="matrix(0,1,-1,0,0,0)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4483" + width="1.0000067" + height="4.9999976" + x="1042.3622" + y="-42.499992" + rx="2.0000134" + ry="4.3456628e-05" /> + <rect + transform="matrix(0,1,-1,0,0,0)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4485" + width="4.9999809" + height="1.0000036" + x="1043.3622" + y="-43.500008" + rx="9.9999619" + ry="8.6913606e-06" /> + <rect + ry="4.3456628e-05" + rx="2.0000134" + y="-42.499992" + x="1048.3622" + height="4.9999976" + width="1.0000067" + id="rect4487" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="matrix(0,1,-1,0,0,0)" /> + <path + d="m 35.500008,1039.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1038.3622" + sodipodi:cx="35.500008" + sodipodi:type="arc" + id="path4489" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + transform="scale(-1,1)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4491" + sodipodi:type="arc" + sodipodi:cx="-47.5" + sodipodi:cy="1038.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m -47.5,1039.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" /> + <path + d="m -47.5,1051.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1050.3622" + sodipodi:cx="-47.5" + sodipodi:type="arc" + id="path4493" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + transform="scale(-1,1)" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4495" + sodipodi:type="arc" + sodipodi:cx="35.5" + sodipodi:cy="1050.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m 35.5,1051.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" /> + <path + d="m 37.5,1049.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1048.3622" + sodipodi:cx="37.5" + sodipodi:type="arc" + id="path4497" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4499" + sodipodi:type="arc" + sodipodi:cx="37.5" + sodipodi:cy="1043.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m 37.5,1044.3622 a 1,1 0 0 1 -0.866025,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866025,-0.5 l 0,1 z" /> + <path + transform="scale(-1,1)" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4501" + sodipodi:type="arc" + sodipodi:cx="-42.500011" + sodipodi:cy="1048.3622" + sodipodi:rx="1" + sodipodi:ry="1" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m -42.500011,1049.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" /> + <path + transform="scale(-1,1)" + d="m -42.500011,1044.3622 a 1,1 0 0 1 -0.866026,-0.5 1,1 0 0 1 0,-1 1,1 0 0 1 0.866026,-0.5 l 0,1 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="1" + sodipodi:rx="1" + sodipodi:cy="1043.3622" + sodipodi:cx="-42.500011" + sodipodi:type="arc" + id="path4503" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + id="path4505" + d="m 40.500005,1039.3623 a 1,1 0 0 0 -0.865235,0.5 1,1 0 0 0 -0.134765,0.5235 l 0,0.9765 c 0.361502,0 0.445997,0 1,0 l 0,-1 5,0 0,1 0,1.5 0,2.5 -1,0 0,1 1,0 a 1,1 0 0 0 0.865234,-0.5 1,1 0 0 0 0.134766,-0.5 l 0,-2.5 0,-2.4765 a 1,1 0 0 0 0,-0.024 1,1 0 0 0 -0.134766,-0.5 1,1 0 0 0 -0.865234,-0.5 l -5,-10e-5 z" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <rect + inkscape:export-ydpi="180" + inkscape:export-xdpi="180" + inkscape:export-filename="/home/djrm/rect4471.png" + ry="4.3456599e-05" + rx="2.00001" + y="1044.3622" + x="-18.000057" + height="5" + width="2" + id="rect4536" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + inkscape:export-ydpi="180" + inkscape:export-xdpi="180" + inkscape:export-filename="/home/djrm/rect4471.png" + transform="matrix(0,1,-1,0,0,0)" + ry="4.3456599e-05" + rx="2.00001" + y="11.000047" + x="1049.3622" + height="5" + width="2" + id="rect4542" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + inkscape:export-ydpi="180" + inkscape:export-xdpi="180" + inkscape:export-filename="/home/djrm/rect4471.png" + d="m -16.00005,1046.3622 a 2,2 0 0 1 -1.73205,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.73205,-1 l 0,2 z" + sodipodi:end="4.712389" + sodipodi:start="1.5707963" + sodipodi:ry="2" + sodipodi:rx="2" + sodipodi:cy="1044.3622" + sodipodi:cx="-16.00005" + sodipodi:type="arc" + id="path4544" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + inkscape:export-ydpi="180" + inkscape:export-xdpi="180" + inkscape:export-filename="/home/djrm/rect4471.png" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path4546" + sodipodi:type="arc" + sodipodi:cx="-16.00005" + sodipodi:cy="1049.3622" + sodipodi:rx="2" + sodipodi:ry="2" + sodipodi:start="1.5707963" + sodipodi:end="4.712389" + d="m -16.00005,1051.3622 a 2,2 0 0 1 -1.73205,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.73205,-1 l 0,2 z" /> + <path + inkscape:export-ydpi="180" + inkscape:export-xdpi="180" + inkscape:export-filename="/home/djrm/rect4471.png" + id="path4554" + d="m -16.000053,1037.3622 a 2,2 0 0 0 -1.732422,1 2,2 0 0 0 -0.265625,1 c 0,0 -0.0019,0 -0.0019,0 l 0,7 c 0,0 0.446,0 1,0 0.554,0 1,0 1,0 l 0,-5 0,-2 5.000001,0 5,0 0,-2 -5,0 -5.000001,0 z m 10.000001,5 0,7 -4.5,0 -4.500001,0 0,2 4.500001,0 4.5,0 a 2,2 0 0 0 1.732422,-1 2,2 0 0 0 0.265625,-1 c 0,0 0.002,0 0.002,0 l 0,-7 c 0,0 -0.446,0 -1,0 -0.554,0 -1,0 -1,0 z" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4560" + width="4" + height="4" + x="-14" + y="1041.3622" + rx="2.00001" + ry="3.3799501e-05" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 33.000005,1021.3622 c 1.107999,0 2,0.892 2,2 l 0,5 c 0,1.108 -0.892001,2 -2,2 l -1,0 0,-3 a 2.9999926,2.9999926 0 0 0 -3,-3 l -3,0 0,-1 c 0,-1.108 0.892001,-2 2,-2 l 5,0 z m -7,6 a 2.9999926,2.9999926 0 0 0 3,3 l -1,0 c -1.107999,0 -2,-0.892 -2,-2 l 0,-1 z" + id="rect4562" + inkscape:connector-curvature="0" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4566" + width="8.9999924" + height="9.0000114" + x="-30.000002" + y="1026.3622" + rx="1.9999952" + ry="2.0000174" + transform="scale(-1,1)" /> + <rect + inkscape:export-ydpi="180" + inkscape:export-xdpi="180" + inkscape:export-filename="/home/djrm/rect4471.png" + style="opacity:1;fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4579" + width="36.000008" + height="15.999995" + x="-20.000004" + y="980.36218" + rx="4.5000234" + ry="4.3456585e-05" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m -32.000005,1037.3622 c -1.10801,0 -2,0.892 -2,2 l 0,10 c 0,1.108 0.89199,2 2,2 l 10,0 c 1.10801,0 2,-0.892 2,-2 l 0,-10 c 0,-1.108 -0.89199,-2 -2,-2 l -10,0 z m 0,2 10,0 0,10 -10,0 0,-10 z" + id="rect4601" + inkscape:connector-curvature="0" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 21,1044.3622 a 3.4999881,3.4999881 0 0 0 -3.5,3.5 3.4999881,3.4999881 0 0 0 3.5,3.5 3.4999881,3.4999881 0 0 0 3.5,-3.5 3.4999881,3.4999881 0 0 0 -3.5,-3.5 z m 0,2 a 1.5000153,1.5000153 0 0 1 1.5,1.5 1.5000153,1.5000153 0 0 1 -1.5,1.5 1.5000153,1.5000153 0 0 1 -1.5,-1.5 1.5000153,1.5000153 0 0 1 1.5,-1.5 z" + id="path4644" + inkscape:connector-curvature="0" /> + <path + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 28,1037.3622 a 3.4999881,3.4999881 0 0 0 -3.5,3.5 3.4999881,3.4999881 0 0 0 3.5,3.5 3.4999881,3.4999881 0 0 0 3.5,-3.5 3.4999881,3.4999881 0 0 0 -3.5,-3.5 z m 0,2 a 1.5000153,1.5000153 0 0 1 1.5,1.5 1.5000153,1.5000153 0 0 1 -1.5,1.5 1.5000153,1.5000153 0 0 1 -1.5,-1.5 1.5000153,1.5000153 0 0 1 1.5,-1.5 z" + id="circle4646" + inkscape:connector-curvature="0" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4679" + width="2" + height="1.9999826" + x="1" + y="1049.3622" + rx="2.5000134" + ry="4.2248896e-05" /> + <rect + ry="4.224963e-05" + rx="2.5000134" + y="1037.3622" + x="1" + height="2.0000174" + width="2" + id="rect4681" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4693" + width="2" + height="2.0000174" + x="13" + y="1037.3622" + rx="2.5000134" + ry="4.224963e-05" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4726" + width="2" + height="2.0000174" + x="13" + y="1049.3622" + rx="2.5000134" + ry="4.224963e-05" /> </g> </svg> diff --git a/tools/editor/icons/source/icon_object.svg b/tools/editor/icons/source/icon_object.svg index 6236f75c4d..6b36b61168 100644 --- a/tools/editor/icons/source/icon_object.svg +++ b/tools/editor/icons/source/icon_object.svg @@ -29,8 +29,8 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="32" - inkscape:cx="7.2827981" - inkscape:cy="6.8612677" + inkscape:cx="6.0308283" + inkscape:cy="7.6625569" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -74,27 +74,14 @@ id="layer1" transform="translate(0,-1036.3622)"> <path - style="fill:#cacad7;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" - d="m 8,1044.3622 6,-3 -6,-3 -6,3 z" - id="path4180" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> + style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 8,1043.8622 0,6 6,-3 0,-6 z" + id="path4135" + inkscape:connector-curvature="0" /> <path - style="fill:#cacad7;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" - d="m 2,1047.3622 6,3 0,-6 -6,-3 z" - id="path4176" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - sodipodi:nodetypes="ccccc" - inkscape:connector-curvature="0" - id="path4178" - d="m 14,1047.3622 -6,3 0,-6 6,-3 z" - style="fill:#cacad7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - <path - style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3b3a4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M 7.9628906 1.0019531 A 1.0001 1.0001 0 0 0 7.5527344 1.1054688 L 1.5527344 4.1054688 A 1.0001 1.0001 0 0 0 1 5 L 1 11 A 1.0001 1.0001 0 0 0 1.5527344 11.894531 L 7.5527344 14.894531 A 1.0001 1.0001 0 0 0 8.4472656 14.894531 L 14.447266 11.894531 A 1.0001 1.0001 0 0 0 15 11 L 15 5 A 1.0001 1.0001 0 0 0 14.447266 4.1054688 L 8.4472656 1.1054688 A 1.0001 1.0001 0 0 0 7.9628906 1.0019531 z M 8 3.1191406 L 11.763672 5 L 8 6.8828125 L 4.2363281 5 L 8 3.1191406 z M 3 6.6171875 L 7 8.6171875 L 7 12.382812 L 3 10.382812 L 3 6.6171875 z M 13 6.6171875 L 13 10.382812 L 9 12.382812 L 9 8.6171875 L 13 6.6171875 z " - transform="translate(0,1036.3622)" - id="path4139" /> + id="path4139" + transform="translate(0,1036.3622)" /> </g> </svg> diff --git a/tools/editor/icons/source/icon_ungroup.svg b/tools/editor/icons/source/icon_ungroup.svg index c45e3e4cb9..f0b33465cd 100644 --- a/tools/editor/icons/source/icon_ungroup.svg +++ b/tools/editor/icons/source/icon_ungroup.svg @@ -29,8 +29,8 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="31.999999" - inkscape:cx="11.746278" - inkscape:cy="8.8711774" + inkscape:cx="2.9046561" + inkscape:cy="8.8085261" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -60,7 +60,7 @@ <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> + <dc:title /> </cc:Work> </rdf:RDF> </metadata> @@ -70,9 +70,72 @@ id="layer1" transform="translate(0,-1036.3622)"> <path + inkscape:connector-curvature="0" + style="opacity:1;fill:#e0e0e0;fill-opacity:0.39215686;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 7,1037.3622 0,2 0,4 -4,0 c 0,0 -0.446,0 -1,0 -0.554,0 -1,0 -1,0 l 0,2 0,4 c 0,0 0.446,0 1,0 0.554,0 1,0 1,0 l 0,-4 4,0 0,4 -4,0 c -2.34e-5,0 0,0.446 0,1 0,0.554 -2.34e-5,1 0,1 l 4,0 c 0,0 0.446,0 1,0 0.554,0 1,0 1,0 l 0,-2 0,-4 4,0 c 0,0 0.446,0 1,0 0.554,0 1,0 1,0 l 0,-2 0,-4 c 0,0 -0.446,0 -1,0 -0.554,0 -1,0 -1,0 l 0,4 -4,0 0,-4 4,0 c 2.3e-5,0 0,-0.446 0,-1 0,-0.554 2.3e-5,-1 0,-1 l -4,0 c 0,0 -0.446,0 -1,0 -0.554,0 -1,0 -1,0 z" + id="rect4697" /> + <rect style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="M 8 3 A 2 2 0 0 0 6 5 A 2 2 0 0 0 8 7 A 2 2 0 0 0 10 5 A 2 2 0 0 0 8 3 z M 5 8 A 2 2 0 0 0 3 10 A 2 2 0 0 0 5 12 A 2 2 0 0 0 7 10 A 2 2 0 0 0 5 8 z M 11 8 A 2 2 0 0 0 9 10 A 2 2 0 0 0 11 12 A 2 2 0 0 0 13 10 A 2 2 0 0 0 11 8 z " - transform="translate(0,1036.3622)" - id="path4155" /> + id="rect4679" + width="2" + height="1.9999826" + x="1" + y="1049.3622" + rx="2.5000134" + ry="4.2248896e-05" /> + <rect + ry="4.224963e-05" + rx="2.5000134" + y="1043.3622" + x="1" + height="2.0000174" + width="2" + id="rect4681" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4693" + width="2" + height="2.0000174" + x="13" + y="1037.3622" + rx="2.5000134" + ry="4.224963e-05" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4726" + width="2" + height="2.0000174" + x="7" + y="1049.3622" + rx="2.5000134" + ry="4.224963e-05" /> + <rect + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect4157" + width="2" + height="2.0000174" + x="7" + y="1037.3622" + rx="2.5000134" + ry="4.224963e-05" /> + <rect + ry="4.224963e-05" + rx="2.5000134" + y="1043.3622" + x="7" + height="2.0000174" + width="2" + id="rect4159" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + ry="4.224963e-05" + rx="2.5000134" + y="1043.3622" + x="13" + height="2.0000174" + width="2" + id="rect4161" + style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> </g> </svg> diff --git a/tools/editor/io_plugins/editor_mesh_import_plugin.cpp b/tools/editor/io_plugins/editor_mesh_import_plugin.cpp index 2c3ed2afd6..da608292c1 100644 --- a/tools/editor/io_plugins/editor_mesh_import_plugin.cpp +++ b/tools/editor/io_plugins/editor_mesh_import_plugin.cpp @@ -496,7 +496,6 @@ Error EditorMeshImportPlugin::import(const String& p_path, const Ref<ResourceImp } int vtx = face[idx][0].to_int()-1; - print_line("vtx: "+itos(vtx)+"/"+itos(vertices.size())); ERR_FAIL_INDEX_V(vtx,vertices.size(),ERR_PARSE_ERROR); Vector3 vertex = vertices[vtx]; diff --git a/tools/editor/io_plugins/editor_scene_import_plugin.cpp b/tools/editor/io_plugins/editor_scene_import_plugin.cpp index e24412d4ef..fa62283e37 100644 --- a/tools/editor/io_plugins/editor_scene_import_plugin.cpp +++ b/tools/editor/io_plugins/editor_scene_import_plugin.cpp @@ -756,6 +756,8 @@ void EditorSceneImportDialog::_import(bool p_and_open) { } + // Scenes should always be imported as binary format since vertex data is large and would take + // up a lot of space and time to load if imported as text format (GH-5778) String save_file = save_path->get_text().plus_file(import_path->get_text().get_file().basename()+".scn"); print_line("Saving to: "+save_file); diff --git a/tools/editor/plugins/animation_player_editor_plugin.cpp b/tools/editor/plugins/animation_player_editor_plugin.cpp index 98ba25b482..b4d54c6b1e 100644 --- a/tools/editor/plugins/animation_player_editor_plugin.cpp +++ b/tools/editor/plugins/animation_player_editor_plugin.cpp @@ -43,6 +43,7 @@ void AnimationPlayerEditor::_node_removed(Node *p_node) { key_editor->set_animation(Ref<Animation>()); key_editor->set_root(NULL); + key_editor->show_select_node_warning(true); _update_player(); //editor->animation_editor_make_visible(false); @@ -376,8 +377,8 @@ void AnimationPlayerEditor::_animation_save_in_path(const Ref<Resource>& p_resou int flg = 0; if (EditorSettings::get_singleton()->get("on_save/compress_binary_resources")) flg |= ResourceSaver::FLAG_COMPRESS; - if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) - flg |= ResourceSaver::FLAG_RELATIVE_PATHS; + //if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) + // flg |= ResourceSaver::FLAG_RELATIVE_PATHS; String path = Globals::get_singleton()->localize_path(p_path); Error err = ResourceSaver::save(path, p_resource, flg | ResourceSaver::FLAG_REPLACE_SUBRESOURCE_PATHS); @@ -832,6 +833,7 @@ void AnimationPlayerEditor::_update_player() { remove_anim->set_disabled(animlist.size()==0); resource_edit_anim->set_disabled(animlist.size()==0); save_anim->set_disabled(animlist.size() == 0); + tool_anim->set_disabled(player==NULL); int active_idx=-1; @@ -889,9 +891,11 @@ void AnimationPlayerEditor::edit(AnimationPlayer *p_player) { return; //ignore, pinned player=p_player; - if (player) + if (player) { _update_player(); - else { + key_editor->show_select_node_warning(false); + } else { + key_editor->show_select_node_warning(true); // hide(); @@ -1123,6 +1127,7 @@ void AnimationPlayerEditor::_hide_anim_editors() { key_editor->set_animation(Ref<Animation>()); key_editor->set_root(NULL); + key_editor->show_select_node_warning(true); // editor->animation_editor_make_visible(false); } @@ -1531,6 +1536,8 @@ void AnimationPlayerEditorPlugin::edit(Object *p_object) { if (!p_object) return; anim_editor->edit(p_object->cast_to<AnimationPlayer>()); + + } bool AnimationPlayerEditorPlugin::handles(Object *p_object) const { diff --git a/tools/editor/plugins/canvas_item_editor_plugin.cpp b/tools/editor/plugins/canvas_item_editor_plugin.cpp index f9499904db..02a24f8ddb 100644 --- a/tools/editor/plugins/canvas_item_editor_plugin.cpp +++ b/tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -41,6 +41,11 @@ #include "tools/editor/plugins/animation_player_editor_plugin.h" #include "scene/resources/packed_scene.h" + +#define MIN_ZOOM 0.01 +#define MAX_ZOOM 100 + + class SnapDialog : public ConfirmationDialog { OBJ_TYPE(SnapDialog,ConfirmationDialog); @@ -199,16 +204,12 @@ void CanvasItemEditor::_unhandled_key_input(const InputEvent& p_ev) { if (!is_visible() || get_viewport()->gui_has_modal_stack()) return; + if (p_ev.key.mod.control) - // prevent to change tool mode when control key is pressed return; - if (p_ev.key.pressed && !p_ev.key.echo && p_ev.key.scancode==KEY_Q) - _tool_select(TOOL_SELECT); - if (p_ev.key.pressed && !p_ev.key.echo && p_ev.key.scancode==KEY_W) - _tool_select(TOOL_MOVE); - if (p_ev.key.pressed && !p_ev.key.echo && p_ev.key.scancode==KEY_E) - _tool_select(TOOL_ROTATE); + if (p_ev.key.pressed && !p_ev.key.echo && p_ev.key.scancode==KEY_V && drag==DRAG_NONE && can_move_pivot) { + if (p_ev.key.mod.shift) { //move drag pivot drag=DRAG_PIVOT; @@ -1066,6 +1067,9 @@ void CanvasItemEditor::_viewport_input_event(const InputEvent& p_event) { if (b.button_index==BUTTON_WHEEL_DOWN) { + if (zoom<MIN_ZOOM) + return; + float prev_zoom=zoom; zoom=zoom*0.95; { @@ -1081,6 +1085,9 @@ void CanvasItemEditor::_viewport_input_event(const InputEvent& p_event) { if (b.button_index==BUTTON_WHEEL_UP) { + if (zoom>MAX_ZOOM) + return; + float prev_zoom=zoom; zoom=zoom*(1.0/0.95); { @@ -2530,12 +2537,17 @@ void CanvasItemEditor::_popup_callback(int p_op) { snap_dialog->popup_centered(Size2(220,160)); } break; case ZOOM_IN: { + if (zoom>MAX_ZOOM) + return; zoom=zoom*(1.0/0.5); _update_scroll(0); viewport->update(); return; } break; case ZOOM_OUT: { + if (zoom<MIN_ZOOM) + return; + zoom=zoom*0.5; _update_scroll(0); viewport->update(); @@ -3296,20 +3308,23 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { hb->add_child(select_button); select_button->connect("pressed",this,"_tool_select",make_binds(TOOL_SELECT)); select_button->set_pressed(true); - select_button->set_tooltip(TTR("Select Mode (Q)")+"\n"+keycode_get_string(KEY_MASK_CMD)+TTR("Drag: Rotate")+"\n"+TTR("Alt+Drag: Move")+"\n"+TTR("Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving).")+"\n"+TTR("Alt+RMB: Depth list selection")); + select_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/select_mode",TTR("Select Mode"),KEY_Q)); + select_button->set_tooltip(TTR("Select Mode")+" $sc\n"+keycode_get_string(KEY_MASK_CMD)+TTR("Drag: Rotate")+"\n"+TTR("Alt+Drag: Move")+"\n"+TTR("Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving).")+"\n"+TTR("Alt+RMB: Depth list selection")); move_button = memnew( ToolButton ); move_button->set_toggle_mode(true); hb->add_child(move_button); move_button->connect("pressed",this,"_tool_select",make_binds(TOOL_MOVE)); - move_button->set_tooltip(TTR("Move Mode (W)")); + move_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/move_mode",TTR("Move Mode"),KEY_W)); + move_button->set_tooltip(TTR("Move Mode")); rotate_button = memnew( ToolButton ); rotate_button->set_toggle_mode(true); hb->add_child(rotate_button); rotate_button->connect("pressed",this,"_tool_select",make_binds(TOOL_ROTATE)); - rotate_button->set_tooltip(TTR("Rotate Mode (E)")); + rotate_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/rotate_mode",TTR("Rotate Mode"),KEY_E)); + rotate_button->set_tooltip(TTR("Rotate Mode")); hb->add_child(memnew(VSeparator)); diff --git a/tools/editor/plugins/script_editor_plugin.cpp b/tools/editor/plugins/script_editor_plugin.cpp index 65741fd072..4032a790d8 100644 --- a/tools/editor/plugins/script_editor_plugin.cpp +++ b/tools/editor/plugins/script_editor_plugin.cpp @@ -819,7 +819,7 @@ void ScriptEditor::_close_tab(int p_idx) { _update_script_names(); - EditorNode::get_singleton()->save_layout(); + _save_layout(); } void ScriptEditor::_close_current_tab() { @@ -828,6 +828,22 @@ void ScriptEditor::_close_current_tab() { } +void ScriptEditor::_close_docs_tab() { + + int child_count = tab_container->get_child_count(); + for (int i = child_count-1; i>=0; i--) { + + EditorHelp *ste = tab_container->get_child(i)->cast_to<EditorHelp>(); + + if (ste) { + _close_tab(i); + } + + } + +} + + void ScriptEditor::_resave_scripts(const String& p_str) { @@ -1481,7 +1497,9 @@ void ScriptEditor::_menu_option(int p_option) { if (scr.is_null()) return; scr->set_source_code(te->get_text()); - scr->get_language()->reload_tool_script(scr,p_option==FILE_TOOL_RELOAD_SOFT); + bool soft = p_option==FILE_TOOL_RELOAD_SOFT || scr->get_instance_base_type()=="EditorPlugin"; //always soft-reload editor plugins + + scr->get_language()->reload_tool_script(scr,soft); } break; case EDIT_TRIM_TRAILING_WHITESAPCE: { _trim_trailing_whitespace(current->get_text_edit()); @@ -1611,6 +1629,9 @@ void ScriptEditor::_menu_option(int p_option) { _close_current_tab(); } } break; + case CLOSE_DOCS: { + _close_docs_tab(); + } break; case WINDOW_MOVE_LEFT: { if (tab_container->get_current_tab()>0) { @@ -1658,6 +1679,9 @@ void ScriptEditor::_menu_option(int p_option) { case FILE_CLOSE: { _close_current_tab(); } break; + case CLOSE_DOCS: { + _close_docs_tab(); + } break; } @@ -2057,6 +2081,9 @@ void ScriptEditor::_update_script_colors() { void ScriptEditor::_update_script_names() { + if (restoring_layout) + return; + waiting_update_names=false; Set<Ref<Script> > used; Node* edited = EditorNode::get_singleton()->get_edited_scene(); @@ -2220,10 +2247,8 @@ void ScriptEditor::edit(const Ref<Script>& p_script) { _update_script_names(); + _save_layout(); ste->connect("name_changed",this,"_update_script_names"); - if (!restoring_layout) { - EditorNode::get_singleton()->save_layout(); - } //test for modification, maybe the script was not edited but was loaded @@ -2343,6 +2368,15 @@ void ScriptEditor::_add_callback(Object *p_obj, const String& p_function, const } +void ScriptEditor::_save_layout() { + + if (restoring_layout) { + return; + } + + editor->save_layout(); +} + void ScriptEditor::_editor_settings_changed() { trim_trailing_whitespace_on_save = EditorSettings::get_singleton()->get("text_editor/trim_trailing_whitespace_on_save"); @@ -2400,7 +2434,7 @@ void ScriptEditor::_tree_changed() { void ScriptEditor::_script_split_dragged(float) { - EditorNode::get_singleton()->save_layout(); + _save_layout(); } void ScriptEditor::_unhandled_input(const InputEvent& p_event) { @@ -2446,7 +2480,6 @@ void ScriptEditor::set_window_layout(Ref<ConfigFile> p_layout) { } } - for(int i=0;i<helps.size();i++) { String path = helps[i]; @@ -2462,9 +2495,9 @@ void ScriptEditor::set_window_layout(Ref<ConfigFile> p_layout) { script_split->set_split_offset(p_layout->get_value("ScriptEditor","split_offset")); } - restoring_layout=false; + _update_script_names(); } void ScriptEditor::get_window_layout(Ref<ConfigFile> p_layout) { @@ -2524,7 +2557,7 @@ void ScriptEditor::_help_class_open(const String& p_class) { eh->go_to_class(p_class,0); eh->connect("go_to_help",this,"_help_class_goto"); _update_script_names(); - + _save_layout(); } void ScriptEditor::_help_class_goto(const String& p_desc) { @@ -2553,7 +2586,7 @@ void ScriptEditor::_help_class_goto(const String& p_desc) { eh->go_to_help(p_desc); eh->connect("go_to_help",this,"_help_class_goto"); _update_script_names(); - + _save_layout(); } void ScriptEditor::_update_history_pos(int p_new_pos) { @@ -2678,6 +2711,7 @@ void ScriptEditor::_bind_methods() { ObjectTypeDB::bind_method("_tab_changed",&ScriptEditor::_tab_changed); ObjectTypeDB::bind_method("_menu_option",&ScriptEditor::_menu_option); ObjectTypeDB::bind_method("_close_current_tab",&ScriptEditor::_close_current_tab); + ObjectTypeDB::bind_method("_close_docs_tab", &ScriptEditor::_close_docs_tab); ObjectTypeDB::bind_method("_editor_play",&ScriptEditor::_editor_play); ObjectTypeDB::bind_method("_editor_pause",&ScriptEditor::_editor_pause); ObjectTypeDB::bind_method("_editor_stop",&ScriptEditor::_editor_stop); @@ -2760,7 +2794,8 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_theme", TTR("Save Theme")), FILE_SAVE_THEME); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_theme_as", TTR("Save Theme As")), FILE_SAVE_THEME_AS); file_menu->get_popup()->add_separator(); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_file", TTR("Close"), KEY_MASK_CMD|KEY_W), FILE_CLOSE); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_docs", TTR("Close Docs")), CLOSE_DOCS); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_file", TTR("Close"), KEY_MASK_CMD | KEY_W), FILE_CLOSE); file_menu->get_popup()->connect("item_pressed", this,"_menu_option"); edit_menu = memnew( MenuButton ); diff --git a/tools/editor/plugins/script_editor_plugin.h b/tools/editor/plugins/script_editor_plugin.h index dfa72490a5..2f079b9fc7 100644 --- a/tools/editor/plugins/script_editor_plugin.h +++ b/tools/editor/plugins/script_editor_plugin.h @@ -127,6 +127,7 @@ class ScriptEditor : public VBoxContainer { FILE_SAVE_THEME, FILE_SAVE_THEME_AS, FILE_CLOSE, + CLOSE_DOCS, EDIT_UNDO, EDIT_REDO, EDIT_CUT, @@ -237,6 +238,7 @@ class ScriptEditor : public VBoxContainer { void _close_tab(int p_idx); void _close_current_tab(); + void _close_docs_tab(); bool grab_focus_block; @@ -268,6 +270,7 @@ class ScriptEditor : public VBoxContainer { void _update_window_menu(); void _script_created(Ref<Script> p_script); + void _save_layout(); void _editor_settings_changed(); void _autosave_scripts(); diff --git a/tools/editor/plugins/texture_region_editor_plugin.cpp b/tools/editor/plugins/texture_region_editor_plugin.cpp index 63d8e2e1cf..db888208fb 100644 --- a/tools/editor/plugins/texture_region_editor_plugin.cpp +++ b/tools/editor/plugins/texture_region_editor_plugin.cpp @@ -703,14 +703,24 @@ void TextureRegionEditor::_edit_region() bool merged = true; while (merged) { merged = false; + bool queue_erase = false; for (List<Rect2>::Element *F = autoslice_cache.front(); F; F=F->next()) { + if (queue_erase){ + autoslice_cache.erase(F->prev()); + queue_erase = false; + } if (F==E) continue; if (E->get().grow(1).intersects(F->get())) { E->get().expand_to(F->get().pos); E->get().expand_to(F->get().pos+F->get().size); - F=F->prev(); - autoslice_cache.erase(F->next()); + if (F->prev()) { + F=F->prev(); + autoslice_cache.erase(F->next()); + } else { + queue_erase = true; + //Cant delete the first rect in the list. + } merged = true; } } diff --git a/tools/editor/project_manager.cpp b/tools/editor/project_manager.cpp index 52c8ca4d6c..caf116523a 100644 --- a/tools/editor/project_manager.cpp +++ b/tools/editor/project_manager.cpp @@ -31,6 +31,7 @@ #include "os/os.h" #include "os/dir_access.h" #include "os/file_access.h" +#include "os/keyboard.h" #include "editor_settings.h" #include "scene/gui/separator.h" #include "scene/gui/tool_button.h" @@ -203,14 +204,15 @@ private: } else { f->store_line("; Engine configuration file."); - f->store_line("; It's best to edit using the editor UI, not directly,"); - f->store_line("; becausethe parameters that go here are not obvious."); + f->store_line("; It's best edited using the editor UI and not directly,"); + f->store_line("; since the parameters that go here are not all obvious."); f->store_line("; "); f->store_line("; Format: "); f->store_line("; [section] ; section goes between []"); f->store_line("; param=value ; assign values to parameters"); f->store_line("\n"); f->store_line("[application]"); + f->store_line("\n"); f->store_line("name=\""+project_name->get_text()+"\""); f->store_line("icon=\"res://icon.png\""); @@ -490,6 +492,10 @@ void ProjectManager::_notification(int p_what) { if (p_what==NOTIFICATION_ENTER_TREE) { get_tree()->set_editor_hint(true); + + } else if (p_what==NOTIFICATION_VISIBILITY_CHANGED) { + + set_process_unhandled_input(is_visible()); } } @@ -575,6 +581,134 @@ void ProjectManager::_panel_input(const InputEvent& p_ev,Node *p_hb) { } } +void ProjectManager::_unhandled_input(const InputEvent& p_ev) { + + if (p_ev.type==InputEvent::KEY) { + + const InputEventKey &k = p_ev.key; + + if (!k.pressed) + return; + + bool scancode_handled = true; + + switch (k.scancode) { + + case KEY_HOME: { + + for (int i=0; i<scroll_childs->get_child_count(); i++) { + + HBoxContainer *hb = scroll_childs->get_child(i)->cast_to<HBoxContainer>(); + if (hb) { + selected_list.clear(); + selected_list.insert(hb->get_meta("name"), hb->get_meta("main_scene")); + scroll->set_v_scroll(0); + break; + } + } + + } break; + case KEY_END: { + + for (int i=scroll_childs->get_child_count()-1; i>=0; i--) { + + HBoxContainer *hb = scroll_childs->get_child(i)->cast_to<HBoxContainer>(); + if (hb) { + selected_list.clear(); + selected_list.insert(hb->get_meta("name"), hb->get_meta("main_scene")); + scroll->set_v_scroll(scroll_childs->get_size().y); + break; + } + } + + } break; + case KEY_UP: { + + if (k.mod.shift) + break; + + if (selected_list.size()) { + + bool found = false; + + for (int i=scroll_childs->get_child_count()-1; i>=0; i--) { + + HBoxContainer *hb = scroll_childs->get_child(i)->cast_to<HBoxContainer>(); + if (!hb) continue; + + String current = hb->get_meta("name"); + + if (found) { + selected_list.clear(); + selected_list.insert(current, hb->get_meta("main_scene")); + + int offset_diff = scroll->get_v_scroll() - hb->get_pos().y; + + if (offset_diff > 0) + scroll->set_v_scroll(scroll->get_v_scroll() - offset_diff); + + break; + + } else if (current==selected_list.back()->key()) { + + found = true; + } + } + + break; + } + // else fallthrough to key_down + } + case KEY_DOWN: { + + if (k.mod.shift) + break; + + bool found = selected_list.empty(); + + for (int i=0; i<scroll_childs->get_child_count(); i++) { + + HBoxContainer *hb = scroll_childs->get_child(i)->cast_to<HBoxContainer>(); + if (!hb) continue; + + String current = hb->get_meta("name"); + + if (found) { + selected_list.clear(); + selected_list.insert(current, hb->get_meta("main_scene")); + + int last_y_visible = scroll->get_v_scroll() + scroll->get_size().y; + int offset_diff = (hb->get_pos().y + hb->get_size().y) - last_y_visible; + + if (offset_diff > 0) + scroll->set_v_scroll(scroll->get_v_scroll() + offset_diff); + + break; + + } else if (current==selected_list.back()->key()) { + + found = true; + } + } + + } break; + default: { + scancode_handled = false; + } break; + } + + if (scancode_handled) { + accept_event(); + + for(int i=0;i<scroll_childs->get_child_count();i++) { + CanvasItem *item = scroll_childs->get_child(i)->cast_to<CanvasItem>(); + if (item) + item->update(); + } + } + } +} + void ProjectManager::_favorite_pressed(Node *p_hb) { String clicked = p_hb->get_meta("name"); @@ -963,6 +1097,7 @@ void ProjectManager::_bind_methods() { ObjectTypeDB::bind_method("_load_recent_projects",&ProjectManager::_load_recent_projects); ObjectTypeDB::bind_method("_panel_draw",&ProjectManager::_panel_draw); ObjectTypeDB::bind_method("_panel_input",&ProjectManager::_panel_input); + ObjectTypeDB::bind_method("_unhandled_input",&ProjectManager::_unhandled_input); ObjectTypeDB::bind_method("_favorite_pressed",&ProjectManager::_favorite_pressed); ObjectTypeDB::bind_method("_install_project",&ProjectManager::_install_project); diff --git a/tools/editor/project_manager.h b/tools/editor/project_manager.h index 69467f50e7..74d1d3693c 100644 --- a/tools/editor/project_manager.h +++ b/tools/editor/project_manager.h @@ -92,6 +92,7 @@ class ProjectManager : public Control { void _panel_draw(Node *p_hb); void _panel_input(const InputEvent& p_ev,Node *p_hb); + void _unhandled_input(const InputEvent& p_ev); void _favorite_pressed(Node *p_hb); protected: diff --git a/tools/editor/property_editor.cpp b/tools/editor/property_editor.cpp index ceb62d5ff0..54d197f10d 100644 --- a/tools/editor/property_editor.cpp +++ b/tools/editor/property_editor.cpp @@ -4232,19 +4232,32 @@ String SectionedPropertyEditor::get_full_item_path(const String& p_item) { void SectionedPropertyEditor::edit(Object* p_object) { - if (p_object) { - obj=p_object->get_instance_ID(); - update_category_list(); - } else { + if (!p_object) { + obj = -1; sections->clear(); + + filter->set_edited(NULL); + editor->edit(NULL); + + return; } - filter->set_edited(p_object); - editor->edit(filter); + ObjectID id = p_object->get_instance_ID(); + + if (obj != id) { + + obj = id; + update_category_list(); - sections->select(0); - _section_selected(0); + filter->set_edited(p_object); + editor->edit(filter); + sections->select(0); + _section_selected(0); + } else { + + update_category_list(); + } } void SectionedPropertyEditor::update_category_list() { @@ -4300,6 +4313,8 @@ PropertyEditor *SectionedPropertyEditor::get_property_editor() { SectionedPropertyEditor::SectionedPropertyEditor() { + obj = -1; + VBoxContainer *left_vb = memnew( VBoxContainer); left_vb->set_custom_minimum_size(Size2(160,0)*EDSCALE); add_child(left_vb); diff --git a/tools/editor/resources_dock.cpp b/tools/editor/resources_dock.cpp index 10292ed10d..c73c8c081c 100644 --- a/tools/editor/resources_dock.cpp +++ b/tools/editor/resources_dock.cpp @@ -126,8 +126,8 @@ void ResourcesDock::save_resource(const String& p_path,const Ref<Resource>& p_re int flg=0; if (EditorSettings::get_singleton()->get("on_save/compress_binary_resources")) flg|=ResourceSaver::FLAG_COMPRESS; - if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) - flg|=ResourceSaver::FLAG_RELATIVE_PATHS; + //if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) + // flg|=ResourceSaver::FLAG_RELATIVE_PATHS; String path = Globals::get_singleton()->localize_path(p_path); Error err = ResourceSaver::save(path,p_resource,flg|ResourceSaver::FLAG_REPLACE_SUBRESOURCE_PATHS); diff --git a/tools/editor/scene_tree_dock.cpp b/tools/editor/scene_tree_dock.cpp index 2e7d65eadc..35ddb49465 100644 --- a/tools/editor/scene_tree_dock.cpp +++ b/tools/editor/scene_tree_dock.cpp @@ -106,11 +106,30 @@ void SceneTreeDock::instance(const String& p_file) { Vector<String> scenes; scenes.push_back(p_file); - instance_scenes(scenes,parent,-1); + _perform_instance_scenes(scenes,parent,-1); } -void SceneTreeDock::instance_scenes(const Vector<String>& p_files,Node* parent,int p_pos) { +void SceneTreeDock::instance_scenes(const Vector<String>& p_files, Node *p_parent) { + + Node *parent = p_parent; + + if (!parent) { + parent = scene_tree->get_selected(); + } + + if (!parent || !edited_scene) { + + accept->get_ok()->set_text(TTR("OK")); + accept->set_text(TTR("No parent to instance the scenes at.")); + accept->popup_centered_minsize(); + return; + }; + + _perform_instance_scenes(p_files, parent, -1); +} + +void SceneTreeDock::_perform_instance_scenes(const Vector<String>& p_files,Node* parent,int p_pos) { @@ -1489,8 +1508,8 @@ void SceneTreeDock::_new_scene_from(String p_file) { int flg=0; if (EditorSettings::get_singleton()->get("on_save/compress_binary_resources")) flg|=ResourceSaver::FLAG_COMPRESS; - if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) - flg|=ResourceSaver::FLAG_RELATIVE_PATHS; + //if (EditorSettings::get_singleton()->get("on_save/save_paths_as_relative")) + // flg|=ResourceSaver::FLAG_RELATIVE_PATHS; err = ResourceSaver::save(p_file,sdata,flg); @@ -1574,14 +1593,12 @@ void SceneTreeDock::_normalize_drop(Node*& to_node, int &to_pos, int p_type) { to_pos=-1; - if (p_type==1 && to_node==EditorNode::get_singleton()->get_edited_scene()) { - //if at lower sibling of root node - to_pos=0; //just insert at begining of root node - } else if (p_type==-1) { + if (p_type==-1) { //drop at above selected node if (to_node==EditorNode::get_singleton()->get_edited_scene()) { to_node=NULL; - ERR_FAIL_COND(to_node==EditorNode::get_singleton()->get_edited_scene()); + ERR_EXPLAIN("Cannot perform drop above the root node!"); + ERR_FAIL(); } Node* upper_sibling=NULL; @@ -1617,8 +1634,9 @@ void SceneTreeDock::_normalize_drop(Node*& to_node, int &to_pos, int p_type) { } else if (p_type==1) { //drop at below selected node if (to_node==EditorNode::get_singleton()->get_edited_scene()) { - to_node=NULL; - ERR_FAIL_COND(to_node==EditorNode::get_singleton()->get_edited_scene()); + //if at lower sibling of root node + to_pos=0; //just insert at begining of root node + return; } @@ -1678,7 +1696,7 @@ void SceneTreeDock::_files_dropped(Vector<String> p_files,NodePath p_to,int p_ty int to_pos=-1; _normalize_drop(node,to_pos,p_type); - instance_scenes(p_files,node,to_pos); + _perform_instance_scenes(p_files,node,to_pos); } void SceneTreeDock::_nodes_dragged(Array p_nodes,NodePath p_to,int p_type) { diff --git a/tools/editor/scene_tree_dock.h b/tools/editor/scene_tree_dock.h index 51041a235b..04ed16967f 100644 --- a/tools/editor/scene_tree_dock.h +++ b/tools/editor/scene_tree_dock.h @@ -148,6 +148,8 @@ class SceneTreeDock : public VBoxContainer { void _filter_changed(const String& p_filter); + void _perform_instance_scenes(const Vector<String>& p_files,Node* parent,int p_pos); + protected: void _notification(int p_what); @@ -160,7 +162,7 @@ public: void import_subscene(); void set_edited_scene(Node* p_scene); void instance(const String& p_path); - void instance_scenes(const Vector<String>& p_files,Node* parent,int p_pos); + void instance_scenes(const Vector<String>& p_files, Node *p_parent=NULL); void set_selected(Node *p_node, bool p_emit_selected=false); void fill_path_renames(Node* p_node, Node *p_new_parent, List<Pair<NodePath,NodePath> > *p_renames); void perform_node_renames(Node* p_base,List<Pair<NodePath,NodePath> > *p_renames, Map<Ref<Animation>, Set<int> > *r_rem_anims=NULL); diff --git a/tools/editor/scene_tree_editor.cpp b/tools/editor/scene_tree_editor.cpp index cc11cbc562..73358e805d 100644 --- a/tools/editor/scene_tree_editor.cpp +++ b/tools/editor/scene_tree_editor.cpp @@ -983,6 +983,14 @@ bool SceneTreeEditor::can_drop_data_fw(const Point2& p_point,const Variant& p_da if (!d.has("type")) return false; + TreeItem *item = tree->get_item_at_pos(p_point); + if (!item) + return false; + + int section = tree->get_drop_section_at_pos(p_point); + if (section<-1 || (section==-1 && !item->get_parent())) + return false; + if (String(d["type"])=="files") { Vector<String> files = d["files"]; @@ -1005,15 +1013,7 @@ bool SceneTreeEditor::can_drop_data_fw(const Point2& p_point,const Variant& p_da if (String(d["type"])=="nodes") { - TreeItem *item = tree->get_item_at_pos(p_point); - if (!item) - return false; - int section = tree->get_drop_section_at_pos(p_point); - if (section<-1 || (section==-1 && !item->get_parent())) - return false; - return true; - } return false; diff --git a/tools/editor/settings_config_dialog.cpp b/tools/editor/settings_config_dialog.cpp index f436e369af..50989ea5cb 100644 --- a/tools/editor/settings_config_dialog.cpp +++ b/tools/editor/settings_config_dialog.cpp @@ -46,9 +46,18 @@ void EditorSettingsDialog::ok_pressed() { void EditorSettingsDialog::_settings_changed() { - timer->start(); - property_editor->get_property_editor()->update_tree(); // else color's won't update when theme is selected. +} + +void EditorSettingsDialog::_settings_property_edited(const String& p_name) { + + String full_name = property_editor->get_full_item_path(p_name); + + // Small usability workaround to update the text color settings when the + // color theme is changed + if (full_name == "text_editor/color_theme") { + property_editor->get_property_editor()->update_tree(); + } } void EditorSettingsDialog::_settings_save() { @@ -281,6 +290,7 @@ void EditorSettingsDialog::_bind_methods() { ObjectTypeDB::bind_method(_MD("_settings_save"),&EditorSettingsDialog::_settings_save); ObjectTypeDB::bind_method(_MD("_settings_changed"),&EditorSettingsDialog::_settings_changed); + ObjectTypeDB::bind_method(_MD("_settings_property_edited"),&EditorSettingsDialog::_settings_property_edited); ObjectTypeDB::bind_method(_MD("_clear_search_box"),&EditorSettingsDialog::_clear_search_box); ObjectTypeDB::bind_method(_MD("_clear_shortcut_search_box"),&EditorSettingsDialog::_clear_shortcut_search_box); ObjectTypeDB::bind_method(_MD("_shortcut_button_pressed"),&EditorSettingsDialog::_shortcut_button_pressed); @@ -325,6 +335,7 @@ EditorSettingsDialog::EditorSettingsDialog() { property_editor->get_property_editor()->register_text_enter(search_box); property_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); vbc->add_child(property_editor); + property_editor->get_property_editor()->connect("property_edited", this, "_settings_property_edited"); vbc = memnew( VBoxContainer ); tabs->add_child(vbc); diff --git a/tools/editor/settings_config_dialog.h b/tools/editor/settings_config_dialog.h index 68a2b008f0..3b91c7f019 100644 --- a/tools/editor/settings_config_dialog.h +++ b/tools/editor/settings_config_dialog.h @@ -64,6 +64,7 @@ class EditorSettingsDialog : public AcceptDialog { virtual void ok_pressed(); void _settings_changed(); + void _settings_property_edited(const String& p_name); void _settings_save(); void _notification(int p_what); |