X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosConfigPyroUI.java;h=c05b6e9197d8d1b66c4708094be327cd20cafb19;hp=7a298a3ca679a6f26df6abc46816d4efcb3b00c6;hb=14900d539c9d379a39ec157bb7e1914aad8fde3c;hpb=ace5f42b5567cff07a61b622171ac364ea8c165d diff --git a/altosui/AltosConfigPyroUI.java b/altosui/AltosConfigPyroUI.java index 7a298a3c..c05b6e91 100644 --- a/altosui/AltosConfigPyroUI.java +++ b/altosui/AltosConfigPyroUI.java @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,18 +18,19 @@ package altosui; +import java.text.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; -import org.altusmetrum.altoslib_4.*; -import org.altusmetrum.altosuilib_2.*; +import org.altusmetrum.altoslib_13.*; +import org.altusmetrum.altosuilib_13.*; public class AltosConfigPyroUI extends AltosUIDialog implements ItemListener, DocumentListener, AltosUnitsListener, ActionListener { - AltosConfigUI owner; + AltosConfigFCUI owner; Container pane; static Insets il = new Insets(4,4,4,4); @@ -87,9 +89,9 @@ public class AltosConfigPyroUI if (units != null) { try { - double v = units.parse(value.getText(), !imperial_units); + double v = units.parse_locale(value.getText(), !imperial_units); set(enabled(), v); - } catch (NumberFormatException ne) { + } catch (ParseException pe) { set(enabled(), 0.0); } } @@ -104,7 +106,7 @@ public class AltosConfigPyroUI double unit_value = new_value; AltosUnits units = AltosPyro.pyro_to_units(flag); if (units != null) - unit_value = units.value(new_value); + unit_value = units.parse_value(new_value); String format; if (scale >= 100) format = "%6.2f"; @@ -129,9 +131,9 @@ public class AltosConfigPyroUI AltosUnits units = AltosPyro.pyro_to_units(flag); try { if (units != null) - return units.parse(value.getText()); - return Double.parseDouble(value.getText()); - } catch (NumberFormatException e) { + return units.parse_locale(value.getText()); + return AltosParse.parse_double_locale(value.getText()); + } catch (ParseException e) { throw new AltosConfigDataException("\"%s\": %s\n", value.getText(), e.getMessage()); } } @@ -184,8 +186,17 @@ public class AltosConfigPyroUI public void set(AltosPyro pyro) { int row = 0; + if ((pyro.flags & AltosPyro.pyro_deprecate) != 0) { + JOptionPane.showMessageDialog(owner, + String.format("Pyro settings “Ascending” and “Descending” are deprecated.\n" + + "Clearing %s configuration.", AltosLib.igniter_name(pyro.channel)), + "Deprecated Pyro Settings", + JOptionPane.ERROR_MESSAGE); + pyro.flags = 0; + owner.set_dirty(); + } for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) { - if ((AltosPyro.pyro_all & flag) != 0) { + if ((AltosPyro.pyro_all_useful & flag) != 0) { items[row].set((pyro.flags & flag) != 0, pyro.get_value(flag)); row++; @@ -198,7 +209,7 @@ public class AltosConfigPyroUI int row = 0; for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) { - if ((AltosPyro.pyro_all & flag) != 0) { + if ((AltosPyro.pyro_all_useful & flag) != 0) { if (items[row].enabled()) { try { p.flags |= flag; @@ -218,7 +229,7 @@ public class AltosConfigPyroUI public void units_changed(boolean imperial_units) { int row = 0; for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) { - if ((AltosPyro.pyro_all & flag) != 0) { + if ((AltosPyro.pyro_all_useful & flag) != 0) { items[row].units_changed(imperial_units); row++; } @@ -231,7 +242,7 @@ public class AltosConfigPyroUI int nrow = 0; for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) - if ((flag & AltosPyro.pyro_all) != 0) + if ((flag & AltosPyro.pyro_all_useful) != 0) nrow++; items = new PyroItem[nrow]; @@ -249,7 +260,7 @@ public class AltosConfigPyroUI y++; for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) - if ((flag & AltosPyro.pyro_all) != 0) { + if ((flag & AltosPyro.pyro_all_useful) != 0) { items[row] = new PyroItem(ui, flag, x, y + row); row++; } @@ -278,24 +289,55 @@ public class AltosConfigPyroUI return pyros; } + JLabel pyro_firing_time_label; + JComboBox pyro_firing_time_value; + + static String[] pyro_firing_time_values = { + "0.050", "0.100", "0.250", "0.500", "1.0", "2.0" + }; + + boolean initializing; + + public void set_pyro_firing_time(double new_pyro_firing_time) { + initializing = true; + pyro_firing_time_value.setSelectedItem(Double.toString(new_pyro_firing_time)); + pyro_firing_time_value.setEnabled(new_pyro_firing_time >= 0); + initializing = false; + } + + public double get_pyro_firing_time() throws AltosConfigDataException { + String v = pyro_firing_time_value.getSelectedItem().toString(); + + try { + return AltosParse.parse_double_locale(v); + } catch (ParseException e) { + throw new AltosConfigDataException("Invalid pyro firing time \"%s\"", v); + } + } + public void set_dirty() { - owner.set_dirty(); + if (!initializing) + owner.set_dirty(); } public void itemStateChanged(ItemEvent e) { - owner.set_dirty(); + if (!initializing) + owner.set_dirty(); } public void changedUpdate(DocumentEvent e) { - owner.set_dirty(); + if (!initializing) + owner.set_dirty(); } public void insertUpdate(DocumentEvent e) { - owner.set_dirty(); + if (!initializing) + owner.set_dirty(); } public void removeUpdate(DocumentEvent e) { - owner.set_dirty(); + if (!initializing) + owner.set_dirty(); } public void units_changed(boolean imperial_units) { @@ -303,10 +345,12 @@ public class AltosConfigPyroUI columns[c].units_changed(imperial_units); int r = 0; for (int flag = 1; flag <= AltosPyro.pyro_all; flag <<= 1) { - String n = AltosPyro.pyro_to_name(flag); - if (n != null) { - labels[r].setText(n); - r++; + if ((flag & AltosPyro.pyro_all_useful) != 0) { + String n = AltosPyro.pyro_to_name(flag); + if (n != null) { + labels[r].setText(n); + r++; + } } } } @@ -314,9 +358,9 @@ public class AltosConfigPyroUI /* A window listener to catch closing events and tell the config code */ class ConfigListener extends WindowAdapter { AltosConfigPyroUI ui; - AltosConfigUI owner; + AltosConfigFCUI owner; - public ConfigListener(AltosConfigPyroUI this_ui, AltosConfigUI this_owner) { + public ConfigListener(AltosConfigPyroUI this_ui, AltosConfigFCUI this_owner) { ui = this_ui; owner = this_owner; } @@ -334,7 +378,7 @@ public class AltosConfigPyroUI setVisible(false); } - public AltosConfigPyroUI(AltosConfigUI in_owner, AltosPyro[] pyros) { + public AltosConfigPyroUI(AltosConfigFCUI in_owner, AltosPyro[] pyros, double pyro_firing_time) { super(in_owner, "Configure Pyro Channels", false); @@ -347,7 +391,7 @@ public class AltosConfigPyroUI int nrow = 0; for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) - if ((flag & AltosPyro.pyro_all) != 0) + if ((flag & AltosPyro.pyro_all_useful) != 0) nrow++; labels = new JLabel[nrow]; @@ -357,18 +401,20 @@ public class AltosConfigPyroUI for (int flag = 1; flag <= AltosPyro.pyro_all; flag <<= 1) { String n; - n = AltosPyro.pyro_to_name(flag); - if (n != null) { - c = new GridBagConstraints(); - c.gridx = 0; c.gridy = row; - c.gridwidth = 1; - c.fill = GridBagConstraints.NONE; - c.anchor = GridBagConstraints.LINE_START; - c.insets = il; - JLabel label = new JLabel(n); - pane.add(label, c); - labels[row-1] = label; - row++; + if ((flag & AltosPyro.pyro_all_useful) != 0) { + n = AltosPyro.pyro_to_name(flag); + if (n != null) { + c = new GridBagConstraints(); + c.gridx = 0; c.gridy = row; + c.gridwidth = 1; + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.LINE_START; + c.insets = il; + JLabel label = new JLabel(n); + pane.add(label, c); + labels[row-1] = label; + row++; + } } } @@ -379,6 +425,32 @@ public class AltosConfigPyroUI columns[i].set(pyros[i]); } + /* Pyro firing time */ + c = new GridBagConstraints(); + c.gridx = 0; c.gridy = row; + c.gridwidth = 2; + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.LINE_START; + c.insets = il; + c.ipady = 5; + pyro_firing_time_label = new JLabel("Pyro Firing Time(s):"); + pane.add(pyro_firing_time_label, c); + + c = new GridBagConstraints(); + c.gridx = 2; c.gridy = row; + c.gridwidth = 7; + c.fill = GridBagConstraints.HORIZONTAL; + c.weightx = 1; + c.anchor = GridBagConstraints.LINE_START; + c.insets = ir; + c.ipady = 5; + pyro_firing_time_value = new JComboBox(pyro_firing_time_values); + pyro_firing_time_value.setEditable(true); + pyro_firing_time_value.addItemListener(this); + set_pyro_firing_time(pyro_firing_time); + pane.add(pyro_firing_time_value, c); + pyro_firing_time_value.setToolTipText("Length of extra pyro channel firing pulse"); + c = new GridBagConstraints(); c.gridx = pyros.length*2-1; c.fill = GridBagConstraints.HORIZONTAL;