Improve import dock usability when selecting multiple files, only change what was modified on re-import.
This commit is contained in:
parent
7f3093d3b9
commit
ad22ef28a9
3 changed files with 48 additions and 5 deletions
|
@ -2303,6 +2303,7 @@ void EditorInspector::_bind_methods() {
|
||||||
ADD_SIGNAL(MethodInfo("resource_selected", PropertyInfo(Variant::OBJECT, "res"), PropertyInfo(Variant::STRING, "prop")));
|
ADD_SIGNAL(MethodInfo("resource_selected", PropertyInfo(Variant::OBJECT, "res"), PropertyInfo(Variant::STRING, "prop")));
|
||||||
ADD_SIGNAL(MethodInfo("object_id_selected", PropertyInfo(Variant::INT, "id")));
|
ADD_SIGNAL(MethodInfo("object_id_selected", PropertyInfo(Variant::INT, "id")));
|
||||||
ADD_SIGNAL(MethodInfo("property_edited", PropertyInfo(Variant::STRING, "property")));
|
ADD_SIGNAL(MethodInfo("property_edited", PropertyInfo(Variant::STRING, "property")));
|
||||||
|
ADD_SIGNAL(MethodInfo("property_toggled", PropertyInfo(Variant::STRING, "property"), PropertyInfo(Variant::BOOL, "checked")));
|
||||||
ADD_SIGNAL(MethodInfo("restart_requested"));
|
ADD_SIGNAL(MethodInfo("restart_requested"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,11 +38,17 @@ public:
|
||||||
List<PropertyInfo> properties;
|
List<PropertyInfo> properties;
|
||||||
Ref<ResourceImporter> importer;
|
Ref<ResourceImporter> importer;
|
||||||
Vector<String> paths;
|
Vector<String> paths;
|
||||||
|
Set<StringName> checked;
|
||||||
|
bool checking;
|
||||||
|
|
||||||
bool _set(const StringName &p_name, const Variant &p_value) {
|
bool _set(const StringName &p_name, const Variant &p_value) {
|
||||||
|
|
||||||
if (values.has(p_name)) {
|
if (values.has(p_name)) {
|
||||||
values[p_name] = p_value;
|
values[p_name] = p_value;
|
||||||
|
if (checking) {
|
||||||
|
checked.insert(p_name);
|
||||||
|
_change_notify(String(p_name).utf8().get_data());
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,13 +69,24 @@ public:
|
||||||
for (const List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) {
|
for (const List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) {
|
||||||
if (!importer->get_option_visibility(E->get().name, values))
|
if (!importer->get_option_visibility(E->get().name, values))
|
||||||
continue;
|
continue;
|
||||||
p_list->push_back(E->get());
|
PropertyInfo pi = E->get();
|
||||||
|
if (checking) {
|
||||||
|
pi.usage |= PROPERTY_USAGE_CHECKABLE;
|
||||||
|
if (checked.has(E->get().name)) {
|
||||||
|
pi.usage |= PROPERTY_USAGE_CHECKED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p_list->push_back(pi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void update() {
|
void update() {
|
||||||
_change_notify();
|
_change_notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImportDockParameters() {
|
||||||
|
checking = false;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void ImportDock::set_edit_path(const String &p_path) {
|
void ImportDock::set_edit_path(const String &p_path) {
|
||||||
|
@ -125,6 +142,8 @@ void ImportDock::_update_options(const Ref<ConfigFile> &p_config) {
|
||||||
|
|
||||||
params->properties.clear();
|
params->properties.clear();
|
||||||
params->values.clear();
|
params->values.clear();
|
||||||
|
params->checking = false;
|
||||||
|
params->checked.clear();
|
||||||
|
|
||||||
for (List<ResourceImporter::ImportOption>::Element *E = options.front(); E; E = E->next()) {
|
for (List<ResourceImporter::ImportOption>::Element *E = options.front(); E; E = E->next()) {
|
||||||
|
|
||||||
|
@ -205,6 +224,8 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) {
|
||||||
|
|
||||||
params->properties.clear();
|
params->properties.clear();
|
||||||
params->values.clear();
|
params->values.clear();
|
||||||
|
params->checking = true;
|
||||||
|
params->checked.clear();
|
||||||
|
|
||||||
for (List<ResourceImporter::ImportOption>::Element *E = options.front(); E; E = E->next()) {
|
for (List<ResourceImporter::ImportOption>::Element *E = options.front(); E; E = E->next()) {
|
||||||
|
|
||||||
|
@ -360,12 +381,22 @@ void ImportDock::_reimport() {
|
||||||
Error err = config->load(params->paths[i] + ".import");
|
Error err = config->load(params->paths[i] + ".import");
|
||||||
ERR_CONTINUE(err != OK);
|
ERR_CONTINUE(err != OK);
|
||||||
|
|
||||||
|
if (params->checking) {
|
||||||
|
//update only what edited (checkboxes)
|
||||||
|
for (List<PropertyInfo>::Element *E = params->properties.front(); E; E = E->next()) {
|
||||||
|
if (params->checked.has(E->get().name)) {
|
||||||
|
config->set_value("params", E->get().name, params->values[E->get().name]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//override entirely
|
||||||
config->set_value("remap", "importer", params->importer->get_importer_name());
|
config->set_value("remap", "importer", params->importer->get_importer_name());
|
||||||
config->erase_section("params");
|
config->erase_section("params");
|
||||||
|
|
||||||
for (List<PropertyInfo>::Element *E = params->properties.front(); E; E = E->next()) {
|
for (List<PropertyInfo>::Element *E = params->properties.front(); E; E = E->next()) {
|
||||||
config->set_value("params", E->get().name, params->values[E->get().name]);
|
config->set_value("params", E->get().name, params->values[E->get().name]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
config->save(params->paths[i] + ".import");
|
config->save(params->paths[i] + ".import");
|
||||||
}
|
}
|
||||||
|
@ -388,11 +419,20 @@ void ImportDock::_notification(int p_what) {
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImportDock::_property_toggled(const StringName &p_prop, bool p_checked) {
|
||||||
|
if (p_checked) {
|
||||||
|
params->checked.insert(p_prop);
|
||||||
|
} else {
|
||||||
|
params->checked.erase(p_prop);
|
||||||
|
}
|
||||||
|
}
|
||||||
void ImportDock::_bind_methods() {
|
void ImportDock::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("_reimport"), &ImportDock::_reimport);
|
ClassDB::bind_method(D_METHOD("_reimport"), &ImportDock::_reimport);
|
||||||
ClassDB::bind_method(D_METHOD("_preset_selected"), &ImportDock::_preset_selected);
|
ClassDB::bind_method(D_METHOD("_preset_selected"), &ImportDock::_preset_selected);
|
||||||
ClassDB::bind_method(D_METHOD("_importer_selected"), &ImportDock::_importer_selected);
|
ClassDB::bind_method(D_METHOD("_importer_selected"), &ImportDock::_importer_selected);
|
||||||
|
ClassDB::bind_method(D_METHOD("_property_toggled"), &ImportDock::_property_toggled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportDock::initialize_import_options() const {
|
void ImportDock::initialize_import_options() const {
|
||||||
|
@ -423,6 +463,7 @@ ImportDock::ImportDock() {
|
||||||
import_opts = memnew(EditorInspector);
|
import_opts = memnew(EditorInspector);
|
||||||
add_child(import_opts);
|
add_child(import_opts);
|
||||||
import_opts->set_v_size_flags(SIZE_EXPAND_FILL);
|
import_opts->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
import_opts->connect("property_toggled", this, "_property_toggled");
|
||||||
|
|
||||||
hb = memnew(HBoxContainer);
|
hb = memnew(HBoxContainer);
|
||||||
add_child(hb);
|
add_child(hb);
|
||||||
|
|
|
@ -60,6 +60,7 @@ class ImportDock : public VBoxContainer {
|
||||||
void _importer_selected(int i_idx);
|
void _importer_selected(int i_idx);
|
||||||
void _update_options(const Ref<ConfigFile> &p_config = Ref<ConfigFile>());
|
void _update_options(const Ref<ConfigFile> &p_config = Ref<ConfigFile>());
|
||||||
|
|
||||||
|
void _property_toggled(const StringName &p_prop, bool p_checked);
|
||||||
void _reimport();
|
void _reimport();
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|
Loading…
Reference in a new issue