Browse Source

-fixed bug in Button now exporting font property
-made GUI Theme editor usable
-editor does not allow to export or create .pck in the same path as a project
-changed .pck format (lacked support for versioning so couldn't change it), previous was causing crashes and is now incompatible, just re-export.
-will not look for .pck files recursively, was causing unexpected behaviors
-fixed execution of Godot in paths with non unicode characters in Windows, OSX and Linux.

Juan Linietsky 11 years ago
parent
commit
9afdb3e0ad
30 changed files with 1739 additions and 576 deletions
  1. 4 1
      core/globals.cpp
  2. 8 3
      core/io/file_access_pack.cpp
  3. 2 1
      core/math/math_funcs.cpp
  4. 472 149
      doc/base/classes.xml
  5. 2 1
      drivers/unix/os_unix.cpp
  6. 15 2
      platform/windows/os_windows.cpp
  7. 1 0
      platform/windows/os_windows.h
  8. 2 0
      scene/gui/control.cpp
  9. 1 1
      scene/resources/default_theme/default_theme.cpp
  10. 47 4
      scene/resources/theme.cpp
  11. 5 2
      scene/resources/theme.h
  12. 234 357
      tools/editor/doc_data_compressed.h
  13. 3 2
      tools/editor/editor_import_export.cpp
  14. 1 1
      tools/editor/editor_node.cpp
  15. 178 41
      tools/editor/plugins/theme_editor_plugin.cpp
  16. 6 11
      tools/editor/plugins/theme_editor_plugin.h
  17. 18 0
      tools/editor/project_export.cpp
  18. 0 0
      tools/ios_xcode_template/data.pck
  19. 469 0
      tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj
  20. 7 0
      tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  21. BIN
      tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/xcuserdata/punto.xcuserdatad/UserInterfaceState.xcuserstate
  22. 96 0
      tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/godot_ios.xcscheme
  23. 27 0
      tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/xcschememanagement.plist
  24. 2 0
      tools/ios_xcode_template/godot_ios/en.lproj/InfoPlist.strings
  25. 47 0
      tools/ios_xcode_template/godot_ios/godot_ios-Info.plist
  26. 16 0
      tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch
  27. 18 0
      tools/ios_xcode_template/godot_ios/main.m
  28. 2 0
      tools/ios_xcode_template/godot_iosTests/en.lproj/InfoPlist.strings
  29. 22 0
      tools/ios_xcode_template/godot_iosTests/godot_iosTests-Info.plist
  30. 34 0
      tools/ios_xcode_template/godot_iosTests/godot_iosTests.m

+ 4 - 1
core/globals.cpp

@@ -319,11 +319,13 @@ Error Globals::setup(const String& p_path) {
 		String candidate = d->get_current_dir();
 		String current_dir = d->get_current_dir();
 		bool found = false;
+		bool first_time=true;
 
 		while(true) {
 			//try to load settings in ascending through dirs shape!
 
-			if (_load_resource_pack(current_dir+"/data.pck") || _load_resource_pack(current_dir+"/data.pcz")) {
+			//tries to open pack, but only first time
+			if (first_time && _load_resource_pack(current_dir+"/data.pck")) {
 				if (_load_settings("res://engine.cfg")==OK || _load_settings_binary("res://engine.cfb")==OK) {
 
 					_load_settings("res://override.cfg");
@@ -344,6 +346,7 @@ Error Globals::setup(const String& p_path) {
 			if (d->get_current_dir()==current_dir)
 				break; //not doing anything useful
 			current_dir=d->get_current_dir();
+			first_time=false;
 		}
 
 

+ 8 - 3
core/io/file_access_pack.cpp

@@ -31,6 +31,8 @@
 
 #include <stdio.h>
 
+#define PACK_VERSION 0
+
 Error PackedData::add_pack(const String& p_path) {
 
 	for (int i=0; i<sources.size(); i++) {
@@ -113,12 +115,12 @@ bool PackedSourcePCK::try_open_pack(const String& p_path) {
 
 	uint32_t magic= f->get_32();
 
-	if (magic != 0x4b435047) {
+	if (magic != 0x43504447) {
 		//maybe at he end.... self contained exe
 		f->seek_end();
 		f->seek( f->get_pos() -4 );
 		magic = f->get_32();
-		if (magic != 0x4b435047) {
+		if (magic != 0x43504447) {
 
 			memdelete(f);
 			return false;
@@ -130,7 +132,7 @@ bool PackedSourcePCK::try_open_pack(const String& p_path) {
 		f->seek( f->get_pos() -ds-8 );
 
 		magic = f->get_32();
-		if (magic != 0x4b435047) {
+		if (magic != 0x43504447) {
 
 			memdelete(f);
 			return false;
@@ -138,10 +140,13 @@ bool PackedSourcePCK::try_open_pack(const String& p_path) {
 
 	}
 
+	uint32_t version = f->get_32();
 	uint32_t ver_major = f->get_32();
 	uint32_t ver_minor = f->get_32();
 	uint32_t ver_rev = f->get_32();
 
+	ERR_EXPLAIN("Pack version newer than supported by engine: "+itos(version));
+	ERR_FAIL_COND_V( version > PACK_VERSION, ERR_INVALID_DATA);
 	ERR_EXPLAIN("Pack created with a newer version of the engine: "+itos(ver_major)+"."+itos(ver_minor)+"."+itos(ver_rev));
 	ERR_FAIL_COND_V( ver_major > VERSION_MAJOR || (ver_major == VERSION_MAJOR && ver_minor > VERSION_MINOR), ERR_INVALID_DATA);
 

+ 2 - 1
core/math/math_funcs.cpp

@@ -75,7 +75,8 @@ void Math::seed(uint32_t x) {
 
 void Math::randomize() {
 
-	seed(OS::get_singleton()->get_ticks_usec()); /* *OS::get_singleton()->get_time().sec); // windows doesn't have get_time(), returns always 0 */
+	OS::Time time = OS::get_singleton()->get_time();
+	seed(OS::get_singleton()->get_ticks_usec()*time.hour*time.min*time.sec*rand()); /* *OS::get_singleton()->get_time().sec); // windows doesn't have get_time(), returns always 0 */
 }
 
 uint32_t Math::rand() {

File diff suppressed because it is too large
+ 472 - 149
doc/base/classes.xml


+ 2 - 1
drivers/unix/os_unix.cpp

@@ -394,7 +394,8 @@ String OS_Unix::get_executable_path() const {
 	memset(buf,0,256);
 	readlink("/proc/self/exe", buf, sizeof(buf));
 	//print_line("Exec path is:"+String(buf));
-	String b = buf;
+	String b;
+	b.parse_utf8(buf);
 	if (b=="") {
 		WARN_PRINT("Couldn't get executable path from /proc/self/exe, using argv[0]");
 		return OS::get_executable_path();

+ 15 - 2
platform/windows/os_windows.cpp

@@ -1475,10 +1475,14 @@ Error OS_Windows::execute(const String& p_path, const List<String>& p_arguments,
 	ZeroMemory( &pi.si, sizeof(pi.si) );
 	pi.si.cb = sizeof(pi.si);
 	ZeroMemory( &pi.pi, sizeof(pi.pi) );
+	LPSTARTUPINFOW si_w = (LPSTARTUPINFOW) &pi.si;
 
 	print_line("running cmdline: "+cmdline);
-
-	int ret = CreateProcess(NULL, (LPSTR)cmdline.utf8().get_data(), NULL, NULL, 0, NORMAL_PRIORITY_CLASS, NULL, NULL, &pi.si, &pi.pi);
+	Vector<CharType> modstr; //windows wants to change this no idea why
+	modstr.resize(cmdline.size());
+	for(int i=0;i<cmdline.size();i++)
+		modstr[i]=cmdline[i];
+	int ret = CreateProcessW(NULL, modstr.ptr(), NULL, NULL, 0, NORMAL_PRIORITY_CLASS, NULL, NULL, si_w, &pi.pi);
 	ERR_FAIL_COND_V(ret == 0, ERR_CANT_FORK);
 
 	if (p_blocking) {
@@ -1523,6 +1527,15 @@ Error OS_Windows::set_cwd(const String& p_cwd) {
 	return OK;
 }
 
+String OS_Windows::get_executable_path() const {
+
+	wchar_t bufname[4096];
+	GetModuleFileNameW(NULL,bufname,4096);
+	String s= bufname;
+	print_line("EXEC PATHPó: "+s);
+	return s;
+}
+
 void OS_Windows::set_icon(const Image& p_icon) {
 
 

+ 1 - 0
platform/windows/os_windows.h

@@ -235,6 +235,7 @@ public:
 	void set_cursor_shape(CursorShape p_shape);
 	void set_icon(const Image& p_icon);
 
+	virtual String get_executable_path() const;
 
 	virtual String get_locale() const;
 

+ 2 - 0
scene/gui/control.cpp

@@ -1407,6 +1407,8 @@ Ref<Font> Control::get_font(const StringName& p_name,const StringName& p_type) c
 
 		if (theme_owner->data.theme->has_font(p_name, type ) )
 			return data.theme_owner->data.theme->get_font(p_name, type );
+		if (theme_owner->data.theme->get_default_theme_font().is_valid())
+			return theme_owner->data.theme->get_default_theme_font();
 		Control *parent = theme_owner->get_parent()?theme_owner->get_parent()->cast_to<Control>():NULL;
 
 		if (parent)

+ 1 - 1
scene/resources/default_theme/default_theme.cpp

@@ -196,7 +196,7 @@ void make_default_theme() {
 		focus->set_expand_margin_size(Margin(i),2);
 	}
 	t->set_stylebox("focus","Button", focus );
-	t->set_font("font","Button", focus );
+	t->set_font("font","Button", default_font );
 	t->set_color("font_color","Button", control_font_color );
 	t->set_color("font_color_pressed","Button", control_font_color_pressed );
 	t->set_color("font_color_hover","Button", control_font_color_hover );

+ 47 - 4
scene/resources/theme.cpp

@@ -130,6 +130,7 @@ void Theme::_get_property_list( List<PropertyInfo> *p_list) const {
 	}
 	
 	key=NULL;
+
 	
 	while((key=font_map.next(key))) {
 	
@@ -172,6 +173,17 @@ Ref<Theme> Theme::get_default() {
 	return default_theme;	
 }
 
+
+void Theme::set_default_theme_font( const Ref<Font>& p_default_font ) {
+
+	default_theme_font=p_default_font;
+}
+
+Ref<Font> Theme::get_default_theme_font() const {
+
+	return default_theme_font;
+}
+
 void Theme::set_default(const Ref<Theme>& p_default) {
 	
 	default_theme=p_default;
@@ -203,8 +215,10 @@ void Theme::set_icon(const StringName& p_name,const StringName& p_type,const Ref
 
 	icon_map[p_type][p_name]=p_icon;	
 
-	if (new_value)
+	if (new_value) {
 		_change_notify();
+		emit_changed();;
+	}
 }
 Ref<Texture> Theme::get_icon(const StringName& p_name,const StringName& p_type) const {
 	
@@ -229,6 +243,8 @@ void Theme::clear_icon(const StringName& p_name,const StringName& p_type) {
 
 	icon_map[p_type].erase(p_name);
 	_change_notify();
+	emit_changed();;
+
 }
 
 void Theme::get_icon_list(StringName p_type, List<StringName> *p_list) const {
@@ -256,6 +272,8 @@ void Theme::set_stylebox(const StringName& p_name,const StringName& p_type,const
 
 	if (new_value)
 		_change_notify();
+	emit_changed();;
+
 }
 
 
@@ -281,6 +299,8 @@ void Theme::clear_stylebox(const StringName& p_name,const StringName& p_type) {
 
 	style_map[p_type].erase(p_name);
 	_change_notify();
+	emit_changed();;
+
 }
 
 void Theme::get_stylebox_list(StringName p_type, List<StringName> *p_list) const {
@@ -304,13 +324,18 @@ void Theme::set_font(const StringName& p_name,const StringName& p_type,const Ref
 	bool new_value=!font_map.has(p_type) || !font_map[p_type].has(p_name);
 	font_map[p_type][p_name]=p_font;
 
-	if (new_value)
+	if (new_value) {
 		_change_notify();
+		emit_changed();;
+
+	}
 }
 Ref<Font> Theme::get_font(const StringName& p_name,const StringName& p_type) const {
 	
 	if (font_map.has(p_type) && font_map[p_type].has(p_name) && font_map[p_type][p_name].is_valid())
 		return font_map[p_type][p_name];	
+	else if (default_theme_font.is_valid())
+		return default_theme_font;
 	else
 		return default_font;
 	
@@ -328,6 +353,8 @@ void Theme::clear_font(const StringName& p_name,const StringName& p_type) {
 
 	font_map[p_type].erase(p_name);
 	_change_notify();
+	emit_changed();;
+
 }
 
 void Theme::get_font_list(StringName p_type, List<StringName> *p_list) const {
@@ -350,8 +377,11 @@ void Theme::set_color(const StringName& p_name,const StringName& p_type,const Co
 
 	color_map[p_type][p_name]=p_color;
 
-	if (new_value)
+	if (new_value) {
 		_change_notify();
+		emit_changed();;
+
+	}
 }
 
 
@@ -377,6 +407,8 @@ void Theme::clear_color(const StringName& p_name,const StringName& p_type) {
 
 	color_map[p_type].erase(p_name);
 	_change_notify();
+	emit_changed();;
+
 }
 
 void Theme::get_color_list(StringName p_type, List<StringName> *p_list) const {
@@ -398,8 +430,10 @@ void Theme::set_constant(const StringName& p_name,const StringName& p_type,int p
 	bool new_value=!constant_map.has(p_type) || !constant_map[p_type].has(p_name);
 	constant_map[p_type][p_name]=p_constant;
 
-	if (new_value)
+	if (new_value) {
 		_change_notify();
+		emit_changed();;
+	}
 }
 
 int Theme::get_constant(const StringName& p_name,const StringName& p_type) const {
@@ -424,6 +458,8 @@ void Theme::clear_constant(const StringName& p_name,const StringName& p_type) {
 
 	constant_map[p_type].erase(p_name);
 	_change_notify();
+	emit_changed();;
+
 }
 
 void Theme::get_constant_list(StringName p_type, List<StringName> *p_list) const {
@@ -451,6 +487,8 @@ void Theme::copy_default_theme() {
 	color_map=default_theme->color_map;
 	constant_map=default_theme->constant_map;
 	_change_notify();
+	emit_changed();;
+
 }
 
 void Theme::get_type_list(List<StringName> *p_list) const {
@@ -532,10 +570,15 @@ void Theme::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("clear_constant","name","type"),&Theme::clear_constant);
 	ObjectTypeDB::bind_method(_MD("get_constant_list"),&Theme::_get_constant_list);
 
+	ObjectTypeDB::bind_method(_MD("set_default_font","font"),&Theme::set_default_theme_font);
+	ObjectTypeDB::bind_method(_MD("get_default_font"),&Theme::get_default_theme_font);
+
 	ObjectTypeDB::bind_method(_MD("get_type_list"),&Theme::_get_type_list);
 
 	ObjectTypeDB::bind_method("copy_default_theme",&Theme::copy_default_theme);
 
+	ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"default_font",PROPERTY_HINT_RESOURCE_TYPE,"Font"),_SCS("set_default_font"),_SCS("get_default_font"));
+
 }
 
 Theme::Theme() {

+ 5 - 2
scene/resources/theme.h

@@ -59,6 +59,7 @@ protected:
 	static Ref<StyleBox> default_style;
 	static Ref<Font> default_font;
 
+	Ref<Font> default_theme_font;
 
 	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; }
@@ -76,8 +77,10 @@ public:
 	static void set_default_icon( const Ref<Texture>& p_icon );
 	static void set_default_style( const Ref<StyleBox>& p_default_style);
 	static void set_default_font( const Ref<Font>& p_default_font );
-	
-	
+
+	void set_default_theme_font( const Ref<Font>& p_default_font );
+	Ref<Font> get_default_theme_font() const;
+
 	void set_icon(const StringName& p_name,const StringName& p_type,const Ref<Texture>& p_icon);
 	Ref<Texture> get_icon(const StringName& p_name,const StringName& p_type) const;
 	bool has_icon(const StringName& p_name,const StringName& p_type) const;

File diff suppressed because it is too large
+ 234 - 357
tools/editor/doc_data_compressed.h


+ 3 - 2
tools/editor/editor_import_export.cpp

@@ -848,7 +848,8 @@ Error EditorExportPlatform::save_pack(FileAccess *dst,bool p_make_bundles) {
 	FileAccess *tmp = FileAccess::open(tmppath,FileAccess::WRITE);
 	uint64_t ofs_begin = dst->get_pos();
 
-	dst->store_32(0x4b435047); //GPCK
+	dst->store_32(0x43504447); //GDPK
+	dst->store_32(0); //pack version
 	dst->store_32(VERSION_MAJOR);
 	dst->store_32(VERSION_MINOR);
 	dst->store_32(VERSION_REVISION);
@@ -891,7 +892,7 @@ Error EditorExportPlatform::save_pack(FileAccess *dst,bool p_make_bundles) {
 	memdelete(tmp);
 
 	dst->store_64(dst->get_pos()-ofs_begin);
-	dst->store_32(0x4b435047); //GPCK
+	dst->store_32(0x43504447); //GDPK
 
 	//fix offsets
 

+ 1 - 1
tools/editor/editor_node.cpp

@@ -3961,7 +3961,7 @@ EditorNode::EditorNode() {
 	//add_editor_plugin( memnew( AnimationEditorPlugin(this) ) ); - not useful anymore
 	add_editor_plugin( memnew( ShaderEditorPlugin(this) ) );
 	add_editor_plugin( memnew( CameraEditorPlugin(this) ) );
-	add_editor_plugin( memnew( FontEditorPlugin(this) ) );
+	//add_editor_plugin( memnew( FontEditorPlugin(this) ) ); obsolete
 	add_editor_plugin( memnew( SampleEditorPlugin(this) ) );
 	add_editor_plugin( memnew( SampleLibraryEditorPlugin(this) ) );
 	add_editor_plugin( memnew( ThemeEditorPlugin(this) ) );

+ 178 - 41
tools/editor/plugins/theme_editor_plugin.cpp

@@ -33,13 +33,28 @@
 void ThemeEditor::edit(const Ref<Theme>& p_theme) {
 
 	theme=p_theme;
-	panel->set_theme(p_theme);
+	main_vb->set_theme(p_theme);
 
 }
 
-void ThemeEditor::_open_file_dialog() {
 
-	test_file_dialog->popup_centered_ratio();
+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);
+
 }
 
 void ThemeEditor::_type_menu_cbk(int p_option) {
@@ -477,6 +492,18 @@ void ThemeEditor::_theme_menu_cbk(int p_option) {
 
 }
 
+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();
+		}
+	}
+}
+
 void ThemeEditor::_bind_methods() {
 
 	ObjectTypeDB::bind_method("_type_menu_cbk",&ThemeEditor::_type_menu_cbk);
@@ -489,44 +516,159 @@ void ThemeEditor::_bind_methods() {
 
 ThemeEditor::ThemeEditor() {
 
-	Panel *main_panel = memnew( Panel );
-	add_child(main_panel);
-	main_panel->set_area_as_parent_rect();
-	panel = memnew( Panel );
+	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);
+
 
-	main_panel->add_child(panel);
-	panel->set_area_as_parent_rect();
-	panel->set_margin( MARGIN_TOP,20 );
 
-	test_button = memnew( Button );
-	test_button->set_pos(Point2(25,25));
-	test_button->set_text("Button");
-	panel->add_child(test_button);
+	theme_menu = memnew( MenuButton );
+	theme_menu->set_text("Theme");
+	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_separator();
+	theme_menu->get_popup()->add_item("Create Template",POPUP_CREATE_TEMPLATE);
+	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);
 
-	test_label = memnew( Label );
-	test_label->set_pos(Point2(25,75));
-	test_label->set_text("Label");
-	panel->add_child(test_label);
 
-	test_menu_button = memnew( MenuButton );
-	test_menu_button->set_pos(Point2(25,125));
-	test_menu_button->set_text("Menu Button");
+
+	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 );
+
+	MenuButton* test_menu_button = memnew( MenuButton );
+	test_menu_button->set_text("MenuButton");
 	test_menu_button->get_popup()->add_item("Item");
 	test_menu_button->get_popup()->add_separator();
 	test_menu_button->get_popup()->add_check_item("Check Item");
 	test_menu_button->get_popup()->add_check_item("Checked Item");
 	test_menu_button->get_popup()->set_item_checked(2,true);
-	panel->add_child(test_menu_button);
+	first_vb->add_child(test_menu_button);
 
-	test_option_button = memnew( OptionButton );
-	test_option_button->set_pos(Point2(25,175));
+	OptionButton *test_option_button = memnew( OptionButton );
 	test_option_button->add_item("OptionButton");
 	test_option_button->add_separator();
 	test_option_button->add_item("Has");
 	test_option_button->add_item("Many");
 	test_option_button->add_item("Options");
-	panel->add_child(test_option_button);
+	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);
+	item->set_text(0,"Have,Many,Several,Options!");
+	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);
 
+	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 );
+	tcc->set_name("Tab 1");
+	tc->add_child(tcc);
+	tcc = memnew( Control );
+	tcc->set_name("Tab 2");
+	tc->add_child(tcc);
+	tcc = memnew( Control );
+	tcc->set_name("Tab 3");
+	tc->add_child(tcc);
+
+	main_hb->add_constant_override("separation",20);
+
+
+
+
+/*
 	test_h_scroll = memnew( HScrollBar );
 	test_h_scroll->set_pos( Point2( 25, 225 ) );
 	test_h_scroll->set_size( Point2( 150, 5 ) );
@@ -576,21 +718,11 @@ ThemeEditor::ThemeEditor() {
 	panel->add_child(test_file_dialog);
 
 	fd_button->connect("pressed", this,"_open_file_dialog");
-
-	theme_menu = memnew( MenuButton );
-	theme_menu->set_text("Theme..");
-	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_separator();
-	theme_menu->get_popup()->add_item("Create Template",POPUP_CREATE_TEMPLATE);
-	main_panel->add_child(theme_menu);
-	theme_menu->set_pos(Point2(5,5));
-	theme_menu->get_popup()->connect("item_pressed", this,"_theme_menu_cbk");
+*/
 
 	add_del_dialog = memnew(ConfirmationDialog);
 	add_del_dialog->hide();
-	main_panel->add_child(add_del_dialog);
+	add_child(add_del_dialog);
 
 
 	Label *l = memnew( Label );
@@ -665,10 +797,12 @@ ThemeEditor::ThemeEditor() {
 void ThemeEditorPlugin::edit(Object *p_node) {
 
 	if (p_node && p_node->cast_to<Theme>()) {
-		theme_editor->edit( p_node->cast_to<Theme>() );
 		theme_editor->show();
-	} else
+		theme_editor->edit( p_node->cast_to<Theme>() );
+	} else {
+		theme_editor->edit( Ref<Theme>() );
 		theme_editor->hide();
+	}
 }
 
 bool ThemeEditorPlugin::handles(Object *p_node) const{
@@ -678,10 +812,13 @@ bool ThemeEditorPlugin::handles(Object *p_node) const{
 
 void ThemeEditorPlugin::make_visible(bool p_visible){
 
-	if (p_visible)
+	if (p_visible) {
 		theme_editor->show();
-	else
+		theme_editor->set_process(true);
+	} else {
 		theme_editor->hide();
+		theme_editor->set_process(false);
+	}
 }
 
 ThemeEditorPlugin::ThemeEditorPlugin(EditorNode *p_node) {

+ 6 - 11
tools/editor/plugins/theme_editor_plugin.h

@@ -42,21 +42,13 @@ class ThemeEditor : public Control {
 
 	OBJ_TYPE( ThemeEditor, Control );
 
-	Panel *panel;
 
+	VBoxContainer *main_vb;
 	Ref<Theme> theme;
 
 	FileDialog *file_dialog;
 
-	Button *test_button;
-	Label *test_label;
-	MenuButton *test_menu_button;
-	OptionButton *test_option_button;
-	HScrollBar *test_h_scroll;
-	VScrollBar *test_v_scroll;
-	LineEdit *line_edit;
-	FileDialog *test_file_dialog;
-
+	double time_left;
 
 	MenuButton *theme_menu;
 	ConfirmationDialog *add_del_dialog;
@@ -86,9 +78,12 @@ class ThemeEditor : public Control {
 	void _name_menu_about_to_show();
 	void _name_menu_cbk(int p_option);
 	void _theme_menu_cbk(int p_option);
-	void _open_file_dialog();
+	void _propagate_redraw(Control *p_at);
+	void _refresh_interval();
+
 
 protected:
+	void _notification(int p_what);
 	static void _bind_methods();
 public:
 

+ 18 - 0
tools/editor/project_export.cpp

@@ -374,6 +374,24 @@ void ProjectExportDialog::_export_mode_changed(int p_idx) {
 
 void ProjectExportDialog::_export_action(const String& p_file) {
 
+	String location = Globals::get_singleton()->globalize_path(p_file).get_base_dir().replace("\\","/");
+
+	while(true) {
+
+		print_line("TESTING: "+location.plus_file("engine.cfg"));
+		if (FileAccess::exists(location.plus_file("engine.cfg"))) {
+
+			error->set_text("Please export outside the project folder!");
+			error->popup_centered(Size2(300,70));;
+			return;
+		}
+		String nl = (location+"/..").simplify_path();
+		if (nl.find("/")==location.find_last("/"))
+			break;
+		location=nl;
+	}
+
+
 	TreeItem *selected = platforms->get_selected();
 	if (!selected)
 		return;

+ 0 - 0
tools/ios_xcode_template/data.pck


+ 469 - 0
tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj

@@ -0,0 +1,469 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; };
+		D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */; };
+		D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */; };
+		D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */; };
+		D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */; };
+		D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */; };
+		D0BCFE6218AEBDA3004A7AAE /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */; };
+		D0BCFE6318AEBDA3004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; };
+		D0BCFE6418AEBDA3004A7AAE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */; };
+		D0BCFE6C18AEBDA3004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */; };
+		D0BCFE6E18AEBDA3004A7AAE /* godot_iosTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */; };
+		D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* data.pck */; };
+		D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		D0BCFE6518AEBDA3004A7AAE /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = D0BCFE2C18AEBDA2004A7AAE /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = D0BCFE3318AEBDA2004A7AAE;
+			remoteInfo = godot_ios;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = godot_ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+		D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+		D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; };
+		D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
+		D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "godot_ios-Info.plist"; sourceTree = "<group>"; };
+		D0BCFE4518AEBDA2004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "godot_ios-Prefix.pch"; sourceTree = "<group>"; };
+		D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = godot_iosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
+		D0BCFE6918AEBDA3004A7AAE /* godot_iosTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "godot_iosTests-Info.plist"; sourceTree = "<group>"; };
+		D0BCFE6B18AEBDA3004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = godot_iosTests.m; sourceTree = "<group>"; };
+		D0BCFE7718AEBFEB004A7AAE /* data.pck */ = {isa = PBXFileReference; lastKnownFileType = file; path = data.pck; sourceTree = "<group>"; };
+		D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = godot_opt.iphone; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		D0BCFE3118AEBDA2004A7AAE /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */,
+				D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */,
+				D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */,
+				D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */,
+				D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D0BCFE5D18AEBDA3004A7AAE /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D0BCFE6218AEBDA3004A7AAE /* XCTest.framework in Frameworks */,
+				D0BCFE6418AEBDA3004A7AAE /* UIKit.framework in Frameworks */,
+				D0BCFE6318AEBDA3004A7AAE /* Foundation.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		D0BCFE2B18AEBDA2004A7AAE = {
+			isa = PBXGroup;
+			children = (
+				D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */,
+				D0BCFE7718AEBFEB004A7AAE /* data.pck */,
+				D0BCFE4118AEBDA2004A7AAE /* godot_ios */,
+				D0BCFE6718AEBDA3004A7AAE /* godot_iosTests */,
+				D0BCFE3618AEBDA2004A7AAE /* Frameworks */,
+				D0BCFE3518AEBDA2004A7AAE /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		D0BCFE3518AEBDA2004A7AAE /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */,
+				D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		D0BCFE3618AEBDA2004A7AAE /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */,
+				D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */,
+				D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */,
+				D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */,
+				D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */,
+				D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		D0BCFE4118AEBDA2004A7AAE /* godot_ios */ = {
+			isa = PBXGroup;
+			children = (
+				D0BCFE4218AEBDA2004A7AAE /* Supporting Files */,
+			);
+			path = godot_ios;
+			sourceTree = "<group>";
+		};
+		D0BCFE4218AEBDA2004A7AAE /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */,
+				D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */,
+				D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		D0BCFE6718AEBDA3004A7AAE /* godot_iosTests */ = {
+			isa = PBXGroup;
+			children = (
+				D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */,
+				D0BCFE6818AEBDA3004A7AAE /* Supporting Files */,
+			);
+			path = godot_iosTests;
+			sourceTree = "<group>";
+		};
+		D0BCFE6818AEBDA3004A7AAE /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				D0BCFE6918AEBDA3004A7AAE /* godot_iosTests-Info.plist */,
+				D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		D0BCFE3318AEBDA2004A7AAE /* godot_ios */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */;
+			buildPhases = (
+				D0BCFE3018AEBDA2004A7AAE /* Sources */,
+				D0BCFE3118AEBDA2004A7AAE /* Frameworks */,
+				D0BCFE3218AEBDA2004A7AAE /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = godot_ios;
+			productName = godot_ios;
+			productReference = D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */;
+			productType = "com.apple.product-type.application";
+		};
+		D0BCFE5F18AEBDA3004A7AAE /* godot_iosTests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = D0BCFE7418AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_iosTests" */;
+			buildPhases = (
+				D0BCFE5C18AEBDA3004A7AAE /* Sources */,
+				D0BCFE5D18AEBDA3004A7AAE /* Frameworks */,
+				D0BCFE5E18AEBDA3004A7AAE /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				D0BCFE6618AEBDA3004A7AAE /* PBXTargetDependency */,
+			);
+			name = godot_iosTests;
+			productName = godot_iosTests;
+			productReference = D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */;
+			productType = "com.apple.product-type.bundle.unit-test";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		D0BCFE2C18AEBDA2004A7AAE /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0500;
+				ORGANIZATIONNAME = Okam;
+				TargetAttributes = {
+					D0BCFE5F18AEBDA3004A7AAE = {
+						TestTargetID = D0BCFE3318AEBDA2004A7AAE;
+					};
+				};
+			};
+			buildConfigurationList = D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = D0BCFE2B18AEBDA2004A7AAE;
+			productRefGroup = D0BCFE3518AEBDA2004A7AAE /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				D0BCFE3318AEBDA2004A7AAE /* godot_ios */,
+				D0BCFE5F18AEBDA3004A7AAE /* godot_iosTests */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		D0BCFE3218AEBDA2004A7AAE /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */,
+				D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */,
+				D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D0BCFE5E18AEBDA3004A7AAE /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D0BCFE6C18AEBDA3004A7AAE /* InfoPlist.strings in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		D0BCFE3018AEBDA2004A7AAE /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		D0BCFE5C18AEBDA3004A7AAE /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				D0BCFE6E18AEBDA3004A7AAE /* godot_iosTests.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		D0BCFE6618AEBDA3004A7AAE /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = D0BCFE3318AEBDA2004A7AAE /* godot_ios */;
+			targetProxy = D0BCFE6518AEBDA3004A7AAE /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+		D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				D0BCFE4518AEBDA2004A7AAE /* en */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				D0BCFE6B18AEBDA3004A7AAE /* en */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		D0BCFE6F18AEBDA3004A7AAE /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		D0BCFE7018AEBDA3004A7AAE /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = YES;
+				ENABLE_NS_ASSERTIONS = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		D0BCFE7218AEBDA3004A7AAE /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD)";
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
+				INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALID_ARCHS = "armv7 armv7s";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		D0BCFE7318AEBDA3004A7AAE /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD)";
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
+				INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALID_ARCHS = "armv7 armv7s";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+		D0BCFE7518AEBDA3004A7AAE /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
+				BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/godot_ios.app/godot_ios";
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(SDKROOT)/Developer/Library/Frameworks",
+					"$(inherited)",
+					"$(DEVELOPER_FRAMEWORKS_DIR)",
+				);
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				INFOPLIST_FILE = "godot_iosTests/godot_iosTests-Info.plist";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TEST_HOST = "$(BUNDLE_LOADER)";
+				WRAPPER_EXTENSION = xctest;
+			};
+			name = Debug;
+		};
+		D0BCFE7618AEBDA3004A7AAE /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
+				BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/godot_ios.app/godot_ios";
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(SDKROOT)/Developer/Library/Frameworks",
+					"$(inherited)",
+					"$(DEVELOPER_FRAMEWORKS_DIR)",
+				);
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
+				INFOPLIST_FILE = "godot_iosTests/godot_iosTests-Info.plist";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TEST_HOST = "$(BUNDLE_LOADER)";
+				WRAPPER_EXTENSION = xctest;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D0BCFE6F18AEBDA3004A7AAE /* Debug */,
+				D0BCFE7018AEBDA3004A7AAE /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D0BCFE7218AEBDA3004A7AAE /* Debug */,
+				D0BCFE7318AEBDA3004A7AAE /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+		};
+		D0BCFE7418AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_iosTests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				D0BCFE7518AEBDA3004A7AAE /* Debug */,
+				D0BCFE7618AEBDA3004A7AAE /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = D0BCFE2C18AEBDA2004A7AAE /* Project object */;
+}

+ 7 - 0
tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:godot_ios.xcodeproj">
+   </FileRef>
+</Workspace>

BIN
tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/xcuserdata/punto.xcuserdatad/UserInterfaceState.xcuserstate


+ 96 - 0
tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/godot_ios.xcscheme

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0500"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
+               BuildableName = "godot_ios.app"
+               BlueprintName = "godot_ios"
+               ReferencedContainer = "container:godot_ios.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "D0BCFE5F18AEBDA3004A7AAE"
+               BuildableName = "godot_iosTests.xctest"
+               BlueprintName = "godot_iosTests"
+               ReferencedContainer = "container:godot_ios.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
+            BuildableName = "godot_ios.app"
+            BlueprintName = "godot_ios"
+            ReferencedContainer = "container:godot_ios.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Debug"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
+            BuildableName = "godot_ios.app"
+            BlueprintName = "godot_ios"
+            ReferencedContainer = "container:godot_ios.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
+            BuildableName = "godot_ios.app"
+            BlueprintName = "godot_ios"
+            ReferencedContainer = "container:godot_ios.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 27 - 0
tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>godot_ios.xcscheme</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>0</integer>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict>
+		<key>D0BCFE3318AEBDA2004A7AAE</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+		<key>D0BCFE5F18AEBDA3004A7AAE</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+	</dict>
+</dict>
+</plist>

+ 2 - 0
tools/ios_xcode_template/godot_ios/en.lproj/InfoPlist.strings

@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+

+ 47 - 0
tools/ios_xcode_template/godot_ios/godot_ios-Info.plist

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleDisplayName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundleExecutable</key>
+	<string>godot_opt.iphone</string>
+	<key>CFBundleIdentifier</key>
+	<string>com.okamstudios.${PRODUCT_NAME:rfc1034identifier}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UIStatusBarHidden</key>
+	<true/>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+</dict>
+</plist>

+ 16 - 0
tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch

@@ -0,0 +1,16 @@
+//
+//  Prefix header
+//
+//  The contents of this file are implicitly included at the beginning of every source file.
+//
+
+#import <Availability.h>
+
+#ifndef __IPHONE_5_0
+#warning "This project uses features only available in iOS SDK 5.0 and later."
+#endif
+
+#ifdef __OBJC__
+    #import <UIKit/UIKit.h>
+    #import <Foundation/Foundation.h>
+#endif

+ 18 - 0
tools/ios_xcode_template/godot_ios/main.m

@@ -0,0 +1,18 @@
+//
+//  main.m
+//  godot_ios
+//
+//  Created by Ariel m on 2/14/14.
+//  Copyright (c) 2014 Okam. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[])
+{
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+    }
+}

+ 2 - 0
tools/ios_xcode_template/godot_iosTests/en.lproj/InfoPlist.strings

@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+

+ 22 - 0
tools/ios_xcode_template/godot_iosTests/godot_iosTests-Info.plist

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIdentifier</key>
+	<string>com.okamstudios.${PRODUCT_NAME:rfc1034identifier}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>BNDL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+</dict>
+</plist>

+ 34 - 0
tools/ios_xcode_template/godot_iosTests/godot_iosTests.m

@@ -0,0 +1,34 @@
+//
+//  godot_iosTests.m
+//  godot_iosTests
+//
+//  Created by Ariel m on 2/14/14.
+//  Copyright (c) 2014 Okam. All rights reserved.
+//
+
+#import <XCTest/XCTest.h>
+
+@interface godot_iosTests : XCTestCase
+
+@end
+
+@implementation godot_iosTests
+
+- (void)setUp
+{
+    [super setUp];
+    // Put setup code here. This method is called before the invocation of each test method in the class.
+}
+
+- (void)tearDown
+{
+    // Put teardown code here. This method is called after the invocation of each test method in the class.
+    [super tearDown];
+}
+
+- (void)testExample
+{
+    XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
+}
+
+@end

Some files were not shown because too many files changed in this diff