summaryrefslogtreecommitdiff
path: root/NET/worlds/network/UpgradeDialog.java
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-12 22:33:32 -0800
committerFuwn <[email protected]>2026-02-12 22:33:32 -0800
commitc7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9 (patch)
treedf9f48bf128a6c0186a8e91857d6ff30fe0e9f18 /NET/worlds/network/UpgradeDialog.java
downloadworldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.tar.xz
worldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.zip
Initial commit
Diffstat (limited to 'NET/worlds/network/UpgradeDialog.java')
-rw-r--r--NET/worlds/network/UpgradeDialog.java246
1 files changed, 246 insertions, 0 deletions
diff --git a/NET/worlds/network/UpgradeDialog.java b/NET/worlds/network/UpgradeDialog.java
new file mode 100644
index 0000000..ee77ade
--- /dev/null
+++ b/NET/worlds/network/UpgradeDialog.java
@@ -0,0 +1,246 @@
+package NET.worlds.network;
+
+import NET.worlds.console.Console;
+import NET.worlds.console.MultiLineLabel;
+import NET.worlds.console.PolledDialog;
+import NET.worlds.core.IniFile;
+import java.awt.Button;
+import java.awt.Checkbox;
+import java.awt.Component;
+import java.awt.Event;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.awt.Panel;
+import java.awt.ScrollPane;
+import java.text.MessageFormat;
+import java.text.NumberFormat;
+import java.util.Locale;
+import java.util.Vector;
+
+public class UpgradeDialog extends PolledDialog {
+ private static final long serialVersionUID = -6015193016188781866L;
+ private Button yesButton = new Button(Console.message("Yes-now"));
+ private Button noButton = new Button(Console.message("No-later"));
+ private Button moreInfo = new Button(Console.message("Show-me-more"));
+ private Checkbox startupCheck;
+ private boolean forceUpgrades = IniFile.gamma().getIniInt("forceUpgrades", 1) == 1;
+ private static String instructions = Console.message("Please-uncheck") + " \n" + " \n";
+ private static String forcedInstructions = Console.message("you-can-continue") + " \n" + " \n";
+ private static String title = Console.message("Upgrade");
+ private Vector<Checkbox> checkboxes;
+ private String info;
+ private Vector<String> list;
+ private Vector<Integer> bytes;
+ private boolean first;
+ private boolean chooseOne;
+ private String name;
+ private Component getsFocus;
+ private MultiLineLabel msgLabel;
+
+ public UpgradeDialog(Vector<String> list, Vector<Integer> bytes, boolean first, String name, String info, boolean chooseOne) {
+ super(Console.getFrame(), null, title, false);
+ this.setAlignment(1);
+ this.list = list;
+ this.info = info;
+ this.name = name;
+ this.first = first;
+ this.bytes = bytes;
+ this.chooseOne = chooseOne;
+ this.readySetGo();
+ }
+
+ @Override
+ protected void build() {
+ this.startupCheck = new Checkbox(Console.message("Check-for-up-each"), IniFile.gamma().getIniInt("CheckUpgrades", 1) != 0);
+ int count = this.list.size();
+ this.checkboxes = new Vector<Checkbox>();
+ Panel p = new Panel(new GridLayout(count, 1));
+ Checkbox chk = null;
+
+ for (int i = 0; i < count; i++) {
+ int b = this.bytes.elementAt(i);
+ String kb = NumberFormat.getInstance().format((long)(b / 1000));
+ Object[] arguments = new Object[]{new String(this.list.elementAt(i).toString()), new String(kb)};
+ String msg = MessageFormat.format(Console.message("Kbytes"), arguments);
+ chk = new Checkbox(msg, true);
+ if (!this.forceUpgrades) {
+ p.add(chk);
+ } else {
+ p.add(new MultiLineLabel(msg));
+ }
+
+ this.checkboxes.addElement(chk);
+ }
+
+ GridBagLayout gbag = new GridBagLayout();
+ this.setLayout(gbag);
+ GridBagConstraints c = new GridBagConstraints();
+ c.anchor = 10;
+ c.fill = 0;
+ c.weightx = 1.0;
+ c.weighty = 1.0;
+ c.gridwidth = 0;
+ c.gridheight = 1;
+ c.insets = new Insets(0, 15, 0, 15);
+ Object[] arguments = new Object[]{new String(this.name)};
+ String msg = this.first
+ ? MessageFormat.format(Console.message("dont-have"), arguments)
+ : MessageFormat.format(Console.message("update-available"), arguments);
+ this.add(gbag, new MultiLineLabel(msg + "\n ", 5, 5), c);
+ if (count > 3) {
+ ScrollPane sp = new ScrollPane();
+ GridBagConstraints c2 = new GridBagConstraints();
+ c2.fill = 1;
+ c2.gridwidth = 0;
+ sp.setSize(280, 100);
+ sp.validate();
+ this.add(gbag, sp, c2);
+ sp.add(p);
+ } else {
+ this.add(gbag, p, c);
+ }
+
+ if (!this.forceUpgrades) {
+ this.add(gbag, this.startupCheck, c);
+ }
+
+ this.msgLabel = new MultiLineLabel(this.calcMsg(), 5, 5);
+ this.add(gbag, this.msgLabel, c);
+ c.gridwidth = 2;
+ this.add(gbag, this.getsFocus = this.yesButton, c);
+ if (!this.forceUpgrades || this.first) {
+ c.gridwidth = 0;
+ this.add(gbag, this.noButton, c);
+ c.insets.top = 5;
+ c.insets.bottom = 15;
+ this.add(gbag, this.moreInfo, c);
+ }
+ }
+
+ private String calcMsg() {
+ int totalBytes = 0;
+ if (this.bytes != null) {
+ for (int i = 0; i < this.bytes.size(); i++) {
+ if (this.checkboxes.elementAt(i).getState()) {
+ totalBytes += this.bytes.elementAt(i);
+ }
+ }
+ }
+
+ String msg = "";
+ String ins = this.forceUpgrades ? forcedInstructions : instructions;
+ if (totalBytes == 0) {
+ msg = Console.message("no-entries");
+ return "\n" + msg + " \n \n \n \n" + ins;
+ } else {
+ int modemMins = 10 * totalBytes / 288000 + 1;
+ String modemMinutes = modemMins / 10 + "." + modemMins % 10 + " " + (modemMins == 10 ? Console.message("minute") : Console.message("minutes"));
+ int cableMins = 10 * totalBytes / 1000000 + 1;
+ String cableMinutes = cableMins / 10 + "." + cableMins % 10 + " " + (cableMins == 10 ? Console.message("minute") : Console.message("minutes"));
+ NumberFormat nF = NumberFormat.getNumberInstance(Locale.getDefault());
+ String kb = nF.format((long)(totalBytes / 1000));
+ Object[] arguments = new Object[]{new String(kb), new String(cableMinutes), new String(modemMinutes)};
+ msg = MessageFormat.format(Console.message("entries-total"), arguments);
+ return msg + ins;
+ }
+ }
+
+ @Override
+ public void show() {
+ super.show();
+ this.getsFocus.requestFocus();
+ }
+
+ public synchronized boolean confirmUpgrade() {
+ while (this.isActive()) {
+ try {
+ this.wait();
+ } catch (InterruptedException var2) {
+ }
+ }
+
+ return this.getConfirmed();
+ }
+
+ public int confirmUpgradeFromList() {
+ if (!this.confirmUpgrade()) {
+ return 0;
+ } else {
+ int i = 0;
+
+ while (i < this.bytes.size() && this.checkboxes.elementAt(i).getState()) {
+ i++;
+ }
+
+ return i;
+ }
+ }
+
+ public Vector<String> rejectedList() {
+ if (!this.confirmUpgrade()) {
+ return this.list;
+ } else {
+ Vector<String> v = new Vector<String>();
+
+ for (int i = 0; i < this.bytes.size(); i++) {
+ if (!this.checkboxes.elementAt(i).getState()) {
+ v.addElement(this.list.elementAt(i));
+ }
+ }
+
+ return v;
+ }
+ }
+
+ @Override
+ protected synchronized boolean done(boolean confirmed) {
+ boolean retCode = super.done(confirmed);
+ this.notify();
+ return retCode;
+ }
+
+ @Override
+ public boolean action(Event event, Object what) {
+ if (event.target == this.yesButton) {
+ return this.done(true);
+ } else if (event.target == this.noButton) {
+ return this.done(false);
+ } else {
+ if (event.target == this.moreInfo) {
+ NetUpdate.showInfo(this.info);
+ } else if (event.target == this.startupCheck) {
+ IniFile.gamma().setIniInt("CheckUpgrades", this.startupCheck.getState() ? 1 : 0);
+ } else if (event.target instanceof Checkbox) {
+ if (this.chooseOne) {
+ int i = this.checkboxes.indexOf(event.target);
+ if (((Checkbox)event.target).getState()) {
+ while (--i >= 0) {
+ this.checkboxes.elementAt(i).setState(true);
+ }
+ } else {
+ while (++i < this.checkboxes.size()) {
+ this.checkboxes.elementAt(i).setState(false);
+ }
+ }
+ }
+
+ this.msgLabel.setLabel(this.calcMsg());
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+ @Override
+ public boolean handleEvent(Event event) {
+ return this.forceUpgrades && event.id == 201 ? this.done(true) : super.handleEvent(event);
+ }
+
+ @Override
+ public boolean keyDown(Event event, int key) {
+ return !this.forceUpgrades && key == 27 ? this.done(false) : super.keyDown(event, key);
+ }
+}