| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  theme_editor_plugin.cpp                                              */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							|  |  |  | /*                    http://www.godotengine.org                         */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2016-01-01 11:50:53 -02:00
										 |  |  | /* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | #include "version.h"
 | 
					
						
							|  |  |  | #include "theme_editor_plugin.h"
 | 
					
						
							|  |  |  | #include "os/file_access.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ThemeEditor::edit(const Ref<Theme>& p_theme) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	theme=p_theme; | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	main_vb->set_theme(p_theme); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | void ThemeEditor::_propagate_redraw(Control *p_at) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	p_at->notification(NOTIFICATION_THEME_CHANGED); | 
					
						
							|  |  |  | 	p_at->minimum_size_changed(); | 
					
						
							|  |  |  | 	p_at->update(); | 
					
						
							|  |  |  | 	for(int i=0;i<p_at->get_child_count();i++) { | 
					
						
							|  |  |  | 		Control *a = p_at->get_child(i)->cast_to<Control>(); | 
					
						
							|  |  |  | 		if (a) | 
					
						
							|  |  |  | 			_propagate_redraw(a); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ThemeEditor::_refresh_interval() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_propagate_redraw(main_vb); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ThemeEditor::_type_menu_cbk(int p_option) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	type_edit->set_text( type_menu->get_popup()->get_item_text(p_option) ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ThemeEditor::_name_menu_about_to_show() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String fromtype=type_edit->get_text(); | 
					
						
							|  |  |  | 	List<StringName> names; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (popup_mode==POPUP_ADD) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		switch(type_select->get_selected()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			case 0: Theme::get_default()->get_icon_list(fromtype,&names); break; | 
					
						
							|  |  |  | 			case 1: Theme::get_default()->get_stylebox_list(fromtype,&names); break; | 
					
						
							|  |  |  | 			case 2: Theme::get_default()->get_font_list(fromtype,&names); break; | 
					
						
							|  |  |  | 			case 3: Theme::get_default()->get_color_list(fromtype,&names); break; | 
					
						
							|  |  |  | 			case 4: Theme::get_default()->get_constant_list(fromtype,&names); break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else if (popup_mode==POPUP_REMOVE) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		theme->get_icon_list(fromtype,&names); | 
					
						
							|  |  |  | 		theme->get_stylebox_list(fromtype,&names); | 
					
						
							|  |  |  | 		theme->get_font_list(fromtype,&names); | 
					
						
							|  |  |  | 		theme->get_color_list(fromtype,&names); | 
					
						
							|  |  |  | 		theme->get_constant_list(fromtype,&names); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	name_menu->get_popup()->clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for(List<StringName>::Element *E=names.front();E;E=E->next()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		name_menu->get_popup()->add_item(E->get()); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ThemeEditor::_name_menu_cbk(int p_option) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	name_edit->set_text( name_menu->get_popup()->get_item_text(p_option) ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct _TECategory { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	template<class T> | 
					
						
							|  |  |  | 	struct RefItem { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Ref<T> item; | 
					
						
							|  |  |  | 		StringName name; | 
					
						
							|  |  |  | 		bool operator<(const RefItem<T>& p) const { return item->get_instance_ID() < p.item->get_instance_ID(); } | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	template<class T> | 
					
						
							|  |  |  | 	struct Item { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		T item; | 
					
						
							|  |  |  | 		String name; | 
					
						
							|  |  |  | 		bool operator<(const Item<T>& p) const { return name < p.name; } | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Set<RefItem<StyleBox> > stylebox_items; | 
					
						
							|  |  |  | 	Set<RefItem<Font> > font_items; | 
					
						
							|  |  |  | 	Set<RefItem<Texture> > icon_items; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Set<Item<Color> > color_items; | 
					
						
							|  |  |  | 	Set<Item<int> > constant_items; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ThemeEditor::_save_template_cbk(String fname) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String filename = file_dialog->get_current_path(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Map<String,_TECategory> categories; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	//fill types
 | 
					
						
							|  |  |  | 	List<StringName> type_list; | 
					
						
							|  |  |  | 	Theme::get_default()->get_type_list(&type_list); | 
					
						
							|  |  |  | 	for (List<StringName>::Element *E=type_list.front();E;E=E->next()) { | 
					
						
							|  |  |  | 		categories.insert(E->get(),_TECategory()); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	//fill default theme
 | 
					
						
							|  |  |  | 	for(Map<String,_TECategory>::Element *E=categories.front();E;E=E->next() ) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		_TECategory &tc = E->get(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		List<StringName> stylebox_list; | 
					
						
							|  |  |  | 		Theme::get_default()->get_stylebox_list(E->key(),&stylebox_list); | 
					
						
							|  |  |  | 		for (List<StringName>::Element *F=stylebox_list.front();F;F=F->next()) { | 
					
						
							|  |  |  | 			_TECategory::RefItem<StyleBox> it; | 
					
						
							|  |  |  | 			it.name=F->get(); | 
					
						
							|  |  |  | 			it.item=Theme::get_default()->get_stylebox(F->get(),E->key()); | 
					
						
							|  |  |  | 			tc.stylebox_items.insert(it); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		List<StringName> font_list; | 
					
						
							|  |  |  | 		Theme::get_default()->get_font_list(E->key(),&font_list); | 
					
						
							|  |  |  | 		for (List<StringName>::Element *F=font_list.front();F;F=F->next()) { | 
					
						
							|  |  |  | 			_TECategory::RefItem<Font> it; | 
					
						
							|  |  |  | 			it.name=F->get(); | 
					
						
							|  |  |  | 			it.item=Theme::get_default()->get_font(F->get(),E->key()); | 
					
						
							|  |  |  | 			tc.font_items.insert(it); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		List<StringName> icon_list; | 
					
						
							|  |  |  | 		Theme::get_default()->get_icon_list(E->key(),&icon_list); | 
					
						
							|  |  |  | 		for (List<StringName>::Element *F=icon_list.front();F;F=F->next()) { | 
					
						
							|  |  |  | 			_TECategory::RefItem<Texture> it; | 
					
						
							|  |  |  | 			it.name=F->get(); | 
					
						
							|  |  |  | 			it.item=Theme::get_default()->get_icon(F->get(),E->key()); | 
					
						
							|  |  |  | 			tc.icon_items.insert(it); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		List<StringName> color_list; | 
					
						
							|  |  |  | 		Theme::get_default()->get_color_list(E->key(),&color_list); | 
					
						
							|  |  |  | 		for (List<StringName>::Element *F=color_list.front();F;F=F->next()) { | 
					
						
							|  |  |  | 			_TECategory::Item<Color> it; | 
					
						
							|  |  |  | 			it.name=F->get(); | 
					
						
							|  |  |  | 			it.item=Theme::get_default()->get_color(F->get(),E->key()); | 
					
						
							|  |  |  | 			tc.color_items.insert(it); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		List<StringName> constant_list; | 
					
						
							|  |  |  | 		Theme::get_default()->get_constant_list(E->key(),&constant_list); | 
					
						
							|  |  |  | 		for (List<StringName>::Element *F=constant_list.front();F;F=F->next()) { | 
					
						
							|  |  |  | 			_TECategory::Item<int> it; | 
					
						
							|  |  |  | 			it.name=F->get(); | 
					
						
							|  |  |  | 			it.item=Theme::get_default()->get_constant(F->get(),E->key()); | 
					
						
							|  |  |  | 			tc.constant_items.insert(it); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	FileAccess *file = FileAccess::open(filename,FileAccess::WRITE); | 
					
						
							|  |  |  | 	if (!file) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-19 00:08:12 +02:00
										 |  |  | 		ERR_EXPLAIN(TTR("Can't save theme to file:")+" "+filename); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	file->store_line("; ******************* "); | 
					
						
							|  |  |  | 	file->store_line("; Template Theme File "); | 
					
						
							|  |  |  | 	file->store_line("; ******************* "); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; Theme Syntax: "); | 
					
						
							|  |  |  | 	file->store_line("; ------------- "); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; Must be placed in section [theme]"); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = [value] "); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; [value] examples:"); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = 6 ; numeric constant. "); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = #FF00FF ; HTML color "); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = #55FF00FF ; HTML color with alpha 55."); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = icon(image.png) ; icon in a png file (relative to theme file)."); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = font(font.xres) ; font in a resource (relative to theme file)."); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = sbox(stylebox.xres) ; stylebox in a resource (relative to theme file)."); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = sboxf(2,#FF00FF) ; flat stylebox with margin 2."); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = sboxf(2,#FF00FF,#FFFFFF) ; flat stylebox with margin 2 and border."); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = sboxf(2,#FF00FF,#FFFFFF,#000000) ; flat stylebox with margin 2, light & dark borders."); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = sboxt(base.png,2,2,2,2) ; textured stylebox with 3x3 stretch and stretch margins."); | 
					
						
							|  |  |  | 	file->store_line(";   -Additionally, 4 extra integers can be added to sboxf and sboxt to specify custom padding of contents:"); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = sboxt(base.png,2,2,2,2,5,4,2,4) ;"); | 
					
						
							|  |  |  | 	file->store_line(";   -Order for all is always left, top, right, bottom."); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; Special values:"); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = default ; use the value in the default theme (must exist there)."); | 
					
						
							|  |  |  | 	file->store_line("; Type.item = @somebutton_color ; reference to a library value previously defined."); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; Library Syntax: "); | 
					
						
							|  |  |  | 	file->store_line("; --------------- "); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; Must be placed in section [library], but usage is optional."); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; item = [value] ; same as Theme, but assign to library."); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; examples:"); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; [library]"); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; default_button_color = #FF00FF"); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; [theme]"); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; Button.color = @default_button_color ; used reference."); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; ******************* "); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line("; Template Generated Using: "+String(VERSION_MKSTRING)); | 
					
						
							|  |  |  | 	file->store_line(";    "); | 
					
						
							|  |  |  | 	file->store_line("; "); | 
					
						
							|  |  |  | 	file->store_line(""); | 
					
						
							|  |  |  | 	file->store_line("[library]"); | 
					
						
							|  |  |  | 	file->store_line(""); | 
					
						
							|  |  |  | 	file->store_line("; place library stuff here"); | 
					
						
							|  |  |  | 	file->store_line(""); | 
					
						
							|  |  |  | 	file->store_line("[theme]"); | 
					
						
							|  |  |  | 	file->store_line(""); | 
					
						
							|  |  |  | 	file->store_line(""); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	//write default theme
 | 
					
						
							|  |  |  | 	for(Map<String,_TECategory>::Element *E=categories.front();E;E=E->next() ) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		_TECategory &tc = E->get(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		String underline="; "; | 
					
						
							|  |  |  | 		for(int i=0;i<E->key().length();i++) | 
					
						
							|  |  |  | 			underline+="*"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		file->store_line(""); | 
					
						
							|  |  |  | 		file->store_line(underline); | 
					
						
							|  |  |  | 		file->store_line("; "+E->key()); | 
					
						
							|  |  |  | 		file->store_line(underline); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (tc.stylebox_items.size()) | 
					
						
							|  |  |  | 			file->store_line("\n; StyleBox Items:\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for (Set<_TECategory::RefItem<StyleBox> >::Element *F=tc.stylebox_items.front();F;F=F->next()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			file->store_line(E->key()+"."+F->get().name+" = default"); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (tc.font_items.size()) | 
					
						
							|  |  |  | 			file->store_line("\n; Font Items:\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for (Set<_TECategory::RefItem<Font> >::Element *F=tc.font_items.front();F;F=F->next()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			file->store_line(E->key()+"."+F->get().name+" = default"); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (tc.icon_items.size()) | 
					
						
							|  |  |  | 			file->store_line("\n; Icon Items:\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for (Set<_TECategory::RefItem<Texture> >::Element *F=tc.icon_items.front();F;F=F->next()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			file->store_line(E->key()+"."+F->get().name+" = default"); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (tc.color_items.size()) | 
					
						
							|  |  |  | 			file->store_line("\n; Color Items:\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for (Set<_TECategory::Item<Color> >::Element *F=tc.color_items.front();F;F=F->next()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			file->store_line(E->key()+"."+F->get().name+" = default"); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (tc.constant_items.size()) | 
					
						
							|  |  |  | 			file->store_line("\n; Constant Items:\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for (Set<_TECategory::Item<int> >::Element *F=tc.constant_items.front();F;F=F->next()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			file->store_line(E->key()+"."+F->get().name+" = default"); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	file->close(); | 
					
						
							|  |  |  | 	memdelete(file); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ThemeEditor::_dialog_cbk() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch(popup_mode) { | 
					
						
							|  |  |  | 		case POPUP_ADD: { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			switch(type_select->get_selected()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				case 0: theme->set_icon(name_edit->get_text(),type_edit->get_text(),Ref<Texture>()); break; | 
					
						
							|  |  |  | 				case 1: theme->set_stylebox(name_edit->get_text(),type_edit->get_text(),Ref<StyleBox>()); break; | 
					
						
							|  |  |  | 				case 2: theme->set_font(name_edit->get_text(),type_edit->get_text(),Ref<Font>()); break; | 
					
						
							|  |  |  | 				case 3: theme->set_color(name_edit->get_text(),type_edit->get_text(),Color()); break; | 
					
						
							|  |  |  | 				case 4: theme->set_constant(name_edit->get_text(),type_edit->get_text(),0); break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		} break; | 
					
						
							|  |  |  | 		case POPUP_CLASS_ADD: { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			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->set_icon(E->get(),fromtype,Theme::get_default()->get_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->set_stylebox(E->get(),fromtype,Theme::get_default()->get_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->set_font(E->get(),fromtype,Theme::get_default()->get_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->set_color(E->get(),fromtype,Theme::get_default()->get_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->set_constant(E->get(),fromtype,Theme::get_default()->get_constant(E->get(),fromtype)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} break; | 
					
						
							|  |  |  | 		case POPUP_REMOVE: { | 
					
						
							|  |  |  | 			switch(type_select->get_selected()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				case 0: theme->clear_icon(name_edit->get_text(),type_edit->get_text()); break; | 
					
						
							|  |  |  | 				case 1: theme->clear_stylebox(name_edit->get_text(),type_edit->get_text()); break; | 
					
						
							|  |  |  | 				case 2: theme->clear_font(name_edit->get_text(),type_edit->get_text()); break; | 
					
						
							|  |  |  | 				case 3: theme->clear_color(name_edit->get_text(),type_edit->get_text()); break; | 
					
						
							|  |  |  | 				case 4: theme->clear_constant(name_edit->get_text(),type_edit->get_text()); break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-21 11:58:53 +10:00
										 |  |  | 		} 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; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ThemeEditor::_theme_menu_cbk(int p_option) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (p_option==POPUP_CREATE_TEMPLATE) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-06 09:44:38 -03:00
										 |  |  | 		file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		file_dialog->set_current_path("custom.theme"); | 
					
						
							|  |  |  | 		file_dialog->popup_centered_ratio(); | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Ref<Theme> base_theme; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	type_select->show(); | 
					
						
							|  |  |  | 	type_select_label->show(); | 
					
						
							|  |  |  | 	name_select_label->show(); | 
					
						
							|  |  |  | 	name_edit->show(); | 
					
						
							|  |  |  | 	name_menu->show(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (p_option==POPUP_ADD) {//add
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 		add_del_dialog->set_title(TTR("Add Item")); | 
					
						
							|  |  |  | 		add_del_dialog->get_ok()->set_text(TTR("Add")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		add_del_dialog->popup_centered(Size2(490,85)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		base_theme=Theme::get_default(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} else if (p_option==POPUP_CLASS_ADD) {//add
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 		add_del_dialog->set_title(TTR("Add All Items")); | 
					
						
							|  |  |  | 		add_del_dialog->get_ok()->set_text(TTR("Add All")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		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(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} else if (p_option==POPUP_REMOVE) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 		add_del_dialog->set_title(TTR("Remove Item")); | 
					
						
							|  |  |  | 		add_del_dialog->get_ok()->set_text(TTR("Remove")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		add_del_dialog->popup_centered(Size2(490,85)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		base_theme=theme; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-21 11:58:53 +10:00
										 |  |  | 	} 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(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	popup_mode=p_option; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ERR_FAIL_COND( theme.is_null() ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	List<StringName> types; | 
					
						
							|  |  |  | 	base_theme->get_type_list(&types); | 
					
						
							|  |  |  | 	type_menu->get_popup()->clear();; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (p_option==0 || p_option==1) {//add
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		List<StringName> new_types; | 
					
						
							|  |  |  | 		theme->get_type_list(&new_types); | 
					
						
							|  |  |  | 		//uh kind of sucks
 | 
					
						
							|  |  |  | 		for(List<StringName>::Element *F=new_types.front();F;F=F->next()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			bool found=false; | 
					
						
							|  |  |  | 			for(List<StringName>::Element *E=types.front();E;E=E->next()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if (E->get()==F->get())	{ | 
					
						
							|  |  |  | 					found=true; | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (!found) | 
					
						
							|  |  |  | 				types.push_back(F->get()); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	types.sort(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for(List<StringName>::Element *E=types.front();E;E=E->next()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		type_menu->get_popup()->add_item( E->get() ); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | void ThemeEditor::_notification(int p_what) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (p_what==NOTIFICATION_PROCESS) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		time_left-=get_process_delta_time(); | 
					
						
							|  |  |  | 		if (time_left<0) { | 
					
						
							|  |  |  | 			time_left=1.5; | 
					
						
							|  |  |  | 			_refresh_interval(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | void ThemeEditor::_bind_methods() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ObjectTypeDB::bind_method("_type_menu_cbk",&ThemeEditor::_type_menu_cbk); | 
					
						
							|  |  |  | 	ObjectTypeDB::bind_method("_name_menu_about_to_show",&ThemeEditor::_name_menu_about_to_show); | 
					
						
							|  |  |  | 	ObjectTypeDB::bind_method("_name_menu_cbk",&ThemeEditor::_name_menu_cbk); | 
					
						
							|  |  |  | 	ObjectTypeDB::bind_method("_theme_menu_cbk",&ThemeEditor::_theme_menu_cbk); | 
					
						
							|  |  |  | 	ObjectTypeDB::bind_method("_dialog_cbk",&ThemeEditor::_dialog_cbk); | 
					
						
							|  |  |  | 	ObjectTypeDB::bind_method("_save_template_cbk",&ThemeEditor::_save_template_cbk); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ThemeEditor::ThemeEditor() { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	time_left=0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Panel * panel = memnew( Panel ); | 
					
						
							|  |  |  | 	add_child(panel); | 
					
						
							|  |  |  | 	panel->set_area_as_parent_rect(0); | 
					
						
							|  |  |  | 	panel->set_margin(MARGIN_TOP,25); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	main_vb= memnew( VBoxContainer ); | 
					
						
							|  |  |  | 	panel->add_child(main_vb); | 
					
						
							|  |  |  | 	main_vb->set_area_as_parent_rect(4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	HBoxContainer *hb_menu = memnew(HBoxContainer); | 
					
						
							|  |  |  | 	main_vb->add_child(hb_menu); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	theme_menu = memnew( MenuButton ); | 
					
						
							|  |  |  | 	theme_menu->set_text("Theme"); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	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("Remove Item"),POPUP_REMOVE); | 
					
						
							| 
									
										
										
										
											2016-04-21 11:58:53 +10:00
										 |  |  | 	theme_menu->get_popup()->add_item("Remove Class Items",POPUP_CLASS_REMOVE); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	theme_menu->get_popup()->add_separator(); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	theme_menu->get_popup()->add_item(TTR("Create Template"),POPUP_CREATE_TEMPLATE); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	hb_menu->add_child(theme_menu); | 
					
						
							|  |  |  | 	theme_menu->get_popup()->connect("item_pressed", this,"_theme_menu_cbk"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	HBoxContainer *main_hb = memnew( HBoxContainer ); | 
					
						
							|  |  |  | 	main_vb->add_child(main_hb); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	VBoxContainer *first_vb = memnew( VBoxContainer); | 
					
						
							|  |  |  | 	first_vb->set_h_size_flags(SIZE_EXPAND_FILL); | 
					
						
							|  |  |  | 	main_hb->add_child(first_vb); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //	main_panel->add_child(panel);
 | 
					
						
							|  |  |  | //	panel->set_area_as_parent_rect();
 | 
					
						
							|  |  |  | //	panel->set_margin( MARGIN_TOP,20 );
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	first_vb->add_child(memnew( Label("Label") )); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	first_vb->add_child(memnew( Button("Button")) ); | 
					
						
							|  |  |  | 	ToolButton *tb = memnew( ToolButton ); | 
					
						
							|  |  |  | 	tb->set_text("ToolButton"); | 
					
						
							|  |  |  | 	first_vb->add_child(tb ); | 
					
						
							|  |  |  | 	CheckButton *cb = memnew( CheckButton ); | 
					
						
							|  |  |  | 	cb->set_text("CheckButton"); | 
					
						
							|  |  |  | 	first_vb->add_child(cb ); | 
					
						
							| 
									
										
										
										
											2015-10-19 17:46:13 -03:00
										 |  |  | 	CheckBox *cbx = memnew( CheckBox ); | 
					
						
							|  |  |  | 	cbx->set_text("CheckBox"); | 
					
						
							|  |  |  | 	first_vb->add_child(cbx ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ButtonGroup *bg = memnew( ButtonGroup ); | 
					
						
							|  |  |  | 	bg->set_v_size_flags(SIZE_EXPAND_FILL); | 
					
						
							|  |  |  | 	VBoxContainer *gbvb = memnew( VBoxContainer ); | 
					
						
							|  |  |  | 	gbvb->set_v_size_flags(SIZE_EXPAND_FILL); | 
					
						
							|  |  |  | 	CheckBox *rbx1 = memnew( CheckBox ); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	rbx1->set_text(TTR("CheckBox Radio1")); | 
					
						
							| 
									
										
										
										
											2015-10-19 17:46:13 -03:00
										 |  |  | 	rbx1->set_pressed(true); | 
					
						
							|  |  |  | 	gbvb->add_child(rbx1); | 
					
						
							|  |  |  | 	CheckBox *rbx2 = memnew( CheckBox ); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	rbx2->set_text(TTR("CheckBox Radio2")); | 
					
						
							| 
									
										
										
										
											2015-10-19 17:46:13 -03:00
										 |  |  | 	gbvb->add_child(rbx2); | 
					
						
							|  |  |  | 	bg->add_child(gbvb); | 
					
						
							|  |  |  | 	first_vb->add_child(bg); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	MenuButton* test_menu_button = memnew( MenuButton ); | 
					
						
							|  |  |  | 	test_menu_button->set_text("MenuButton"); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	test_menu_button->get_popup()->add_item(TTR("Item")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	test_menu_button->get_popup()->add_separator(); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	test_menu_button->get_popup()->add_check_item(TTR("Check Item")); | 
					
						
							|  |  |  | 	test_menu_button->get_popup()->add_check_item(TTR("Checked Item")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	test_menu_button->get_popup()->set_item_checked(2,true); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	first_vb->add_child(test_menu_button); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	OptionButton *test_option_button = memnew( OptionButton ); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	test_option_button->add_item("OptionButton"); | 
					
						
							|  |  |  | 	test_option_button->add_separator(); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	test_option_button->add_item(TTR("Has")); | 
					
						
							|  |  |  | 	test_option_button->add_item(TTR("Many")); | 
					
						
							|  |  |  | 	test_option_button->add_item(TTR("Options")); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	first_vb->add_child(test_option_button); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	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_val(50); | 
					
						
							|  |  |  | 	first_vb->add_child( pb); | 
					
						
							|  |  |  | 	Panel *pn=memnew( Panel ); | 
					
						
							|  |  |  | 	pn->set_custom_minimum_size(Size2(40,40)); | 
					
						
							|  |  |  | 	first_vb->add_child( pn); | 
					
						
							|  |  |  | 	first_vb->add_constant_override("separation",10); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	VBoxContainer *second_vb = memnew( VBoxContainer ); | 
					
						
							|  |  |  | 	second_vb->set_h_size_flags(SIZE_EXPAND_FILL); | 
					
						
							|  |  |  | 	main_hb->add_child(second_vb); | 
					
						
							|  |  |  | 	second_vb->add_constant_override("separation",10); | 
					
						
							|  |  |  | 	LineEdit *le =  memnew( LineEdit ); | 
					
						
							|  |  |  | 	le->set_text("LineEdit"); | 
					
						
							|  |  |  | 	second_vb->add_child(le); | 
					
						
							|  |  |  | 	TextEdit *te =  memnew( TextEdit ); | 
					
						
							|  |  |  | 	te->set_text("TextEdit"); | 
					
						
							|  |  |  | 	//te->set_v_size_flags(SIZE_EXPAND_FILL);
 | 
					
						
							|  |  |  | 	te->set_custom_minimum_size(Size2(0,160)); | 
					
						
							|  |  |  | 	second_vb->add_child(te); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Tree *test_tree = memnew(Tree); | 
					
						
							|  |  |  | 	second_vb->add_child(test_tree); | 
					
						
							|  |  |  | 	test_tree->set_custom_minimum_size(Size2(0,160)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	TreeItem *item = test_tree->create_item(); | 
					
						
							|  |  |  | 	item->set_editable(0,true); | 
					
						
							|  |  |  | 	item->set_text(0,"Tree"); | 
					
						
							|  |  |  | 	item = test_tree->create_item( test_tree->get_root() ); | 
					
						
							|  |  |  | 	item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); | 
					
						
							|  |  |  | 	item->set_editable(0,true); | 
					
						
							|  |  |  | 	item->set_text(0,"check"); | 
					
						
							|  |  |  | 	item = test_tree->create_item( test_tree->get_root() ); | 
					
						
							|  |  |  | 	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( test_tree->get_root() ); | 
					
						
							|  |  |  | 	item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE); | 
					
						
							|  |  |  | 	item->set_editable(0,true); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	item->set_text(0,TTR("Have,Many,Several,Options!")); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	item->set_range(0,2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	VBoxContainer *third_vb = memnew( VBoxContainer ); | 
					
						
							|  |  |  | 	third_vb->set_h_size_flags(SIZE_EXPAND_FILL); | 
					
						
							|  |  |  | 	third_vb->add_constant_override("separation",10); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	main_hb->add_child(third_vb); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	HBoxContainer *vhb = memnew( HBoxContainer ); | 
					
						
							|  |  |  | 	vhb->set_custom_minimum_size(Size2(0,160)); | 
					
						
							|  |  |  | 	vhb->add_child(memnew(VSeparator)); | 
					
						
							|  |  |  | 	vhb->add_child(memnew(VSlider)); | 
					
						
							|  |  |  | 	vhb->add_child(memnew(VScrollBar)); | 
					
						
							|  |  |  | 	third_vb->add_child(vhb); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	TabContainer *tc = memnew( TabContainer ); | 
					
						
							|  |  |  | 	third_vb->add_child(tc); | 
					
						
							|  |  |  | 	tc->set_custom_minimum_size(Size2(0,160)); | 
					
						
							|  |  |  | 	Control *tcc = memnew( Control ); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	tcc->set_name(TTR("Tab 1")); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	tc->add_child(tcc); | 
					
						
							|  |  |  | 	tcc = memnew( Control ); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	tcc->set_name(TTR("Tab 2")); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	tc->add_child(tcc); | 
					
						
							|  |  |  | 	tcc = memnew( Control ); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	tcc->set_name(TTR("Tab 3")); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	tc->add_child(tcc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	main_hb->add_constant_override("separation",20); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	test_h_scroll = memnew( HScrollBar ); | 
					
						
							|  |  |  | 	test_h_scroll->set_pos( Point2( 25, 225 ) ); | 
					
						
							|  |  |  | 	test_h_scroll->set_size( Point2( 150, 5 ) ); | 
					
						
							|  |  |  | 	panel->add_child(test_h_scroll); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	line_edit = memnew( LineEdit ); | 
					
						
							|  |  |  | 	line_edit->set_pos( Point2( 25, 275 ) ); | 
					
						
							|  |  |  | 	line_edit->set_size( Point2( 150, 5 ) ); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	line_edit->set_text(TTR("Line Edit")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	panel->add_child(line_edit); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	test_v_scroll = memnew( VScrollBar ); | 
					
						
							|  |  |  | 	test_v_scroll->set_pos( Point2( 200, 25 ) ); | 
					
						
							|  |  |  | 	test_v_scroll->set_size( Point2( 5, 150 ) ); | 
					
						
							|  |  |  | 	panel->add_child(test_v_scroll); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	test_tree = memnew(Tree); | 
					
						
							|  |  |  | 	test_tree->set_pos( Point2( 300, 25 ) ); | 
					
						
							|  |  |  | 	test_tree->set_size( Point2( 200, 200 ) ); | 
					
						
							|  |  |  | 	panel->add_child(test_tree); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	TreeItem *item = test_tree->create_item(); | 
					
						
							|  |  |  | 	item->set_editable(0,true); | 
					
						
							|  |  |  | 	item->set_text(0,"root"); | 
					
						
							|  |  |  | 	item = test_tree->create_item( test_tree->get_root() ); | 
					
						
							|  |  |  | 	item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); | 
					
						
							|  |  |  | 	item->set_editable(0,true); | 
					
						
							|  |  |  | 	item->set_text(0,"check"); | 
					
						
							|  |  |  | 	item = test_tree->create_item( test_tree->get_root() ); | 
					
						
							|  |  |  | 	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( test_tree->get_root() ); | 
					
						
							|  |  |  | 	item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE); | 
					
						
							|  |  |  | 	item->set_editable(0,true); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	item->set_text(0,TTR("Have,Many,Several,Options!")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	item->set_range(0,2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Button *fd_button= memnew( Button ); | 
					
						
							|  |  |  | 	fd_button->set_pos(Point2(300,275)); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	fd_button->set_text(TTR("Open File Dialog")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	panel->add_child(fd_button); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-06 09:44:38 -03:00
										 |  |  | 	test_file_dialog = memnew( EditorFileDialog ); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	panel->add_child(test_file_dialog); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fd_button->connect("pressed", this,"_open_file_dialog"); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	add_del_dialog = memnew(ConfirmationDialog); | 
					
						
							|  |  |  | 	add_del_dialog->hide(); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	add_child(add_del_dialog); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Label *l = memnew( Label ); | 
					
						
							|  |  |  | 	l->set_pos( Point2(5,5) ); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	l->set_text(TTR("Type:")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	add_del_dialog->add_child(l); | 
					
						
							|  |  |  | 	dtype_select_label=l; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	type_edit = memnew( LineEdit ); | 
					
						
							|  |  |  | 	type_edit->set_pos(Point2(5,25)); | 
					
						
							|  |  |  | 	type_edit->set_size(Point2(150,5)); | 
					
						
							|  |  |  | 	add_del_dialog->add_child(type_edit); | 
					
						
							|  |  |  | 	type_menu = memnew( MenuButton ); | 
					
						
							|  |  |  | 	type_menu->set_pos(Point2(160,25)); | 
					
						
							|  |  |  | 	type_menu->set_size(Point2(30,5)); | 
					
						
							|  |  |  | 	type_menu->set_text(".."); | 
					
						
							|  |  |  | 	add_del_dialog->add_child(type_menu); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	type_menu->get_popup()->connect("item_pressed", this,"_type_menu_cbk"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	l = memnew( Label ); | 
					
						
							|  |  |  | 	l->set_pos( Point2(200,5) ); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	l->set_text(TTR("Name:")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	add_del_dialog->add_child(l); | 
					
						
							|  |  |  | 	name_select_label=l; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	name_edit = memnew( LineEdit ); | 
					
						
							|  |  |  | 	name_edit->set_pos(Point2(200,25)); | 
					
						
							|  |  |  | 	name_edit->set_size(Point2(150,5)); | 
					
						
							|  |  |  | 	add_del_dialog->add_child(name_edit); | 
					
						
							|  |  |  | 	name_menu = memnew( MenuButton ); | 
					
						
							|  |  |  | 	name_menu->set_pos(Point2(360,25)); | 
					
						
							|  |  |  | 	name_menu->set_size(Point2(30,5)); | 
					
						
							|  |  |  | 	name_menu->set_text(".."); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	add_del_dialog->add_child(name_menu); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	name_menu->get_popup()->connect("about_to_show", this,"_name_menu_about_to_show"); | 
					
						
							|  |  |  | 	name_menu->get_popup()->connect("item_pressed", this,"_name_menu_cbk"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	type_select_label= memnew( Label ); | 
					
						
							|  |  |  | 	type_select_label->set_pos( Point2(400,5) ); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	type_select_label->set_text(TTR("Data Type:")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	add_del_dialog->add_child(type_select_label); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	type_select = memnew( OptionButton ); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	type_select->add_item(TTR("Icon")); | 
					
						
							|  |  |  | 	type_select->add_item(TTR("Style")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	type_select->add_item("Font"); | 
					
						
							|  |  |  | 	type_select->add_item("Color"); | 
					
						
							| 
									
										
										
										
											2016-05-03 22:25:37 -03:00
										 |  |  | 	type_select->add_item(TTR("Constant")); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	type_select->set_pos( Point2( 400,25 ) ); | 
					
						
							|  |  |  | 	type_select->set_size( Point2( 80,5 ) ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	add_del_dialog->add_child(type_select); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	add_del_dialog->get_ok()->connect("pressed", this,"_dialog_cbk"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-06 09:44:38 -03:00
										 |  |  | 	file_dialog = memnew( EditorFileDialog ); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	file_dialog->add_filter("*.theme ; Theme File"); | 
					
						
							|  |  |  | 	add_child(file_dialog); | 
					
						
							|  |  |  | 	file_dialog->connect("file_selected",this,"_save_template_cbk"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	//MenuButton *name_menu;
 | 
					
						
							|  |  |  | 	//LineEdit *name_edit;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ThemeEditorPlugin::edit(Object *p_node) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (p_node && p_node->cast_to<Theme>()) { | 
					
						
							|  |  |  | 		theme_editor->show(); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 		theme_editor->edit( p_node->cast_to<Theme>() ); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		theme_editor->edit( Ref<Theme>() ); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		theme_editor->hide(); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool ThemeEditorPlugin::handles(Object *p_node) const{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return p_node->is_type("Theme"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void ThemeEditorPlugin::make_visible(bool p_visible){ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	if (p_visible) { | 
					
						
							|  |  |  | 		theme_editor->set_process(true); | 
					
						
							| 
									
										
										
										
											2016-01-17 20:03:57 -03:00
										 |  |  | 		button->show(); | 
					
						
							| 
									
										
										
										
											2016-03-15 15:15:50 -03:00
										 |  |  | 		editor->make_bottom_panel_item_visible(theme_editor); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	} else { | 
					
						
							|  |  |  | 		theme_editor->set_process(false); | 
					
						
							| 
									
										
										
										
											2016-01-17 20:03:57 -03:00
										 |  |  | 		if (theme_editor->is_visible()) | 
					
						
							| 
									
										
										
										
											2016-03-15 15:15:50 -03:00
										 |  |  | 			editor->hide_bottom_panel(); | 
					
						
							| 
									
										
										
										
											2016-01-17 20:03:57 -03:00
										 |  |  | 		button->hide(); | 
					
						
							| 
									
										
										
										
											2014-02-15 02:01:39 -03:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ThemeEditorPlugin::ThemeEditorPlugin(EditorNode *p_node) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-17 20:03:57 -03:00
										 |  |  | 	editor=p_node; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	theme_editor = memnew( ThemeEditor ); | 
					
						
							| 
									
										
										
										
											2016-01-17 20:03:57 -03:00
										 |  |  | 	theme_editor->set_custom_minimum_size(Size2(0,500)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //	p_node->get_viewport()->add_child(theme_editor);
 | 
					
						
							| 
									
										
										
										
											2016-03-15 15:15:50 -03:00
										 |  |  | 	button=editor->add_bottom_panel_item("Theme",theme_editor); | 
					
						
							| 
									
										
										
										
											2016-01-17 20:03:57 -03:00
										 |  |  | 	button->hide(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |