Enhance theme preview

(cherry picked from commit 5dfbdbcd0b)
This commit is contained in:
Michael Alexsander Silva Dias 2019-02-09 15:38:35 -02:00 committed by Rémi Verschelde
parent ef6807b34c
commit 28d48a0886
2 changed files with 127 additions and 101 deletions

View File

@ -36,7 +36,7 @@
void ThemeEditor::edit(const Ref<Theme> &p_theme) { void ThemeEditor::edit(const Ref<Theme> &p_theme) {
theme = p_theme; theme = p_theme;
main_vb->set_theme(p_theme); main_container->set_theme(p_theme);
} }
void ThemeEditor::_propagate_redraw(Control *p_at) { void ThemeEditor::_propagate_redraw(Control *p_at) {
@ -53,7 +53,7 @@ void ThemeEditor::_propagate_redraw(Control *p_at) {
void ThemeEditor::_refresh_interval() { void ThemeEditor::_refresh_interval() {
_propagate_redraw(main_vb); _propagate_redraw(main_container);
} }
void ThemeEditor::_type_menu_cbk(int p_option) { void ThemeEditor::_type_menu_cbk(int p_option) {
@ -574,7 +574,6 @@ void ThemeEditor::_theme_menu_cbk(int p_option) {
} }
} }
//types.sort();
types.sort_custom<StringName::AlphCompare>(); types.sort_custom<StringName::AlphCompare>();
for (List<StringName>::Element *E = types.front(); E; E = E->next()) { for (List<StringName>::Element *E = types.front(); E; E = E->next()) {
@ -610,30 +609,14 @@ ThemeEditor::ThemeEditor() {
time_left = 0; time_left = 0;
scroll = memnew(ScrollContainer); HBoxContainer *top_menu = memnew(HBoxContainer);
add_child(scroll); add_child(top_menu);
scroll->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 3);
scroll->set_margin(MARGIN_TOP, 30 * EDSCALE);
//scroll->set_enable_h_scroll(true);
scroll->set_enable_v_scroll(true);
scroll->set_enable_h_scroll(false);
Panel *panel = memnew(Panel); top_menu->add_child(memnew(Label(TTR("Preview:"))));
scroll->add_child(panel); top_menu->add_spacer(false);
panel->set_custom_minimum_size(Size2(500, 800) * EDSCALE);
panel->set_theme(Theme::get_default());
panel->set_h_size_flags(SIZE_EXPAND_FILL);
main_vb = memnew(VBoxContainer);
panel->add_child(main_vb);
main_vb->set_anchors_and_margins_preset(Control::PRESET_WIDE, Control::PRESET_MODE_MINSIZE, 4 * EDSCALE);
HBoxContainer *hb_menu = memnew(HBoxContainer);
main_vb->add_child(hb_menu);
theme_menu = memnew(MenuButton); theme_menu = memnew(MenuButton);
theme_menu->set_text(TTR("Edit theme...")); theme_menu->set_text(TTR("Edit Theme"));
theme_menu->set_flat(false);
theme_menu->set_tooltip(TTR("Theme editing menu.")); theme_menu->set_tooltip(TTR("Theme editing menu."));
theme_menu->get_popup()->add_item(TTR("Add Item"), POPUP_ADD); theme_menu->get_popup()->add_item(TTR("Add Item"), POPUP_ADD);
theme_menu->get_popup()->add_item(TTR("Add Class Items"), POPUP_CLASS_ADD); theme_menu->get_popup()->add_item(TTR("Add Class Items"), POPUP_CLASS_ADD);
@ -643,51 +626,73 @@ ThemeEditor::ThemeEditor() {
theme_menu->get_popup()->add_item(TTR("Create Empty Template"), POPUP_CREATE_EMPTY); theme_menu->get_popup()->add_item(TTR("Create Empty Template"), POPUP_CREATE_EMPTY);
theme_menu->get_popup()->add_item(TTR("Create Empty Editor Template"), POPUP_CREATE_EDITOR_EMPTY); theme_menu->get_popup()->add_item(TTR("Create Empty Editor Template"), POPUP_CREATE_EDITOR_EMPTY);
theme_menu->get_popup()->add_item(TTR("Create From Current Editor Theme"), POPUP_IMPORT_EDITOR_THEME); theme_menu->get_popup()->add_item(TTR("Create From Current Editor Theme"), POPUP_IMPORT_EDITOR_THEME);
add_child(theme_menu); top_menu->add_child(theme_menu);
theme_menu->set_position(Vector2(3, 3) * EDSCALE);
theme_menu->get_popup()->connect("id_pressed", this, "_theme_menu_cbk"); theme_menu->get_popup()->connect("id_pressed", this, "_theme_menu_cbk");
scroll = memnew(ScrollContainer);
add_child(scroll);
scroll->set_enable_v_scroll(true);
scroll->set_enable_h_scroll(false);
scroll->set_v_size_flags(SIZE_EXPAND_FILL);
main_container = memnew(MarginContainer);
scroll->add_child(main_container);
main_container->set_clip_contents(true);
main_container->set_custom_minimum_size(Size2(700, 0) * EDSCALE);
main_container->set_v_size_flags(SIZE_EXPAND_FILL);
main_container->set_h_size_flags(SIZE_EXPAND_FILL);
//// Preview Controls ////
Panel *panel = memnew(Panel);
main_container->add_child(panel);
panel->set_theme(Theme::get_default());
MarginContainer *mc = memnew(MarginContainer);
main_container->add_child(mc);
mc->set_theme(Theme::get_default());
mc->add_constant_override("margin_right", 4 * EDSCALE);
mc->add_constant_override("margin_top", 4 * EDSCALE);
mc->add_constant_override("margin_left", 4 * EDSCALE);
mc->add_constant_override("margin_bottom", 4 * EDSCALE);
HBoxContainer *main_hb = memnew(HBoxContainer); HBoxContainer *main_hb = memnew(HBoxContainer);
main_vb->add_child(main_hb); mc->add_child(main_hb);
VBoxContainer *first_vb = memnew(VBoxContainer); VBoxContainer *first_vb = memnew(VBoxContainer);
first_vb->set_h_size_flags(SIZE_EXPAND_FILL);
main_hb->add_child(first_vb); main_hb->add_child(first_vb);
first_vb->set_h_size_flags(SIZE_EXPAND_FILL);
//main_panel->add_child(panel); first_vb->add_constant_override("separation", 10 * EDSCALE);
//panel->set_anchors_and_margins_preset(Control::PRESET_WIDE);
//panel->set_margin( MARGIN_TOP,20 );
first_vb->add_child(memnew(Label("Label"))); first_vb->add_child(memnew(Label("Label")));
first_vb->add_child(memnew(Button("Button"))); first_vb->add_child(memnew(Button("Button")));
Button *bt = memnew(Button);
bt->set_text(TTR("Toggle Button"));
bt->set_toggle_mode(true);
bt->set_pressed(true);
first_vb->add_child(bt);
bt = memnew(Button);
bt->set_text(TTR("Disabled Button"));
bt->set_disabled(true);
first_vb->add_child(bt);
ToolButton *tb = memnew(ToolButton); ToolButton *tb = memnew(ToolButton);
tb->set_text("ToolButton"); tb->set_text("ToolButton");
first_vb->add_child(tb); first_vb->add_child(tb);
CheckButton *cb = memnew(CheckButton); CheckButton *cb = memnew(CheckButton);
cb->set_text("CheckButton"); cb->set_text("CheckButton");
first_vb->add_child(cb); first_vb->add_child(cb);
cb = memnew(CheckButton);
CheckBox *cbx = memnew(CheckBox); CheckBox *cbx = memnew(CheckBox);
cbx->set_text("CheckBox"); cbx->set_text("CheckBox");
first_vb->add_child(cbx); first_vb->add_child(cbx);
VBoxContainer *bg = memnew(VBoxContainer);
bg->set_v_size_flags(SIZE_EXPAND_FILL);
VBoxContainer *gbvb = memnew(VBoxContainer);
gbvb->set_v_size_flags(SIZE_EXPAND_FILL);
CheckBox *rbx1 = memnew(CheckBox);
rbx1->set_text(TTR("CheckBox Radio1"));
rbx1->set_pressed(true);
gbvb->add_child(rbx1);
CheckBox *rbx2 = memnew(CheckBox);
rbx2->set_text(TTR("CheckBox Radio2"));
gbvb->add_child(rbx2);
bg->add_child(gbvb);
first_vb->add_child(bg);
MenuButton *test_menu_button = memnew(MenuButton); MenuButton *test_menu_button = memnew(MenuButton);
test_menu_button->set_text("MenuButton"); test_menu_button->set_text("MenuButton");
test_menu_button->get_popup()->add_item(TTR("Item")); test_menu_button->get_popup()->add_item(TTR("Item"));
test_menu_button->get_popup()->add_item(TTR("Disabled Item"));
test_menu_button->get_popup()->set_item_disabled(1, true);
test_menu_button->get_popup()->add_separator(); test_menu_button->get_popup()->add_separator();
test_menu_button->get_popup()->add_check_item(TTR("Check Item")); test_menu_button->get_popup()->add_check_item(TTR("Check Item"));
test_menu_button->get_popup()->add_check_item(TTR("Checked Item")); test_menu_button->get_popup()->add_check_item(TTR("Checked Item"));
@ -696,6 +701,14 @@ ThemeEditor::ThemeEditor() {
test_menu_button->get_popup()->add_radio_check_item(TTR("Radio Item")); test_menu_button->get_popup()->add_radio_check_item(TTR("Radio Item"));
test_menu_button->get_popup()->add_radio_check_item(TTR("Checked Radio Item")); test_menu_button->get_popup()->add_radio_check_item(TTR("Checked Radio Item"));
test_menu_button->get_popup()->set_item_checked(6, true); test_menu_button->get_popup()->set_item_checked(6, true);
test_menu_button->get_popup()->add_separator(TTR("Named Sep."));
PopupMenu *test_submenu = memnew(PopupMenu);
test_menu_button->get_popup()->add_child(test_submenu);
test_submenu->set_name("submenu");
test_menu_button->get_popup()->add_submenu_item(TTR("Submenu"), "submenu");
test_submenu->add_item(TTR("Item 1"));
test_submenu->add_item(TTR("Item 2"));
first_vb->add_child(test_menu_button); first_vb->add_child(test_menu_button);
OptionButton *test_option_button = memnew(OptionButton); OptionButton *test_option_button = memnew(OptionButton);
@ -705,21 +718,7 @@ ThemeEditor::ThemeEditor() {
test_option_button->add_item(TTR("Many")); test_option_button->add_item(TTR("Many"));
test_option_button->add_item(TTR("Options")); test_option_button->add_item(TTR("Options"));
first_vb->add_child(test_option_button); first_vb->add_child(test_option_button);
first_vb->add_child(memnew(ColorPickerButton));
ColorPickerButton *cpb = memnew(ColorPickerButton);
first_vb->add_child(cpb);
first_vb->add_child(memnew(HSeparator));
first_vb->add_child(memnew(HSlider));
first_vb->add_child(memnew(HScrollBar));
first_vb->add_child(memnew(SpinBox));
ProgressBar *pb = memnew(ProgressBar);
pb->set_value(50);
first_vb->add_child(pb);
Panel *pn = memnew(Panel);
pn->set_custom_minimum_size(Size2(40, 40) * EDSCALE);
first_vb->add_child(pn);
first_vb->add_constant_override("separation", 10 * EDSCALE);
VBoxContainer *second_vb = memnew(VBoxContainer); VBoxContainer *second_vb = memnew(VBoxContainer);
second_vb->set_h_size_flags(SIZE_EXPAND_FILL); second_vb->set_h_size_flags(SIZE_EXPAND_FILL);
@ -728,50 +727,48 @@ ThemeEditor::ThemeEditor() {
LineEdit *le = memnew(LineEdit); LineEdit *le = memnew(LineEdit);
le->set_text("LineEdit"); le->set_text("LineEdit");
second_vb->add_child(le); second_vb->add_child(le);
le = memnew(LineEdit);
le->set_text(TTR("Disabled LineEdit"));
le->set_editable(false);
second_vb->add_child(le);
TextEdit *te = memnew(TextEdit); TextEdit *te = memnew(TextEdit);
te->set_text("TextEdit"); te->set_text("TextEdit");
//te->set_v_size_flags(SIZE_EXPAND_FILL); te->set_custom_minimum_size(Size2(0, 100) * EDSCALE);
te->set_custom_minimum_size(Size2(0, 160) * EDSCALE);
second_vb->add_child(te); second_vb->add_child(te);
second_vb->add_child(memnew(SpinBox));
Tree *test_tree = memnew(Tree); HBoxContainer *vhb = memnew(HBoxContainer);
second_vb->add_child(test_tree); second_vb->add_child(vhb);
test_tree->set_custom_minimum_size(Size2(0, 160) * EDSCALE); vhb->set_custom_minimum_size(Size2(0, 100) * EDSCALE);
vhb->add_child(memnew(VSlider));
TreeItem *item = test_tree->create_item(); VScrollBar *vsb = memnew(VScrollBar);
item->set_editable(0, true); vsb->set_page(25);
item->set_text(0, "Tree"); vhb->add_child(vsb);
item = test_tree->create_item(test_tree->get_root()); vhb->add_child(memnew(VSeparator));
item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); VBoxContainer *hvb = memnew(VBoxContainer);
item->set_editable(0, true); vhb->add_child(hvb);
item->set_text(0, "Check"); hvb->set_alignment(ALIGN_CENTER);
item = test_tree->create_item(test_tree->get_root()); hvb->set_h_size_flags(SIZE_EXPAND_FILL);
item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE); hvb->add_child(memnew(HSlider));
item->set_editable(0, true); HScrollBar *hsb = memnew(HScrollBar);
item->set_range_config(0, 0, 20, 0.1); hsb->set_page(25);
item->set_range(0, 2); hvb->add_child(hsb);
item = test_tree->create_item(test_tree->get_root()); HSlider *hs = memnew(HSlider);
item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE); hs->set_editable(false);
item->set_editable(0, true); hvb->add_child(hs);
item->set_text(0, TTR("Has,Many,Options")); hvb->add_child(memnew(HSeparator));
item->set_range(0, 2); ProgressBar *pb = memnew(ProgressBar);
pb->set_value(50);
hvb->add_child(pb);
VBoxContainer *third_vb = memnew(VBoxContainer); VBoxContainer *third_vb = memnew(VBoxContainer);
third_vb->set_h_size_flags(SIZE_EXPAND_FILL); third_vb->set_h_size_flags(SIZE_EXPAND_FILL);
third_vb->add_constant_override("separation", 10); third_vb->add_constant_override("separation", 10 * EDSCALE);
main_hb->add_child(third_vb); main_hb->add_child(third_vb);
HBoxContainer *vhb = memnew(HBoxContainer);
vhb->set_custom_minimum_size(Size2(0, 160) * EDSCALE);
vhb->add_child(memnew(VSeparator));
vhb->add_child(memnew(VSlider));
vhb->add_child(memnew(VScrollBar));
third_vb->add_child(vhb);
TabContainer *tc = memnew(TabContainer); TabContainer *tc = memnew(TabContainer);
third_vb->add_child(tc); third_vb->add_child(tc);
tc->set_custom_minimum_size(Size2(0, 160) * EDSCALE); tc->set_custom_minimum_size(Size2(0, 135) * EDSCALE);
Control *tcc = memnew(Control); Control *tcc = memnew(Control);
tcc->set_name(TTR("Tab 1")); tcc->set_name(TTR("Tab 1"));
tc->add_child(tcc); tc->add_child(tcc);
@ -781,9 +778,41 @@ ThemeEditor::ThemeEditor() {
tcc = memnew(Control); tcc = memnew(Control);
tcc->set_name(TTR("Tab 3")); tcc->set_name(TTR("Tab 3"));
tc->add_child(tcc); tc->add_child(tcc);
tc->set_tab_disabled(2, true);
Tree *test_tree = memnew(Tree);
third_vb->add_child(test_tree);
test_tree->set_custom_minimum_size(Size2(0, 175) * EDSCALE);
test_tree->add_constant_override("draw_relationship_lines", 1);
TreeItem *item = test_tree->create_item();
item->set_text(0, "Tree");
item = test_tree->create_item(test_tree->get_root());
item->set_text(0, "Item");
item = test_tree->create_item(test_tree->get_root());
item->set_editable(0, true);
item->set_text(0, TTR("Editable Item"));
TreeItem *sub_tree = test_tree->create_item(test_tree->get_root());
sub_tree->set_text(0, TTR("Subtree"));
item = test_tree->create_item(sub_tree);
item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK);
item->set_editable(0, true);
item->set_text(0, "Check Item");
item = test_tree->create_item(sub_tree);
item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE);
item->set_editable(0, true);
item->set_range_config(0, 0, 20, 0.1);
item->set_range(0, 2);
item = test_tree->create_item(sub_tree);
item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE);
item->set_editable(0, true);
item->set_text(0, TTR("Has,Many,Options"));
item->set_range(0, 2);
main_hb->add_constant_override("separation", 20 * EDSCALE); main_hb->add_constant_override("separation", 20 * EDSCALE);
////////
add_del_dialog = memnew(ConfirmationDialog); add_del_dialog = memnew(ConfirmationDialog);
add_del_dialog->hide(); add_del_dialog->hide();
add_child(add_del_dialog); add_child(add_del_dialog);
@ -844,9 +873,6 @@ ThemeEditor::ThemeEditor() {
file_dialog->add_filter("*.theme ; Theme File"); file_dialog->add_filter("*.theme ; Theme File");
add_child(file_dialog); add_child(file_dialog);
file_dialog->connect("file_selected", this, "_save_template_cbk"); file_dialog->connect("file_selected", this, "_save_template_cbk");
//MenuButton *name_menu;
//LineEdit *name_edit;
} }
void ThemeEditorPlugin::edit(Object *p_node) { void ThemeEditorPlugin::edit(Object *p_node) {
@ -886,7 +912,6 @@ ThemeEditorPlugin::ThemeEditorPlugin(EditorNode *p_node) {
theme_editor = memnew(ThemeEditor); theme_editor = memnew(ThemeEditor);
theme_editor->set_custom_minimum_size(Size2(0, 200)); theme_editor->set_custom_minimum_size(Size2(0, 200));
//p_node->get_viewport()->add_child(theme_editor);
button = editor->add_bottom_panel_item(TTR("Theme"), theme_editor); button = editor->add_bottom_panel_item(TTR("Theme"), theme_editor);
button->hide(); button->hide();
} }

View File

@ -33,6 +33,7 @@
#include "scene/gui/check_box.h" #include "scene/gui/check_box.h"
#include "scene/gui/file_dialog.h" #include "scene/gui/file_dialog.h"
#include "scene/gui/margin_container.h"
#include "scene/gui/option_button.h" #include "scene/gui/option_button.h"
#include "scene/gui/scroll_container.h" #include "scene/gui/scroll_container.h"
#include "scene/gui/texture_rect.h" #include "scene/gui/texture_rect.h"
@ -40,12 +41,12 @@
#include "editor/editor_node.h" #include "editor/editor_node.h"
class ThemeEditor : public Control { class ThemeEditor : public VBoxContainer {
GDCLASS(ThemeEditor, Control); GDCLASS(ThemeEditor, VBoxContainer);
ScrollContainer *scroll; ScrollContainer *scroll;
VBoxContainer *main_vb; MarginContainer *main_container;
Ref<Theme> theme; Ref<Theme> theme;
EditorFileDialog *file_dialog; EditorFileDialog *file_dialog;