summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQbieShay <cislaghi.ilaria@gmail.com>2019-02-04 22:59:51 +0100
committerQbieShay <cislaghi.ilaria@gmail.com>2019-02-12 21:24:07 +0100
commitc4eb974a8a73eabc29dd3be47b09969a4348fa20 (patch)
tree6cb120496111ee367f656f8999aa73a3382ec304
parent16d402147b9057c9f7d43ef9b46eb8654e5483cc (diff)
Added a setting for files in which the editor should search (project wise).
Remembers the tickboxes but only during the same execution Fixes #25440
-rw-r--r--core/project_settings.cpp9
-rw-r--r--editor/find_in_files.cpp48
-rw-r--r--editor/find_in_files.h5
3 files changed, 38 insertions, 24 deletions
diff --git a/core/project_settings.cpp b/core/project_settings.cpp
index 8d05d7cc74..303e363d17 100644
--- a/core/project_settings.cpp
+++ b/core/project_settings.cpp
@@ -1005,6 +1005,15 @@ ProjectSettings::ProjectSettings() {
GLOBAL_DEF("application/config/custom_user_dir_name", "");
GLOBAL_DEF("application/config/project_settings_override", "");
+ PoolStringArray extensions = PoolStringArray();
+ extensions.push_back("gd");
+ if (Engine::get_singleton()->has_singleton("GodotSharp"))
+ extensions.push_back("cs");
+ extensions.push_back("shader");
+
+ GLOBAL_DEF("editor/search_in_file_extensions", extensions);
+ custom_prop_info["editor/search_in_file_extensions"] = PropertyInfo(Variant::POOL_STRING_ARRAY, "editor/search_in_file_extensions");
+
action = Dictionary();
action["deadzone"] = Variant(0.5f);
events = Array();
diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp
index bae0d196fd..dfad4dca41 100644
--- a/editor/find_in_files.cpp
+++ b/editor/find_in_files.cpp
@@ -367,28 +367,11 @@ FindInFilesDialog::FindInFilesDialog() {
Label *filter_label = memnew(Label);
filter_label->set_text(TTR("Filters:"));
+ filter_label->set_tooltip(TTR("Include the files with the following extensions. Add or remove them in ProjectSettings."));
gc->add_child(filter_label);
- {
- HBoxContainer *hbc = memnew(HBoxContainer);
-
- // TODO: Unhardcode this.
- Vector<String> exts;
- exts.push_back("gd");
- if (Engine::get_singleton()->has_singleton("GodotSharp"))
- exts.push_back("cs");
- exts.push_back("shader");
-
- for (int i = 0; i < exts.size(); ++i) {
- CheckBox *cb = memnew(CheckBox);
- cb->set_text(exts[i]);
- cb->set_pressed(true);
- hbc->add_child(cb);
- _filters.push_back(cb);
- }
-
- gc->add_child(hbc);
- }
+ _filters_container = memnew(HBoxContainer);
+ gc->add_child(_filters_container);
_find_button = add_button(TTR("Find..."), false, "find");
_find_button->set_disabled(true);
@@ -424,11 +407,12 @@ String FindInFilesDialog::get_folder() const {
}
Set<String> FindInFilesDialog::get_filter() const {
+ // could check the _filters_preferences but it might not have been generated yet.
Set<String> filters;
- for (int i = 0; i < _filters.size(); ++i) {
- CheckBox *cb = _filters[i];
+ for (int i = 0; i < _filters_container->get_child_count(); ++i) {
+ CheckBox *cb = (CheckBox *)_filters_container->get_child(i);
if (cb->is_pressed()) {
- filters.insert(_filters[i]->get_text());
+ filters.insert(cb->get_text());
}
}
return filters;
@@ -440,6 +424,20 @@ void FindInFilesDialog::_notification(int p_what) {
// Doesn't work more than once if not deferred...
_search_text_line_edit->call_deferred("grab_focus");
_search_text_line_edit->select_all();
+ // Extensions might have changed in the meantime, we clean them and instance them again.
+ for (int i = 0; i < _filters_container->get_child_count(); i++) {
+ _filters_container->get_child(i)->queue_delete();
+ }
+ Array exts = ProjectSettings::get_singleton()->get("editor/search_in_file_extensions");
+ for (int i = 0; i < exts.size(); ++i) {
+ CheckBox *cb = memnew(CheckBox);
+ cb->set_text(exts[i]);
+ if (!_filters_preferences.has(exts[i])) {
+ _filters_preferences[exts[i]] = true;
+ }
+ cb->set_pressed(_filters_preferences[exts[i]]);
+ _filters_container->add_child(cb);
+ }
}
}
}
@@ -449,6 +447,10 @@ void FindInFilesDialog::_on_folder_button_pressed() {
}
void FindInFilesDialog::custom_action(const String &p_action) {
+ for (int i = 0; i < _filters_container->get_child_count(); ++i) {
+ CheckBox *cb = (CheckBox *)_filters_container->get_child(i);
+ _filters_preferences[cb->get_text()] = cb->is_pressed();
+ }
if (p_action == "find") {
emit_signal(SIGNAL_FIND_REQUESTED);
hide();
diff --git a/editor/find_in_files.h b/editor/find_in_files.h
index 220f8cc136..5f728a104b 100644
--- a/editor/find_in_files.h
+++ b/editor/find_in_files.h
@@ -31,6 +31,7 @@
#ifndef FIND_IN_FILES_H
#define FIND_IN_FILES_H
+#include "core/hash_map.h"
#include "scene/gui/dialogs.h"
// Performs the actual search
@@ -88,6 +89,7 @@ private:
class LineEdit;
class CheckBox;
class FileDialog;
+class HBoxContainer;
// Prompts search parameters
class FindInFilesDialog : public AcceptDialog {
@@ -120,12 +122,13 @@ private:
LineEdit *_search_text_line_edit;
LineEdit *_folder_line_edit;
- Vector<CheckBox *> _filters;
CheckBox *_match_case_checkbox;
CheckBox *_whole_words_checkbox;
Button *_find_button;
Button *_replace_button;
FileDialog *_folder_dialog;
+ HBoxContainer *_filters_container;
+ HashMap<String, bool> _filters_preferences;
};
class Button;