diff options
Diffstat (limited to 'editor')
| -rw-r--r-- | editor/editor_properties.cpp | 8 | ||||
| -rw-r--r-- | editor/editor_properties.h | 2 | ||||
| -rw-r--r-- | editor/editor_spin_slider.cpp | 6 | ||||
| -rw-r--r-- | editor/editor_spin_slider.h | 1 | ||||
| -rw-r--r-- | editor/plugins/tile_set_editor_plugin.cpp | 2 | ||||
| -rw-r--r-- | editor/project_export.cpp | 47 | ||||
| -rw-r--r-- | editor/project_export.h | 8 | ||||
| -rw-r--r-- | editor/project_manager.cpp | 87 | ||||
| -rw-r--r-- | editor/project_manager.h | 6 |
9 files changed, 131 insertions, 36 deletions
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 9c9302e7cd..de948acc71 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -233,7 +233,7 @@ void EditorPropertyPath::_path_pressed() { dialog->set_mode(EditorFileDialog::MODE_OPEN_DIR); dialog->set_current_dir(full_path); } else { - dialog->set_mode(EditorFileDialog::MODE_OPEN_FILE); + dialog->set_mode(save_mode ? EditorFileDialog::MODE_SAVE_FILE : EditorFileDialog::MODE_OPEN_FILE); for (int i = 0; i < extensions.size(); i++) { String e = extensions[i].strip_edges(); if (e != String()) { @@ -260,6 +260,11 @@ void EditorPropertyPath::setup(const Vector<String> &p_extensions, bool p_folder global = p_global; } +void EditorPropertyPath::set_save_mode() { + + save_mode = true; +} + void EditorPropertyPath::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { @@ -296,6 +301,7 @@ EditorPropertyPath::EditorPropertyPath() { path_edit->connect("pressed", this, "_path_pressed"); folder = false; global = false; + save_mode = false; } ///////////////////// CLASS NAME ///////////////////////// diff --git a/editor/editor_properties.h b/editor/editor_properties.h index b82ef977ef..05716408f3 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -106,6 +106,7 @@ class EditorPropertyPath : public EditorProperty { Vector<String> extensions; bool folder; bool global; + bool save_mode; EditorFileDialog *dialog; LineEdit *path; Button *path_edit; @@ -120,6 +121,7 @@ protected: public: void setup(const Vector<String> &p_extensions, bool p_folder, bool p_global); + void set_save_mode(); virtual void update_property(); EditorPropertyPath(); }; diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index 8ea56b8578..1b7322fd13 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -63,6 +63,7 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { grabbing_spinner_attempt = true; grabbing_spinner_dist_cache = 0; + pre_grab_value = get_value(); grabbing_spinner = false; grabbing_spinner_mouse_pos = Input::get_singleton()->get_mouse_position(); } @@ -107,10 +108,10 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { if (ABS(grabbing_spinner_dist_cache) > 6) { set_value(get_value() + SGN(grabbing_spinner_dist_cache)); grabbing_spinner_dist_cache = 0; + pre_grab_value = get_value(); } } else { - set_value(get_value() + get_step() * grabbing_spinner_dist_cache * 10); - grabbing_spinner_dist_cache = 0; + set_value(pre_grab_value + get_step() * grabbing_spinner_dist_cache * 10); } } } else if (updown_offset != -1) { @@ -434,6 +435,7 @@ EditorSpinSlider::EditorSpinSlider() { grabbing_spinner_attempt = false; grabbing_spinner = false; grabbing_spinner_dist_cache = 0; + pre_grab_value = 0; set_focus_mode(FOCUS_ALL); updown_offset = -1; hover_updown = false; diff --git a/editor/editor_spin_slider.h b/editor/editor_spin_slider.h index e48eb171b8..9d43bd2884 100644 --- a/editor/editor_spin_slider.h +++ b/editor/editor_spin_slider.h @@ -59,6 +59,7 @@ class EditorSpinSlider : public Range { bool read_only; float grabbing_spinner_dist_cache; Vector2 grabbing_spinner_mouse_pos; + double pre_grab_value; LineEdit *value_input; bool value_input_just_closed; diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index 11b8b1fcf6..5844315529 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -588,6 +588,8 @@ void TileSetEditor::_on_textures_added(const PoolStringArray &p_paths) { } void TileSetEditor::_on_edit_mode_changed(int p_edit_mode) { + draw_handles = false; + creating_shape = false; edit_mode = (EditMode)p_edit_mode; switch (edit_mode) { case EDITMODE_REGION: { diff --git a/editor/project_export.cpp b/editor/project_export.cpp index 6e1d5c07ce..557aac021d 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -192,7 +192,7 @@ void ProjectExportDialog::_edit_preset(int p_index) { if (p_index < 0 || p_index >= presets->get_item_count()) { name->set_text(""); name->set_editable(false); - export_path->set_editable(false); + export_path->hide(); runnable->set_disabled(true); parameters->edit(NULL); presets->unselect_all(); @@ -214,11 +214,19 @@ void ProjectExportDialog::_edit_preset(int p_index) { sections->show(); name->set_editable(true); - export_path->set_editable(true); + export_path->show(); duplicate_preset->set_disabled(false); delete_preset->set_disabled(false); name->set_text(current->get_name()); - export_path->set_text(current->get_export_path()); + + List<String> extension_list = current->get_platform()->get_binary_extensions(current); + Vector<String> extension_vector; + for (int i = 0; i < extension_list.size(); i++) { + extension_vector.push_back("*." + extension_list[i]); + } + + export_path->setup(extension_vector, false, true); + export_path->update_property(); runnable->set_disabled(false); runnable->set_pressed(current->is_runnable()); parameters->edit(current.ptr()); @@ -458,7 +466,21 @@ void ProjectExportDialog::_name_changed(const String &p_string) { _update_presets(); } -void ProjectExportDialog::_export_path_changed(const String &p_string) { +void ProjectExportDialog::set_export_path(const String &p_value) { + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND(current.is_null()); + + current->set_export_path(p_value); +} + +String ProjectExportDialog::get_export_path() { + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND_V(current.is_null(), String("")); + + return current->get_export_path(); +} + +void ProjectExportDialog::_export_path_changed(const StringName &p_property, const Variant &p_value) { if (updating) return; @@ -466,7 +488,7 @@ void ProjectExportDialog::_export_path_changed(const String &p_string) { Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); ERR_FAIL_COND(current.is_null()); - current->set_export_path(p_string); + current->set_export_path(p_value); _update_presets(); } @@ -955,6 +977,10 @@ void ProjectExportDialog::_bind_methods() { ClassDB::bind_method("_export_all_dialog_action", &ProjectExportDialog::_export_all_dialog_action); ClassDB::bind_method("_custom_features_changed", &ProjectExportDialog::_custom_features_changed); ClassDB::bind_method("_tab_changed", &ProjectExportDialog::_tab_changed); + ClassDB::bind_method("set_export_path", &ProjectExportDialog::set_export_path); + ClassDB::bind_method("get_export_path", &ProjectExportDialog::get_export_path); + + ADD_PROPERTY(PropertyInfo(Variant::STRING, "export_path"), "set_export_path", "get_export_path"); } ProjectExportDialog::ProjectExportDialog() { @@ -1007,9 +1033,12 @@ ProjectExportDialog::ProjectExportDialog() { runnable->connect("pressed", this, "_runnable_pressed"); settings_vb->add_child(runnable); - export_path = memnew(LineEdit); - settings_vb->add_margin_child(TTR("Export Path:"), export_path); - export_path->connect("text_changed", this, "_export_path_changed"); + export_path = memnew(EditorPropertyPath); + settings_vb->add_child(export_path); + export_path->set_label(TTR("Export Path")); + export_path->set_object_and_property(this, "export_path"); + export_path->set_save_mode(); + export_path->connect("property_changed", this, "_export_path_changed"); sections = memnew(TabContainer); sections->set_tab_align(TabContainer::ALIGN_LEFT); @@ -1101,7 +1130,7 @@ ProjectExportDialog::ProjectExportDialog() { //disable by default name->set_editable(false); - export_path->set_editable(false); + export_path->hide(); runnable->set_disabled(true); duplicate_preset->set_disabled(true); delete_preset->set_disabled(true); diff --git a/editor/project_export.h b/editor/project_export.h index 7009968138..b43dd9a392 100644 --- a/editor/project_export.h +++ b/editor/project_export.h @@ -37,6 +37,7 @@ #include "editor/editor_file_dialog.h" #include "editor/editor_file_system.h" #include "editor/editor_inspector.h" +#include "editor/editor_properties.h" #include "scene/gui/button.h" #include "scene/gui/check_button.h" #include "scene/gui/control.h" @@ -66,7 +67,7 @@ private: ItemList *presets; LineEdit *name; - LineEdit *export_path; + EditorPropertyPath *export_path; EditorInspector *parameters; CheckButton *runnable; @@ -110,7 +111,7 @@ private: void _runnable_pressed(); void _update_parameters(const String &p_edited_property); void _name_changed(const String &p_string); - void _export_path_changed(const String &p_string); + void _export_path_changed(const StringName &p_property, const Variant &p_value); void _add_preset(int p_platform); void _edit_preset(int p_index); void _duplicate_preset(); @@ -162,6 +163,9 @@ protected: public: void popup_export(); + void set_export_path(const String &p_value); + String get_export_path(); + ProjectExportDialog(); ~ProjectExportDialog(); }; diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 8c906e5f0b..8d5847bea4 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -745,7 +745,8 @@ public: get_ok()->set_text(TTR("Create & Edit")); name_container->show(); install_path_container->hide(); - project_name->grab_focus(); + project_name->call_deferred("grab_focus"); + project_name->call_deferred("select_all"); } else if (mode == MODE_INSTALL) { @@ -866,16 +867,22 @@ struct ProjectItem { uint64_t last_modified; bool favorite; bool grayed; + bool ordered_latest_modification; ProjectItem() {} - ProjectItem(const String &p_project, const String &p_path, const String &p_conf, uint64_t p_last_modified, bool p_favorite = false, bool p_grayed = false) { + ProjectItem(const String &p_project, const String &p_path, const String &p_conf, uint64_t p_last_modified, bool p_favorite = false, bool p_grayed = false, const bool p_ordered_latest_modification = true) { project = p_project; path = p_path; conf = p_conf; last_modified = p_last_modified; favorite = p_favorite; grayed = p_grayed; + ordered_latest_modification = p_ordered_latest_modification; + } + _FORCE_INLINE_ bool operator<(const ProjectItem &l) const { + if (ordered_latest_modification) + return last_modified > l.last_modified; + return project < l.project; } - _FORCE_INLINE_ bool operator<(const ProjectItem &l) const { return last_modified > l.last_modified; } _FORCE_INLINE_ bool operator==(const ProjectItem &l) const { return project == l.project; } }; @@ -1156,6 +1163,13 @@ void ProjectManager::_load_recent_projects() { Color font_color = gui_base->get_color("font_color", "Tree"); + bool set_ordered_latest_modification; + ProjectListFilter::FilterOption filter_order_option = project_order_filter->get_filter_option(); + if (filter_order_option == ProjectListFilter::FILTER_NAME) + set_ordered_latest_modification = false; + else + set_ordered_latest_modification = true; + List<ProjectItem> projects; List<ProjectItem> favorite_projects; @@ -1188,13 +1202,12 @@ void ProjectManager::_load_recent_projects() { grayed = true; } - ProjectItem item(project, path, conf, last_modified, favorite, grayed); + ProjectItem item(project, path, conf, last_modified, favorite, grayed, set_ordered_latest_modification); if (favorite) favorite_projects.push_back(item); else projects.push_back(item); } - projects.sort(); favorite_projects.sort(); @@ -1818,16 +1831,41 @@ ProjectManager::ProjectManager() { tabs->add_child(tree_hb); VBoxContainer *search_tree_vb = memnew(VBoxContainer); - search_tree_vb->set_h_size_flags(SIZE_EXPAND_FILL); tree_hb->add_child(search_tree_vb); + search_tree_vb->set_h_size_flags(SIZE_EXPAND_FILL); - HBoxContainer *search_box = memnew(HBoxContainer); - search_box->add_spacer(true); + HBoxContainer *sort_filters = memnew(HBoxContainer); + Label *sort_label = memnew(Label); + sort_label->set_text(TTR("Sort:")); + sort_filters->add_child(sort_label); + Vector<String> vec1; + vec1.push_back("Name"); + vec1.push_back("Last Modified"); + project_order_filter = memnew(ProjectListFilter); + project_order_filter->_setup_filters(vec1); + project_order_filter->set_filter_size(150); + sort_filters->add_child(project_order_filter); + project_order_filter->connect("filter_changed", this, "_load_recent_projects"); + project_order_filter->set_custom_minimum_size(Size2(180, 10) * EDSCALE); + + sort_filters->add_spacer(true); + Label *search_label = memnew(Label); + search_label->set_text(TTR(" Search:")); + sort_filters->add_child(search_label); + + HBoxContainer *search_filters = memnew(HBoxContainer); + Vector<String> vec2; + vec2.push_back("Name"); + vec2.push_back("Path"); project_filter = memnew(ProjectListFilter); - search_box->add_child(project_filter); + project_filter->_setup_filters(vec2); + project_filter->add_search_box(); + search_filters->add_child(project_filter); project_filter->connect("filter_changed", this, "_load_recent_projects"); project_filter->set_custom_minimum_size(Size2(280, 10) * EDSCALE); - search_tree_vb->add_child(search_box); + sort_filters->add_child(search_filters); + + search_tree_vb->add_child(sort_filters); PanelContainer *pc = memnew(PanelContainer); pc->add_style_override("panel", gui_base->get_stylebox("bg", "Tree")); @@ -2017,11 +2055,11 @@ ProjectManager::~ProjectManager() { EditorSettings::destroy(); } -void ProjectListFilter::_setup_filters() { +void ProjectListFilter::_setup_filters(Vector<String> options) { filter_option->clear(); - filter_option->add_item(TTR("Name")); - filter_option->add_item(TTR("Path")); + for (int i = 0; i < options.size(); i++) + filter_option->add_item(TTR(options[i])); } void ProjectListFilter::_search_text_changed(const String &p_newtext) { @@ -2046,7 +2084,7 @@ void ProjectListFilter::_filter_option_selected(int p_idx) { void ProjectListFilter::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { + if (p_what == NOTIFICATION_ENTER_TREE && has_search_box) { search_box->set_right_icon(get_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); } @@ -2060,20 +2098,27 @@ void ProjectListFilter::_bind_methods() { ADD_SIGNAL(MethodInfo("filter_changed")); } +void ProjectListFilter::add_search_box() { + search_box = memnew(LineEdit); + search_box->connect("text_changed", this, "_search_text_changed"); + search_box->set_h_size_flags(SIZE_EXPAND_FILL); + add_child(search_box); + has_search_box = true; +} + +void ProjectListFilter::set_filter_size(int h_size) { + filter_option->set_custom_minimum_size(Size2(h_size * EDSCALE, 10 * EDSCALE)); +} + ProjectListFilter::ProjectListFilter() { _current_filter = FILTER_NAME; filter_option = memnew(OptionButton); - filter_option->set_custom_minimum_size(Size2(80 * EDSCALE, 10 * EDSCALE)); + set_filter_size(80); filter_option->set_clip_text(true); filter_option->connect("item_selected", this, "_filter_option_selected"); add_child(filter_option); - _setup_filters(); - - search_box = memnew(LineEdit); - search_box->connect("text_changed", this, "_search_text_changed"); - search_box->set_h_size_flags(SIZE_EXPAND_FILL); - add_child(search_box); + has_search_box = false; } diff --git a/editor/project_manager.h b/editor/project_manager.h index ad21e00b0d..88fc081272 100644 --- a/editor/project_manager.h +++ b/editor/project_manager.h @@ -54,6 +54,7 @@ class ProjectManager : public Control { EditorAssetLibrary *asset_library; ProjectListFilter *project_filter; + ProjectListFilter *project_order_filter; ConfirmationDialog *language_restart_ask; ConfirmationDialog *erase_ask; @@ -130,6 +131,7 @@ private: OptionButton *filter_option; LineEdit *search_box; + bool has_search_box; enum FilterOption { FILTER_NAME, @@ -138,7 +140,6 @@ private: FilterOption _current_filter; void _search_text_changed(const String &p_newtext); - void _setup_filters(); void _filter_option_selected(int p_idx); protected: @@ -146,6 +147,9 @@ protected: static void _bind_methods(); public: + void _setup_filters(Vector<String> options); + void add_search_box(); + void set_filter_size(int h_size); String get_search_term(); FilterOption get_filter_option(); ProjectListFilter(); |