|
@@ -38,11 +38,17 @@ public:
|
|
|
List<PropertyInfo> properties;
|
|
|
Ref<ResourceImporter> importer;
|
|
|
Vector<String> paths;
|
|
|
+ Set<StringName> checked;
|
|
|
+ bool checking;
|
|
|
|
|
|
bool _set(const StringName &p_name, const Variant &p_value) {
|
|
|
|
|
|
if (values.has(p_name)) {
|
|
|
values[p_name] = p_value;
|
|
|
+ if (checking) {
|
|
|
+ checked.insert(p_name);
|
|
|
+ _change_notify(String(p_name).utf8().get_data());
|
|
|
+ }
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -63,13 +69,24 @@ public:
|
|
|
for (const List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) {
|
|
|
if (!importer->get_option_visibility(E->get().name, values))
|
|
|
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() {
|
|
|
_change_notify();
|
|
|
}
|
|
|
+
|
|
|
+ ImportDockParameters() {
|
|
|
+ checking = false;
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
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->values.clear();
|
|
|
+ params->checking = false;
|
|
|
+ params->checked.clear();
|
|
|
|
|
|
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->values.clear();
|
|
|
+ params->checking = true;
|
|
|
+ params->checked.clear();
|
|
|
|
|
|
for (List<ResourceImporter::ImportOption>::Element *E = options.front(); E; E = E->next()) {
|
|
|
|
|
@@ -360,11 +381,21 @@ void ImportDock::_reimport() {
|
|
|
Error err = config->load(params->paths[i] + ".import");
|
|
|
ERR_CONTINUE(err != OK);
|
|
|
|
|
|
- config->set_value("remap", "importer", params->importer->get_importer_name());
|
|
|
- config->erase_section("params");
|
|
|
+ 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->erase_section("params");
|
|
|
|
|
|
- for (List<PropertyInfo>::Element *E = params->properties.front(); E; E = E->next()) {
|
|
|
- config->set_value("params", E->get().name, params->values[E->get().name]);
|
|
|
+ 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->save(params->paths[i] + ".import");
|
|
@@ -388,11 +419,20 @@ void ImportDock::_notification(int p_what) {
|
|
|
} 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() {
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("_reimport"), &ImportDock::_reimport);
|
|
|
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("_property_toggled"), &ImportDock::_property_toggled);
|
|
|
}
|
|
|
|
|
|
void ImportDock::initialize_import_options() const {
|
|
@@ -423,6 +463,7 @@ ImportDock::ImportDock() {
|
|
|
import_opts = memnew(EditorInspector);
|
|
|
add_child(import_opts);
|
|
|
import_opts->set_v_size_flags(SIZE_EXPAND_FILL);
|
|
|
+ import_opts->connect("property_toggled", this, "_property_toggled");
|
|
|
|
|
|
hb = memnew(HBoxContainer);
|
|
|
add_child(hb);
|