Added a setting for files in which the editor should search (project wise).
Remembers the tickboxes but only during the same execution Fixes #25440
This commit is contained in:
parent
16d402147b
commit
c4eb974a8a
3 changed files with 38 additions and 24 deletions
|
@ -1005,6 +1005,15 @@ ProjectSettings::ProjectSettings() {
|
||||||
GLOBAL_DEF("application/config/custom_user_dir_name", "");
|
GLOBAL_DEF("application/config/custom_user_dir_name", "");
|
||||||
GLOBAL_DEF("application/config/project_settings_override", "");
|
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 = Dictionary();
|
||||||
action["deadzone"] = Variant(0.5f);
|
action["deadzone"] = Variant(0.5f);
|
||||||
events = Array();
|
events = Array();
|
||||||
|
|
|
@ -367,28 +367,11 @@ FindInFilesDialog::FindInFilesDialog() {
|
||||||
|
|
||||||
Label *filter_label = memnew(Label);
|
Label *filter_label = memnew(Label);
|
||||||
filter_label->set_text(TTR("Filters:"));
|
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);
|
gc->add_child(filter_label);
|
||||||
|
|
||||||
{
|
_filters_container = memnew(HBoxContainer);
|
||||||
HBoxContainer *hbc = memnew(HBoxContainer);
|
gc->add_child(_filters_container);
|
||||||
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
_find_button = add_button(TTR("Find..."), false, "find");
|
_find_button = add_button(TTR("Find..."), false, "find");
|
||||||
_find_button->set_disabled(true);
|
_find_button->set_disabled(true);
|
||||||
|
@ -424,11 +407,12 @@ String FindInFilesDialog::get_folder() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<String> FindInFilesDialog::get_filter() const {
|
Set<String> FindInFilesDialog::get_filter() const {
|
||||||
|
// could check the _filters_preferences but it might not have been generated yet.
|
||||||
Set<String> filters;
|
Set<String> filters;
|
||||||
for (int i = 0; i < _filters.size(); ++i) {
|
for (int i = 0; i < _filters_container->get_child_count(); ++i) {
|
||||||
CheckBox *cb = _filters[i];
|
CheckBox *cb = (CheckBox *)_filters_container->get_child(i);
|
||||||
if (cb->is_pressed()) {
|
if (cb->is_pressed()) {
|
||||||
filters.insert(_filters[i]->get_text());
|
filters.insert(cb->get_text());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return filters;
|
return filters;
|
||||||
|
@ -440,6 +424,20 @@ void FindInFilesDialog::_notification(int p_what) {
|
||||||
// Doesn't work more than once if not deferred...
|
// Doesn't work more than once if not deferred...
|
||||||
_search_text_line_edit->call_deferred("grab_focus");
|
_search_text_line_edit->call_deferred("grab_focus");
|
||||||
_search_text_line_edit->select_all();
|
_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) {
|
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") {
|
if (p_action == "find") {
|
||||||
emit_signal(SIGNAL_FIND_REQUESTED);
|
emit_signal(SIGNAL_FIND_REQUESTED);
|
||||||
hide();
|
hide();
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#ifndef FIND_IN_FILES_H
|
#ifndef FIND_IN_FILES_H
|
||||||
#define FIND_IN_FILES_H
|
#define FIND_IN_FILES_H
|
||||||
|
|
||||||
|
#include "core/hash_map.h"
|
||||||
#include "scene/gui/dialogs.h"
|
#include "scene/gui/dialogs.h"
|
||||||
|
|
||||||
// Performs the actual search
|
// Performs the actual search
|
||||||
|
@ -88,6 +89,7 @@ private:
|
||||||
class LineEdit;
|
class LineEdit;
|
||||||
class CheckBox;
|
class CheckBox;
|
||||||
class FileDialog;
|
class FileDialog;
|
||||||
|
class HBoxContainer;
|
||||||
|
|
||||||
// Prompts search parameters
|
// Prompts search parameters
|
||||||
class FindInFilesDialog : public AcceptDialog {
|
class FindInFilesDialog : public AcceptDialog {
|
||||||
|
@ -120,12 +122,13 @@ private:
|
||||||
|
|
||||||
LineEdit *_search_text_line_edit;
|
LineEdit *_search_text_line_edit;
|
||||||
LineEdit *_folder_line_edit;
|
LineEdit *_folder_line_edit;
|
||||||
Vector<CheckBox *> _filters;
|
|
||||||
CheckBox *_match_case_checkbox;
|
CheckBox *_match_case_checkbox;
|
||||||
CheckBox *_whole_words_checkbox;
|
CheckBox *_whole_words_checkbox;
|
||||||
Button *_find_button;
|
Button *_find_button;
|
||||||
Button *_replace_button;
|
Button *_replace_button;
|
||||||
FileDialog *_folder_dialog;
|
FileDialog *_folder_dialog;
|
||||||
|
HBoxContainer *_filters_container;
|
||||||
|
HashMap<String, bool> _filters_preferences;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Button;
|
class Button;
|
||||||
|
|
Loading…
Reference in a new issue