From e155bf7101c07be7be19238b088606084871128b Mon Sep 17 00:00:00 2001 From: MEEPofFaith <54301439+MEEPofFaith@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:55:55 -0700 Subject: [PATCH] Cleaner feedback dialog --- core/assets/bundles/bundle.properties | 5 +- core/src/mindustry/core/UI.java | 6 +- core/src/mindustry/mod/Mods.java | 89 +++++++++++++++++---------- 3 files changed, 62 insertions(+), 38 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index aafb00daba..e5fe685aa6 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -185,8 +185,9 @@ mod.scripts.disable = Your device does not support mods with scripts. You must d mod.dependencies.error = [scarlet]Mods are missing dependencies mod.dependencies.download = Download -mod.dependencies.success = Successfully downloaded all dependencies -mod.dependencies.failure = Failed to download some dependencies: +mod.dependencies.status = Import Results +mod.dependencies.success = Successfully downloaded: +mod.dependencies.failure = Failed to download: about.button = About name = Name: diff --git a/core/src/mindustry/core/UI.java b/core/src/mindustry/core/UI.java index 554b483d6d..d634e122b5 100644 --- a/core/src/mindustry/core/UI.java +++ b/core/src/mindustry/core/UI.java @@ -429,13 +429,9 @@ public class UI implements ApplicationListener, Loadable{ } public void showInfoOnHidden(String info, Runnable listener){ - showInfoOnHidden(info, Align.center, listener); - } - - public void showInfoOnHidden(String info, int align, Runnable listener){ new Dialog(""){{ getCell(cont).growX(); - cont.margin(15).add(info).width(400f).wrap().get().setAlignment(align, align); + cont.margin(15).add(info).width(400f).wrap().get().setAlignment(Align.center, Align.center); buttons.button("@ok", this::hide).size(110, 50).pad(4); hidden(listener); closeOnBack(); diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index 5d64a02812..e354f89e14 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -615,7 +615,7 @@ public class Mods implements Loadable{ cont.row(); cont.image().width(300f).pad(2).colspan(2).height(4f).color(Color.scarlet); cont.row(); - cont.add("@mod.errors").wrap().growX().center().get().setAlignment(Align.center); + cont.add("@mod.errors").wrap().growX().center().labelAlign(Align.center); cont.row(); cont.pane(p -> { mods.each(m -> m.enabled() && m.hasContentErrors(), m -> { @@ -655,18 +655,18 @@ public class Mods implements Loadable{ cont.margin(15); cont.add("@mod.dependencies.error"); cont.row(); - cont.image().width(300f).pad(2).colspan(2).height(4f).color(Color.scarlet); + cont.image().width(300f).pad(2).height(4f).color(Color.scarlet); cont.row(); cont.pane(p -> { mods.each(LoadedMod::hasUnmetDependencies, mod -> { - p.add(mod.name).wrap().growX().left().get().setAlignment(Align.left); + p.add(mod.name).wrap().growX().left().labelAlign(Align.left); p.row(); p.table(d -> { mod.missingDependencies.each(dep -> { - d.add(" " + dep).wrap().growX().left().get().setAlignment(Align.left); + d.add(dep).wrap().growX().left().labelAlign(Align.left); d.row(); }); - }).growX().padBottom(8f); + }).growX().padBottom(8f).padLeft(12f); p.row(); }); }).fillX(); @@ -677,40 +677,67 @@ public class Mods implements Loadable{ b.button("@ok", this::hide).size(150, 50); b.button("@mod.dependencies.download", () -> { hide(); - Seq missingDeps = new Seq<>(); + Seq toImport = new Seq<>(); mods.each(LoadedMod::hasUnmetDependencies, mod -> { - mod.missingDependencies.each(missingDeps::addUnique); + mod.missingDependencies.each(toImport::addUnique); }); - int toImport = missingDeps.size; - ui.mods.importDependencies(missingDeps); - - if(missingDeps.isEmpty()){ - ui.showInfoOnHidden(Core.bundle.get("mod.dependencies.success") + "\n\n" + Core.bundle.get("mods.reloadexit"), () -> { - Log.info("Exiting to reload mods."); - Core.app.exit(); - }); - }else{ - String[] fail = {Core.bundle.get("mod.dependencies.failure")}; - missingDeps.each(d -> fail[0] += "\n " + d); - - boolean imported = missingDeps.size < toImport; //Mods were loaded - if(imported){ - fail[0] += "\n\n" + Core.bundle.get("mods.reloadexit"); - } - - ui.showInfoOnHidden(fail[0], Align.left, () -> { - if(imported){ - Log.info("Exiting to reload mods."); - Core.app.exit(); - } - }); - } + Seq remaining = toImport.copy(); + ui.mods.importDependencies(remaining); + toImport.removeAll(remaining); + displayDependencyImportStatus(remaining, toImport); }).size(150, 50); }); }}.show(); } } + private void displayDependencyImportStatus(Seq failed, Seq success){ + new Dialog(""){{ + setFillParent(true); + cont.margin(15); + + cont.add("@mod.dependencies.status").center(); + cont.row(); + cont.image().width(300f).pad(2).height(4f).color(Color.lightGray); + cont.row(); + + cont.pane(p -> { + if(success.any()){ + p.add("@mod.dependencies.success").wrap().fillX().left().labelAlign(Align.left); + p.row(); + p.table(t -> { + success.each(d -> { + t.add(d).wrap().growX().left().labelAlign(Align.left); + t.row(); + }); + }).growX().padBottom(8f).padLeft(12f); + p.row(); + } + + if(failed.any()){ + p.add("@mod.dependencies.failure").wrap().fillX().left().labelAlign(Align.left); + p.row(); + p.table(t -> { + failed.each(d -> { + t.add(d).wrap().growX().left().labelAlign(Align.left); + t.row(); + }); + }).growX().padBottom(8f).padLeft(12f); + } + }).fillX(); + + if(success.any()){ + cont.image().width(300f).pad(2).height(4f).color(Color.lightGray); + cont.row(); + cont.add("@mods.reloadexit").center(); + hidden(() -> { + Log.info("Exiting to reload mods after dependency auto-import."); + Core.app.exit(); + }); + } + }}.show(); + } + private void reload(){ ui.showInfoOnHidden("@mods.reloadexit", () -> { Log.info("Exiting to reload mods.");