diff options
Diffstat (limited to 'tools')
44 files changed, 1398 insertions, 2074 deletions
diff --git a/tools/editor/SCsub b/tools/editor/SCsub index 710dac3ea7..76eb65748a 100644 --- a/tools/editor/SCsub +++ b/tools/editor/SCsub @@ -137,7 +137,7 @@ if (env["tools"] == "yes"): reg_exporters = 'void register_exporters() {\n' for e in env.platform_exporters: env.editor_sources.append("#platform/" + e + "/export/export.cpp") - reg_exporters += '\t//register_' + e + '_exporter();\n' + reg_exporters += '\tregister_' + e + '_exporter();\n' reg_exporters_inc += '#include "platform/' + e + '/export/export.h"\n' reg_exporters += '}\n' f = open("register_exporters.cpp", "wb") diff --git a/tools/editor/collada/collada.h b/tools/editor/collada/collada.h index fd7ad4920d..2de2d22935 100644 --- a/tools/editor/collada/collada.h +++ b/tools/editor/collada/collada.h @@ -33,7 +33,7 @@ #include "scene/resources/material.h" -#include "globals.h" +#include "global_config.h" #include "io/xml_parser.h" #include "map.h" diff --git a/tools/editor/doc/doc_data.cpp b/tools/editor/doc/doc_data.cpp index d51dc886b2..e0a4750862 100644 --- a/tools/editor/doc/doc_data.cpp +++ b/tools/editor/doc/doc_data.cpp @@ -30,7 +30,7 @@ #include "version.h" #include "global_constants.h" -#include "globals.h" +#include "global_config.h" #include "script_language.h" #include "io/marshalls.h" #include "io/compression.h" diff --git a/tools/editor/editor_autoload_settings.cpp b/tools/editor/editor_autoload_settings.cpp index 0038ab48d5..3e3362f515 100644 --- a/tools/editor/editor_autoload_settings.cpp +++ b/tools/editor/editor_autoload_settings.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "editor_autoload_settings.h" -#include "globals.h" +#include "global_config.h" #include "global_constants.h" #include "editor_node.h" diff --git a/tools/editor/editor_data.cpp b/tools/editor/editor_data.cpp index 2a3c55229a..d2fa40e08c 100644 --- a/tools/editor/editor_data.cpp +++ b/tools/editor/editor_data.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "editor_data.h" -#include "globals.h" +#include "global_config.h" #include "editor_settings.h" #include "os/dir_access.h" #include "io/resource_loader.h" diff --git a/tools/editor/editor_import_export.cpp b/tools/editor/editor_export.cpp index 5d55de91bd..a67b583868 100644 --- a/tools/editor/editor_import_export.cpp +++ b/tools/editor/editor_export.cpp @@ -26,10 +26,10 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "editor_import_export.h" +#include "editor_export.h" #include "version.h" #include "script_language.h" -#include "globals.h" +#include "global_config.h" #include "os/file_access.h" #include "os/dir_access.h" #include "tools/editor/editor_file_system.h" @@ -42,13 +42,24 @@ #include "tools/editor/plugins/script_editor_plugin.h" #include "io/zip_io.h" +static int _get_pad(int p_alignment, int p_n) { + int rest = p_n % p_alignment; + int pad = 0; + if (rest > 0) { + pad = p_alignment - rest; + }; + return pad; +}; + +#define PCK_PADDING 16 bool EditorExportPreset::_set(const StringName& p_name, const Variant& p_value) { if (values.has(p_name)) { values[p_name]=p_value; + EditorExport::singleton->save_presets(); return true; } @@ -72,15 +83,125 @@ void EditorExportPreset::_get_property_list( List<PropertyInfo> *p_list) const{ } } -Vector<StringName> EditorExportPreset::get_files_to_export() const { +Ref<EditorExportPlatform> EditorExportPreset::get_platform() const { - return Vector<StringName>(); + return platform; } +Vector<String> EditorExportPreset::get_files_to_export() const { -EditorExportPreset::EditorExportPreset() { + Vector<String> files; + for(Set<String>::Element *E=selected_files.front();E;E=E->next()) { + files.push_back(E->get()); + } + return files; +} + +void EditorExportPreset::set_name(const String& p_name) { + name=p_name; + EditorExport::singleton->save_presets(); + +} + +String EditorExportPreset::get_name() const { + return name; + +} + +void EditorExportPreset::set_runnable(bool p_enable) { + + runnable=p_enable; + EditorExport::singleton->save_presets(); +} + +bool EditorExportPreset::is_runnable() const { + + return runnable; +} + +void EditorExportPreset::set_export_filter(ExportFilter p_filter) { + + export_filter=p_filter; + EditorExport::singleton->save_presets(); + +} + +EditorExportPreset::ExportFilter EditorExportPreset::get_export_filter() const { + return export_filter; +} + +void EditorExportPreset::set_include_filter(const String& p_include) { + + include_filter=p_include; + EditorExport::singleton->save_presets(); + +} + +String EditorExportPreset::get_include_filter() const { + + return include_filter; +} + +void EditorExportPreset::set_exclude_filter(const String& p_exclude) { + + exclude_filter=p_exclude; + EditorExport::singleton->save_presets(); +} +String EditorExportPreset::get_exclude_filter() const { + return exclude_filter; +} + +void EditorExportPreset::add_export_file(const String& p_path) { + + selected_files.insert(p_path); + EditorExport::singleton->save_presets(); +} + +void EditorExportPreset::remove_export_file(const String& p_path) { + selected_files.erase(p_path); + EditorExport::singleton->save_presets(); +} + +bool EditorExportPreset::has_export_file(const String& p_path) { + + return selected_files.has(p_path); +} + +void EditorExportPreset::add_patch(const String& p_path,int p_at_pos) { + + if (p_at_pos<0) + patches.push_back(p_path); + else + patches.insert(p_at_pos,p_path); + EditorExport::singleton->save_presets(); +} + +void EditorExportPreset::remove_patch(int p_idx) { + patches.remove(p_idx); + EditorExport::singleton->save_presets(); +} + +void EditorExportPreset::set_patch(int p_index,const String& p_path) { + ERR_FAIL_INDEX(p_index,patches.size()); + patches[p_index]=p_path; + EditorExport::singleton->save_presets(); +} +String EditorExportPreset::get_patch(int p_index) { + + ERR_FAIL_INDEX_V(p_index,patches.size(),String()); + return patches[p_index]; +} + +Vector<String> EditorExportPreset::get_patches() const { + return patches; +} + +EditorExportPreset::EditorExportPreset() { + + export_filter=EXPORT_ALL_RESOURCES; + runnable=false; } @@ -143,7 +264,35 @@ void EditorExportPlatform::gen_debug_flags(Vector<String> &r_flags, int p_flags) Error EditorExportPlatform::_save_pack_file(void *p_userdata,const String& p_path, const Vector<uint8_t>& p_data,int p_file,int p_total) { + PackData *pd = (PackData*)p_userdata; + + SavedData sd; + sd.path_utf8=p_path.utf8(); + sd.ofs = pd->f->get_pos(); + sd.size = p_data.size(); + + pd->f->store_buffer(p_data.ptr(),p_data.size()); + int pad = _get_pad(PCK_PADDING,sd.size); + for(int i=0;i<pad;i++) { + pd->f->store_8(0); + } + + { + MD5_CTX ctx; + MD5Init(&ctx); + MD5Update(&ctx,(unsigned char*)p_data.ptr(),p_data.size()); + MD5Final(&ctx); + sd.md5.resize(16); + for(int i=0;i<16;i++) { + sd.md5[i]=ctx.digest[i]; + } + } + + pd->file_ofs.push_back(sd); + pd->ep->step(TTR("Storing File:")+" "+p_path,2+p_file*100/p_total,false); + + return OK; } Error EditorExportPlatform::_save_zip_file(void *p_userdata,const String& p_path, const Vector<uint8_t>& p_data,int p_file,int p_total) { @@ -170,14 +319,14 @@ Error EditorExportPlatform::_save_zip_file(void *p_userdata,const String& p_path zipCloseFileInZip(zip); zd->ep->step(TTR("Storing File:")+" "+p_path,2+p_file*100/p_total,false); - zd->count++; + return OK; } String EditorExportPlatform::find_export_template(String template_file_name, String *err) const { String user_file = EditorSettings::get_singleton()->get_settings_path() - +"/templates/"+template_file_name; + +"/templates/"+itos(VERSION_MAJOR)+"."+itos(VERSION_MINOR)+"."+_MKSTR(VERSION_STATUS)+"/"+template_file_name; String system_file=OS::get_singleton()->get_installed_templates_path(); bool has_system_path=(system_file!=""); system_file+=template_file_name; @@ -205,19 +354,269 @@ String EditorExportPlatform::find_export_template(String template_file_name, Str return ""; } +Ref<EditorExportPreset> EditorExportPlatform::create_preset() { + + Ref<EditorExportPreset> preset; + preset.instance(); + preset->platform=Ref<EditorExportPlatform>(this); + + List<ExportOption> options; + get_export_options(&options); + + for (List<ExportOption>::Element *E=options.front();E;E=E->next()) { + + preset->properties.push_back(E->get().option); + preset->values[E->get().option.name]=E->get().default_value; + } + + return preset; + +} + +void EditorExportPlatform::_export_find_resources(EditorFileSystemDirectory *p_dir,Set<String>& p_paths) { + + for(int i=0;i<p_dir->get_subdir_count();i++) { + _export_find_resources(p_dir->get_subdir(i),p_paths); + } + + for(int i=0;i<p_dir->get_file_count();i++) { + p_paths.insert(p_dir->get_file_path(i)); + } +} + + +void EditorExportPlatform::_export_find_dependencies(const String& p_path,Set<String>& p_paths) { + + if (p_paths.has(p_path)) + return; + + p_paths.insert(p_path); + + EditorFileSystemDirectory *dir; + int file_idx; + dir = EditorFileSystem::get_singleton()->find_file(p_path,&file_idx); + if (!dir) + return; + + Vector<String> deps = dir->get_file_deps(file_idx); + + for(int i=0;i<deps.size();i++) { + + _export_find_dependencies(deps[i],p_paths); + } +} + Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset>& p_preset,EditorExportSaveFunction p_func, void* p_udata) { + Ref<EditorExportPlatform> platform = p_preset->get_platform(); + List<String> feature_list; + platform->get_preset_features(p_preset,&feature_list); + //figure out features + Set<String> features; + for (List<String>::Element *E=feature_list.front();E;E=E->next()) { + features.insert(E->get()); + } + + //figure out paths of files that will be exported + Set<String> paths; + + if (p_preset->get_export_filter()==EditorExportPreset::EXPORT_ALL_RESOURCES) { + //find stuff + _export_find_resources(EditorFileSystem::get_singleton()->get_filesystem(),paths); + } else { + bool scenes_only = p_preset->get_export_filter()==EditorExportPreset::EXPORT_SELECTED_SCENES; + + Vector<String> files = p_preset->get_files_to_export(); + for(int i=0;i<files.size();i++) { + if (scenes_only && ResourceLoader::get_resource_type(files[i])!="PackedScene") + continue; + + _export_find_dependencies(files[i],paths); + } + } + + //store everything in the export medium + int idx = 0; + int total=paths.size(); + + for(Set<String>::Element *E=paths.front();E;E=E->next()) { + + String path = E->get(); + + if (FileAccess::exists(path+".import")) { + //file is imported, replace by what it imports + Ref<ConfigFile> config; + config.instance(); + Error err = config->load(path+".import"); + if (err!=OK) { + ERR_PRINTS("Could not parse: '"+path+"', not exported."); + continue; + } + + List<String> remaps; + config->get_section_keys("remap",&remaps); + + for(List<String>::Element *F=remaps.front();F;F=F->next()) { + + String remap=F->get(); + if (remap=="path") { + String remapped_path=config->get_value("remap",remap); + Vector<uint8_t> array = FileAccess::get_file_as_array(remapped_path); + p_func(p_udata,remapped_path,array,idx,total); + } else if (remap.begins_with("path.")) { + String feature = remap.get_slice(".",1); + if (features.has(feature)) { + String remapped_path=config->get_value("remap",remap); + Vector<uint8_t> array = FileAccess::get_file_as_array(remapped_path); + p_func(p_udata,remapped_path,array,idx,total); + } + } + } + + //also save the .import file + Vector<uint8_t> array = FileAccess::get_file_as_array(path+".import"); + p_func(p_udata,path+".import",array,idx,total); + + } else { + //just store it as it comes + Vector<uint8_t> array = FileAccess::get_file_as_array(path); + p_func(p_udata,path,array,idx,total); + } + + idx++; + } + + //save config! + + String config_file="godot.cfb"; + String engine_cfb =EditorSettings::get_singleton()->get_settings_path()+"/tmp/tmp"+config_file; + GlobalConfig::get_singleton()->save_custom(engine_cfb); + Vector<uint8_t> data = FileAccess::get_file_as_array(engine_cfb); + + p_func(p_udata,"res://"+config_file,data,idx,total); + return OK; } -Error EditorExportPlatform::save_pack(const Ref<EditorExportPreset>& p_preset,FileAccess *p_where) { +Error EditorExportPlatform::save_pack(const Ref<EditorExportPreset>& p_preset,const String& p_path) { + + EditorProgress ep("savepack",TTR("Packing"),102); + + String tmppath = EditorSettings::get_singleton()->get_settings_path()+"/tmp/packtmp"; + FileAccess *ftmp = FileAccess::open(tmppath,FileAccess::WRITE); + ERR_FAIL_COND_V(!ftmp,ERR_CANT_CREATE) + + PackData pd; + pd.ep=&ep; + pd.f=ftmp; + + Error err = export_project_files(p_preset,_save_pack_file,&pd); + + memdelete(ftmp); //close tmp file + + if (err) + return err; + + pd.file_ofs.sort(); //do sort, so we can do binary search later + + + FileAccess *f = FileAccess::open(p_path,FileAccess::WRITE); + ERR_FAIL_COND_V(!f,ERR_CANT_CREATE) + f->store_32(0x43504447); //GDPK + f->store_32(1); //pack version + f->store_32(VERSION_MAJOR); + f->store_32(VERSION_MINOR); + f->store_32(0); //hmph + for(int i=0;i<16;i++) { + //reserved + f->store_32(0); + } + + f->store_32(pd.file_ofs.size()); //amount of files + + size_t header_size = f->get_pos(); + + //precalculate header size + + for(int i=0;i<pd.file_ofs.size();i++) { + header_size += 4; // size of path string (32 bits is enough) + uint32_t string_len = pd.file_ofs[i].path_utf8.length(); + header_size += string_len + _get_pad(4,string_len); ///size of path string + header_size += 8; // offset to file _with_ header size included + header_size += 8; // size of file + header_size +=16; // md5 + + } + + size_t header_padding = _get_pad(PCK_PADDING,header_size); + + + for(int i=0;i<pd.file_ofs.size();i++) { + + uint32_t string_len = pd.file_ofs[i].path_utf8.length(); + uint32_t pad = _get_pad(4,string_len);; + f->store_32(string_len+pad); + f->store_buffer((const uint8_t*)pd.file_ofs[i].path_utf8.get_data(),string_len); + for(uint32_t j=0;j<pad;j++) { + f->store_8(0); + } + + f->store_64(pd.file_ofs[i].ofs + header_padding + header_size); + f->store_64(pd.file_ofs[i].size); // pay attention here, this is where file is + f->store_buffer(pd.file_ofs[i].md5.ptr(),16); //also save md5 for file + } + + for(uint32_t j=0;j<header_padding;j++) { + f->store_8(0); + } + + //save the rest of the data + + ftmp = FileAccess::open(tmppath,FileAccess::READ); + if (!ftmp) { + memdelete(f); + ERR_FAIL_COND_V(!ftmp,ERR_CANT_CREATE) + } + + const int bufsize=16384; + uint8_t buf[bufsize]; + + while(true) { + + int got = ftmp->get_buffer(buf,bufsize); + if (got<=0) + break; + f->store_buffer(buf,got); + } + + memdelete(ftmp); + + f->store_32(0x43504447); //GDPK + memdelete(f); return OK; } Error EditorExportPlatform::save_zip(const Ref<EditorExportPreset>& p_preset,const String& p_path) { + EditorProgress ep("savezip",TTR("Packing"),102); + + //FileAccess *tmp = FileAccess::open(tmppath,FileAccess::WRITE); + + FileAccess *src_f; + zlib_filefunc_def io = zipio_create_io_from_file(&src_f); + zipFile zip=zipOpen2(p_path.utf8().get_data(),APPEND_STATUS_CREATE,NULL,&io); + + ZipData zd; + zd.ep=&ep; + zd.zip=zip; + + + Error err = export_project_files(p_preset,_save_zip_file,&zd); + + zipClose(zip,NULL); + return OK; } @@ -229,6 +628,74 @@ EditorExportPlatform::EditorExportPlatform() { //// +EditorExport *EditorExport::singleton=NULL; + + +void EditorExport::_save() { + + + Ref<ConfigFile> config; + config.instance(); + for(int i=0;i<export_presets.size();i++) { + + Ref<EditorExportPreset> preset = export_presets[i]; + String section="preset."+itos(i); + + config->set_value(section,"name",preset->get_name()); + config->set_value(section,"platform",preset->get_platform()->get_name()); + config->set_value(section,"runnable",preset->is_runnable()); + bool save_files=false; + switch(preset->get_export_filter()) { + case EditorExportPreset::EXPORT_ALL_RESOURCES: { + config->set_value(section,"export_filter","all_resources"); + } break; + case EditorExportPreset::EXPORT_SELECTED_SCENES: { + config->set_value(section,"export_filter","scenes"); + save_files=true; + } break; + case EditorExportPreset::EXPORT_SELECTED_RESOURCES: { + config->set_value(section,"export_filter","resources"); + save_files=true; + } break; + + + } + + if (save_files) { + Vector<String> export_files = preset->get_files_to_export(); + config->set_value(section,"export_files",export_files); + } + config->set_value(section,"include_filter",preset->get_include_filter()); + config->set_value(section,"exclude_filter",preset->get_exclude_filter()); + config->set_value(section,"patch_list",preset->get_patches()); + + String option_section="preset."+itos(i)+".options"; + + for (const List<PropertyInfo>::Element *E=preset->get_properties().front();E;E=E->next()) { + config->set_value(option_section,E->get().name,preset->get(E->get().name)); + } + } + + config->save("res://export_presets.cfg"); + + print_line("saved ok"); + +} + + +void EditorExport::save_presets() { + + print_line("save presets"); + if (block_save) + return; + save_timer->start(); +} + +void EditorExport::_bind_methods() { + + ClassDB::bind_method("_save",&EditorExport::_save); +} + void EditorExport::add_export_platform(const Ref<EditorExportPlatform>& p_platform) { export_platforms.push_back(p_platform); @@ -273,18 +740,115 @@ void EditorExport::remove_export_preset(int p_idx) { export_presets.remove(p_idx); } +void EditorExport::_notification(int p_what) { + + if (p_what==NOTIFICATION_ENTER_TREE) { + load_config(); + } +} + void EditorExport::load_config() { + Ref<ConfigFile> config; + config.instance(); + Error err = config->load("res://export_presets.cfg"); + if (err!=OK) + return; -} + block_save=true; + + int index=0; + while(true) { + + String section = "preset."+itos(index); + if (!config->has_section(section)) + break; + + String platform=config->get_value(section,"platform"); -void EditorExport::save_config() { + Ref<EditorExportPreset> preset; + + for(int i=0;i<export_platforms.size();i++) { + if (export_platforms[i]->get_name()==platform) { + preset = export_platforms[i]->create_preset(); + break; + } + } + + if (!preset.is_valid()) { + index++; + ERR_CONTINUE(!preset.is_valid()); + } + + preset->set_name( config->get_value(section,"name") ); + preset->set_runnable( config->get_value(section,"runnable") ); + + String export_filter = config->get_value(section,"export_filter"); + + bool get_files=false; + + if (export_filter=="all_resources") { + preset->set_export_filter(EditorExportPreset::EXPORT_ALL_RESOURCES); + } else if (export_filter=="scenes") { + preset->set_export_filter(EditorExportPreset::EXPORT_SELECTED_SCENES); + get_files=true; + } else if (export_filter=="resources") { + preset->set_export_filter(EditorExportPreset::EXPORT_SELECTED_RESOURCES); + get_files=true; + } + + if (get_files) { + + Vector<String> files = config->get_value(section,"export_files"); + + for(int i=0;i<files.size();i++) { + preset->add_export_file(files[i]); + } + } + + preset->set_include_filter( config->get_value(section,"include_filter") ); + preset->set_exclude_filter( config->get_value(section,"exclude_filter") ); + + + Vector<String> patch_list = config->get_value(section,"patch_list"); + + for(int i=0;i<patch_list.size();i++) { + preset->add_patch(patch_list[i]); + } + + String option_section="preset."+itos(index)+".options"; + + List<String> options; + + config->get_section_keys(option_section,&options); + + for (List<String>::Element *E=options.front();E;E=E->next()) { + + Variant value = config->get_value(option_section,E->get()); + + preset->set(E->get(),value); + } + + add_export_preset(preset); + index++; + } + + block_save=false; } + + EditorExport::EditorExport() { + save_timer = memnew( Timer ); + add_child(save_timer); + save_timer->set_wait_time(0.8); + save_timer->set_one_shot(true); + save_timer->connect("timeout",this,"_save"); + block_save=false; + singleton=this; } EditorExport::~EditorExport() { @@ -292,12 +856,107 @@ EditorExport::~EditorExport() { } + +////////// + +void EditorExportPlatformPC::get_preset_features(const Ref<EditorExportPreset>& p_preset,List<String>* r_features) { + + if (p_preset->get("texture_format/s3tc")) { + r_features->push_back("s3tc"); + } + if (p_preset->get("texture_format/etc")) { + r_features->push_back("etc"); + } + if (p_preset->get("texture_format/etc2")) { + r_features->push_back("etc2"); + } +} + +void EditorExportPlatformPC::get_export_options(List<ExportOption> *r_options) { + + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL,"texture_format/s3tc"),true)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL,"texture_format/etc"),false)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL,"texture_format/etc2"),false)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL,"binary_format/64_bits"),true)); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING,"custom_template/release",PROPERTY_HINT_GLOBAL_FILE),"")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING,"custom_template/debug",PROPERTY_HINT_GLOBAL_FILE),"")); +} + +String EditorExportPlatformPC::get_name() const { + + return name; +} +Ref<Texture> EditorExportPlatformPC::get_logo() const { + + return logo; +} + +bool EditorExportPlatformPC::can_export(const Ref<EditorExportPreset>& p_preset,String &r_error, bool &r_missing_templates) const { + + r_missing_templates=false; + + if (find_export_template(release_file_32)==String()) { + r_missing_templates=true; + } else if (find_export_template(debug_file_32)==String()) { + r_missing_templates=true; + } else if (find_export_template(release_file_64)==String()) { + r_missing_templates=true; + } else if (find_export_template(debug_file_64)==String()) { + r_missing_templates=true; + } + return !r_missing_templates; +} + +String EditorExportPlatformPC::get_binary_extension() const { + return extension; +} + +Error EditorExportPlatformPC::export_project(const Ref<EditorExportPreset>& p_preset, bool p_debug, const String& p_path, int p_flags) { + + return OK; +} + +void EditorExportPlatformPC::set_extension(const String& p_extension) { + extension=p_extension; +} + +void EditorExportPlatformPC::set_name(const String& p_name) { + name=p_name; +} + +void EditorExportPlatformPC::set_logo(const Ref<Texture>& p_logo) { + logo=p_logo; +} + +void EditorExportPlatformPC::set_release_64(const String& p_file) { + + release_file_64=p_file; +} + +void EditorExportPlatformPC::set_release_32(const String& p_file){ + + release_file_32=p_file; +} +void EditorExportPlatformPC::set_debug_64(const String& p_file){ + + debug_file_64=p_file; +} +void EditorExportPlatformPC::set_debug_32(const String& p_file){ + + debug_file_32=p_file; + +} + +EditorExportPlatformPC::EditorExportPlatformPC() { + +} + //////// #if 0 #include "version.h" #include "script_language.h" -#include "globals.h" +#include "global_config.h" #include "os/file_access.h" #include "os/dir_access.h" #include "tools/editor/editor_file_system.h" diff --git a/tools/editor/editor_import_export.h b/tools/editor/editor_export.h index 364ac612a8..8a9dc965e5 100644 --- a/tools/editor/editor_import_export.h +++ b/tools/editor/editor_export.h @@ -26,40 +26,52 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef EDITOR_IMPORT_EXPORT_H -#define EDITOR_IMPORT_EXPORT_H +#ifndef EDITOR_EXPORT_H +#define EDITOR_EXPORT_H #include "resource.h" #include "scene/main/node.h" #include "scene/resources/texture.h" +#include "scene/main/timer.h" class EditorProgress; class FileAccess; +class EditorExportPlatform; +class EditorFileSystemDirectory; class EditorExportPreset : public Reference { GDCLASS( EditorExportPreset,Reference ) public: enum ExportFilter { - EXPORT_RESOURCES, - EXPORT_SELECTED, - EXPORT_ALL, + EXPORT_ALL_RESOURCES, + EXPORT_SELECTED_SCENES, + EXPORT_SELECTED_RESOURCES, }; private: + Ref<EditorExportPlatform> platform; ExportFilter export_filter; + String include_filter; + String exclude_filter; + String exporter; Set<String> selected_files; - bool debug; + bool runnable; + + Vector<String> patches; + friend class EditorExport; +friend class EditorExportPlatform; List<PropertyInfo> properties; Map<StringName,Variant> values; + String name; protected: bool _set(const StringName& p_name, const Variant& p_value); bool _get(const StringName& p_name,Variant &r_ret) const; @@ -67,8 +79,37 @@ protected: public: - Vector<StringName> get_files_to_export() const; + Ref<EditorExportPlatform> get_platform() const; + bool has(const StringName& p_property) const { return values.has(p_property); } + + Vector<String> get_files_to_export() const; + + void add_export_file(const String& p_path); + void remove_export_file(const String& p_path); + bool has_export_file(const String& p_path); + + void set_name(const String& p_name); + String get_name() const; + + void set_runnable(bool p_enable); + bool is_runnable() const; + + void set_export_filter(ExportFilter p_filter); + ExportFilter get_export_filter() const; + + void set_include_filter(const String& p_include); + String get_include_filter() const; + void set_exclude_filter(const String& p_exclude); + String get_exclude_filter() const; + + void add_patch(const String& p_path,int p_at_pos=-1); + void set_patch(int p_index,const String& p_path); + String get_patch(int p_index); + void remove_patch(int p_idx); + Vector<String> get_patches() const; + + const List<PropertyInfo>& get_properties() const { return properties; } EditorExportPreset(); }; @@ -86,9 +127,14 @@ private: struct SavedData { - String path; uint64_t ofs; uint64_t size; + Vector<uint8_t> md5; + CharString path_utf8; + + bool operator<(const SavedData& p_data) const { + return path_utf8 < p_data.path_utf8; + } }; struct PackData { @@ -102,10 +148,12 @@ private: void* zip; EditorProgress *ep; - int count; }; + void _export_find_resources(EditorFileSystemDirectory *p_dir,Set<String>& p_paths); + void _export_find_dependencies(const String& p_path,Set<String>& p_paths); + void gen_debug_flags(Vector<String> &r_flags, int p_flags); static Error _save_pack_file(void *p_userdata,const String& p_path, const Vector<uint8_t>& p_data,int p_file,int p_total); static Error _save_zip_file(void *p_userdata,const String& p_path, const Vector<uint8_t>& p_data,int p_file,int p_total); @@ -113,7 +161,7 @@ private: protected: - virtual void get_preset_features(const Ref<EditorExportPreset>& p_preset,List<String*> r_features)=0; + virtual void get_preset_features(const Ref<EditorExportPreset>& p_preset,List<String> *r_features)=0; String find_export_template(String template_file_name, String *err=NULL) const; public: @@ -127,15 +175,16 @@ public: ExportOption() {} }; - virtual void get_export_options(ExportOption *r_options)=0; - virtual Ref<EditorExportPreset> create_preset()=0; + virtual Ref<EditorExportPreset> create_preset(); + + virtual void get_export_options(List<ExportOption> *r_options)=0; virtual String get_name() const =0; virtual Ref<Texture> get_logo() const =0; Error export_project_files(const Ref<EditorExportPreset>& p_preset,EditorExportSaveFunction p_func, void* p_udata); - Error save_pack(const Ref<EditorExportPreset>& p_preset,FileAccess *p_where); + Error save_pack(const Ref<EditorExportPreset>& p_preset,const String& p_path); Error save_zip(const Ref<EditorExportPreset>& p_preset,const String& p_path); @@ -154,10 +203,10 @@ public: virtual Error run(int p_device,int p_debug_flags) { return OK; } - virtual bool can_export(String *r_error=NULL) const=0; + virtual bool can_export(const Ref<EditorExportPreset>& p_preset,String &r_error,bool &r_missing_templates) const=0; virtual String get_binary_extension() const=0; - virtual Error export_project(const Ref<EditorExportPreset>& p_preset,const String& p_path,int p_flags=0)=0; + virtual Error export_project(const Ref<EditorExportPreset>& p_preset,bool p_debug,const String& p_path,int p_flags=0)=0; EditorExportPlatform(); }; @@ -169,14 +218,23 @@ class EditorExport : public Node { Vector<Ref<EditorExportPlatform> > export_platforms; Vector<Ref<EditorExportPreset> > export_presets; + Timer *save_timer; + bool block_save; + static EditorExport *singleton; + void _save(); protected: +friend class EditorExportPreset; + void save_presets(); + void _notification(int p_what); static void _bind_methods(); public: + static EditorExport * get_singleton() { return singleton; } + void add_export_platform(const Ref<EditorExportPlatform>& p_platform); int get_export_platform_count(); Ref<EditorExportPlatform> get_export_platform(int p_idx); @@ -188,7 +246,6 @@ public: void remove_export_preset(int p_idx); void load_config(); - void save_config(); EditorExport(); ~EditorExport(); @@ -196,4 +253,45 @@ public: + +class EditorExportPlatformPC : public EditorExportPlatform { + + GDCLASS( EditorExportPlatformPC,EditorExportPlatform ) + + Ref<ImageTexture> logo; + String name; + String extension; + + String release_file_32; + String release_file_64; + String debug_file_32; + String debug_file_64; + +public: + + virtual void get_preset_features(const Ref<EditorExportPreset>& p_preset,List<String>* r_features); + + virtual void get_export_options(List<ExportOption> *r_options); + + virtual String get_name() const; + virtual Ref<Texture> get_logo() const; + + virtual bool can_export(const Ref<EditorExportPreset>& p_preset,String &r_error,bool &r_missing_templates) const; + virtual String get_binary_extension() const; + virtual Error export_project(const Ref<EditorExportPreset>& p_preset,bool p_debug,const String& p_path,int p_flags=0); + + void set_extension(const String& p_extension); + void set_name(const String& p_name); + + void set_logo(const Ref<Texture>& p_loco); + + void set_release_64(const String& p_file); + void set_release_32(const String& p_file); + void set_debug_64(const String& p_file); + void set_debug_32(const String& p_file); + + EditorExportPlatformPC(); +}; + + #endif // EDITOR_IMPORT_EXPORT_H diff --git a/tools/editor/editor_file_system.cpp b/tools/editor/editor_file_system.cpp index b9b8345282..cd151cd90b 100644 --- a/tools/editor/editor_file_system.cpp +++ b/tools/editor/editor_file_system.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "editor_file_system.h" -#include "globals.h" +#include "global_config.h" #include "io/resource_loader.h" #include "os/os.h" #include "os/file_access.h" diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp index da9138e5d9..5e2d6e7d6b 100644 --- a/tools/editor/editor_node.cpp +++ b/tools/editor/editor_node.cpp @@ -37,7 +37,7 @@ #include "servers/physics_2d_server.h" #include "scene/resources/packed_scene.h" #include "editor_settings.h" -#include "globals.h" +#include "global_config.h" #include <stdio.h> #include "class_db.h" #include "os/keyboard.h" @@ -2209,25 +2209,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) { case FILE_EXPORT_PROJECT: { - //project_export_settings->popup_export(); - /* - String target = export_db->get_current_platform(); - Ref<EditorExporter> exporter = export_db->get_exporter(target); - if (exporter.is_null()) { - accept->set_text("No exporter for platform '"+target+"' yet."); - accept->popup_centered(Size2(300,70)); - return; - } - - String extension = exporter->get_binary_extension(); - print_line("for target: "+target+" extension: "+extension); - file_export_password->set_editable( exporter->requieres_password(file_export_check->is_pressed())); - - file_export->clear_filters(); - if (extension!="") { - file_export->add_filter("*."+extension); - } - file_export->popup_centered_ratio();*/ + project_export->popup_export(); } break; case FILE_EXPORT_MESH_LIBRARY: { @@ -5236,6 +5218,9 @@ EditorNode::EditorNode() { EditorFileDialog::register_func=_editor_file_dialog_register; EditorFileDialog::unregister_func=_editor_file_dialog_unregister; + editor_export = memnew( EditorExport ); + add_child(editor_export); + register_exporters(); @@ -6156,8 +6141,8 @@ EditorNode::EditorNode() { //gui_base->add_child(optimized_save); //optimized_save->connect("confirmed",this,"_save_optimized"); - //project_export = memnew( ProjectExport(&editor_data) ); - //gui_base->add_child(project_export); + project_export = memnew( ProjectExportDialog ); + gui_base->add_child(project_export); //project_export_settings = memnew( ProjectExportDialog(this) ); //gui_base->add_child(project_export_settings); @@ -6302,6 +6287,7 @@ EditorNode::EditorNode() { + add_editor_plugin( memnew( AnimationPlayerEditorPlugin(this) ) ); add_editor_plugin( memnew( CanvasItemEditorPlugin(this) ) ); add_editor_plugin( memnew( SpatialEditorPlugin(this) ) ); diff --git a/tools/editor/editor_node.h b/tools/editor/editor_node.h index 7ac2760a5c..41c1012ff0 100644 --- a/tools/editor/editor_node.h +++ b/tools/editor/editor_node.h @@ -73,7 +73,7 @@ #include "tools/editor/quick_open.h" #include "tools/editor/project_export.h" #include "tools/editor/editor_sub_scene.h" -#include "editor_import_export.h" +#include "editor_export.h" #include "editor_reimport_dialog.h" #include "tools/editor/editor_plugin.h" #include "tools/editor/editor_name_dialog.h" @@ -365,7 +365,7 @@ private: String _tmp_import_path; - EditorImportExport *editor_import_export; + EditorExport *editor_export; Object *current; @@ -395,7 +395,7 @@ private: EditorRun editor_run; EditorSelection *editor_selection; // ProjectExport *project_export; -// ProjectExportDialog *project_export_settings; + ProjectExportDialog *project_export; EditorResourcePreview *resource_preview; EditorFileServer *file_server; diff --git a/tools/editor/editor_plugin.h b/tools/editor/editor_plugin.h index cf998dd55b..13d8ab0343 100644 --- a/tools/editor/editor_plugin.h +++ b/tools/editor/editor_plugin.h @@ -43,7 +43,7 @@ class EditorNode; class Spatial; class Camera; class EditorSelection; -class EditorImportExport; +class EditorExport; class EditorSettings; class SpatialEditorGizmo; class EditorImportPlugin; diff --git a/tools/editor/editor_plugin_settings.cpp b/tools/editor/editor_plugin_settings.cpp index 2b6828e82f..2d879e38cf 100644 --- a/tools/editor/editor_plugin_settings.cpp +++ b/tools/editor/editor_plugin_settings.cpp @@ -32,7 +32,7 @@ #include "io/config_file.h" #include "os/file_access.h" #include "os/main_loop.h" -#include "globals.h" +#include "global_config.h" #include "editor_node.h" void EditorPluginSettings::_notification(int p_what) { diff --git a/tools/editor/editor_resource_preview.cpp b/tools/editor/editor_resource_preview.cpp index b6cf24e527..ab2226e79a 100644 --- a/tools/editor/editor_resource_preview.cpp +++ b/tools/editor/editor_resource_preview.cpp @@ -32,7 +32,7 @@ #include "os/file_access.h" #include "io/resource_loader.h" #include "io/resource_saver.h" -#include "globals.h" +#include "global_config.h" #include "editor_scale.h" #include "message_queue.h" diff --git a/tools/editor/editor_run.cpp b/tools/editor/editor_run.cpp index 813a8ee5b7..a5d39db6be 100644 --- a/tools/editor/editor_run.cpp +++ b/tools/editor/editor_run.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "editor_run.h" -#include "globals.h" +#include "global_config.h" #include "editor_settings.h" EditorRun::Status EditorRun::get_status() const { diff --git a/tools/editor/editor_run_native.cpp b/tools/editor/editor_run_native.cpp index 25cb41befc..60a9f53b94 100644 --- a/tools/editor/editor_run_native.cpp +++ b/tools/editor/editor_run_native.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "editor_run_native.h" -#include "editor_import_export.h" +#include "editor_export.h" void EditorRunNative::_notification(int p_what) { diff --git a/tools/editor/editor_settings.cpp b/tools/editor/editor_settings.cpp index 2e32cfe38b..f977a40243 100644 --- a/tools/editor/editor_settings.cpp +++ b/tools/editor/editor_settings.cpp @@ -39,7 +39,7 @@ #include "scene/main/viewport.h" #include "io/config_file.h" #include "editor_node.h" -#include "globals.h" +#include "global_config.h" #include "translations.h" #include "io/file_access_memory.h" #include "io/translation_loader_po.h" diff --git a/tools/editor/file_type_cache.cpp b/tools/editor/file_type_cache.cpp index aff99fbc05..891669db13 100644 --- a/tools/editor/file_type_cache.cpp +++ b/tools/editor/file_type_cache.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "file_type_cache.h" -#include "globals.h" +#include "global_config.h" #include "os/file_access.h" FileTypeCache* FileTypeCache::singleton=NULL; diff --git a/tools/editor/filesystem_dock.cpp b/tools/editor/filesystem_dock.cpp index c6c1a02f3f..f5e4ef661a 100644 --- a/tools/editor/filesystem_dock.cpp +++ b/tools/editor/filesystem_dock.cpp @@ -30,7 +30,7 @@ #include "os/dir_access.h" #include "os/file_access.h" -#include "globals.h" +#include "global_config.h" #include "io/resource_loader.h" #include "os/os.h" #include "editor_node.h" diff --git a/tools/editor/io_plugins/editor_export_scene.cpp b/tools/editor/io_plugins/editor_export_scene.cpp index f4ab9880ff..265526aace 100644 --- a/tools/editor/io_plugins/editor_export_scene.cpp +++ b/tools/editor/io_plugins/editor_export_scene.cpp @@ -34,7 +34,7 @@ #include "os/file_access.h" #include "tools/editor/editor_settings.h" #include "scene/resources/packed_scene.h" -#include "globals.h" +#include "global_config.h" Vector<uint8_t> EditorSceneExportPlugin::custom_export(String& p_path,const Ref<EditorExportPlatform> &p_platform) { diff --git a/tools/editor/io_plugins/editor_export_scene.h b/tools/editor/io_plugins/editor_export_scene.h index 191029bd84..c067e835a3 100644 --- a/tools/editor/io_plugins/editor_export_scene.h +++ b/tools/editor/io_plugins/editor_export_scene.h @@ -29,7 +29,7 @@ #ifndef EDITOR_EXPORT_SCENE_H #define EDITOR_EXPORT_SCENE_H -#include "tools/editor/editor_import_export.h" +#include "tools/editor/editor_export.h" #if 0 class EditorSceneExportPlugin : public EditorExportPlugin { diff --git a/tools/editor/io_plugins/editor_font_import_plugin.h b/tools/editor/io_plugins/editor_font_import_plugin.h index a5b265736f..bed1463aeb 100644 --- a/tools/editor/io_plugins/editor_font_import_plugin.h +++ b/tools/editor/io_plugins/editor_font_import_plugin.h @@ -29,7 +29,7 @@ #ifndef EDITOR_FONT_IMPORT_PLUGIN_H #define EDITOR_FONT_IMPORT_PLUGIN_H -#include "tools/editor/editor_import_export.h" +#include "tools/editor/editor_export.h" #include "scene/resources/font.h" #if 0 class EditorNode; diff --git a/tools/editor/io_plugins/editor_scene_import_plugin.cpp b/tools/editor/io_plugins/editor_scene_import_plugin.cpp index bffccb9072..957072c20a 100644 --- a/tools/editor/io_plugins/editor_scene_import_plugin.cpp +++ b/tools/editor/io_plugins/editor_scene_import_plugin.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "editor_scene_import_plugin.h" #if 0 -#include "globals.h" +#include "global_config.h" #include "tools/editor/editor_node.h" #include "scene/resources/packed_scene.h" #include "scene/resources/box_shape.h" diff --git a/tools/editor/io_plugins/editor_texture_import_plugin.cpp b/tools/editor/io_plugins/editor_texture_import_plugin.cpp index c41199f291..cc8d47c6a9 100644 --- a/tools/editor/io_plugins/editor_texture_import_plugin.cpp +++ b/tools/editor/io_plugins/editor_texture_import_plugin.cpp @@ -35,7 +35,7 @@ #include "tools/editor/editor_settings.h" #include "io/md5.h" #include "io/marshalls.h" -#include "globals.h" +#include "global_config.h" #include "scene/gui/check_button.h" #include "scene/gui/button_group.h" #include "scene/gui/margin_container.h" diff --git a/tools/editor/io_plugins/editor_translation_import_plugin.h b/tools/editor/io_plugins/editor_translation_import_plugin.h index 4884ea71c5..22065599b9 100644 --- a/tools/editor/io_plugins/editor_translation_import_plugin.h +++ b/tools/editor/io_plugins/editor_translation_import_plugin.h @@ -29,7 +29,7 @@ #ifndef EDITOR_TRANSLATION_IMPORT_PLUGIN_H #define EDITOR_TRANSLATION_IMPORT_PLUGIN_H -#include "tools/editor/editor_import_export.h" +#include "tools/editor/editor_export.h" #include "scene/resources/font.h" #if 0 class EditorNode; diff --git a/tools/editor/plugins/animation_player_editor_plugin.cpp b/tools/editor/plugins/animation_player_editor_plugin.cpp index 7d6598bd4b..71173038e9 100644 --- a/tools/editor/plugins/animation_player_editor_plugin.cpp +++ b/tools/editor/plugins/animation_player_editor_plugin.cpp @@ -28,7 +28,7 @@ /*************************************************************************/ #include "animation_player_editor_plugin.h" -#include "globals.h" +#include "global_config.h" #include "io/resource_loader.h" #include "io/resource_saver.h" #include "os/keyboard.h" diff --git a/tools/editor/plugins/animation_tree_editor_plugin.cpp b/tools/editor/plugins/animation_tree_editor_plugin.cpp index 1ed52d2df6..988136d475 100644 --- a/tools/editor/plugins/animation_tree_editor_plugin.cpp +++ b/tools/editor/plugins/animation_tree_editor_plugin.cpp @@ -32,7 +32,7 @@ #include "scene/gui/panel.h" #include "scene/main/viewport.h" #include "core/io/resource_loader.h" -#include "core/globals.h" +#include "core/global_config.h" #include "os/input.h" #include "os/keyboard.h" diff --git a/tools/editor/plugins/baked_light_baker.cpp b/tools/editor/plugins/baked_light_baker.cpp index 52220839d9..4219e791d1 100644 --- a/tools/editor/plugins/baked_light_baker.cpp +++ b/tools/editor/plugins/baked_light_baker.cpp @@ -1334,7 +1334,7 @@ void BakedLightBaker::_make_octree_texture() { base<<=16; base|=int((pos.z+cell_size*0.5)/cell_size); - uint32_t hash = HashMapHahserDefault::hash(base); + uint32_t hash = HashMapHasherDefault::hash(base); uint32_t idx = hash % hash_table_size; octhashptr[oct_idx].next=hashptr[idx]; octhashptr[oct_idx].hash=hash; @@ -1362,7 +1362,7 @@ void BakedLightBaker::_make_octree_texture() { base<<=16; base|=int((pos.z+cell_size*0.5)/cell_size); - uint32_t hash = HashMapHahserDefault::hash(base); + uint32_t hash = HashMapHasherDefault::hash(base); uint32_t idx = hash % hash_table_size; uint32_t bucket = hashptr[idx]; diff --git a/tools/editor/plugins/canvas_item_editor_plugin.cpp b/tools/editor/plugins/canvas_item_editor_plugin.cpp index 0830556ac1..8af925db7a 100644 --- a/tools/editor/plugins/canvas_item_editor_plugin.cpp +++ b/tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -38,7 +38,7 @@ #include "scene/2d/particles_2d.h" #include "scene/2d/polygon_2d.h" #include "scene/2d/screen_button.h" -#include "globals.h" +#include "global_config.h" #include "os/input.h" #include "tools/editor/editor_settings.h" #include "scene/gui/grid_container.h" diff --git a/tools/editor/plugins/resource_preloader_editor_plugin.cpp b/tools/editor/plugins/resource_preloader_editor_plugin.cpp index cfdfbdc1c6..de2245d98f 100644 --- a/tools/editor/plugins/resource_preloader_editor_plugin.cpp +++ b/tools/editor/plugins/resource_preloader_editor_plugin.cpp @@ -29,7 +29,7 @@ #include "resource_preloader_editor_plugin.h" #include "io/resource_loader.h" -#include "globals.h" +#include "global_config.h" #include "tools/editor/editor_settings.h" diff --git a/tools/editor/plugins/sample_editor_plugin.cpp b/tools/editor/plugins/sample_editor_plugin.cpp index cb60134c2c..9445095771 100644 --- a/tools/editor/plugins/sample_editor_plugin.cpp +++ b/tools/editor/plugins/sample_editor_plugin.cpp @@ -30,7 +30,7 @@ #if 0 #include "io/resource_loader.h" -#include "globals.h" +#include "global_config.h" #include "tools/editor/editor_settings.h" diff --git a/tools/editor/plugins/sample_library_editor_plugin.cpp b/tools/editor/plugins/sample_library_editor_plugin.cpp index d0ff33c881..b996cafd1f 100644 --- a/tools/editor/plugins/sample_library_editor_plugin.cpp +++ b/tools/editor/plugins/sample_library_editor_plugin.cpp @@ -31,7 +31,7 @@ #include "sample_library_editor_plugin.h" #include "io/resource_loader.h" -#include "globals.h" +#include "global_config.h" #include "tools/editor/editor_settings.h" #include "scene/main/viewport.h" #include "sample_editor_plugin.h" diff --git a/tools/editor/plugins/script_editor_plugin.cpp b/tools/editor/plugins/script_editor_plugin.cpp index 0a880de35b..b7d8cc2ba9 100644 --- a/tools/editor/plugins/script_editor_plugin.cpp +++ b/tools/editor/plugins/script_editor_plugin.cpp @@ -35,7 +35,7 @@ #include "os/os.h" #include "tools/editor/editor_node.h" #include "tools/editor/script_editor_debugger.h" -#include "globals.h" +#include "global_config.h" #include "os/file_access.h" #include "scene/main/viewport.h" #include "os/keyboard.h" diff --git a/tools/editor/plugins/spatial_editor_plugin.cpp b/tools/editor/plugins/spatial_editor_plugin.cpp index 5e425ef3c4..ef971034cd 100644 --- a/tools/editor/plugins/spatial_editor_plugin.cpp +++ b/tools/editor/plugins/spatial_editor_plugin.cpp @@ -38,7 +38,7 @@ #include "tools/editor/editor_settings.h" #include "scene/resources/surface_tool.h" #include "tools/editor/spatial_editor_gizmos.h" -#include "globals.h" +#include "global_config.h" #include "tools/editor/plugins/animation_player_editor_plugin.h" #include "tools/editor/animation_editor.h" diff --git a/tools/editor/plugins/sprite_frames_editor_plugin.cpp b/tools/editor/plugins/sprite_frames_editor_plugin.cpp index 48808d9e04..c3c68e471e 100644 --- a/tools/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/tools/editor/plugins/sprite_frames_editor_plugin.cpp @@ -29,7 +29,7 @@ #include "sprite_frames_editor_plugin.h" #include "io/resource_loader.h" -#include "globals.h" +#include "global_config.h" #include "tools/editor/editor_settings.h" #include "scene/3d/sprite_3d.h" diff --git a/tools/editor/plugins/texture_editor_plugin.cpp b/tools/editor/plugins/texture_editor_plugin.cpp index 1bfc05e2a7..90a798667f 100644 --- a/tools/editor/plugins/texture_editor_plugin.cpp +++ b/tools/editor/plugins/texture_editor_plugin.cpp @@ -29,7 +29,7 @@ #include "texture_editor_plugin.h" #include "io/resource_loader.h" -#include "globals.h" +#include "global_config.h" #include "tools/editor/editor_settings.h" void TextureEditor::_gui_input(InputEvent p_event) { diff --git a/tools/editor/project_export.cpp b/tools/editor/project_export.cpp index c760e45025..f6593a4895 100644 --- a/tools/editor/project_export.cpp +++ b/tools/editor/project_export.cpp @@ -27,16 +27,16 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "project_export.h" -#if 0 #include "os/dir_access.h" #include "os/file_access.h" -#include "globals.h" +#include "global_config.h" #include "io/resource_loader.h" #include "io/resource_saver.h" #include "os/os.h" #include "scene/gui/box_container.h" #include "scene/gui/tab_container.h" #include "scene/gui/scroll_container.h" +#include "scene/gui/margin_container.h" #include "editor_data.h" #include "io/image_loader.h" #include "compressed_translation.h" @@ -44,2087 +44,772 @@ #include "io_plugins/editor_texture_import_plugin.h" #include "editor_settings.h" -const char *ProjectExportDialog::da_string[ProjectExportDialog::ACTION_MAX]={ - "", - "Copy", - "Bundle" -}; - -bool ProjectExportDialog::_create_tree(TreeItem *p_parent,EditorFileSystemDirectory *p_dir) { - - TreeItem *item = tree->create_item(p_parent); - item->set_text(0,p_dir->get_name()+"/"); - item->set_icon(0,get_icon("Folder","EditorIcons")); - - - bool has_items=false; - - for(int i=0;i<p_dir->get_subdir_count();i++) { - - if (_create_tree(item,p_dir->get_subdir(i))) - has_items=true; - } - - //int cc = p_options.get_slice_count(","); - - for (int i=0;i<p_dir->get_file_count();i++) { - - TreeItem *fitem = tree->create_item(item); - //fitem->set_cell_mode(0,TreeItem::CELL_MODE_CHECK); - //fitem->set_editable(0,true); - //fitem->set_checked(0,isfave); - fitem->set_text(0,p_dir->get_file(i)); - String path = p_dir->get_file_path(i); - fitem->set_tooltip(0,path); - fitem->set_metadata(0,path); - Ref<Texture> icon = get_icon( (has_icon(p_dir->get_file_type(i),ei)?p_dir->get_file_type(i):ot),ei); - fitem->set_icon(0,icon); - - fitem->set_cell_mode(1,TreeItem::CELL_MODE_RANGE); - fitem->set_range_config(1,0,2,1); - fitem->set_text(1,expopt); - fitem->set_editable(1,true); - - EditorImportExport::FileAction fa = EditorImportExport::get_singleton()->get_export_file_action(path); - fitem->set_range(1,fa); - - has_items=true; - - } - - if (!has_items) { +void ProjectExportDialog::_notification(int p_what) { - memdelete(item); - return false; + if (p_what==NOTIFICATION_READY) { + delete_preset->set_icon(get_icon("Del","EditorIcons")); + connect("confirmed",this,"_export_pck_zip"); } - - return true; } -void ProjectExportDialog::_tree_changed() { - - TreeItem *t=tree->get_selected(); - if (!t) - return; - - String selected = t->get_metadata(0); - - EditorImportExport::get_singleton()->set_export_file_action(selected,EditorImportExport::FileAction(int(t->get_range(1)))); - _save_export_cfg(); - - //editor->save_import_export(true); - //EditorImportDB::get_singleton()->save_settings(); - -} - void ProjectExportDialog::popup_export() { - popup_centered_ratio(); - if (pending_update_tree) { - _update_tree(); - _update_group_tree(); - pending_update_tree=false; - } -} -void ProjectExportDialog::_update_tree() { + add_preset->get_popup()->clear(); + for(int i=0;i<EditorExport::get_singleton()->get_export_platform_count();i++) { + Ref<EditorExportPlatform> plat = EditorExport::get_singleton()->get_export_platform(i); + add_preset->get_popup()->add_icon_item(plat->get_logo(),plat->get_name()); - updating_tree=true; - tree->clear(); - EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->get_filesystem(); - - if (efsd) { - _create_tree(NULL,efsd); } - updating_tree=false; + _update_presets(); + popup_centered_ratio(); } +void ProjectExportDialog::_add_preset(int p_platform) { + Ref<EditorExportPreset> preset = EditorExport::get_singleton()->get_export_platform(p_platform)->create_preset(); + ERR_FAIL_COND(!preset.is_valid()); + String name = EditorExport::get_singleton()->get_export_platform(p_platform)->get_name(); + bool make_runnable=true; + int attempt=1; + while(true) { -void ProjectExportDialog::_update_platform() { - - _validate_platform(); - TreeItem *selected = platforms->get_selected(); - if (!selected) - return; - - String platform = selected->get_metadata(0); - Ref<EditorExportPlatform> exporter = EditorImportExport::get_singleton()->get_export_platform(platform); - platform_options->edit( exporter.ptr() ); -} - -void ProjectExportDialog::_platform_selected() { + bool valid=true; - String p =platforms->get_selected()->get_metadata(0); - _update_platform(); - //editor->save_import_export(); - //EditorFileSystem::get_singleton()->scan(); + for(int i=0;i<EditorExport::get_singleton()->get_export_preset_count();i++) { + Ref<EditorExportPreset> p = EditorExport::get_singleton()->get_export_preset(i); + if (p->get_platform()==preset->get_platform() && p->is_runnable()) { + make_runnable=false; + } + if (p->get_name()==name) { + valid=false; + break; + } -} + } -void ProjectExportDialog::_scan_finished() { + if (valid) + break; -/* print_line("**********SCAN DONEEE********"); - print_line("**********SCAN DONEEE********"); - print_line("**********SCAN DONEEE********"); - print_line("**********SCAN DONEEE********");*/ + attempt++; + name = EditorExport::get_singleton()->get_export_platform(p_platform)->get_name()+" "+itos(attempt); - if (!is_visible_in_tree()) { - pending_update_tree=true; - return; } - _update_tree(); - _update_group_tree(); -} - -void ProjectExportDialog::_rescan() { - - EditorFileSystem::get_singleton()->scan(); - -} - -void ProjectExportDialog::_update_exporter() { - - -} - - -void ProjectExportDialog::_save_export_cfg() { - - EditorImportExport::get_singleton()->save_config(); -} - -void ProjectExportDialog::_prop_edited(String what) { - - _save_export_cfg(); - - _validate_platform(); + preset->set_name(name); + if (make_runnable) + preset->set_runnable(make_runnable); + EditorExport::get_singleton()->add_export_preset(preset); + _update_presets(); + _edit_preset(EditorExport::get_singleton()->get_export_preset_count()-1); } -void ProjectExportDialog::_filters_edited(String what) { - EditorImportExport::get_singleton()->set_export_custom_filter(what); - _save_export_cfg(); -} +void ProjectExportDialog::_update_presets() { -void ProjectExportDialog::_filters_exclude_edited(String what) { - EditorImportExport::get_singleton()->set_export_custom_filter_exclude(what); - _save_export_cfg(); -} - -void ProjectExportDialog::_quality_edited(float what) { - - EditorImportExport::get_singleton()->set_export_image_quality(what); - _save_export_cfg(); -} - -void ProjectExportDialog::_shrink_edited(float what) { - - EditorImportExport::get_singleton()->set_export_image_shrink(what); - _save_export_cfg(); -} - -void ProjectExportDialog::_image_export_edited(int what) { - - EditorImportExport::get_singleton()->set_export_image_action(EditorImportExport::ImageAction(what)); - _save_export_cfg(); -} - -void ProjectExportDialog::_format_toggled() { + updating=true; - EditorImportExport::get_singleton()->get_image_formats().clear(); + Ref<EditorExportPreset> current; + if (presets->get_current()>=0 && presets->get_current()<presets->get_item_count()) + current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); - for(int i=0;i<formats.size();i++) { - if (formats[i]->is_checked(0)) - EditorImportExport::get_singleton()->get_image_formats().insert( formats[i]->get_text(0)); + int current_idx=-1; + presets->clear(); + for(int i=0;i<EditorExport::get_singleton()->get_export_preset_count();i++) { + Ref<EditorExportPreset> preset = EditorExport::get_singleton()->get_export_preset(i); + if (preset==current) { + current_idx=i; + } + String name = preset->get_name(); + if (preset->is_runnable()) + name+=" ("+TTR("Runnable")+")"; + presets->add_item(name,preset->get_platform()->get_logo()); } - _save_export_cfg(); -} - - -void ProjectExportDialog::_script_edited(Variant v) { - if (updating_script) - return; - updating_script=true; - EditorNode::get_undo_redo()->create_action(TTR("Edit Script Options")); - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"script_set_action",script_mode->get_selected()); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"script_set_action",EditorImportExport::get_singleton()->script_get_action()); - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"script_set_encryption_key",script_key->get_text()); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"script_set_encryption_key",EditorImportExport::get_singleton()->script_get_encryption_key()); - EditorNode::get_undo_redo()->add_do_method(this,"_update_script"); - EditorNode::get_undo_redo()->add_undo_method(this,"_update_script"); - EditorNode::get_undo_redo()->add_do_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->add_undo_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->commit_action(); - updating_script=false; - - -} + if (current_idx!=-1) { + presets->select(current_idx); + //_edit_preset(current_idx); + } -void ProjectExportDialog::_sample_convert_edited(int what) { - EditorImportExport::get_singleton()->sample_set_action( EditorImportExport::SampleAction(sample_mode->get_selected())); - EditorImportExport::get_singleton()->sample_set_max_hz( sample_max_hz->get_value() ); - EditorImportExport::get_singleton()->sample_set_trim( sample_trim->is_pressed() ); - _save_export_cfg(); + updating=false; } -void ProjectExportDialog::_notification(int p_what) { - - switch(p_what) { +void ProjectExportDialog::_edit_preset(int p_index) { - case NOTIFICATION_ENTER_TREE: { - - - CenterContainer *cc = memnew( CenterContainer ); - TextureRect *tf = memnew( TextureRect); - tf->set_texture(get_icon("ErrorSign","EditorIcons")); - cc->add_child(tf); - plat_errors->add_child(cc); - platform_error_string->raise(); + if (p_index<0 || p_index>=presets->get_item_count()) { + name->set_text(""); + name->set_editable(false); + runnable->set_disabled(true); + parameters->edit(NULL); + delete_preset->set_disabled(true); + sections->hide(); + patches->clear(); + return; + } - TreeItem *root = platforms->create_item(NULL); - List<StringName> ep; - EditorImportExport::get_singleton()->get_export_platforms(&ep); - ep.sort_custom<StringName::AlphCompare>(); - for(List<StringName>::Element *E=ep.front();E;E=E->next()) { + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(p_index); + ERR_FAIL_COND(current.is_null()); - Ref<EditorExportPlatform> eep = EditorImportExport::get_singleton()->get_export_platform(E->get()); - TreeItem *p = platforms->create_item(root); - p->set_text(0,eep->get_name()); - p->set_icon(0,eep->get_logo()); - p->set_metadata(0,eep->get_name()); - if (eep->get_name()==OS::get_singleton()->get_name()) - p->select(0); + updating=true; - } + presets->select(p_index); + sections->show(); + + name->set_editable(true); + delete_preset->set_disabled(false); + name->set_text(current->get_name()); + runnable->set_disabled(false); + runnable->set_pressed(current->is_runnable()); + parameters->edit(current.ptr()); + + export_filter->select(current->get_export_filter()); + include_filters->set_text(current->get_include_filter()); + exclude_filters->set_text(current->get_exclude_filter()); + + + patches->clear(); + TreeItem *patch_root = patches->create_item(); + Vector<String> patchlist = current->get_patches(); + for(int i=0;i<patchlist.size();i++) { + TreeItem *patch = patches->create_item(patch_root); + patch->set_cell_mode(0,TreeItem::CELL_MODE_CHECK); + String file = patchlist[i].get_file(); + patch->set_editable(0,true); + patch->set_text(0,file.get_file().replace("*","")); + if (file.ends_with("*")) + patch->set_checked(0,true); + patch->set_tooltip(0,patchlist[i]); + patch->set_metadata(0,i); + patch->add_button(0,get_icon("Del","EditorIcons"),0); + patch->add_button(0,get_icon("folder","FileDialog"),1); + } + + TreeItem *patch_add = patches->create_item(patch_root); + patch_add->set_metadata(0,patchlist.size()); + if (patchlist.size()==0) + patch_add->set_text(0,"Add initial export.."); + else + patch_add->set_text(0,"Add previous patches.."); - EditorFileSystem::get_singleton()->connect("filesystem_changed",this,"_scan_finished"); - //_rescan(); - _update_platform(); - export_mode->select( EditorImportExport::get_singleton()->get_export_filter() ); - convert_text_scenes->set_pressed( EditorImportExport::get_singleton()->get_convert_text_scenes() ); - filters->set_text( EditorImportExport::get_singleton()->get_export_custom_filter() ); - filters_exclude->set_text( EditorImportExport::get_singleton()->get_export_custom_filter_exclude() ); - if (EditorImportExport::get_singleton()->get_export_filter()!=EditorImportExport::EXPORT_SELECTED) - tree_vb->hide(); - else - tree_vb->show(); - - image_action->select(EditorImportExport::get_singleton()->get_export_image_action()); - image_quality->set_value(EditorImportExport::get_singleton()->get_export_image_quality()); - image_shrink->set_value(EditorImportExport::get_singleton()->get_export_image_shrink()); - _update_script(); - - - image_quality->connect("value_changed",this,"_quality_edited"); - image_shrink->connect("value_changed",this,"_shrink_edited"); - image_action->connect("item_selected",this,"_image_export_edited"); - - script_mode->connect("item_selected",this,"_script_edited"); - script_key->connect("text_changed",this,"_script_edited"); - - for(int i=0;i<formats.size();i++) { - if (EditorImportExport::get_singleton()->get_image_formats().has(formats[i]->get_text(0))) - formats[i]->set_checked(0,true); - } - image_formats->connect("item_edited",this,"_format_toggled"); - group_add->set_icon(get_icon("Add","EditorIcons")); - //group_del->set_icon(get_icon("Del","EditorIcons")); + patch_add->add_button(0,get_icon("folder","FileDialog"),1); - _update_group_list(); - _update_group(); - _update_group_tree(); + _fill_resource_tree(); - sample_mode->select( EditorImportExport::get_singleton()->sample_get_action() ); - sample_max_hz->set_value( EditorImportExport::get_singleton()->sample_get_max_hz() ); - sample_trim->set_pressed( EditorImportExport::get_singleton()->sample_get_trim() ); + updating=false; - sample_mode->connect("item_selected",this,"_sample_convert_edited"); - sample_max_hz->connect("value_changed",this,"_sample_convert_edited"); - sample_trim->connect("toggled",this,"_sample_convert_edited"); +} +void ProjectExportDialog::_patch_button_pressed(Object* p_item,int p_column,int p_id) { - } break; - case NOTIFICATION_EXIT_TREE: { - } break; - case MainLoop::NOTIFICATION_WM_FOCUS_IN: { - //something may have changed - _validate_platform(); + TreeItem *ti = (TreeItem*)p_item; - } break; - case NOTIFICATION_VISIBILITY_CHANGED: { - if (is_visible_in_tree()) - _validate_platform(); + patch_index=ti->get_metadata(0); - } break; - case NOTIFICATION_PROCESS: { + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND(current.is_null()); - } break; + if (p_id==0) { + Vector<String> patches = current->get_patches(); + ERR_FAIL_INDEX(patch_index,patches.size()); + patch_erase->set_text(vformat(TTR("Delete patch '"+patches[patch_index].get_file()+"' from list?"))); + patch_erase->popup_centered_minsize(); + } else { + patch_dialog->popup_centered_ratio(); } - } +void ProjectExportDialog::_patch_edited() { -void ProjectExportDialog::_validate_platform() { - - get_ok()->set_disabled(true); - button_export->set_disabled(true); - TreeItem *selected = platforms->get_selected(); - plat_errors->hide(); - if (!selected) { - return; - } - - String platform = selected->get_metadata(0); - Ref<EditorExportPlatform> exporter = EditorImportExport::get_singleton()->get_export_platform(platform); - if (!exporter.is_valid()) { + TreeItem *item = patches->get_edited(); + if (!item) return; - } + int index = item->get_metadata(0); - String err; - if (!exporter->can_export(&err)) { - Vector<String> items = err.strip_edges().split("\n"); - err=""; - for(int i=0;i<items.size();i++) { - if (i!=0) - err+="\n"; - err+=" -"+items[i]; - } + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND(current.is_null()); - platform_error_string->set_text(err); - plat_errors->show(); - return; - } + Vector<String> patches = current->get_patches(); - List<String> pl; - EditorFileSystem::get_singleton()->get_changed_sources(&pl); + ERR_FAIL_INDEX(index,patches.size()); - if (false && pl.size()) { - if (pl.size()==1) - platform_error_string->set_text(" -One Resource is pending re-import."); - else - platform_error_string->set_text(" "+itos(pl.size())+" Resources are pending re-import."); + String patch = patches[index].replace("*",""); - plat_errors->show(); - return; + if (item->is_checked(0)) { + patch+="*"; } - get_ok()->set_disabled(false); - button_export->set_disabled(false); - -} - -void ProjectExportDialog::_export_mode_changed(int p_idx) { - - if (EditorImportExport::get_singleton()->get_export_filter()==p_idx) - return; - EditorImportExport::get_singleton()->set_export_filter(EditorImportExport::ExportFilter(p_idx)); + current->set_patch(index,patch); - if (p_idx!=EditorImportExport::EXPORT_SELECTED) - tree_vb->hide(); - else - tree_vb->show(); - - EditorImportExport::get_singleton()->set_convert_text_scenes( convert_text_scenes->is_pressed() ); - _save_export_cfg(); } -void ProjectExportDialog::_export_action(const String& p_file) { +void ProjectExportDialog::_patch_selected(const String& p_path) { - String location = GlobalConfig::get_singleton()->globalize_path(p_file).get_base_dir().replace("\\","/"); - - while(true) { + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND(current.is_null()); - print_line("TESTING: "+location.plus_file("godot.cfg")); - if (FileAccess::exists(location.plus_file("godot.cfg"))) { + Vector<String> patches = current->get_patches(); - error->set_text(TTR("Please export outside the project folder!")); - error->popup_centered_minsize(); - return; - } - String nl = (location+"/..").simplify_path(); - if (nl.find("/")==location.find_last("/")) - break; - location=nl; - } + if (patch_index >=patches.size()) { - /* Checked if the export location is outside the project directory, - * now will check if a file name has been entered */ - if (p_file.ends_with("/")) { + current->add_patch(GlobalConfig::get_singleton()->get_resource_path().path_to(p_path)+"*"); + } else { + String enabled = patches[patch_index].ends_with("*") ? String("*") : String(); + current->set_patch(patch_index,GlobalConfig::get_singleton()->get_resource_path().path_to(p_path)+enabled); - error->set_text("Please enter a file name!"); - error->popup_centered_minsize(); - return; } - TreeItem *selected = platforms->get_selected(); - if (!selected) - return; - - String platform = selected->get_metadata(0); - bool debugging_enabled = EditorImportExport::get_singleton()->get_export_platform(platform)->is_debugging_enabled(); - Error err = export_platform(platform,p_file,debugging_enabled,file_export_password->get_text(),false); - if (err!=OK) { - error->set_text(TTR("Error exporting project!")); - error->popup_centered_minsize(); - } + _edit_preset(presets->get_current()); } -void ProjectExportDialog::_export_action_pck(const String& p_file) { - - TreeItem *selected = platforms->get_selected(); - if (!selected) - return; - - Ref<EditorExportPlatform> exporter = EditorImportExport::get_singleton()->get_export_platform(selected->get_metadata(0)); - if (exporter.is_null()) { - ERR_PRINT("Invalid platform for export of PCK"); - return; - } - - if (p_file.ends_with(".pck")) { - FileAccess *f = FileAccess::open(p_file,FileAccess::WRITE); - if (!f) { - error->set_text(TTR("Error writing the project PCK!")); - error->popup_centered_minsize(); - } - ERR_FAIL_COND(!f); - - Error err = exporter->save_pack(f,false); - memdelete(f); +void ProjectExportDialog::_patch_deleted() { - if (err!=OK) { - error->set_text(TTR("Error exporting project!")); - error->popup_centered_minsize(); - return; - } - } else if (p_file.ends_with(".zip")) { + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND(current.is_null()); - Error err = exporter->save_zip(p_file,false); + Vector<String> patches = current->get_patches(); + if (patch_index <patches.size()) { - if (err!=OK) { - error->set_text(TTR("Error exporting project!")); - error->popup_centered_minsize(); - return; - } + current->remove_patch(patch_index); + _edit_preset(presets->get_current()); } -} +} -Error ProjectExportDialog::export_platform(const String& p_platform, const String& p_path, bool p_debug,const String& p_password, bool p_quit_after) { +void ProjectExportDialog::_runnable_pressed() { - Ref<EditorExportPlatform> exporter = EditorImportExport::get_singleton()->get_export_platform(p_platform); - if (exporter.is_null()) { - ERR_PRINT("Invalid platform for export"); + if (updating) + return; - List<StringName> platforms; - EditorImportExport::get_singleton()->get_export_platforms(&platforms); - print_line("Valid export plaftorms are:"); - for (List<StringName>::Element *E=platforms.front();E;E=E->next()) - print_line(" \""+E->get()+"\""); + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND(current.is_null()); - if (p_quit_after) { - OS::get_singleton()->set_exit_code(255); - get_tree()->quit(); - } + if (runnable->is_pressed()) { - return ERR_INVALID_PARAMETER; - } - Error err = exporter->export_project(p_path,p_debug); - if (err!=OK) { - error->set_text(TTR("Error exporting project!")); - error->popup_centered_minsize(); - ERR_PRINT("Exporting failed!"); - if (p_quit_after) { - OS::get_singleton()->set_exit_code(255); - get_tree()->quit(); + for(int i=0;i<EditorExport::get_singleton()->get_export_preset_count();i++) { + Ref<EditorExportPreset> p = EditorExport::get_singleton()->get_export_preset(i); + if (p->get_platform()==current->get_platform()) { + p->set_runnable(current==p); + } } - return ERR_CANT_CREATE; } else { - if (p_quit_after) { - get_tree()->quit(); - } - } - - return OK; - -} -void ProjectExportDialog::ok_pressed() { - //export pck - pck_export->popup_centered_ratio(); + current->set_runnable(false); + } + _update_presets(); } -void ProjectExportDialog::custom_action(const String&) { - //real export - - TreeItem *selected = platforms->get_selected(); - if (!selected) - return; - String platform = selected->get_metadata(0); - Ref<EditorExportPlatform> exporter = EditorImportExport::get_singleton()->get_export_platform(platform); +void ProjectExportDialog::_name_changed(const String& p_string) { - if (exporter.is_null()) { - error->set_text(vformat(TTR("No exporter for platform '%s' yet."),platform)); - error->popup_centered_minsize(); - return; - } - - if (platform.to_lower()=="android" && _check_android_setting(exporter)==false){ - // not filled all field for Android release + if (updating) return; - } - - String extension = exporter->get_binary_extension(); - file_export_password->set_editable( exporter->requires_password(exporter->is_debugging_enabled()) ); + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND(current.is_null()); - file_export->clear_filters(); - if (extension!="") { - file_export->add_filter("*."+extension); - } - file_export->popup_centered_ratio(); + current->set_name(p_string); + _update_presets(); } -LineEdit* ProjectExportDialog::_create_keystore_input(Control* container, const String& p_label, const String& name) { - - HBoxContainer* hb=memnew(HBoxContainer); - Label* lb=memnew(Label); - LineEdit* input=memnew(LineEdit); +void ProjectExportDialog::_delete_preset() { - lb->set_text(p_label); - lb->set_custom_minimum_size(Size2(140*EDSCALE,0)); - lb->set_align(Label::ALIGN_RIGHT); - - input->set_custom_minimum_size(Size2(170*EDSCALE,0)); - input->set_name(name); - - hb->add_constant_override("separation", 10*EDSCALE); - hb->add_child(lb); - hb->add_child(input); - container->add_child(hb); + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + if (current.is_null()) + return; - return input; + delete_confirm->set_text(vformat(TTR("Delete preset '%s'?"),current->get_name())); + delete_confirm->popup_centered_minsize(); } -void ProjectExportDialog::_create_android_keystore_window() { - - keystore_file_dialog = memnew( EditorFileDialog ); - add_child(keystore_file_dialog); - keystore_file_dialog->set_mode(EditorFileDialog::MODE_OPEN_DIR); - keystore_file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); - keystore_file_dialog->set_current_dir( "res://" ); - - keystore_file_dialog->set_title(TTR("Target Path:")); - keystore_file_dialog->connect("dir_selected", this,"_keystore_dir_selected"); - - keystore_create_dialog=memnew(ConfirmationDialog); - VBoxContainer* vb=memnew(VBoxContainer); - vb->set_size(Size2(340*EDSCALE,0)); - keystore_create_dialog->set_title(TTR("Create Android keystore")); - - _create_keystore_input(vb, TTR("Full name"), "name"); - _create_keystore_input(vb, TTR("Organizational unit"), "unit"); - _create_keystore_input(vb, TTR("Organization"), "org"); - _create_keystore_input(vb, TTR("City"), "city"); - _create_keystore_input(vb, TTR("State"), "state"); - _create_keystore_input(vb, TTR("2 letter country code"), "code"); - _create_keystore_input(vb, TTR("User alias"), "alias"); - LineEdit* pass=_create_keystore_input(vb, TTR("Password"), "pass"); - pass->set_placeholder(TTR("at least 6 characters")); - _create_keystore_input(vb, TTR("File name"), "file"); - - Label* lb_path=memnew(Label); - LineEdit* path=memnew(LineEdit); - Button* btn=memnew(Button); - HBoxContainer* hb=memnew(HBoxContainer); - - lb_path->set_text(TTR("Path : (better to save outside of project)")); - path->set_h_size_flags(SIZE_EXPAND_FILL); - path->set_name("path"); - btn->set_text(" .. "); - btn->connect("pressed", keystore_file_dialog, "popup_centered_ratio"); - - vb->add_spacer(); - vb->add_child(lb_path); - hb->add_child(path); - hb->add_child(btn); - vb->add_child(hb); - - keystore_create_dialog->add_child(vb); - //keystore_create_dialog->set_child_rect(vb); - add_child(keystore_create_dialog); - - keystore_create_dialog->connect("confirmed", this, "_create_android_keystore"); - path->connect("text_changed", this, "_check_keystore_path"); - - confirm_keystore = memnew(ConfirmationDialog); - confirm_keystore->connect("confirmed", keystore_create_dialog, "popup_centered_minsize"); - add_child(confirm_keystore); +void ProjectExportDialog::_delete_preset_confirm() { + int idx = presets->get_current(); + parameters->edit(NULL);//to avoid crash + EditorExport::get_singleton()->remove_export_preset(idx); + _update_presets(); + _edit_preset(-1); } -void ProjectExportDialog::_keystore_dir_selected(const String& path) { - - LineEdit* edit=keystore_create_dialog->find_node("path", true, false)->cast_to<LineEdit>(); - edit->set_text(path.simplify_path()); -} +Variant ProjectExportDialog::get_drag_data_fw(const Point2& p_point,Control* p_from) { -void ProjectExportDialog::_keystore_created() { + if (p_from==presets) { + int pos = presets->get_item_at_pos(p_point,true); - if (error->is_connected("popup_hide", this, "_keystore_created")){ - error->disconnect("popup_hide", this, "_keystore_created"); - } - custom_action("export_pck"); + if (pos>=0) { + Dictionary d; + d["type"]="export_preset"; + d["preset"]=pos; -} + HBoxContainer *drag = memnew( HBoxContainer); + TextureRect *tr = memnew(TextureRect); + tr->set_texture(presets->get_item_icon(pos)); + drag->add_child(tr); + Label *label = memnew( Label ); + label->set_text(presets->get_item_text(pos)); + drag->add_child(label); -void ProjectExportDialog::_check_keystore_path(const String& path) { + set_drag_preview(drag); - LineEdit* edit=keystore_create_dialog->find_node("path", true, false)->cast_to<LineEdit>(); - bool exists = DirAccess::exists(path); - if (!exists) { - edit->add_color_override("font_color", Color(1,0,0,1)); - } else { - edit->add_color_override("font_color", Color(0,1,0,1)); - } + return d; -} + } + } else if (p_from==patches) { -void ProjectExportDialog::_create_android_keystore() { + TreeItem *item = patches->get_item_at_pos(p_point); - Vector<String> names=String("name,unit,org,city,state,code,alias,pass").split(","); - String path=keystore_create_dialog->find_node("path", true, false)->cast_to<LineEdit>()->get_text(); - String file=keystore_create_dialog->find_node("file", true, false)->cast_to<LineEdit>()->get_text(); + if (item && item->get_cell_mode(0)==TreeItem::CELL_MODE_CHECK) { - if (file.ends_with(".keystore")==false) { - file+=".keystore"; - } - String fullpath=path.plus_file(file); - String info="CN=$name, OU=$unit, O=$org, L=$city, S=$state, C=$code"; - Dictionary dic; - - for (int i=0;i<names.size();i++){ - LineEdit* edit = keystore_create_dialog->find_node(names[i], true, false)->cast_to<LineEdit>(); - dic[names[i]]=edit->get_text(); - info=info.replace("$"+names[i], edit->get_text()); - } + int metadata = item->get_metadata(0); + Dictionary d; + d["type"]="export_patch"; + d["patch"]=metadata; - String jarsigner=EditorSettings::get_singleton()->get("export/android/jarsigner"); - String keytool=jarsigner.get_base_dir().plus_file("keytool"); - String os_name=OS::get_singleton()->get_name(); - if (os_name.to_lower()=="windows") { - keytool+=".exe"; - } + Label *label = memnew( Label ); + label->set_text(item->get_text(0)); + set_drag_preview(label); - bool exist=FileAccess::exists(keytool); - if (!exist) { - error->set_text("Can't find 'keytool'"); - error->popup_centered_minsize(); - return; - } + return d; + } - List<String> args; - args.push_back("-genkey"); - args.push_back("-v"); - args.push_back("-keystore"); - args.push_back(fullpath); - args.push_back("-alias"); - args.push_back(dic["alias"]); - args.push_back("-storepass"); - args.push_back(dic["pass"]); - args.push_back("-keypass"); - args.push_back(dic["pass"]); - args.push_back("-keyalg"); - args.push_back("RSA"); - args.push_back("-keysize"); - args.push_back("2048"); - args.push_back("-validity"); - args.push_back("10000"); - args.push_back("-dname"); - args.push_back(info); - int retval; - OS::get_singleton()->execute(keytool,args,true,NULL,NULL,&retval); - - if (retval==0) { // success - platform_options->_edit_set("keystore/release", fullpath); - platform_options->_edit_set("keystore/release_user", dic["alias"]); - platform_options->_edit_set("keystore/release_password", dic["pass"]); - - error->set_text("Android keystore created at \n"+fullpath); - error->connect("popup_hide", this, "_keystore_created"); - error->popup_centered_minsize(); - } else { // fail - error->set_text("Fail to create android keystore at \n"+fullpath); - error->popup_centered_minsize(); } + return Variant(); } -bool ProjectExportDialog::_check_android_setting(const Ref<EditorExportPlatform>& exporter) { - - bool is_debugging = exporter->get("debug/debugging_enabled"); - String release = exporter->get("keystore/release"); - String user = exporter->get("keystore/release_user"); - String password = exporter->get("keystore/release_password"); - - if (!is_debugging && (release=="" || user=="" || password=="")){ - if (release==""){ - confirm_keystore->set_text(TTR("Release keystore is not set.\nDo you want to create one?")); - confirm_keystore->popup_centered_minsize(); - } else { - error->set_text(TTR("Fill Keystore/Release User and Release Password")); - error->popup_centered_minsize(); - } - return false; - } - - return true; +bool ProjectExportDialog::can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const{ -} + if (p_from==presets) { + Dictionary d = p_data; + if (!d.has("type") || String(d["type"])!="export_preset") + return false; -void ProjectExportDialog::_group_selected() { + if (presets->get_item_at_pos(p_point,true)<0 && !presets->is_pos_at_end_of_items(p_point)) + return false; + } else if (p_from==patches) { - _update_group(); //? + Dictionary d = p_data; + if (!d.has("type") || String(d["type"])!="export_patch") + return false; - _update_group_tree(); -} + patches->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM); -String ProjectExportDialog::_get_selected_group() { + TreeItem *item = patches->get_item_at_pos(p_point); - TreeItem *sel = groups->get_selected(); - if (!sel) - return String(); + if (!item) { - return sel->get_text(0); + return false; + } + } + return true; } -void ProjectExportDialog::_update_group_list() { - - String current = _get_selected_group(); +void ProjectExportDialog::drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from){ - groups->clear(); - List<StringName> grouplist; - EditorImportExport::get_singleton()->image_export_get_groups(&grouplist); - grouplist.sort_custom<StringName::AlphCompare>(); + if (p_from==presets) { + Dictionary d=p_data; + int from_pos = d["preset"]; - TreeItem *r = groups->create_item(); - for (List<StringName>::Element *E=grouplist.front();E;E=E->next()) { + int to_pos=-1; - TreeItem *ti = groups->create_item(r); - ti->set_text(0,E->get()); - ti->add_button(0,get_icon("Remove","EditorIcons")); - if (E->get()==current) { - ti->select(0); + if (presets->get_item_at_pos(p_point,true)>=0) { + to_pos = presets->get_item_at_pos(p_point,true); } - } - - _update_group(); -} - -void ProjectExportDialog::_select_group(const String& p_by_name) { - - TreeItem *c = groups->get_root(); - if (!c) - return; - c=c->get_children(); - if (!c) - return; - - while(c) { + if (to_pos==-1 && !presets->is_pos_at_end_of_items(p_point)) + return; - if (c->get_text(0)==p_by_name) { - c->select(0); - _update_group(); + if (to_pos==from_pos) return; + else if (to_pos>from_pos) { + to_pos--; } - c=c->get_next(); - } -} - -void ProjectExportDialog::_update_group() { - - if (updating) - return; - updating=true; - if (_get_selected_group()=="") { - group_options->hide(); - //group_del->set_disabled(true); + Ref<EditorExportPreset> preset = EditorExport::get_singleton()->get_export_preset(from_pos); + EditorExport::get_singleton()->remove_export_preset(from_pos); + EditorExport::get_singleton()->add_export_preset(preset,to_pos); - } else { - group_options->show(); - //group_del->set_disabled(false); - StringName name = _get_selected_group(); - group_image_action->select(EditorImportExport::get_singleton()->image_export_group_get_image_action(name)); - group_atlas->set_pressed(EditorImportExport::get_singleton()->image_export_group_get_make_atlas(name)); - group_shrink->set_value(EditorImportExport::get_singleton()->image_export_group_get_shrink(name)); - group_lossy_quality->set_value(EditorImportExport::get_singleton()->image_export_group_get_lossy_quality(name)); - if (group_atlas->is_pressed()) - atlas_preview->show(); + _update_presets(); + if (to_pos>=0) + _edit_preset(to_pos); else - atlas_preview->hide(); - - } - - _update_group_tree(); - - updating=false; + _edit_preset(presets->get_item_count()-1); + } else if (p_from==patches) { + Dictionary d = p_data; + if (!d.has("type") || String(d["type"])!="export_patch") + return; -} + int from_pos = d["patch"]; -bool ProjectExportDialog::_update_group_treef(TreeItem *p_parent,EditorFileSystemDirectory *p_dir,const Set<String>& p_extensions,const String& p_groups,const Map<StringName,int>& p_group_index) { + TreeItem *item = patches->get_item_at_pos(p_point); + if (!item) + return; - TreeItem *ti = group_images->create_item(p_parent); - ti->set_text(0,p_dir->get_name()+"/"); - bool has_child=false; - for(int i=0;i<p_dir->get_subdir_count();i++) { + int to_pos = item->get_cell_mode(0)==TreeItem::CELL_MODE_CHECK ? int(item->get_metadata(0)) : -1; - if (_update_group_treef(ti,p_dir->get_subdir(i),p_extensions,p_groups,p_group_index)) { - has_child=true; + if (to_pos==from_pos) + return; + else if (to_pos>from_pos) { + to_pos--; } - } - - String filter=group_images_filter->get_text(); - StringName current_group = _get_selected_group(); - String check_text=TTR("Include"); - - for(int i=0;i<p_dir->get_file_count();i++) { - - String fname = p_dir->get_file(i); - if (p_extensions.has(fname.to_lower().get_extension())) { - String path = p_dir->get_file_path(i); - - if (filter!=String() && path.find(filter)==-1) - continue; - - has_child=true; - TreeItem *file = group_images->create_item(ti); - file->set_text(0,fname); - StringName g = EditorImportExport::get_singleton()->image_get_export_group(path); - - if (current_group==g || g==StringName()) { - - file->set_cell_mode(1,TreeItem::CELL_MODE_CHECK); - file->set_text(1,check_text); - file->set_editable(1,true); - file->set_checked(1,current_group==g); - } else { - - file->set_text(1,g); - file->set_editable(1,false); - file->set_selectable(1,false); - } + Ref<EditorExportPreset> preset = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + String patch = preset->get_patch(from_pos); + preset->remove_patch(from_pos); + preset->add_patch(patch,to_pos); - file->set_metadata(0,path); - } - } + _edit_preset(presets->get_current()); - if (!has_child) { - memdelete(ti); - return false; } - return true; - } -void ProjectExportDialog::_update_group_tree() { + +void ProjectExportDialog::_export_type_changed(int p_which) { if (updating) return; - group_images->clear(); - - if (_get_selected_group()=="") + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + if (current.is_null()) return; + current->set_export_filter(EditorExportPreset::ExportFilter(p_which)); updating=true; - print_line("****UGT"); - List<String> img_extensions; - ImageLoader::get_recognized_extensions(&img_extensions); - Set<String> extensions; - for(List<String>::Element *E=img_extensions.front();E;E=E->next()) { - - extensions.insert(E->get()); - } - - List<StringName> grouplist; - EditorImportExport::get_singleton()->image_export_get_groups(&grouplist); - grouplist.sort_custom<StringName::AlphCompare>(); - Map<StringName,int> group_index; - group_index[StringName()]=0; - int idx=1; - String groupenum="--"; - for(List<StringName>::Element *E=grouplist.front();E;E=E->next()) { - - group_index[E->get()]=idx++; - groupenum+=","+String(E->get()); - } - + _fill_resource_tree(); updating=false; - - _update_group_treef(NULL,EditorFileSystem::get_singleton()->get_filesystem(),extensions,groupenum,group_index); - } -void ProjectExportDialog::_group_changed(Variant v) { +void ProjectExportDialog::_filter_changed(const String& p_filter) { if (updating) return; - if (_get_selected_group()=="") - return; - updating=true; - StringName name = _get_selected_group(); - EditorNode::get_undo_redo()->create_action(TTR("Change Image Group")); - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"image_export_group_set_image_action",name,group_image_action->get_selected()); - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"image_export_group_set_make_atlas",name,group_atlas->is_pressed()); - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"image_export_group_set_shrink",name,group_shrink->get_value()); - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"image_export_group_set_lossy_quality",name,group_lossy_quality->get_value()); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_export_group_set_image_action",name,EditorImportExport::get_singleton()->image_export_group_get_image_action(name)); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_export_group_set_make_atlas",name,EditorImportExport::get_singleton()->image_export_group_get_make_atlas(name)); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_export_group_set_shrink",name,EditorImportExport::get_singleton()->image_export_group_get_shrink(name)); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_export_group_set_lossy_quality",name,EditorImportExport::get_singleton()->image_export_group_get_lossy_quality(name)); - EditorNode::get_undo_redo()->add_do_method(this,"_update_group"); - EditorNode::get_undo_redo()->add_undo_method(this,"_update_group"); - EditorNode::get_undo_redo()->add_do_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->add_undo_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->commit_action(); - updating=false; - // update atlas preview button - _update_group(); -} - -void ProjectExportDialog::_group_item_edited() { - TreeItem *item = group_images->get_edited(); - if (!item) - return; - if (_get_selected_group()==String()) + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + if (current.is_null()) return; - StringName path = item->get_metadata(0); - String group; - if (item->is_checked(1)) { - group=_get_selected_group(); - } else { - group=String(); - } + current->set_include_filter(include_filters->get_text()); + current->set_exclude_filter(exclude_filters->get_text()); + - print_line("changed "+path+" to group: "+group); - EditorNode::get_undo_redo()->create_action(TTR("Change Image Group")); - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"image_add_to_export_group",path,group); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_add_to_export_group",path,EditorImportExport::get_singleton()->image_get_export_group(path)); - EditorNode::get_undo_redo()->add_undo_method(this,"_update_group_tree"); - EditorNode::get_undo_redo()->add_do_method(this,"_update_group_tree"); - EditorNode::get_undo_redo()->add_do_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->add_undo_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->commit_action(); } -void ProjectExportDialog::_group_add() { +void ProjectExportDialog::_fill_resource_tree() { - String name = group_new_name->get_text(); + include_files->clear(); + include_label->hide(); + include_margin->hide(); - if (name=="") { - group_new_name_error->show(); - group_new_name_error->set_text(TTR("Group name can't be empty!")); - return; - } - if (name.find("/")!=-1 || name.find(":")!=-1 || name.find(",")!=-1 || name.find("-")!=-1) { - group_new_name_error->set_text(TTR("Invalid character in group name!")); - group_new_name_error->show(); + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + if (current.is_null()) return; - } - if (EditorImportExport::get_singleton()->image_export_has_group(name)) { - group_new_name_error->set_text(TTR("Group name already exists!")); - group_new_name_error->show(); + EditorExportPreset::ExportFilter f = current->get_export_filter(); + + if (f==EditorExportPreset::EXPORT_ALL_RESOURCES) { return; } - group_new_name_error->hide(); - String current=_get_selected_group(); + include_label->show(); + include_margin->show(); + TreeItem *root = include_files->create_item(); - EditorNode::get_undo_redo()->create_action(TTR("Add Image Group")); - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"image_export_group_create",name); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_export_group_remove",name); - EditorNode::get_undo_redo()->add_do_method(this,"_update_group_list"); - EditorNode::get_undo_redo()->add_undo_method(this,"_update_group_list"); - EditorNode::get_undo_redo()->add_do_method(this,"_select_group",name); - if (current!="") - EditorNode::get_undo_redo()->add_undo_method(this,"_select_group",current); - EditorNode::get_undo_redo()->add_undo_method(this,"_update_group_tree"); - EditorNode::get_undo_redo()->add_do_method(this,"_update_group_tree"); - EditorNode::get_undo_redo()->add_do_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->add_undo_method(this,"_save_export_cfg"); - - EditorNode::get_undo_redo()->commit_action(); + _fill_tree(EditorFileSystem::get_singleton()->get_filesystem(),root,current,f==EditorExportPreset::EXPORT_SELECTED_SCENES); } -void ProjectExportDialog::_group_del(Object *p_item, int p_column, int p_button){ +bool ProjectExportDialog::_fill_tree(EditorFileSystemDirectory *p_dir,TreeItem *p_item,Ref<EditorExportPreset> ¤t,bool p_only_scenes) { - TreeItem *item = p_item->cast_to<TreeItem>(); - if (!item) - return; - String name = item->get_text(0); - - EditorNode::get_undo_redo()->create_action(TTR("Delete Image Group")); - List<StringName> images_used; - EditorImportExport::get_singleton()->image_export_get_images_in_group(name,&images_used); - for (List<StringName>::Element*E=images_used.front();E;E=E->next()) { + p_item->set_icon(0,get_icon("folder","FileDialog")); + p_item->set_text(0,p_dir->get_name()+"/"); - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"image_add_to_export_group",E->get(),StringName()); - - } - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"image_export_group_remove",name); - - - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_export_group_create",name); - for (List<StringName>::Element*E=images_used.front();E;E=E->next()) { - - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_add_to_export_group",E->get(),name); + bool used=false; + for(int i=0;i<p_dir->get_subdir_count();i++) { + TreeItem *subdir = include_files->create_item(p_item); + if (_fill_tree(p_dir->get_subdir(i),subdir,current,p_only_scenes)==false) { + memdelete(subdir); + } else { + used=true; + } } - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_export_group_set_image_action",name,EditorImportExport::get_singleton()->image_export_group_get_image_action(name)); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_export_group_set_make_atlas",name,EditorImportExport::get_singleton()->image_export_group_get_make_atlas(name)); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_export_group_set_shrink",name,EditorImportExport::get_singleton()->image_export_group_get_shrink(name)); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_export_group_set_lossy_quality",name,EditorImportExport::get_singleton()->image_export_group_get_lossy_quality(name)); - EditorNode::get_undo_redo()->add_do_method(this,"_update_group_list"); - EditorNode::get_undo_redo()->add_do_method(this,"_update_group"); - EditorNode::get_undo_redo()->add_undo_method(this,"_update_group_list"); - EditorNode::get_undo_redo()->add_undo_method(this,"_select_group",name); - EditorNode::get_undo_redo()->add_do_method(this,"_update_group_tree"); - EditorNode::get_undo_redo()->add_undo_method(this,"_update_group_tree"); - EditorNode::get_undo_redo()->add_do_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->add_undo_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->commit_action(); - -} - -void ProjectExportDialog::_group_select_all() { - - - String group = _get_selected_group(); - if (group=="") - return; - - TreeItem *item = group_images->get_root(); - if (!item) - return; - - List<StringName> items; - while(item) { + for(int i=0;i<p_dir->get_file_count();i++) { - if (item->get_cell_mode(1)==TreeItem::CELL_MODE_CHECK && !item->is_checked(1)) - items.push_back(item->get_metadata(0)); - item=item->get_next_visible(); - } + String type = p_dir->get_file_type(i); + if (p_only_scenes && type!="PackedScene") + continue; + TreeItem *file = include_files->create_item(p_item); + file->set_cell_mode(0,TreeItem::CELL_MODE_CHECK); + file->set_text(0,p_dir->get_file(i)); - if (items.size()==0) - return; + Ref<Texture> tex; + if (has_icon(type,editor_icons)) { + tex = get_icon(type,editor_icons); + } else { + tex = get_icon("Object",editor_icons); + } - EditorNode::get_undo_redo()->create_action(TTR("Select All")); + String path = p_dir->get_file_path(i); - for (List<StringName>::Element *E=items.front();E;E=E->next()) { + file->set_icon(0,tex); + file->set_editable(0,true); + file->set_checked(0,current->has_export_file(path)); + file->set_metadata(0,path); - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"image_add_to_export_group",E->get(),group); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_add_to_export_group",E->get(),String()); + used=true; } - EditorNode::get_undo_redo()->add_do_method(this,"_update_group_tree"); - EditorNode::get_undo_redo()->add_undo_method(this,"_update_group_tree"); - EditorNode::get_undo_redo()->add_do_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->add_undo_method(this,"_save_export_cfg"); - - EditorNode::get_undo_redo()->commit_action(); + return used; } -void ProjectExportDialog::_group_select_none(){ +void ProjectExportDialog::_tree_changed() { - String group = _get_selected_group(); - if (group=="") + if (updating) return; - TreeItem *item = group_images->get_root(); - if (!item) + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + if (current.is_null()) return; - List<StringName> items; - while(item) { - - if (item->get_cell_mode(1)==TreeItem::CELL_MODE_CHECK && item->is_checked(1)) - items.push_back(item->get_metadata(0)); - item=item->get_next_visible(); - } - - - if (items.size()==0) + TreeItem *item = include_files->get_edited(); + if (!item) return; - EditorNode::get_undo_redo()->create_action(TTR("Select All")); + String path = item->get_metadata(0); + bool added = item->is_checked(0); - for (List<StringName>::Element *E=items.front();E;E=E->next()) { - - EditorNode::get_undo_redo()->add_do_method(EditorImportExport::get_singleton(),"image_add_to_export_group",E->get(),String()); - EditorNode::get_undo_redo()->add_undo_method(EditorImportExport::get_singleton(),"image_add_to_export_group",E->get(),group); + if (added) { + current->add_export_file(path); + } else { + current->remove_export_file(path); } - EditorNode::get_undo_redo()->add_do_method(this,"_update_group_tree"); - EditorNode::get_undo_redo()->add_undo_method(this,"_update_group_tree"); - EditorNode::get_undo_redo()->add_do_method(this,"_save_export_cfg"); - EditorNode::get_undo_redo()->add_undo_method(this,"_save_export_cfg"); - - EditorNode::get_undo_redo()->commit_action(); - } -void ProjectExportDialog::_group_atlas_preview() { - - StringName group = _get_selected_group(); - if (!group) - return; - - atlas_preview_frame->set_texture(Ref<Texture>()); //clear previous - - List<StringName> images; - EditorImportExport::get_singleton()->image_export_get_images_in_group(group,&images); - images.sort_custom<StringName::AlphCompare>(); - String dst_file = EditorSettings::get_singleton()->get_settings_path()+"/tmp/atlas-preview.tex"; - Ref<ResourceImportMetadata> imd = memnew( ResourceImportMetadata ); - //imd->set_editor(); - - for (List<StringName>::Element *F=images.front();F;F=F->next()) { - - imd->add_source(EditorImportPlugin::validate_source_path(F->get())); - } - - - int flags=0; - - if (GlobalConfig::get_singleton()->get("image_loader/filter")) - flags|=EditorTextureImportPlugin::IMAGE_FLAG_FILTER; - if (!GlobalConfig::get_singleton()->get("image_loader/gen_mipmaps")) - flags|=EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS; - if (!GlobalConfig::get_singleton()->get("image_loader/repeat")) - flags|=EditorTextureImportPlugin::IMAGE_FLAG_REPEAT; - - flags|=EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA; - - imd->set_option("format",EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSLESS); - imd->set_option("flags",flags); - imd->set_option("quality",0.7); - imd->set_option("atlas",true); - imd->set_option("crop",true); - - Ref<EditorTextureImportPlugin> plugin = EditorImportExport::get_singleton()->get_import_plugin_by_name("texture"); - Error err = plugin->import2(dst_file,imd,EditorExportPlatform::IMAGE_COMPRESSION_NONE,true); - if (err) { - - EditorNode::add_io_error(TTR("Error saving atlas:")+" "+dst_file.get_file()); - return; - } - - Ref<Texture> tex = ResourceLoader::load(dst_file); - atlas_preview_frame->set_texture(tex); //clear previous - atlas_preview_dialog->set_title(TTR("Atlas Preview")+" ("+itos(tex->get_width())+"x"+itos(tex->get_height())+")"); - atlas_preview_dialog->popup_centered_ratio(0.9); +void ProjectExportDialog::_export_pck_zip() { + export_pck_zip->popup_centered_ratio(); } -void ProjectExportDialog::_update_script() { +void ProjectExportDialog::_export_pck_zip_selected(const String& p_path) { - if (updating_script) - return; - updating_script=true; - script_mode->select(EditorImportExport::get_singleton()->script_get_action()); - script_key->set_text(EditorImportExport::get_singleton()->script_get_encryption_key()); - updating_script=false; + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND (current.is_null()); + Ref<EditorExportPlatform> platform = current->get_platform(); + ERR_FAIL_COND( platform.is_null() ); + if (p_path.ends_with(".zip")) { + platform->save_zip(current,p_path); + } else if (p_path.ends_with(".pck")) { + platform->save_pack(current,p_path); + } } -void ProjectExportDialog::_image_filter_changed(String) { - - _update_group_tree(); -} void ProjectExportDialog::_bind_methods() { - - ClassDB::bind_method(D_METHOD("_rescan"),&ProjectExportDialog::_rescan); - ClassDB::bind_method(D_METHOD("_tree_changed"),&ProjectExportDialog::_tree_changed); - ClassDB::bind_method(D_METHOD("_scan_finished"),&ProjectExportDialog::_scan_finished); - ClassDB::bind_method(D_METHOD("_platform_selected"),&ProjectExportDialog::_platform_selected); - ClassDB::bind_method(D_METHOD("_prop_edited"),&ProjectExportDialog::_prop_edited); - ClassDB::bind_method(D_METHOD("_export_mode_changed"),&ProjectExportDialog::_export_mode_changed); - ClassDB::bind_method(D_METHOD("_filters_edited"),&ProjectExportDialog::_filters_edited); - ClassDB::bind_method(D_METHOD("_filters_exclude_edited"),&ProjectExportDialog::_filters_exclude_edited); - ClassDB::bind_method(D_METHOD("_export_action"),&ProjectExportDialog::_export_action); - ClassDB::bind_method(D_METHOD("_export_action_pck"),&ProjectExportDialog::_export_action_pck); - ClassDB::bind_method(D_METHOD("_quality_edited"),&ProjectExportDialog::_quality_edited); - ClassDB::bind_method(D_METHOD("_shrink_edited"),&ProjectExportDialog::_shrink_edited); - ClassDB::bind_method(D_METHOD("_image_export_edited"),&ProjectExportDialog::_image_export_edited); - ClassDB::bind_method(D_METHOD("_format_toggled"),&ProjectExportDialog::_format_toggled); - ClassDB::bind_method(D_METHOD("_group_changed"),&ProjectExportDialog::_group_changed); - ClassDB::bind_method(D_METHOD("_group_add"),&ProjectExportDialog::_group_add); - ClassDB::bind_method(D_METHOD("_group_del"),&ProjectExportDialog::_group_del); - ClassDB::bind_method(D_METHOD("_group_selected"),&ProjectExportDialog::_group_selected); - ClassDB::bind_method(D_METHOD("_update_group"),&ProjectExportDialog::_update_group); - ClassDB::bind_method(D_METHOD("_update_group_list"),&ProjectExportDialog::_update_group_list); - ClassDB::bind_method(D_METHOD("_select_group"),&ProjectExportDialog::_select_group); - ClassDB::bind_method(D_METHOD("_update_group_tree"),&ProjectExportDialog::_update_group_tree); - ClassDB::bind_method(D_METHOD("_group_item_edited"),&ProjectExportDialog::_group_item_edited); - ClassDB::bind_method(D_METHOD("_save_export_cfg"),&ProjectExportDialog::_save_export_cfg); - ClassDB::bind_method(D_METHOD("_image_filter_changed"),&ProjectExportDialog::_image_filter_changed); - ClassDB::bind_method(D_METHOD("_group_atlas_preview"),&ProjectExportDialog::_group_atlas_preview); - ClassDB::bind_method(D_METHOD("_group_select_all"),&ProjectExportDialog::_group_select_all); - ClassDB::bind_method(D_METHOD("_group_select_none"),&ProjectExportDialog::_group_select_none); - ClassDB::bind_method(D_METHOD("_script_edited"),&ProjectExportDialog::_script_edited); - ClassDB::bind_method(D_METHOD("_update_script"),&ProjectExportDialog::_update_script); - ClassDB::bind_method(D_METHOD("_sample_convert_edited"),&ProjectExportDialog::_sample_convert_edited); - - - ClassDB::bind_method(D_METHOD("export_platform"),&ProjectExportDialog::export_platform); - ClassDB::bind_method(D_METHOD("_create_android_keystore"),&ProjectExportDialog::_create_android_keystore); - ClassDB::bind_method(D_METHOD("_check_keystore_path"),&ProjectExportDialog::_check_keystore_path); - ClassDB::bind_method(D_METHOD("_keystore_dir_selected"),&ProjectExportDialog::_keystore_dir_selected); - ClassDB::bind_method(D_METHOD("_keystore_created"),&ProjectExportDialog::_keystore_created); - - - //ADD_SIGNAL(MethodInfo("instance")); - //ADD_SIGNAL(MethodInfo("open")); - -} - - -ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) { - - editor=p_editor; - set_title(TTR("Project Export Settings")); - - sections = memnew( TabContainer ); - add_child(sections); - //set_child_rect(sections); - - VBoxContainer *pvbox = memnew( VBoxContainer ); - sections->add_child(pvbox); - pvbox->set_name(TTR("Target")); - - HBoxContainer *phbox = memnew( HBoxContainer ); - pvbox->add_child(phbox); - phbox->set_v_size_flags(SIZE_EXPAND_FILL); - - plat_errors = memnew( HBoxContainer ); - pvbox->add_child(plat_errors); - platform_error_string = memnew( Label ); - platform_error_string->set_h_size_flags(SIZE_EXPAND_FILL); - plat_errors->add_child(platform_error_string); - - VBoxContainer *vb = memnew( VBoxContainer ); - vb->set_h_size_flags(SIZE_EXPAND_FILL); - vb->set_v_size_flags(SIZE_EXPAND_FILL); - phbox->add_child(vb); - platforms = memnew( Tree ); - platforms->set_hide_root(true); - vb->add_margin_child(TTR("Export to Platform"),platforms,true); - - platforms->connect("cell_selected",this,"_platform_selected"); - - - vb = memnew(VBoxContainer ); - phbox->add_child(vb); - vb->set_h_size_flags(SIZE_EXPAND_FILL); - vb->set_v_size_flags(SIZE_EXPAND_FILL); - platform_options = memnew( PropertyEditor() ); - platform_options->hide_top_label(); - vb->add_margin_child(TTR("Options"),platform_options,true); - platform_options->connect("property_edited",this,"_prop_edited"); - - - - ////////////////// - - vb = memnew( VBoxContainer ); - vb->set_name(TTR("Resources")); - sections->add_child(vb); - - export_mode = memnew( OptionButton ); - export_mode->add_item(TTR("Export selected resources (including dependencies).")); - export_mode->add_item(TTR("Export all resources in the project.")); - export_mode->add_item(TTR("Export all files in the project directory.")); - export_mode->connect("item_selected",this,"_export_mode_changed"); - - vb->add_margin_child(TTR("Export Mode:"),export_mode); - - - - tree_vb = memnew( VBoxContainer ); - vb->add_child(tree_vb); - tree_vb->set_v_size_flags(SIZE_EXPAND_FILL); - - tree = memnew( Tree ); - tree_vb->add_margin_child(TTR("Resources to Export:"),tree,true); - - tree->set_v_size_flags(SIZE_EXPAND_FILL); - tree->connect("item_edited",this,"_tree_changed"); - tree->set_columns(2); - tree->set_column_titles_visible(true); - tree->set_column_title(0,TTR("File")); - tree->set_column_title(1,TTR("Action")); - tree->set_column_expand(1,false); - tree->set_column_min_width(1,90); - - filters = memnew( LineEdit ); - vb->add_margin_child(TTR("Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"),filters); - filters->connect("text_changed",this,"_filters_edited"); - filters_exclude = memnew( LineEdit ); - vb->add_margin_child(TTR("Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"),filters_exclude); - filters_exclude->connect("text_changed",this,"_filters_exclude_edited"); - - convert_text_scenes = memnew( CheckButton ); - convert_text_scenes->set_text(TTR("Convert text scenes to binary on export.")); - vb->add_child(convert_text_scenes); - convert_text_scenes->connect("toggled",this,"_export_mode_changed"); - - image_vb = memnew( VBoxContainer ); - image_vb->set_name(TTR("Images")); - image_action = memnew( OptionButton ); - image_action->add_item(TTR("Keep Original")); - image_action->add_item(TTR("Compress for Disk (Lossy, WebP)")); - image_action->add_item(TTR("Compress for RAM (BC/PVRTC/ETC)")); - image_vb->add_margin_child(TTR("Convert Images (*.png):"),image_action); - HBoxContainer *qhb = memnew( HBoxContainer ); - image_quality = memnew( HSlider ); - qhb->add_child(image_quality); - image_quality->set_h_size_flags(SIZE_EXPAND_FILL); - SpinBox *qspin = memnew( SpinBox ); - image_quality->share(qspin); - qhb->add_child(qspin); - image_quality->set_min(0); - image_quality->set_max(1); - image_quality->set_step(0.01); - image_vb->add_margin_child(TTR("Compress for Disk (Lossy) Quality:"),qhb); - image_shrink = memnew( SpinBox ); - image_shrink->set_min(1); - image_shrink->set_max(8); - image_shrink->set_step(0.1); - image_vb->add_margin_child(TTR("Shrink All Images:"),image_shrink); - sections->add_child(image_vb); - - image_formats=memnew(Tree); - image_formats->set_hide_root(true); - TreeItem *root = image_formats->create_item(NULL); - List<String> fmts; - ImageLoader::get_recognized_extensions(&fmts); - for(List<String>::Element *E=fmts.front();E;E=E->next()) { - - TreeItem *fmt = image_formats->create_item(root); - fmt->set_cell_mode(0,TreeItem::CELL_MODE_CHECK); - fmt->set_text(0,E->get()); - fmt->set_editable(0,true); - formats.push_back(fmt); - } - image_vb->add_margin_child(TTR("Compress Formats:")+" ",image_formats,true); - - /// groups - HBoxContainer *group_hb = memnew( HBoxContainer ); - group_hb->set_name(TTR("Image Groups")); - sections->add_child(group_hb); - VBoxContainer *group_vb_left = memnew( VBoxContainer); - group_hb->add_child(group_vb_left); - - VBoxContainer *gvb = memnew(VBoxContainer); - HBoxContainer *ghb = memnew(HBoxContainer); - gvb->add_child(ghb); - - group_new_name = memnew( LineEdit ); - group_new_name->set_h_size_flags(SIZE_EXPAND_FILL); - ghb->add_child(group_new_name); - - group_add = memnew(ToolButton); - group_add->connect("pressed",this,"_group_add"); - ghb->add_child(group_add); - - group_new_name_error = memnew( Label ); - group_new_name_error->add_color_override("font_color",Color(1,0.4,0.4)); - gvb->add_child(group_new_name_error); - group_new_name_error->hide(); - - groups=memnew(Tree); - groups->set_v_size_flags(SIZE_EXPAND_FILL); - groups->connect("cell_selected",this,"_group_selected",varray(),CONNECT_DEFERRED); - groups->connect("button_pressed",this,"_group_del",varray(),CONNECT_DEFERRED); - groups->set_hide_root(true); - gvb->add_child(groups); - - group_vb_left->add_margin_child(TTR("Groups:"),gvb,true); - //group_vb_left->add_child( memnew( HSeparator)); - group_options = memnew(VBoxContainer); - group_vb_left->add_child(group_options); - - - group_image_action = memnew(OptionButton); - group_image_action->add_item(TTR("Default")); - group_image_action->add_item(TTR("Compress Disk")); - group_image_action->add_item(TTR("Compress RAM")); - group_image_action->add_item(TTR("Keep Original")); - group_options->add_margin_child(TTR("Compress Mode:"),group_image_action); - group_image_action->connect("item_selected",this,"_group_changed"); - - group_lossy_quality = memnew( HSlider ); - group_lossy_quality->set_min(0.1); - group_lossy_quality->set_max(1.0); - group_lossy_quality->set_step(0.01); - group_lossy_quality->set_value(0.7); - group_lossy_quality->connect("value_changed",this,"_quality_edited"); - - HBoxContainer *gqhb = memnew( HBoxContainer ); - SpinBox *gqspin = memnew( SpinBox ); - group_lossy_quality->share(gqspin); - group_lossy_quality->set_h_size_flags(SIZE_EXPAND_FILL); - gqhb->add_child(group_lossy_quality); - gqhb->add_child(gqspin); - group_options->add_margin_child(TTR("Lossy Quality:"),gqhb); - - group_atlas = memnew(CheckButton); - group_atlas->set_pressed(true); - group_options->add_margin_child(TTR("Atlas:"),group_atlas); - group_atlas->connect("toggled",this,"_group_changed"); - - group_shrink = memnew(SpinBox); - group_shrink->set_min(1); - group_shrink->set_max(8); - group_shrink->set_value(1); - group_shrink->set_step(0.001); - group_options->add_margin_child(TTR("Shrink By:"),group_shrink); - group_shrink->connect("value_changed",this,"_group_changed"); - - atlas_preview = memnew( Button ); - atlas_preview->set_text(TTR("Preview Atlas")); - group_options->add_child(atlas_preview); - atlas_preview->show(); - atlas_preview->connect("pressed",this,"_group_atlas_preview"); - Control *ec = memnew(Control ); - ec->set_custom_minimum_size(Size2(150,1)); - gvb->add_child(ec); - - VBoxContainer *group_vb_right = memnew( VBoxContainer ); - group_hb->add_child(group_vb_right); - group_vb_right->set_h_size_flags(SIZE_EXPAND_FILL); - - HBoxContainer *filter_hb = memnew (HBoxContainer); - - group_images_filter = memnew( LineEdit ); - group_vb_right->add_margin_child(TTR("Image Filter:"),filter_hb); - filter_hb->add_child(group_images_filter); - group_images_filter->set_h_size_flags(SIZE_EXPAND_FILL); - group_images_filter->connect("text_changed",this,"_image_filter_changed"); - group_images = memnew( Tree ); - group_images->set_v_size_flags(SIZE_EXPAND_FILL); - group_vb_right->add_margin_child(TTR("Images:"),group_images,true); - - Button *filt_select_all = memnew( Button ); - filt_select_all->set_text(TTR("Select All")); - filter_hb->add_child(filt_select_all); - filt_select_all->connect("pressed",this,"_group_select_all"); - - Button *filt_select_none = memnew( Button ); - filt_select_none->set_text(TTR("Select None")); - filter_hb->add_child(filt_select_none); - filt_select_none->connect("pressed",this,"_group_select_none"); - - atlas_preview_dialog = memnew( AcceptDialog ); - ScrollContainer *scroll = memnew( ScrollContainer ); - atlas_preview_dialog->add_child(scroll); - //atlas_preview_dialog->set_child_rect(scroll); - atlas_preview_frame = memnew( TextureRect ); - scroll->add_child(atlas_preview_frame); - add_child(atlas_preview_dialog); - - - group_images->set_hide_root(true); - group_images->set_columns(2); - group_images->set_column_expand(0,true); - group_images->set_column_expand(1,false); - group_images->set_column_min_width(1,100); - group_images->set_column_titles_visible(true); - group_images->set_column_title(0,TTR("Images")); - group_images->set_column_title(1,TTR("Group")); - group_images->connect("item_edited",this,"_group_item_edited",varray(),CONNECT_DEFERRED); - -/* SpinBox *group_shrink; - CheckButton *group_atlas; - OptionButton *group_image_action;*/ - - -/* progress = memnew( Label ); - add_child(progress); - progress->set_area_as_parent_rect(); - progress->set_anchor_and_margin(MARGIN_TOP,Control::ANCHOR_BEGIN,25); - progress->hide(); - progress->set_align(Label::ALIGN_CENTER);*/ - -/* - button_reload = memnew( Button ); - button_reload->set_pos(Point2(3,2)); - button_reload->set_size(Point2(20,5)); - button_reload->set_flat(true); - //add_child(button_reload); - button_reload->connect("pressed",this,"_rescan"); - hbc->add_child(button_reload); -*/ - - - sample_vbox = memnew( VBoxContainer ); - sample_vbox->set_name(TTR("Samples")); - sections->add_child(sample_vbox); - sample_mode = memnew( OptionButton ); - sample_vbox->add_margin_child(TTR("Sample Conversion Mode: (.wav files):"),sample_mode); - sample_mode->add_item(TTR("Keep")); - sample_mode->add_item(TTR("Compress (RAM - IMA-ADPCM)")); - sample_max_hz = memnew( SpinBox ); - sample_max_hz->set_max(192000); - sample_max_hz->set_min(8000); - sample_vbox->add_margin_child(TTR("Sampling Rate Limit (Hz):"),sample_max_hz); - sample_trim = memnew( CheckButton ); - sample_trim->set_text(TTR("Trim")); - sample_vbox->add_margin_child(TTR("Trailing Silence:"),sample_trim); - - script_vbox = memnew( VBoxContainer ); - script_vbox->set_name(TTR("Script")); - sections->add_child(script_vbox); - script_mode = memnew( OptionButton ); - script_vbox->add_margin_child(TTR("Script Export Mode:"),script_mode); - script_mode->add_item(TTR("Text")); - script_mode->add_item(TTR("Compiled")); - script_mode->add_item(TTR("Encrypted (Provide Key Below)")); - script_key = memnew( LineEdit ); - script_vbox->add_margin_child(TTR("Script Encryption Key (256-bits as hex):"),script_key); - - + ClassDB::bind_method("_add_preset",&ProjectExportDialog::_add_preset); + ClassDB::bind_method("_edit_preset",&ProjectExportDialog::_edit_preset); + ClassDB::bind_method("_runnable_pressed",&ProjectExportDialog::_runnable_pressed); + ClassDB::bind_method("_name_changed",&ProjectExportDialog::_name_changed); + ClassDB::bind_method("_delete_preset",&ProjectExportDialog::_delete_preset); + ClassDB::bind_method("_delete_preset_confirm",&ProjectExportDialog::_delete_preset_confirm); + ClassDB::bind_method("get_drag_data_fw",&ProjectExportDialog::get_drag_data_fw); + ClassDB::bind_method("can_drop_data_fw",&ProjectExportDialog::can_drop_data_fw); + ClassDB::bind_method("drop_data_fw",&ProjectExportDialog::drop_data_fw); + ClassDB::bind_method("_export_type_changed",&ProjectExportDialog::_export_type_changed); + ClassDB::bind_method("_filter_changed",&ProjectExportDialog::_filter_changed); + ClassDB::bind_method("_tree_changed",&ProjectExportDialog::_tree_changed); + ClassDB::bind_method("_patch_button_pressed",&ProjectExportDialog::_patch_button_pressed); + ClassDB::bind_method("_patch_selected",&ProjectExportDialog::_patch_selected); + ClassDB::bind_method("_patch_deleted",&ProjectExportDialog::_patch_deleted); + ClassDB::bind_method("_patch_edited",&ProjectExportDialog::_patch_edited); + ClassDB::bind_method("_export_pck_zip",&ProjectExportDialog::_export_pck_zip); + ClassDB::bind_method("_export_pck_zip_selected",&ProjectExportDialog::_export_pck_zip_selected); + + +} +ProjectExportDialog::ProjectExportDialog() { + + HBoxContainer *hbox = memnew( HBoxContainer ); + add_child(hbox); + + VBoxContainer *preset_vb = memnew( VBoxContainer ); + preset_vb->set_h_size_flags(Control::SIZE_EXPAND_FILL); + hbox->add_child(preset_vb); + + HBoxContainer *preset_hb = memnew( HBoxContainer ); + preset_hb->add_child(memnew(Label(TTR("Presets")))); + preset_hb->add_spacer(); + preset_vb->add_child(preset_hb); + + add_preset = memnew( MenuButton ); + add_preset->set_text(TTR("Add..")); + add_preset->get_popup()->connect("index_pressed",this,"_add_preset"); + preset_hb->add_child(add_preset); + MarginContainer *mc = memnew( MarginContainer ); + preset_vb->add_child(mc); + mc->set_v_size_flags(SIZE_EXPAND_FILL); + presets = memnew( ItemList ); + presets->set_drag_forwarding(this); + mc->add_child(presets); + presets->connect("item_selected",this,"_edit_preset"); + delete_preset = memnew( ToolButton ); + preset_hb->add_child(delete_preset); + delete_preset->connect("pressed",this,"_delete_preset"); + + VBoxContainer *settings_vb = memnew( VBoxContainer ); + settings_vb->set_h_size_flags(Control::SIZE_EXPAND_FILL); + hbox->add_child(settings_vb); + + name = memnew(LineEdit); + settings_vb->add_margin_child(TTR("Name:"),name); + name->connect("text_changed",this,"_name_changed"); + runnable = memnew(CheckButton); + runnable->set_text(TTR("Runnable")); + runnable->connect("pressed",this,"_runnable_pressed"); + settings_vb->add_child(runnable); + + sections = memnew (TabContainer ); + settings_vb->add_child(sections); + sections->set_v_size_flags(SIZE_EXPAND_FILL); + + parameters = memnew (PropertyEditor ); + sections->add_child(parameters); + parameters->set_name(TTR("Options")); + parameters->hide_top_label(); + parameters->set_v_size_flags(SIZE_EXPAND_FILL); + parameters->set_hide_script(true); + + VBoxContainer *resources_vb = memnew( VBoxContainer ); + sections->add_child(resources_vb); + resources_vb->set_name(TTR("Resources")); + + export_filter = memnew( OptionButton ); + export_filter->add_item(TTR("Export all resources in the project")); + export_filter->add_item(TTR("Export selected scenes (and dependencies)")); + export_filter->add_item(TTR("Export selected resources (and dependencies)")); + resources_vb->add_margin_child(TTR("Export Mode:"),export_filter); + export_filter->connect("item_selected",this,"_export_type_changed"); + + include_label = memnew( Label ); + include_label->set_text(TTR("Resources to export:")); + resources_vb->add_child(include_label); + include_margin = memnew( MarginContainer ); + include_margin->set_v_size_flags(SIZE_EXPAND_FILL); + resources_vb->add_child(include_margin); + + include_files = memnew(Tree); + include_margin->add_child(include_files); + include_files->connect("item_edited",this,"_tree_changed"); + + include_filters = memnew( LineEdit ); + resources_vb->add_margin_child(TTR("Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"),include_filters); + include_filters->connect("text_changed",this,"_filter_changed"); + + exclude_filters = memnew( LineEdit ); + resources_vb->add_margin_child(TTR("Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"),exclude_filters); + exclude_filters->connect("text_changed",this,"_filter_changed"); + + VBoxContainer *patch_vb = memnew( VBoxContainer ); + sections->add_child(patch_vb); + patch_vb->set_name(TTR("Patches")); + + patches = memnew( Tree ); + patch_vb->add_child(patches); + patches->set_v_size_flags(SIZE_EXPAND_FILL); + patches->set_hide_root(true); + patches->connect("button_pressed",this,"_patch_button_pressed"); + patches->connect("item_edited",this,"_patch_edited"); + patches->set_drag_forwarding(this); + patches->set_edit_checkbox_cell_only_when_checkbox_is_pressed(true); + + HBoxContainer *patches_hb = memnew( HBoxContainer ); + patch_vb->add_child(patches_hb); + patches_hb->add_spacer(); + patch_export = memnew( Button ); + patch_export->set_text(TTR("Make Patch")); + patches_hb->add_child(patch_export); + patches_hb->add_spacer(); + + patch_dialog = memnew( FileDialog ); + patch_dialog->add_filter("*.pck ; Pack File"); + patch_dialog->set_mode(FileDialog::MODE_OPEN_FILE); + patch_dialog->connect("file_selected",this,"_patch_selected"); + add_child(patch_dialog); + + patch_erase = memnew( ConfirmationDialog ); + patch_erase->get_ok()->set_text(TTR("Delete")); + patch_erase->connect("confirmed",this,"_patch_deleted"); + add_child(patch_erase); + + + //disable by default + name->set_editable(false); + runnable->set_disabled(true); + delete_preset->set_disabled(true); + sections->hide(); + parameters->edit(NULL); + + delete_confirm = memnew( ConfirmationDialog ); + add_child(delete_confirm); + delete_confirm->get_ok()->set_text(TTR("Delete")); + delete_confirm->connect("confirmed",this,"_delete_preset_confirm"); updating=false; - error = memnew( AcceptDialog ); - add_child(error); - - confirm = memnew( ConfirmationDialog ); - add_child(confirm); - confirm->connect("confirmed",this,"_confirmed"); - - get_ok()->set_text(TTR("Export PCK/Zip")); - + get_ok()->set_text("Export PCK/Zip"); + export_button = add_button("Export Project",!OS::get_singleton()->get_swap_ok_cancel(),"export"); - expopt="--,Export,Bundle"; + export_pck_zip = memnew( FileDialog ); + export_pck_zip->add_filter("*.zip ; ZIP File"); + export_pck_zip->add_filter("*.pck ; Godot Game Pack"); + export_pck_zip->set_access(FileDialog::ACCESS_FILESYSTEM); + export_pck_zip->set_mode(FileDialog::MODE_SAVE_FILE); + add_child(export_pck_zip); + export_pck_zip->connect("file_selected",this,"_export_pck_zip_selected"); - file_export = memnew( EditorFileDialog ); - add_child(file_export); - file_export->set_access(EditorFileDialog::ACCESS_FILESYSTEM); - file_export->set_current_dir( EditorSettings::get_singleton()->get("filesystem/directories/default_project_export_path") ); - - file_export->set_title(TTR("Export Project")); - file_export->connect("file_selected", this,"_export_action"); - - file_export_password = memnew( LineEdit ); - file_export_password->set_secret(true); - file_export_password->set_editable(false); - file_export->get_vbox()->add_margin_child(TTR("Password:"),file_export_password); - - pck_export = memnew( EditorFileDialog ); - pck_export->set_access(EditorFileDialog::ACCESS_FILESYSTEM); - pck_export->set_current_dir( EditorSettings::get_singleton()->get("filesystem/directories/default_project_export_path") ); - pck_export->set_title(TTR("Export Project PCK")); - pck_export->connect("file_selected", this,"_export_action_pck"); - pck_export->add_filter("*.pck ; Data Pack"); - pck_export->add_filter("*.zip ; Zip"); - add_child(pck_export); + set_hide_on_ok(false); - button_export = add_button(TTR("Export.."),!OS::get_singleton()->get_swap_ok_cancel(),"export_pck"); - updating_script=false; - ei="EditorIcons"; - ot="Object"; - pending_update_tree=true; - _create_android_keystore_window(); + editor_icons = "EditorIcons"; } - ProjectExportDialog::~ProjectExportDialog() { } - -void ProjectExport::popup_export() { - - Set<String> presets; - presets.insert("default"); - - List<PropertyInfo> pi; - GlobalConfig::get_singleton()->get_property_list(&pi); - export_preset->clear(); - - for (List<PropertyInfo>::Element *E=pi.front();E;E=E->next()) { - - if (!E->get().name.begins_with("export_presets/")) - continue; - presets.insert(E->get().name.get_slice("/",1)); - } - - for(Set<String>::Element *E=presets.front();E;E=E->next()) { - - export_preset->add_item(E->get()); - } - - - - popup_centered(Size2(300,100)); - - - -} -Error ProjectExport::export_project(const String& p_preset) { - - return OK; - -#if 0 - - String selected=p_preset; - - PoolVector<String> preset_settings = GlobalConfig::get_singleton()->get("export_presets/"+selected); - String preset_path=GlobalConfig::get_singleton()->get("export_presets_path/"+selected); - if (preset_path=="") { - - error->set_text("Export path empty, see export options"); - error->popup_centered_minsize(Size2(300,100)); - ERR_FAIL_V(ERR_INVALID_DATA); - } - - int pc=preset_settings.size(); - - DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); - if (d->change_dir(preset_path)!=OK) { - - memdelete(d); - error->set_text("Can't access to export path:\n "+preset_path); - error->popup_centered_minsize(Size2(300,100)); - ERR_FAIL_V(ERR_INVALID_DATA); - } - - if (pc==0) { - memdelete(d); - return OK; - } - if (pc%3 != 0 ) { - memdelete(d); - error->set_text("Corrupted export data.."); - error->popup_centered_minsize(Size2(300,100)); - ERR_EXPLAIN("Corrupted export data..."); - ERR_FAIL_V(ERR_INVALID_DATA); - } - - Map<String,ProjectExportSettings::ItemData> export_action; - - - Map<String,Map<String,String> > remapped_paths; - - Set<String> scene_extensions; - Set<String> resource_extensions; - - { - - List<String> l; - /* - SceneLoader::get_recognized_extensions(&l); - for(List<String>::Element *E=l.front();E;E=E->next()) { - - scene_extensions.insert(E->get()); - } - */ - ResourceLoader::get_recognized_extensions_for_type("",&l); - for(List<String>::Element *E=l.front();E;E=E->next()) { - - resource_extensions.insert(E->get()); - } - } - - Vector<String> names = GlobalConfig::get_singleton()->get_optimizer_presets(); - - //prepare base paths - - for(int i=0;i<pc;i+=3) { - - - String name = preset_settings[i+0]; - String pname=preset_settings[i+1]; - String deps=preset_settings[i+2]; - int idx=1; - if (pname=="") { - pname="copy"; - } else { - - for(int j=0;j<names.size();j++) { - if (pname==names[j]) { - idx=j+2; - break; - } - } - } - - int dep_idx=0; - - for(int j=0;j<ProjectExportSettings::DA_MAX;j++) { - if (ProjectExportSettings::da_string[j]==deps) { - dep_idx=j; - break; - } - } - - if (idx>=0) { - export_action[name].action=idx; - export_action[name].depaction=dep_idx; - } - - } - - - Set<String> bundle_exceptions; - for (Map<String,ProjectExportSettings::ItemData>::Element *E=export_action.front();E;E=E->next()) { - bundle_exceptions.insert(E->key()); - } - - - { - - // find dependencies and add them to export - - Map<String,ProjectExportSettings::ItemData> dependencies; - - for (Map<String,ProjectExportSettings::ItemData>::Element *E=export_action.front();E;E=E->next()) { - - ProjectExportSettings::ItemData &id=E->get(); - - if (id.depaction!=ProjectExportSettings::DA_COPY && id.depaction!=ProjectExportSettings::DA_OPTIMIZE) - continue; //no copy or optimize, go on - List<String> deplist; - ResourceLoader::get_dependencies(E->key(),&deplist); - - while (deplist.size()) { - - String dependency = deplist.front()->get(); - deplist.pop_front(); - if (export_action.has(dependency)) - continue; //taged to export, will not override - if (dependencies.has(dependency)) { - - if (id.action <= dependencies[dependency].action ) - continue; - } - - ProjectExportSettings::ItemData depid; - if (id.depaction==ProjectExportSettings::DA_COPY || id.action==ProjectExportSettings::DA_COPY) - depid.action=ProjectExportSettings::DA_COPY; - else if (id.depaction==ProjectExportSettings::DA_OPTIMIZE) - depid.action=id.action; - depid.depaction=0; - - dependencies[dependency]=depid; - - ResourceLoader::get_dependencies(dependency,&deplist); - } - - - } - - for (Map<String,ProjectExportSettings::ItemData>::Element *E=dependencies.front();E;E=E->next()) { - export_action[E->key()]=E->get(); - } - } - - - - int idx=0; - for (Map<String,ProjectExportSettings::ItemData>::Element *E=export_action.front();E;E=E->next(),idx++) { - - - String path=E->key(); - if (E->get().action==0) - continue; //nothing to do here - String preset; - if (E->get().action==1) - preset=""; - else - preset=names[E->get().action-2]; - - print_line("Exporting "+itos(idx)+"/"+itos(export_action.size())+": "+path); - - String base_dir = GlobalConfig::get_singleton()->localize_path(path.get_base_dir()).replace("\\","/").replace("res://",""); - DirAccess *da=DirAccess::create(DirAccess::ACCESS_FILESYSTEM); - String cwd = d->get_current_dir(); - da->change_dir(cwd); - print_line("base dir: "+base_dir); - String remap_platform="all"; - - for(int j=0;j<base_dir.get_slice_count("/");j++) { - - String p = base_dir.get_slice("/",j); - if (da->change_dir(p)!=OK) { - - Error err = da->make_dir(p); - if (err!=OK) { - memdelete(da); - memdelete(d); - ERR_EXPLAIN("Cannot make dir: "+cwd+"/"+p); - ERR_FAIL_V(ERR_CANT_CREATE); - } - - if (da->change_dir(p)!=OK) { - - memdelete(da); - memdelete(d); - ERR_EXPLAIN("Cannot change to dir: "+cwd+"/"+p); - ERR_FAIL_V(ERR_CANT_CREATE); - } - - } - - cwd=da->get_current_dir(); - } - - memdelete(da); - //cwd is the target dir - - String source_file; - - print_line("Exporting: "+source_file); - bool delete_source=false; - if (preset=="") { - //just copy! - - source_file=path; - delete_source=false; - } else { - - delete_source=true; - //create an optimized source file - - if (!GlobalConfig::get_singleton()->has("optimizer_presets/"+preset)) { - memdelete(d); - ERR_EXPLAIN("Unknown optimizer preset: "+preset); - ERR_FAIL_V(ERR_INVALID_DATA); - } - - - Dictionary dc = GlobalConfig::get_singleton()->get("optimizer_presets/"+preset); - - ERR_FAIL_COND_V(!dc.has("__type__"),ERR_INVALID_DATA); - String type=dc["__type__"]; - - Ref<EditorOptimizedSaver> saver; - - for(int i=0;i<editor_data->get_optimized_saver_count();i++) { - - if (editor_data->get_optimized_saver(i)->get_target_name()==type) { - saver=editor_data->get_optimized_saver(i); - } - } - - if (saver.is_null()) { - memdelete(d); - ERR_EXPLAIN("Preset '"+preset+"' references nonexistent saver: "+type); - ERR_FAIL_COND_V(saver.is_null(),ERR_INVALID_DATA); - } - - List<Variant> keys; - dc.get_key_list(&keys); - - saver->clear(); - - for(List<Variant>::Element *E=keys.front();E;E=E->next()) { - - saver->set(E->get(),dc[E->get()]); - } - - - remap_platform=saver->get_target_platform(); - if (remap_platform=="") - remap_platform="all"; - - - if (resource_extensions.has(path.extension().to_lower())) { - - uint32_t flags=0; - - /* - if (saver->is_bundle_scenes_enabled()) - flags|=Reso::FLAG_BUNDLE_INSTANCED_SCENES; - */ - saver->set_bundle_exceptions(NULL); - if (E->get().depaction>=ProjectExportSettings::DA_BUNDLE) { - flags|=ResourceSaver::FLAG_BUNDLE_RESOURCES; - if (E->get().depaction==ProjectExportSettings::DA_BUNDLE) - saver->set_bundle_exceptions(&bundle_exceptions); - - } - - if (saver->is_remove_editor_data_enabled()) - flags|=ResourceSaver::FLAG_OMIT_EDITOR_PROPERTIES; - if (saver->is_big_endian_data_enabled()) - flags|=ResourceSaver::FLAG_SAVE_BIG_ENDIAN; - - RES res = ResourceLoader::load(path); - - if (res.is_null()) { - - memdelete(d); - ERR_EXPLAIN("Error loading resource to optimize: "+path); - ERR_FAIL_V(ERR_INVALID_DATA); - } - - if (saver->is_compress_translations_enabled() && res->get_type()=="Translation") { - - Ref<PHashTranslation> ct = Ref<PHashTranslation>( memnew( PHashTranslation ) ); - ct->generate(res); - res=ct; - } - - - //dst_file=path.get_file(); - //dst_file = cwd+"/"+dst_file.substr(0,dst_file.length()-dst_file.extension().length())+"opt.scn"; - - //String write_file = path.substr(0,path.length()-path.extension().length())+"optimized.res"; - String write_file = path+".opt.res"; - - - print_line("DST RES FILE: "+write_file); - Error err = ResourceSaver::save(write_file,res,flags,saver); - if (err) { - memdelete(d); - ERR_EXPLAIN("Error saving optimized resource: "+write_file); - ERR_FAIL_COND_V(err,ERR_CANT_OPEN); - } - source_file=write_file; - //project_settings->add_remapped_path(src_scene,path,platform); - - } - - - } - - String dst_file; - dst_file=cwd+"/"+source_file.get_file(); - print_line("copying from: "+source_file); - print_line("copying to: "+dst_file); - Error err = d->copy(source_file,dst_file); - - if (delete_source) - d->remove(source_file); - - if (err) { - - - ERR_EXPLAIN("Error copying from: "+source_file+" to "+dst_file+"."); - ERR_FAIL_COND_V(err,err); - } - - String src_remap=path; - String dst_remap=source_file; - print_line("remap from: "+src_remap); - print_line("remap to: "+dst_remap); - if (src_remap!=dst_remap) { - - - remapped_paths[remap_platform][src_remap]=dst_remap; - } - - //do the copy man... - - } - - Map<String,Variant> added_settings; - - - for (Map<String,Map<String,String> >::Element *E=remapped_paths.front();E;E=E->next()) { - - String platform=E->key(); - PoolVector<String> remaps; - for(Map<String,String>::Element *F=E->get().front();F;F=F->next() ) { - - remaps.push_back(F->key()); - remaps.push_back(F->get()); - } - - - - //added_settings["remap/"+platform]=remaps;` - added_settings["remap/"+platform]=Variant(remaps).operator Array(); - } - - String engine_cfg_path=d->get_current_dir()+"/godot.cfg"; - print_line("enginecfg: "+engine_cfg_path); - GlobalConfig::get_singleton()->save_custom(engine_cfg_path,added_settings); - - memdelete(d); - return OK; -#endif -} - -ProjectExport::ProjectExport(EditorData* p_data) { - - editor_data=p_data; - VBoxContainer *vbc = memnew( VBoxContainer ); - add_child(vbc); - //set_child_rect(vbc); - set_title(TTR("Project Export")); - label = memnew( Label ); - label->set_text(TTR("Export Preset:")); - vbc->add_child(label); - export_preset = memnew (OptionButton); - vbc->add_child(export_preset); - get_ok()->set_text(TTR("Export")); - set_hide_on_ok(false); - error = memnew( AcceptDialog ); - add_child(error); - - -} -#endif diff --git a/tools/editor/project_export.h b/tools/editor/project_export.h index c528a23121..c977e90e56 100644 --- a/tools/editor/project_export.h +++ b/tools/editor/project_export.h @@ -35,6 +35,7 @@ #include "scene/gui/label.h" #include "tools/editor/editor_file_dialog.h" #include "scene/gui/button.h" +#include "scene/gui/file_dialog.h" #include "scene/gui/dialogs.h" #include "scene/gui/tab_container.h" #include "os/dir_access.h" @@ -44,203 +45,98 @@ #include "scene/gui/slider.h" #include "tools/editor/editor_file_system.h" #include "property_editor.h" -#include "editor_import_export.h" +#include "editor_export.h" + -#if 0 class EditorNode; class ProjectExportDialog : public ConfirmationDialog { GDCLASS( ProjectExportDialog, ConfirmationDialog ); -public: - enum ExportAction { - ACTION_NONE, - ACTION_COPY, - ACTION_BUNDLE, - ACTION_MAX - - }; - - static const char *da_string[ACTION_MAX]; - private: - EditorNode *editor; - String expopt; - TabContainer *sections; - bool updating_tree; - bool pending_update_tree; - AcceptDialog *error; - ConfirmationDialog *confirm; - ConfirmationDialog *confirm_keystore; - Button *button_reload; - LineEdit *filters, *filters_exclude; - HBoxContainer *plat_errors; - Label *platform_error_string; + MenuButton *add_preset; + Button *delete_preset; + ItemList *presets; - StringName ei; - StringName ot; + LineEdit *name; + PropertyEditor *parameters; + CheckButton *runnable; - Tree * tree; EditorFileDialog *pck_export; EditorFileDialog *file_export; - LineEdit *file_export_password; Button *button_export; - String _delete_attempt; - bool updating; - void _tree_changed(); - void _update_tree(); - - bool _create_tree(TreeItem *p_parent,EditorFileSystemDirectory *p_dir); - void _rescan(); - //void _confirmed(); - void _scan_finished(); - - void _validate_platform(); - /////////////////// - - Tree * platforms; - PropertyEditor *platform_options; - - OptionButton *export_mode; - CheckButton *convert_text_scenes; - VBoxContainer *tree_vb; - - VBoxContainer *image_vb; - OptionButton *image_action; - HSlider *image_quality; - SpinBox *image_shrink; - Tree *image_formats; - Vector<TreeItem*> formats; - - LineEdit *group_new_name; - HSlider *group_lossy_quality; - Label *group_new_name_error; - VBoxContainer *group_options; - Tree *groups; - SpinBox *group_shrink; - CheckButton *group_atlas; - OptionButton *group_image_action; - Button *group_add; - Tree *group_images; - LineEdit *group_images_filter; - Button *atlas_preview; - - - AcceptDialog *atlas_preview_dialog; - TextureRect *atlas_preview_frame; - - - VBoxContainer *script_vbox; - OptionButton *script_mode; - LineEdit *script_key; + ConfirmationDialog *delete_confirm; - VBoxContainer *sample_vbox; - OptionButton *sample_mode; - SpinBox *sample_max_hz; - CheckButton *sample_trim; + OptionButton *export_filter; + LineEdit *include_filters; + LineEdit *exclude_filters; + Tree *include_files; - ConfirmationDialog* keystore_create_dialog; - EditorFileDialog* keystore_file_dialog; + Label* include_label; + MarginContainer *include_margin; + StringName editor_icons; - void _export_mode_changed(int p_idx); - void _prop_edited(String what); + Tree *patches; + Button *patch_export; + int patch_index; + FileDialog *patch_dialog; + ConfirmationDialog *patch_erase; - void _update_platform(); - void _update_exporter(); - void _platform_selected(); + Button *export_button; - void _filters_edited(String what); - void _filters_exclude_edited(String what); - void _update_group_tree(); + void _patch_selected(const String& p_path); + void _patch_deleted(); - void _image_filter_changed(String); - bool _update_group_treef(TreeItem *p_parent,EditorFileSystemDirectory *p_dir,const Set<String>& p_extensions,const String& p_groups,const Map<StringName,int>& p_group_index); - void _group_item_edited(); - void _group_atlas_preview(); + void _runnable_pressed(); + void _name_changed(const String& p_string); + void _add_preset(int p_platform); + void _edit_preset(int p_index); + void _delete_preset(); + void _delete_preset_confirm(); + void _update_presets(); + void _export_type_changed(int p_which); + void _filter_changed(const String& p_filter); + void _fill_resource_tree(); + bool _fill_tree(EditorFileSystemDirectory *p_dir,TreeItem *p_item,Ref<EditorExportPreset> ¤t,bool p_only_scenes); + void _tree_changed(); - void _quality_edited(float what); - void _image_export_edited(int what); - void _shrink_edited(float what); - - void _sample_convert_edited(int what); - - void _update_group_list(); - void _select_group(const String& p_by_name); - + void _patch_button_pressed(Object* p_item,int p_column,int p_id); + void _patch_edited(); - String _get_selected_group(); - void _update_group(); - void _group_changed(Variant v); - void _group_selected(); - void _group_add(); - void _group_select_all(); - void _group_select_none(); - void _group_del(Object *item,int p_column, int p_button); - bool updating_script; - void _update_script(); - void _script_edited(Variant v); - void _export_action(const String& p_file); - void _export_action_pck(const String& p_file); - void ok_pressed(); - void custom_action(const String&); - LineEdit* _create_keystore_input(Control* container, const String& p_label, const String& name); - void _create_android_keystore_window(); - void _create_android_keystore(); - bool _check_android_setting(const Ref<EditorExportPlatform>& exporter); - void _check_keystore_path(const String& path); - void _keystore_dir_selected(const String& path); - void _keystore_created(); + Variant get_drag_data_fw(const Point2& p_point,Control* p_from); + bool can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const; + void drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from); - void _save_export_cfg(); - void _format_toggled(); + FileDialog *export_pck_zip; + void _export_pck_zip(); + void _export_pck_zip_selected(const String& p_path); protected: void _notification(int p_what); static void _bind_methods(); public: - String get_selected_path() const; - - Error export_platform(const String& p_platform, const String& p_path, bool p_debug,const String& p_password,bool p_quit_after=false); - void popup_export(); - ProjectExportDialog(EditorNode *p_editor); + + ProjectExportDialog(); ~ProjectExportDialog(); }; -class EditorData; -class ProjectExport : public ConfirmationDialog { - GDCLASS( ProjectExport, ConfirmationDialog ); - - EditorData *editor_data; - - AcceptDialog *error; - Label *label; - OptionButton *export_preset; -public: - - Error export_project(const String& p_preset); - void popup_export(); - - - ProjectExport(EditorData* p_data); - -}; #endif // PROJECT_EXPORT_SETTINGS_H -#endif + diff --git a/tools/editor/project_settings.cpp b/tools/editor/project_settings.cpp index 2acd347dc6..ed3c59cc4a 100644 --- a/tools/editor/project_settings.cpp +++ b/tools/editor/project_settings.cpp @@ -29,7 +29,7 @@ #include "project_settings.h" #include "scene/gui/tab_container.h" -#include "globals.h" +#include "global_config.h" #include "os/keyboard.h" #include "editor_node.h" #include "scene/gui/margin_container.h" diff --git a/tools/editor/property_editor.cpp b/tools/editor/property_editor.cpp index b1528460ea..19b7b2ce66 100644 --- a/tools/editor/property_editor.cpp +++ b/tools/editor/property_editor.cpp @@ -33,12 +33,12 @@ #include "io/image_loader.h" #include "class_db.h" #include "print_string.h" -#include "globals.h" +#include "global_config.h" #include "scene/resources/font.h" #include "pair.h" #include "scene/scene_string_names.h" #include "editor_settings.h" -#include "editor_import_export.h" +#include "editor_export.h" #include "editor_node.h" #include "multi_node_edit.h" #include "array_property_edit.h" @@ -48,7 +48,7 @@ #include "editor_file_system.h" #include "create_dialog.h" #include "property_selector.h" -#include "globals.h" +#include "global_config.h" void CustomPropertyEditor::_notification(int p_what) { diff --git a/tools/editor/resources_dock.cpp b/tools/editor/resources_dock.cpp index 5348c8c122..8648361bae 100644 --- a/tools/editor/resources_dock.cpp +++ b/tools/editor/resources_dock.cpp @@ -33,7 +33,7 @@ #include "io/resource_saver.h" #include "editor_settings.h" #include "project_settings.h" -#include "globals.h" +#include "global_config.h" #include "editor_file_system.h" diff --git a/tools/editor/scene_tree_dock.cpp b/tools/editor/scene_tree_dock.cpp index eee4aefce3..4f3700adb5 100644 --- a/tools/editor/scene_tree_dock.cpp +++ b/tools/editor/scene_tree_dock.cpp @@ -29,7 +29,7 @@ #include "scene_tree_dock.h" #include "editor_node.h" -#include "globals.h" +#include "global_config.h" #include "os/keyboard.h" #include "scene/resources/packed_scene.h" #include "editor_settings.h" diff --git a/tools/editor/script_create_dialog.cpp b/tools/editor/script_create_dialog.cpp index 496d8670eb..dfaa1f645c 100644 --- a/tools/editor/script_create_dialog.cpp +++ b/tools/editor/script_create_dialog.cpp @@ -29,7 +29,7 @@ #include "script_create_dialog.h" #include "script_language.h" -#include "globals.h" +#include "global_config.h" #include "io/resource_saver.h" #include "os/file_access.h" #include "editor_file_system.h" diff --git a/tools/editor/script_editor_debugger.cpp b/tools/editor/script_editor_debugger.cpp index 248eecc1c8..fa33ffe5c7 100644 --- a/tools/editor/script_editor_debugger.cpp +++ b/tools/editor/script_editor_debugger.cpp @@ -39,7 +39,7 @@ #include "scene/gui/rich_text_label.h" #include "scene/gui/margin_container.h" #include "property_editor.h" -#include "globals.h" +#include "global_config.h" #include "editor_node.h" #include "main/performance.h" #include "editor_profiler.h" diff --git a/tools/editor/settings_config_dialog.cpp b/tools/editor/settings_config_dialog.cpp index cd8403b271..6a62e035ec 100644 --- a/tools/editor/settings_config_dialog.cpp +++ b/tools/editor/settings_config_dialog.cpp @@ -30,7 +30,7 @@ #include "editor_settings.h" #include "scene/gui/margin_container.h" -#include "globals.h" +#include "global_config.h" #include "editor_file_system.h" #include "editor_node.h" #include "os/keyboard.h" |