Merge pull request #23358 from marcelofg55/duplicate_preset
Add a duplicate button to duplicate presets
This commit is contained in:
commit
7f95ec0ead
|
@ -50,6 +50,7 @@ void ProjectExportDialog::_notification(int p_what) {
|
||||||
|
|
||||||
switch (p_what) {
|
switch (p_what) {
|
||||||
case NOTIFICATION_READY: {
|
case NOTIFICATION_READY: {
|
||||||
|
duplicate_preset->set_icon(get_icon("Duplicate", "EditorIcons"));
|
||||||
delete_preset->set_icon(get_icon("Remove", "EditorIcons"));
|
delete_preset->set_icon(get_icon("Remove", "EditorIcons"));
|
||||||
connect("confirmed", this, "_export_pck_zip");
|
connect("confirmed", this, "_export_pck_zip");
|
||||||
custom_feature_display->get_parent_control()->add_style_override("panel", get_stylebox("bg", "Tree"));
|
custom_feature_display->get_parent_control()->add_style_override("panel", get_stylebox("bg", "Tree"));
|
||||||
|
@ -58,6 +59,7 @@ void ProjectExportDialog::_notification(int p_what) {
|
||||||
EditorSettings::get_singleton()->set("interface/dialogs/export_bounds", get_rect());
|
EditorSettings::get_singleton()->set("interface/dialogs/export_bounds", get_rect());
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_THEME_CHANGED: {
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
|
duplicate_preset->set_icon(get_icon("Duplicate", "EditorIcons"));
|
||||||
delete_preset->set_icon(get_icon("Remove", "EditorIcons"));
|
delete_preset->set_icon(get_icon("Remove", "EditorIcons"));
|
||||||
Control *panel = custom_feature_display->get_parent_control();
|
Control *panel = custom_feature_display->get_parent_control();
|
||||||
if (panel)
|
if (panel)
|
||||||
|
@ -171,6 +173,7 @@ void ProjectExportDialog::_edit_preset(int p_index) {
|
||||||
runnable->set_disabled(true);
|
runnable->set_disabled(true);
|
||||||
parameters->edit(NULL);
|
parameters->edit(NULL);
|
||||||
presets->unselect_all();
|
presets->unselect_all();
|
||||||
|
duplicate_preset->set_disabled(true);
|
||||||
delete_preset->set_disabled(true);
|
delete_preset->set_disabled(true);
|
||||||
sections->hide();
|
sections->hide();
|
||||||
patches->clear();
|
patches->clear();
|
||||||
|
@ -188,6 +191,7 @@ void ProjectExportDialog::_edit_preset(int p_index) {
|
||||||
sections->show();
|
sections->show();
|
||||||
|
|
||||||
name->set_editable(true);
|
name->set_editable(true);
|
||||||
|
duplicate_preset->set_disabled(false);
|
||||||
delete_preset->set_disabled(false);
|
delete_preset->set_disabled(false);
|
||||||
name->set_text(current->get_name());
|
name->set_text(current->get_name());
|
||||||
runnable->set_disabled(false);
|
runnable->set_disabled(false);
|
||||||
|
@ -428,6 +432,61 @@ void ProjectExportDialog::_name_changed(const String &p_string) {
|
||||||
_update_presets();
|
_update_presets();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProjectExportDialog::_duplicate_preset() {
|
||||||
|
|
||||||
|
Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current());
|
||||||
|
if (current.is_null())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Ref<EditorExportPreset> preset = current->get_platform()->create_preset();
|
||||||
|
ERR_FAIL_COND(!preset.is_valid());
|
||||||
|
|
||||||
|
String name = current->get_name() + "" + itos(1);
|
||||||
|
bool make_runnable = true;
|
||||||
|
int attempt = 2;
|
||||||
|
while (true) {
|
||||||
|
|
||||||
|
bool valid = true;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (valid)
|
||||||
|
break;
|
||||||
|
|
||||||
|
attempt++;
|
||||||
|
name = current->get_name() + " " + itos(attempt);
|
||||||
|
}
|
||||||
|
|
||||||
|
preset->set_name(name);
|
||||||
|
if (make_runnable)
|
||||||
|
preset->set_runnable(make_runnable);
|
||||||
|
preset->set_export_filter(current->get_export_filter());
|
||||||
|
preset->set_include_filter(current->get_include_filter());
|
||||||
|
preset->set_exclude_filter(current->get_exclude_filter());
|
||||||
|
Vector<String> list = current->get_patches();
|
||||||
|
for (int i = 0; i < list.size(); i++) {
|
||||||
|
preset->add_patch(list[i]);
|
||||||
|
}
|
||||||
|
preset->set_custom_features(current->get_custom_features());
|
||||||
|
|
||||||
|
for (const List<PropertyInfo>::Element *E = current->get_properties().front(); E; E = E->next()) {
|
||||||
|
preset->set(E->get().name, current->get(E->get().name));
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorExport::get_singleton()->add_export_preset(preset);
|
||||||
|
_update_presets();
|
||||||
|
_edit_preset(EditorExport::get_singleton()->get_export_preset_count() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
void ProjectExportDialog::_delete_preset() {
|
void ProjectExportDialog::_delete_preset() {
|
||||||
|
|
||||||
Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current());
|
Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current());
|
||||||
|
@ -789,6 +848,7 @@ void ProjectExportDialog::_bind_methods() {
|
||||||
ClassDB::bind_method("_update_parameters", &ProjectExportDialog::_update_parameters);
|
ClassDB::bind_method("_update_parameters", &ProjectExportDialog::_update_parameters);
|
||||||
ClassDB::bind_method("_runnable_pressed", &ProjectExportDialog::_runnable_pressed);
|
ClassDB::bind_method("_runnable_pressed", &ProjectExportDialog::_runnable_pressed);
|
||||||
ClassDB::bind_method("_name_changed", &ProjectExportDialog::_name_changed);
|
ClassDB::bind_method("_name_changed", &ProjectExportDialog::_name_changed);
|
||||||
|
ClassDB::bind_method("_duplicate_preset", &ProjectExportDialog::_duplicate_preset);
|
||||||
ClassDB::bind_method("_delete_preset", &ProjectExportDialog::_delete_preset);
|
ClassDB::bind_method("_delete_preset", &ProjectExportDialog::_delete_preset);
|
||||||
ClassDB::bind_method("_delete_preset_confirm", &ProjectExportDialog::_delete_preset_confirm);
|
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("get_drag_data_fw", &ProjectExportDialog::get_drag_data_fw);
|
||||||
|
@ -842,6 +902,9 @@ ProjectExportDialog::ProjectExportDialog() {
|
||||||
presets->set_drag_forwarding(this);
|
presets->set_drag_forwarding(this);
|
||||||
mc->add_child(presets);
|
mc->add_child(presets);
|
||||||
presets->connect("item_selected", this, "_edit_preset");
|
presets->connect("item_selected", this, "_edit_preset");
|
||||||
|
duplicate_preset = memnew(ToolButton);
|
||||||
|
preset_hb->add_child(duplicate_preset);
|
||||||
|
duplicate_preset->connect("pressed", this, "_duplicate_preset");
|
||||||
delete_preset = memnew(ToolButton);
|
delete_preset = memnew(ToolButton);
|
||||||
preset_hb->add_child(delete_preset);
|
preset_hb->add_child(delete_preset);
|
||||||
delete_preset->connect("pressed", this, "_delete_preset");
|
delete_preset->connect("pressed", this, "_delete_preset");
|
||||||
|
@ -949,6 +1012,7 @@ ProjectExportDialog::ProjectExportDialog() {
|
||||||
//disable by default
|
//disable by default
|
||||||
name->set_editable(false);
|
name->set_editable(false);
|
||||||
runnable->set_disabled(true);
|
runnable->set_disabled(true);
|
||||||
|
duplicate_preset->set_disabled(true);
|
||||||
delete_preset->set_disabled(true);
|
delete_preset->set_disabled(true);
|
||||||
sections->hide();
|
sections->hide();
|
||||||
parameters->edit(NULL);
|
parameters->edit(NULL);
|
||||||
|
|
|
@ -61,6 +61,7 @@ private:
|
||||||
TabContainer *sections;
|
TabContainer *sections;
|
||||||
|
|
||||||
MenuButton *add_preset;
|
MenuButton *add_preset;
|
||||||
|
Button *duplicate_preset;
|
||||||
Button *delete_preset;
|
Button *delete_preset;
|
||||||
ItemList *presets;
|
ItemList *presets;
|
||||||
|
|
||||||
|
@ -108,6 +109,7 @@ private:
|
||||||
void _name_changed(const String &p_string);
|
void _name_changed(const String &p_string);
|
||||||
void _add_preset(int p_platform);
|
void _add_preset(int p_platform);
|
||||||
void _edit_preset(int p_index);
|
void _edit_preset(int p_index);
|
||||||
|
void _duplicate_preset();
|
||||||
void _delete_preset();
|
void _delete_preset();
|
||||||
void _delete_preset_confirm();
|
void _delete_preset_confirm();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue