Improve the batch rename dialog
- Use the editor-defined error, warning and success colors for
preview texts.
- Make the "Regular Expressions" option into a CheckButton
(as it does something as soon as it's toggled) and move it out
of the Advanced Options submenu.
- Make it clearer that the error message originates from an invalid
regular expression.
- Clarify what the number means in the regex error message.
- Tweak some strings' casing for consistency.
(cherry picked from commit ff135065f4
)
This commit is contained in:
parent
9a396a4e07
commit
56336b4e24
2 changed files with 24 additions and 29 deletions
|
@ -109,9 +109,13 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und
|
||||||
|
|
||||||
const int feature_min_height = 160 * EDSCALE;
|
const int feature_min_height = 160 * EDSCALE;
|
||||||
|
|
||||||
CheckButton *chk_collapse_features = memnew(CheckButton);
|
cbut_regex = memnew(CheckButton);
|
||||||
chk_collapse_features->set_text(TTR("Advanced Options"));
|
cbut_regex->set_text(TTR("Use Regular Expressions"));
|
||||||
vbc->add_child(chk_collapse_features);
|
vbc->add_child(cbut_regex);
|
||||||
|
|
||||||
|
CheckButton *cbut_collapse_features = memnew(CheckButton);
|
||||||
|
cbut_collapse_features->set_text(TTR("Advanced Options"));
|
||||||
|
vbc->add_child(cbut_collapse_features);
|
||||||
|
|
||||||
tabc_features = memnew(TabContainer);
|
tabc_features = memnew(TabContainer);
|
||||||
tabc_features->set_tab_align(TabContainer::ALIGN_LEFT);
|
tabc_features->set_tab_align(TabContainer::ALIGN_LEFT);
|
||||||
|
@ -195,7 +199,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und
|
||||||
grd_substitute->add_child(but_insert_count);
|
grd_substitute->add_child(but_insert_count);
|
||||||
|
|
||||||
chk_per_level_counter = memnew(CheckBox);
|
chk_per_level_counter = memnew(CheckBox);
|
||||||
chk_per_level_counter->set_text(TTR("Per Level counter"));
|
chk_per_level_counter->set_text(TTR("Per-level Counter"));
|
||||||
chk_per_level_counter->set_tooltip(TTR("If set the counter restarts for each group of child nodes"));
|
chk_per_level_counter->set_tooltip(TTR("If set the counter restarts for each group of child nodes"));
|
||||||
vbc_substitute->add_child(chk_per_level_counter);
|
vbc_substitute->add_child(chk_per_level_counter);
|
||||||
|
|
||||||
|
@ -233,18 +237,6 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und
|
||||||
spn_count_padding->set_step(1);
|
spn_count_padding->set_step(1);
|
||||||
hbc_count_options->add_child(spn_count_padding);
|
hbc_count_options->add_child(spn_count_padding);
|
||||||
|
|
||||||
// ---- Tab RegEx
|
|
||||||
|
|
||||||
VBoxContainer *vbc_regex = memnew(VBoxContainer);
|
|
||||||
vbc_regex->set_h_size_flags(SIZE_EXPAND_FILL);
|
|
||||||
vbc_regex->set_name(TTR("Regular Expressions"));
|
|
||||||
vbc_regex->set_custom_minimum_size(Size2(0, feature_min_height));
|
|
||||||
tabc_features->add_child(vbc_regex);
|
|
||||||
|
|
||||||
cbut_regex = memnew(CheckBox);
|
|
||||||
cbut_regex->set_text(TTR("Regular Expressions"));
|
|
||||||
vbc_regex->add_child(cbut_regex);
|
|
||||||
|
|
||||||
// ---- Tab Process
|
// ---- Tab Process
|
||||||
|
|
||||||
VBoxContainer *vbc_process = memnew(VBoxContainer);
|
VBoxContainer *vbc_process = memnew(VBoxContainer);
|
||||||
|
@ -268,8 +260,8 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und
|
||||||
|
|
||||||
opt_style = memnew(OptionButton);
|
opt_style = memnew(OptionButton);
|
||||||
opt_style->add_item(TTR("Keep"));
|
opt_style->add_item(TTR("Keep"));
|
||||||
opt_style->add_item(TTR("CamelCase to under_scored"));
|
opt_style->add_item(TTR("PascalCase to snake_case"));
|
||||||
opt_style->add_item(TTR("under_scored to CamelCase"));
|
opt_style->add_item(TTR("snake_case to PascalCase"));
|
||||||
hbc_style->add_child(opt_style);
|
hbc_style->add_child(opt_style);
|
||||||
|
|
||||||
// ------ Case
|
// ------ Case
|
||||||
|
@ -299,7 +291,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und
|
||||||
|
|
||||||
lbl_preview = memnew(Label);
|
lbl_preview = memnew(Label);
|
||||||
lbl_preview->set_text("");
|
lbl_preview->set_text("");
|
||||||
lbl_preview->add_color_override("font_color", Color(1, 0.5f, 0, 1));
|
lbl_preview->add_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_color("error_color", "Editor"));
|
||||||
vbc->add_child(lbl_preview);
|
vbc->add_child(lbl_preview);
|
||||||
|
|
||||||
// ---- Dialog related
|
// ---- Dialog related
|
||||||
|
@ -314,7 +306,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und
|
||||||
|
|
||||||
// ---- Connections
|
// ---- Connections
|
||||||
|
|
||||||
chk_collapse_features->connect("toggled", this, "_features_toggled");
|
cbut_collapse_features->connect("toggled", this, "_features_toggled");
|
||||||
|
|
||||||
// Substitite Buttons
|
// Substitite Buttons
|
||||||
|
|
||||||
|
@ -414,9 +406,12 @@ void RenameDialog::_update_preview(String new_text) {
|
||||||
lbl_preview->set_text(new_name);
|
lbl_preview->set_text(new_name);
|
||||||
|
|
||||||
if (new_name == preview_node->get_name()) {
|
if (new_name == preview_node->get_name()) {
|
||||||
lbl_preview->add_color_override("font_color", Color(0, 0.5f, 0.25f, 1));
|
// New name is identical to the old one. Don't color it as much to avoid distracting the user.
|
||||||
|
const Color accent_color = EditorNode::get_singleton()->get_gui_base()->get_color("accent_color", "Editor");
|
||||||
|
const Color text_color = EditorNode::get_singleton()->get_gui_base()->get_color("default_color", "RichTextLabel");
|
||||||
|
lbl_preview->add_color_override("font_color", accent_color.linear_interpolate(text_color, 0.5));
|
||||||
} else {
|
} else {
|
||||||
lbl_preview->add_color_override("font_color", Color(0, 1, 0.5f, 1));
|
lbl_preview->add_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_color("success_color", "Editor"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,9 +496,9 @@ void RenameDialog::_error_handler(void *p_self, const char *p_func, const char *
|
||||||
}
|
}
|
||||||
|
|
||||||
self->has_errors = true;
|
self->has_errors = true;
|
||||||
self->lbl_preview_title->set_text(TTR("Error"));
|
self->lbl_preview_title->set_text(TTR("Regular Expression Error"));
|
||||||
self->lbl_preview->add_color_override("font_color", Color(1, 0.25f, 0, 1));
|
self->lbl_preview->add_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_color("error_color", "Editor"));
|
||||||
self->lbl_preview->set_text(err_str);
|
self->lbl_preview->set_text(vformat(TTR("At character %s"), err_str));
|
||||||
}
|
}
|
||||||
|
|
||||||
String RenameDialog::_regex(const String &pattern, const String &subject, const String &replacement) {
|
String RenameDialog::_regex(const String &pattern, const String &subject, const String &replacement) {
|
||||||
|
@ -520,18 +515,18 @@ String RenameDialog::_postprocess(const String &subject) {
|
||||||
String result = subject;
|
String result = subject;
|
||||||
|
|
||||||
if (style_id == 1) {
|
if (style_id == 1) {
|
||||||
|
// PascalCase to snake_case
|
||||||
|
|
||||||
// CamelCase to Under_Line
|
|
||||||
result = result.camelcase_to_underscore(true);
|
result = result.camelcase_to_underscore(true);
|
||||||
result = _regex("_+", result, "_");
|
result = _regex("_+", result, "_");
|
||||||
|
|
||||||
} else if (style_id == 2) {
|
} else if (style_id == 2) {
|
||||||
|
// snake_case to PascalCase
|
||||||
|
|
||||||
// Under_Line to CamelCase
|
|
||||||
RegEx pattern("_+(.?)");
|
RegEx pattern("_+(.?)");
|
||||||
Array matches = pattern.search_all(result);
|
Array matches = pattern.search_all(result);
|
||||||
|
|
||||||
// _ name would become empty. Ignore
|
// The name `_` would become empty; ignore it.
|
||||||
if (matches.size() && result != "_") {
|
if (matches.size() && result != "_") {
|
||||||
String buffer;
|
String buffer;
|
||||||
int start = 0;
|
int start = 0;
|
||||||
|
|
|
@ -75,7 +75,7 @@ class RenameDialog : public ConfirmationDialog {
|
||||||
TabContainer *tabc_features;
|
TabContainer *tabc_features;
|
||||||
|
|
||||||
CheckBox *cbut_substitute;
|
CheckBox *cbut_substitute;
|
||||||
CheckBox *cbut_regex;
|
CheckButton *cbut_regex;
|
||||||
CheckBox *cbut_process;
|
CheckBox *cbut_process;
|
||||||
CheckBox *chk_per_level_counter;
|
CheckBox *chk_per_level_counter;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue