mirror of
https://github.com/godotengine/godot
synced 2024-09-04 22:18:28 +00:00
Allow auto-generated node names in PopupMenu::add_submenu_item
This commit is contained in:
parent
d1381bbca2
commit
edcad2ea88
|
@ -4699,11 +4699,16 @@ String String::property_name_encode() const {
|
|||
|
||||
static const char32_t invalid_node_name_characters[] = { '.', ':', '@', '/', '\"', UNIQUE_NODE_PREFIX[0], 0 };
|
||||
|
||||
String String::get_invalid_node_name_characters() {
|
||||
String String::get_invalid_node_name_characters(bool p_allow_internal) {
|
||||
// Do not use this function for critical validation.
|
||||
String r;
|
||||
const char32_t *c = invalid_node_name_characters;
|
||||
while (*c) {
|
||||
if (p_allow_internal && *c == '@') {
|
||||
c++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (c != invalid_node_name_characters) {
|
||||
r += " ";
|
||||
}
|
||||
|
|
|
@ -437,7 +437,7 @@ public:
|
|||
String property_name_encode() const;
|
||||
|
||||
// node functions
|
||||
static String get_invalid_node_name_characters();
|
||||
static String get_invalid_node_name_characters(bool p_allow_internal = false);
|
||||
String validate_node_name() const;
|
||||
String validate_identifier() const;
|
||||
String validate_filename() const;
|
||||
|
|
|
@ -1487,7 +1487,11 @@ void PopupMenu::add_icon_radio_check_shortcut(const Ref<Texture2D> &p_icon, cons
|
|||
}
|
||||
|
||||
void PopupMenu::add_submenu_item(const String &p_label, const String &p_submenu, int p_id) {
|
||||
ERR_FAIL_COND_MSG(p_submenu.validate_node_name() != p_submenu, "Invalid node name for submenu, the following characters are not allowed:\n" + String::get_invalid_node_name_characters());
|
||||
String submenu_name_safe = p_submenu.replace("@", "_"); // Allow special characters for auto-generated names.
|
||||
if (submenu_name_safe.validate_node_name() != submenu_name_safe) {
|
||||
ERR_FAIL_MSG(vformat("Invalid node name '%s' for a submenu, the following characters are not allowed:\n%s", p_submenu, String::get_invalid_node_name_characters(true)));
|
||||
}
|
||||
|
||||
Item item;
|
||||
item.text = p_label;
|
||||
item.xl_text = atr(p_label);
|
||||
|
|
Loading…
Reference in a new issue