mirror of
https://github.com/godotengine/godot.git
synced 2024-11-27 09:16:35 +08:00
Adds a remove class item option in the theme editor.
I've also added a get_stylebox_types helper function to the theme class in order to figure out exactly what types are available to a theme.
This commit is contained in:
parent
c0ec7e933a
commit
d75856146c
@ -370,6 +370,13 @@ void Theme::get_stylebox_list(StringName p_type, List<StringName> *p_list) const
|
||||
|
||||
}
|
||||
|
||||
void Theme::get_stylebox_types(List<StringName> *p_list) const {
|
||||
const StringName *key=NULL;
|
||||
while((key=style_map.next(key))) {
|
||||
p_list->push_back(*key);
|
||||
}
|
||||
}
|
||||
|
||||
void Theme::set_font(const StringName& p_name,const StringName& p_type,const Ref<Font>& p_font) {
|
||||
|
||||
ERR_FAIL_COND(p_font.is_null());
|
||||
@ -380,7 +387,6 @@ void Theme::set_font(const StringName& p_name,const StringName& p_type,const Ref
|
||||
if (new_value) {
|
||||
_change_notify();
|
||||
emit_changed();;
|
||||
|
||||
}
|
||||
}
|
||||
Ref<Font> Theme::get_font(const StringName& p_name,const StringName& p_type) const {
|
||||
@ -604,6 +610,7 @@ void Theme::_bind_methods() {
|
||||
ObjectTypeDB::bind_method(_MD("has_stylebox","name","type"),&Theme::has_stylebox);
|
||||
ObjectTypeDB::bind_method(_MD("clear_stylebox","name","type"),&Theme::clear_stylebox);
|
||||
ObjectTypeDB::bind_method(_MD("get_stylebox_list","type"),&Theme::_get_stylebox_list);
|
||||
ObjectTypeDB::bind_method(_MD("get_stylebox_types"),&Theme::_get_stylebox_types);
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("set_font","name","type","font:Font"),&Theme::set_font);
|
||||
ObjectTypeDB::bind_method(_MD("get_font:Font","name","type"),&Theme::get_font);
|
||||
|
@ -65,6 +65,7 @@ protected:
|
||||
|
||||
DVector<String> _get_icon_list(const String& p_type) const { DVector<String> ilret; List<StringName> il; get_icon_list(p_type,&il); for(List<StringName>::Element *E=il.front();E;E=E->next()) { ilret.push_back(E->get()); } return ilret; }
|
||||
DVector<String> _get_stylebox_list(const String& p_type) const { DVector<String> ilret; List<StringName> il; get_stylebox_list(p_type,&il); for(List<StringName>::Element *E=il.front();E;E=E->next()) { ilret.push_back(E->get()); } return ilret; }
|
||||
DVector<String> _get_stylebox_types(void) const { DVector<String> ilret; List<StringName> il; get_stylebox_types(&il); for(List<StringName>::Element *E=il.front();E;E=E->next()) { ilret.push_back(E->get()); } return ilret; }
|
||||
DVector<String> _get_font_list(const String& p_type) const { DVector<String> ilret; List<StringName> il; get_font_list(p_type,&il); for(List<StringName>::Element *E=il.front();E;E=E->next()) { ilret.push_back(E->get()); } return ilret; }
|
||||
DVector<String> _get_color_list(const String& p_type) const { DVector<String> ilret; List<StringName> il; get_color_list(p_type,&il); for(List<StringName>::Element *E=il.front();E;E=E->next()) { ilret.push_back(E->get()); } return ilret; }
|
||||
DVector<String> _get_constant_list(const String& p_type) const { DVector<String> ilret; List<StringName> il; get_constant_list(p_type,&il); for(List<StringName>::Element *E=il.front();E;E=E->next()) { ilret.push_back(E->get()); } return ilret; }
|
||||
@ -100,6 +101,7 @@ public:
|
||||
bool has_stylebox(const StringName& p_name,const StringName& p_type) const;
|
||||
void clear_stylebox(const StringName& p_name,const StringName& p_type);
|
||||
void get_stylebox_list(StringName p_type, List<StringName> *p_list) const;
|
||||
void get_stylebox_types(List<StringName> *p_list) const;
|
||||
|
||||
void set_font(const StringName& p_name,const StringName& p_type,const Ref<Font>& p_font);
|
||||
Ref<Font> get_font(const StringName& p_name,const StringName& p_type) const;
|
||||
|
@ -399,6 +399,54 @@ void ThemeEditor::_dialog_cbk() {
|
||||
|
||||
|
||||
} break;
|
||||
case POPUP_CLASS_REMOVE: {
|
||||
StringName fromtype = type_edit->get_text();
|
||||
List<StringName> names;
|
||||
|
||||
{
|
||||
names.clear();
|
||||
Theme::get_default()->get_icon_list(fromtype,&names);
|
||||
for(List<StringName>::Element *E=names.front();E;E=E->next()) {
|
||||
theme->clear_icon(E->get(),fromtype);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
{
|
||||
names.clear();
|
||||
Theme::get_default()->get_stylebox_list(fromtype,&names);
|
||||
for(List<StringName>::Element *E=names.front();E;E=E->next()) {
|
||||
theme->clear_stylebox(E->get(),fromtype);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
{
|
||||
names.clear();
|
||||
Theme::get_default()->get_font_list(fromtype,&names);
|
||||
for(List<StringName>::Element *E=names.front();E;E=E->next()) {
|
||||
theme->clear_font(E->get(),fromtype);
|
||||
|
||||
}
|
||||
}
|
||||
{
|
||||
names.clear();
|
||||
Theme::get_default()->get_color_list(fromtype,&names);
|
||||
for(List<StringName>::Element *E=names.front();E;E=E->next()) {
|
||||
theme->clear_color(E->get(),fromtype);
|
||||
|
||||
}
|
||||
}
|
||||
{
|
||||
names.clear();
|
||||
Theme::get_default()->get_constant_list(fromtype,&names);
|
||||
for(List<StringName>::Element *E=names.front();E;E=E->next()) {
|
||||
theme->clear_constant(E->get(),fromtype);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}break;
|
||||
}
|
||||
|
||||
}
|
||||
@ -453,6 +501,19 @@ void ThemeEditor::_theme_menu_cbk(int p_option) {
|
||||
|
||||
base_theme=theme;
|
||||
|
||||
} else if (p_option==POPUP_CLASS_REMOVE) {
|
||||
|
||||
add_del_dialog->set_title("Remove All Items");
|
||||
add_del_dialog->get_ok()->set_text("Remove All");
|
||||
add_del_dialog->popup_centered(Size2(240,85));
|
||||
|
||||
base_theme=Theme::get_default();
|
||||
|
||||
type_select->hide();
|
||||
name_select_label->hide();
|
||||
type_select_label->hide();
|
||||
name_edit->hide();
|
||||
name_menu->hide();
|
||||
}
|
||||
popup_mode=p_option;
|
||||
|
||||
@ -538,6 +599,7 @@ ThemeEditor::ThemeEditor() {
|
||||
theme_menu->get_popup()->add_item("Add Item",POPUP_ADD);
|
||||
theme_menu->get_popup()->add_item("Add Class Items",POPUP_CLASS_ADD);
|
||||
theme_menu->get_popup()->add_item("Remove Item",POPUP_REMOVE);
|
||||
theme_menu->get_popup()->add_item("Remove Class Items",POPUP_CLASS_REMOVE);
|
||||
theme_menu->get_popup()->add_separator();
|
||||
theme_menu->get_popup()->add_item("Create Template",POPUP_CREATE_TEMPLATE);
|
||||
hb_menu->add_child(theme_menu);
|
||||
|
@ -67,6 +67,7 @@ class ThemeEditor : public Control {
|
||||
POPUP_ADD,
|
||||
POPUP_CLASS_ADD,
|
||||
POPUP_REMOVE,
|
||||
POPUP_CLASS_REMOVE,
|
||||
POPUP_CREATE_TEMPLATE
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user