Re-Added export plugins with a more interesting API, as well as the ability to do path remapping.
Also added ability to tell the exporter that a shared object needs to be bundled in the build.
This commit is contained in:
parent
9488f06e4a
commit
d3c1f2a7f6
|
@ -476,19 +476,66 @@ void EditorExportPlatform::_edit_filter_list(Set<String> &r_list, const String &
|
||||||
memdelete(da);
|
memdelete(da);
|
||||||
}
|
}
|
||||||
|
|
||||||
Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> &p_preset, EditorExportSaveFunction p_func, void *p_udata) {
|
void EditorExportPlugin::add_file(const String &p_path, const Vector<uint8_t> &p_file, bool p_remap) {
|
||||||
|
|
||||||
|
ExtraFile ef;
|
||||||
|
ef.data = p_file;
|
||||||
|
ef.path = p_path;
|
||||||
|
ef.remap = p_remap;
|
||||||
|
extra_files.push_back(ef);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorExportPlugin::add_shared_object(const String &p_path) {
|
||||||
|
|
||||||
|
shared_objects.push_back(p_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorExportPlugin::_export_file_script(const String &p_path, const PoolVector<String> &p_features) {
|
||||||
|
|
||||||
|
if (get_script_instance()) {
|
||||||
|
get_script_instance()->call("_export_file", p_path, p_features);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorExportPlugin::_export_file(const String &p_path, const Set<String> &p_features) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorExportPlugin::skip() {
|
||||||
|
|
||||||
|
skipped = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorExportPlugin::_bind_methods() {
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("add_shared_object", "path"), &EditorExportPlugin::add_shared_object);
|
||||||
|
ClassDB::bind_method(D_METHOD("add_file", "path", "file", "remap"), &EditorExportPlugin::add_file);
|
||||||
|
ClassDB::bind_method(D_METHOD("skip"), &EditorExportPlugin::skip);
|
||||||
|
|
||||||
|
BIND_VMETHOD(MethodInfo("_export_file", PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::POOL_STRING_ARRAY, "features")));
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorExportPlugin::EditorExportPlugin() {
|
||||||
|
skipped = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> &p_preset, EditorExportSaveFunction p_func, void *p_udata, EditorExportSaveSharedObject p_so_func) {
|
||||||
|
|
||||||
Ref<EditorExportPlatform> platform = p_preset->get_platform();
|
Ref<EditorExportPlatform> platform = p_preset->get_platform();
|
||||||
List<String> feature_list;
|
List<String> feature_list;
|
||||||
platform->get_preset_features(p_preset, &feature_list);
|
platform->get_preset_features(p_preset, &feature_list);
|
||||||
//figure out features
|
//figure out features
|
||||||
Set<String> features;
|
Set<String> features;
|
||||||
|
PoolVector<String> features_pv;
|
||||||
for (List<String>::Element *E = feature_list.front(); E; E = E->next()) {
|
for (List<String>::Element *E = feature_list.front(); E; E = E->next()) {
|
||||||
features.insert(E->get());
|
features.insert(E->get());
|
||||||
|
features_pv.push_back(E->get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector<Ref<EditorExportPlugin> > export_plugins = EditorExport::get_singleton()->get_export_plugins();
|
||||||
|
|
||||||
//figure out paths of files that will be exported
|
//figure out paths of files that will be exported
|
||||||
Set<String> paths;
|
Set<String> paths;
|
||||||
|
Vector<String> path_remaps;
|
||||||
|
|
||||||
if (p_preset->get_export_filter() == EditorExportPreset::EXPORT_ALL_RESOURCES) {
|
if (p_preset->get_export_filter() == EditorExportPreset::EXPORT_ALL_RESOURCES) {
|
||||||
//find stuff
|
//find stuff
|
||||||
|
@ -551,9 +598,42 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> &
|
||||||
p_func(p_udata, path + ".import", array, idx, total);
|
p_func(p_udata, path + ".import", array, idx, total);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
bool do_export = true;
|
||||||
|
for (int i = 0; i < export_plugins.size(); i++) {
|
||||||
|
if (export_plugins[i]->get_script_instance()) { //script based
|
||||||
|
export_plugins[i]->_export_file_script(path, features_pv);
|
||||||
|
} else {
|
||||||
|
export_plugins[i]->_export_file(path, features);
|
||||||
|
}
|
||||||
|
if (p_so_func) {
|
||||||
|
for (int j = 0; j < export_plugins[i]->shared_objects.size(); j++) {
|
||||||
|
p_so_func(p_udata, export_plugins[i]->shared_objects[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int j = 0; j < export_plugins[i]->extra_files.size(); j++) {
|
||||||
|
p_func(p_udata, export_plugins[i]->extra_files[j].path, export_plugins[i]->extra_files[j].data, idx, total);
|
||||||
|
if (export_plugins[i]->extra_files[j].remap) {
|
||||||
|
do_export = false; //if remap, do not
|
||||||
|
path_remaps.push_back(path);
|
||||||
|
path_remaps.push_back(export_plugins[i]->extra_files[j].path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (export_plugins[i]->skipped) {
|
||||||
|
do_export = false;
|
||||||
|
}
|
||||||
|
export_plugins[i]->_clear();
|
||||||
|
|
||||||
|
if (!do_export)
|
||||||
|
break; //apologies, not exporting
|
||||||
|
}
|
||||||
//just store it as it comes
|
//just store it as it comes
|
||||||
Vector<uint8_t> array = FileAccess::get_file_as_array(path);
|
if (do_export) {
|
||||||
p_func(p_udata, path, array, idx, total);
|
Vector<uint8_t> array = FileAccess::get_file_as_array(path);
|
||||||
|
p_func(p_udata, path, array, idx, total);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
idx++;
|
idx++;
|
||||||
|
@ -575,9 +655,14 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> &
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProjectSettings::CustomMap custom_map;
|
||||||
|
if (path_remaps.size()) {
|
||||||
|
custom_map["path_remap/remapped_paths"] = path_remaps;
|
||||||
|
}
|
||||||
|
|
||||||
String config_file = "project.binary";
|
String config_file = "project.binary";
|
||||||
String engine_cfb = EditorSettings::get_singleton()->get_settings_path() + "/tmp/tmp" + config_file;
|
String engine_cfb = EditorSettings::get_singleton()->get_settings_path() + "/tmp/tmp" + config_file;
|
||||||
ProjectSettings::get_singleton()->save_custom(engine_cfb, ProjectSettings::CustomMap(), custom_list);
|
ProjectSettings::get_singleton()->save_custom(engine_cfb, custom_map, custom_list);
|
||||||
Vector<uint8_t> data = FileAccess::get_file_as_array(engine_cfb);
|
Vector<uint8_t> data = FileAccess::get_file_as_array(engine_cfb);
|
||||||
|
|
||||||
p_func(p_udata, "res://" + config_file, data, idx, total);
|
p_func(p_udata, "res://" + config_file, data, idx, total);
|
||||||
|
@ -867,6 +952,23 @@ void EditorExport::remove_export_preset(int p_idx) {
|
||||||
export_presets.remove(p_idx);
|
export_presets.remove(p_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditorExport::add_export_plugin(const Ref<EditorExportPlugin> &p_plugin) {
|
||||||
|
|
||||||
|
if (export_plugins.find(p_plugin) == 1) {
|
||||||
|
export_plugins.push_back(p_plugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorExport::remove_export_plugin(const Ref<EditorExportPlugin> &p_plugin) {
|
||||||
|
|
||||||
|
export_plugins.erase(p_plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<Ref<EditorExportPlugin> > EditorExport::get_export_plugins() {
|
||||||
|
|
||||||
|
return export_plugins;
|
||||||
|
}
|
||||||
|
|
||||||
void EditorExport::_notification(int p_what) {
|
void EditorExport::_notification(int p_what) {
|
||||||
|
|
||||||
if (p_what == NOTIFICATION_ENTER_TREE) {
|
if (p_what == NOTIFICATION_ENTER_TREE) {
|
||||||
|
|
|
@ -124,6 +124,7 @@ class EditorExportPlatform : public Reference {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef Error (*EditorExportSaveFunction)(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total);
|
typedef Error (*EditorExportSaveFunction)(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total);
|
||||||
|
typedef Error (*EditorExportSaveSharedObject)(void *p_userdata, const String &p_path);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct SavedData {
|
struct SavedData {
|
||||||
|
@ -189,7 +190,7 @@ public:
|
||||||
virtual String get_name() const = 0;
|
virtual String get_name() const = 0;
|
||||||
virtual Ref<Texture> get_logo() 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 export_project_files(const Ref<EditorExportPreset> &p_preset, EditorExportSaveFunction p_func, void *p_udata, EditorExportSaveSharedObject p_so_func = NULL);
|
||||||
|
|
||||||
Error save_pack(const Ref<EditorExportPreset> &p_preset, const String &p_path);
|
Error save_pack(const Ref<EditorExportPreset> &p_preset, const String &p_path);
|
||||||
Error save_zip(const Ref<EditorExportPreset> &p_preset, const String &p_path);
|
Error save_zip(const Ref<EditorExportPreset> &p_preset, const String &p_path);
|
||||||
|
@ -219,11 +220,47 @@ public:
|
||||||
EditorExportPlatform();
|
EditorExportPlatform();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class EditorExportPlugin : public Reference {
|
||||||
|
GDCLASS(EditorExportPlugin, Reference)
|
||||||
|
|
||||||
|
friend class EditorExportPlatform;
|
||||||
|
|
||||||
|
Vector<String> shared_objects;
|
||||||
|
struct ExtraFile {
|
||||||
|
String path;
|
||||||
|
Vector<uint8_t> data;
|
||||||
|
bool remap;
|
||||||
|
};
|
||||||
|
Vector<ExtraFile> extra_files;
|
||||||
|
bool skipped;
|
||||||
|
|
||||||
|
_FORCE_INLINE_ void _clear() {
|
||||||
|
shared_objects.clear();
|
||||||
|
extra_files.clear();
|
||||||
|
skipped = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _export_file_script(const String &p_path, const PoolVector<String> &p_features);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void add_file(const String &p_path, const Vector<uint8_t> &p_file, bool p_remap);
|
||||||
|
void add_shared_object(const String &p_path);
|
||||||
|
void skip();
|
||||||
|
|
||||||
|
virtual void _export_file(const String &p_path, const Set<String> &p_features);
|
||||||
|
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
public:
|
||||||
|
EditorExportPlugin();
|
||||||
|
};
|
||||||
|
|
||||||
class EditorExport : public Node {
|
class EditorExport : public Node {
|
||||||
GDCLASS(EditorExport, Node);
|
GDCLASS(EditorExport, Node);
|
||||||
|
|
||||||
Vector<Ref<EditorExportPlatform> > export_platforms;
|
Vector<Ref<EditorExportPlatform> > export_platforms;
|
||||||
Vector<Ref<EditorExportPreset> > export_presets;
|
Vector<Ref<EditorExportPreset> > export_presets;
|
||||||
|
Vector<Ref<EditorExportPlugin> > export_plugins;
|
||||||
|
|
||||||
Timer *save_timer;
|
Timer *save_timer;
|
||||||
bool block_save;
|
bool block_save;
|
||||||
|
@ -251,6 +288,10 @@ public:
|
||||||
Ref<EditorExportPreset> get_export_preset(int p_idx);
|
Ref<EditorExportPreset> get_export_preset(int p_idx);
|
||||||
void remove_export_preset(int p_idx);
|
void remove_export_preset(int p_idx);
|
||||||
|
|
||||||
|
void add_export_plugin(const Ref<EditorExportPlugin> &p_plugin);
|
||||||
|
void remove_export_plugin(const Ref<EditorExportPlugin> &p_plugin);
|
||||||
|
Vector<Ref<EditorExportPlugin> > get_export_plugins();
|
||||||
|
|
||||||
void load_config();
|
void load_config();
|
||||||
|
|
||||||
bool poll_export_platforms();
|
bool poll_export_platforms();
|
||||||
|
|
|
@ -254,7 +254,7 @@ void EditorNode::_notification(int p_what) {
|
||||||
get_tree()->get_root()->set_as_audio_listener_2d(false);
|
get_tree()->get_root()->set_as_audio_listener_2d(false);
|
||||||
get_tree()->set_auto_accept_quit(false);
|
get_tree()->set_auto_accept_quit(false);
|
||||||
get_tree()->connect("files_dropped", this, "_dropped_files");
|
get_tree()->connect("files_dropped", this, "_dropped_files");
|
||||||
property_editable_warning->set_icon(gui_base->get_icon("NodeWarning","EditorIcons"));
|
property_editable_warning->set_icon(gui_base->get_icon("NodeWarning", "EditorIcons"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_what == NOTIFICATION_EXIT_TREE) {
|
if (p_what == NOTIFICATION_EXIT_TREE) {
|
||||||
|
@ -1436,18 +1436,18 @@ void EditorNode::_edit_current() {
|
||||||
EditorNode::get_singleton()->get_import_dock()->set_edit_path(current_res->get_path());
|
EditorNode::get_singleton()->get_import_dock()->set_edit_path(current_res->get_path());
|
||||||
|
|
||||||
int subr_idx = current_res->get_path().find("::");
|
int subr_idx = current_res->get_path().find("::");
|
||||||
if (subr_idx!=-1) {
|
if (subr_idx != -1) {
|
||||||
String base_path=current_res->get_path().substr(0,subr_idx);
|
String base_path = current_res->get_path().substr(0, subr_idx);
|
||||||
if (FileAccess::exists(base_path+".import")) {
|
if (FileAccess::exists(base_path + ".import")) {
|
||||||
editable_warning=TTR("This resource belongs to a scene that was imported, so it's not editable.\nPlease read the documentation relevant to importing scenes to better understand this workflow.");
|
editable_warning = TTR("This resource belongs to a scene that was imported, so it's not editable.\nPlease read the documentation relevant to importing scenes to better understand this workflow.");
|
||||||
} else {
|
} else {
|
||||||
if (!get_edited_scene() || get_edited_scene()->get_filename()!=base_path) {
|
if (!get_edited_scene() || get_edited_scene()->get_filename() != base_path) {
|
||||||
editable_warning=TTR("This resource belongs to a scene that was instanced or inherited.\nChanges to it will not be kept when saving the current scene.");
|
editable_warning = TTR("This resource belongs to a scene that was instanced or inherited.\nChanges to it will not be kept when saving the current scene.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (current_res->get_path().is_resource_file()){
|
} else if (current_res->get_path().is_resource_file()) {
|
||||||
if (FileAccess::exists(current_res->get_path()+".import")) {
|
if (FileAccess::exists(current_res->get_path() + ".import")) {
|
||||||
editable_warning=TTR("This resource was imported, so it's not editable. Change it's settings in the import panel and re-import.");
|
editable_warning = TTR("This resource was imported, so it's not editable. Change it's settings in the import panel and re-import.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (is_node) {
|
} else if (is_node) {
|
||||||
|
@ -1465,10 +1465,10 @@ void EditorNode::_edit_current() {
|
||||||
}
|
}
|
||||||
object_menu->get_popup()->clear();
|
object_menu->get_popup()->clear();
|
||||||
|
|
||||||
if (get_edited_scene() && get_edited_scene()->get_filename()!=String()) {
|
if (get_edited_scene() && get_edited_scene()->get_filename() != String()) {
|
||||||
String source_scene = get_edited_scene()->get_filename();
|
String source_scene = get_edited_scene()->get_filename();
|
||||||
if (FileAccess::exists(source_scene+".import")) {
|
if (FileAccess::exists(source_scene + ".import")) {
|
||||||
editable_warning=TTR("This scene was imported, so changes to it will not be kept.\nInstancing it or inheriting will allow making changes to it.\nPlease read the documentation relevant to importing scenes to better understand this workflow.");
|
editable_warning = TTR("This scene was imported, so changes to it will not be kept.\nInstancing it or inheriting will allow making changes to it.\nPlease read the documentation relevant to importing scenes to better understand this workflow.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1478,10 +1478,9 @@ void EditorNode::_edit_current() {
|
||||||
node_dock->set_node(NULL);
|
node_dock->set_node(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (editable_warning!=String()) {
|
if (editable_warning != String()) {
|
||||||
property_editable_warning->show(); //hide by default
|
property_editable_warning->show(); //hide by default
|
||||||
property_editable_warning_dialog->set_text(editable_warning);
|
property_editable_warning_dialog->set_text(editable_warning);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Take care of PLUGIN EDITOR */
|
/* Take care of PLUGIN EDITOR */
|
||||||
|
@ -3252,9 +3251,9 @@ void EditorNode::register_editor_types() {
|
||||||
ClassDB::register_class<EditorFileSystemDirectory>();
|
ClassDB::register_class<EditorFileSystemDirectory>();
|
||||||
ClassDB::register_virtual_class<ScriptEditor>();
|
ClassDB::register_virtual_class<ScriptEditor>();
|
||||||
ClassDB::register_virtual_class<EditorInterface>();
|
ClassDB::register_virtual_class<EditorInterface>();
|
||||||
|
ClassDB::register_class<EditorExportPlugin>();
|
||||||
|
|
||||||
// FIXME: Is this stuff obsolete, or should it be ported to new APIs?
|
// FIXME: Is this stuff obsolete, or should it be ported to new APIs?
|
||||||
//ClassDB::register_class<EditorExportPlugin>();
|
|
||||||
//ClassDB::register_class<EditorScenePostImport>();
|
//ClassDB::register_class<EditorScenePostImport>();
|
||||||
//ClassDB::register_type<EditorImportExport>();
|
//ClassDB::register_type<EditorImportExport>();
|
||||||
}
|
}
|
||||||
|
@ -4511,8 +4510,6 @@ void EditorNode::_bind_methods() {
|
||||||
ClassDB::bind_method("_toggle_distraction_free_mode", &EditorNode::_toggle_distraction_free_mode);
|
ClassDB::bind_method("_toggle_distraction_free_mode", &EditorNode::_toggle_distraction_free_mode);
|
||||||
ClassDB::bind_method("_property_editable_warning_pressed", &EditorNode::_property_editable_warning_pressed);
|
ClassDB::bind_method("_property_editable_warning_pressed", &EditorNode::_property_editable_warning_pressed);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_gui_base"), &EditorNode::get_gui_base);
|
ClassDB::bind_method(D_METHOD("get_gui_base"), &EditorNode::get_gui_base);
|
||||||
ClassDB::bind_method(D_METHOD("_bottom_panel_switch"), &EditorNode::_bottom_panel_switch);
|
ClassDB::bind_method(D_METHOD("_bottom_panel_switch"), &EditorNode::_bottom_panel_switch);
|
||||||
|
|
||||||
|
@ -5273,14 +5270,13 @@ EditorNode::EditorNode() {
|
||||||
search_bar->add_child(clear_button);
|
search_bar->add_child(clear_button);
|
||||||
clear_button->connect("pressed", this, "_clear_search_box");
|
clear_button->connect("pressed", this, "_clear_search_box");
|
||||||
|
|
||||||
property_editable_warning = memnew (Button);
|
property_editable_warning = memnew(Button);
|
||||||
property_editable_warning->set_text(TTR("Changes may be lost!"));
|
property_editable_warning->set_text(TTR("Changes may be lost!"));
|
||||||
prop_editor_base->add_child(property_editable_warning);
|
prop_editor_base->add_child(property_editable_warning);
|
||||||
property_editable_warning_dialog = memnew( AcceptDialog );
|
property_editable_warning_dialog = memnew(AcceptDialog);
|
||||||
gui_base->add_child(property_editable_warning_dialog);
|
gui_base->add_child(property_editable_warning_dialog);
|
||||||
property_editable_warning->hide();
|
property_editable_warning->hide();
|
||||||
property_editable_warning->connect("pressed",this,"_property_editable_warning_pressed");
|
property_editable_warning->connect("pressed", this, "_property_editable_warning_pressed");
|
||||||
|
|
||||||
|
|
||||||
property_editor = memnew(PropertyEditor);
|
property_editor = memnew(PropertyEditor);
|
||||||
property_editor->set_autoclear(true);
|
property_editor->set_autoclear(true);
|
||||||
|
@ -5302,7 +5298,6 @@ EditorNode::EditorNode() {
|
||||||
dock_slot[DOCK_SLOT_RIGHT_UL]->add_child(import_dock);
|
dock_slot[DOCK_SLOT_RIGHT_UL]->add_child(import_dock);
|
||||||
import_dock->set_name(TTR("Import"));
|
import_dock->set_name(TTR("Import"));
|
||||||
|
|
||||||
|
|
||||||
bool use_single_dock_column = (OS::get_singleton()->get_screen_size(OS::get_singleton()->get_current_screen()).x < 1200);
|
bool use_single_dock_column = (OS::get_singleton()->get_screen_size(OS::get_singleton()->get_current_screen()).x < 1200);
|
||||||
|
|
||||||
node_dock = memnew(NodeDock);
|
node_dock = memnew(NodeDock);
|
||||||
|
|
|
@ -530,6 +530,14 @@ void EditorPlugin::remove_import_plugin(const Ref<EditorImportPlugin> &p_importe
|
||||||
EditorFileSystem::get_singleton()->scan();
|
EditorFileSystem::get_singleton()->scan();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditorPlugin::add_export_plugin(const Ref<EditorExportPlugin> &p_exporter) {
|
||||||
|
EditorExport::get_singleton()->add_export_plugin(p_exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorPlugin::remove_export_plugin(const Ref<EditorExportPlugin> &p_exporter) {
|
||||||
|
EditorExport::get_singleton()->remove_export_plugin(p_exporter);
|
||||||
|
}
|
||||||
|
|
||||||
void EditorPlugin::set_window_layout(Ref<ConfigFile> p_layout) {
|
void EditorPlugin::set_window_layout(Ref<ConfigFile> p_layout) {
|
||||||
|
|
||||||
if (get_script_instance() && get_script_instance()->has_method("set_window_layout")) {
|
if (get_script_instance() && get_script_instance()->has_method("set_window_layout")) {
|
||||||
|
@ -585,6 +593,8 @@ void EditorPlugin::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("queue_save_layout"), &EditorPlugin::queue_save_layout);
|
ClassDB::bind_method(D_METHOD("queue_save_layout"), &EditorPlugin::queue_save_layout);
|
||||||
ClassDB::bind_method(D_METHOD("add_import_plugin", "importer"), &EditorPlugin::add_import_plugin);
|
ClassDB::bind_method(D_METHOD("add_import_plugin", "importer"), &EditorPlugin::add_import_plugin);
|
||||||
ClassDB::bind_method(D_METHOD("remove_import_plugin", "importer"), &EditorPlugin::remove_import_plugin);
|
ClassDB::bind_method(D_METHOD("remove_import_plugin", "importer"), &EditorPlugin::remove_import_plugin);
|
||||||
|
ClassDB::bind_method(D_METHOD("add_export_plugin", "exporter"), &EditorPlugin::add_export_plugin);
|
||||||
|
ClassDB::bind_method(D_METHOD("remove_export_plugin", "exporter"), &EditorPlugin::remove_export_plugin);
|
||||||
ClassDB::bind_method(D_METHOD("set_input_event_forwarding_always_enabled"), &EditorPlugin::set_input_event_forwarding_always_enabled);
|
ClassDB::bind_method(D_METHOD("set_input_event_forwarding_always_enabled"), &EditorPlugin::set_input_event_forwarding_always_enabled);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_editor_interface"), &EditorPlugin::get_editor_interface);
|
ClassDB::bind_method(D_METHOD("get_editor_interface"), &EditorPlugin::get_editor_interface);
|
||||||
|
|
|
@ -191,6 +191,9 @@ public:
|
||||||
void add_import_plugin(const Ref<EditorImportPlugin> &p_importer);
|
void add_import_plugin(const Ref<EditorImportPlugin> &p_importer);
|
||||||
void remove_import_plugin(const Ref<EditorImportPlugin> &p_importer);
|
void remove_import_plugin(const Ref<EditorImportPlugin> &p_importer);
|
||||||
|
|
||||||
|
void add_export_plugin(const Ref<EditorExportPlugin> &p_exporter);
|
||||||
|
void remove_export_plugin(const Ref<EditorExportPlugin> &p_exporter);
|
||||||
|
|
||||||
EditorPlugin();
|
EditorPlugin();
|
||||||
virtual ~EditorPlugin();
|
virtual ~EditorPlugin();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue