From e903133b95ae496ce579ade7575c6d536c2c2890 Mon Sep 17 00:00:00 2001 From: haraldwolff Date: Fri, 9 Sep 2016 00:57:02 +0200 Subject: [PATCH] WIP-160909 Simulation / MultiDevice --- .classpath | 2 +- ...bstractPulsCounterApplicationListener.java | 3 - .../pulscounter/PulsCounterApplication.java | 41 ++- .../PulsCounterApplicationListener.java | 4 - .../pulscounter/device/IDeviceConnector.java | 4 +- .../device/ServiceLinkDeviceConnector.java | 71 ++++- .../pulscounter/device/SimulatedCounter.java | 160 ++++++++++++ .../SimulatedCounterSettingsDialog.java | 108 ++++++++ src/org/hwo/pulscounter/ui/BatchRunner.java | 11 - .../hwo/pulscounter/ui/ChannelDisplay.java | 29 ++- .../hwo/pulscounter/ui/DeviceTestFrame.java | 11 +- src/org/hwo/pulscounter/ui/NewMainWindow.java | 245 ++++++++++++------ 12 files changed, 538 insertions(+), 151 deletions(-) create mode 100644 src/org/hwo/pulscounter/device/SimulatedCounter.java create mode 100644 src/org/hwo/pulscounter/device/SimulatedCounterSettingsDialog.java diff --git a/.classpath b/.classpath index 34fa454..f0e2e47 100644 --- a/.classpath +++ b/.classpath @@ -6,6 +6,6 @@ - + diff --git a/src/org/hwo/pulscounter/AbstractPulsCounterApplicationListener.java b/src/org/hwo/pulscounter/AbstractPulsCounterApplicationListener.java index 5dc6716..0c978d2 100644 --- a/src/org/hwo/pulscounter/AbstractPulsCounterApplicationListener.java +++ b/src/org/hwo/pulscounter/AbstractPulsCounterApplicationListener.java @@ -2,9 +2,6 @@ package org.hwo.pulscounter; public abstract class AbstractPulsCounterApplicationListener implements PulsCounterApplicationListener { - @Override - public void serialPortChanged() { - } } diff --git a/src/org/hwo/pulscounter/PulsCounterApplication.java b/src/org/hwo/pulscounter/PulsCounterApplication.java index 69c61da..1c23101 100644 --- a/src/org/hwo/pulscounter/PulsCounterApplication.java +++ b/src/org/hwo/pulscounter/PulsCounterApplication.java @@ -3,6 +3,8 @@ package org.hwo.pulscounter; import static org.hwo.logging.Logging.log; import static org.hwo.logging.LogLevel.*; +import java.awt.EventQueue; +import java.awt.Frame; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -19,6 +21,9 @@ import java.util.Vector; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; +import javax.swing.JFrame; + +import org.hsqldb.persist.EventLogInterface; import org.hwo.StringHelper; import org.hwo.configuration.ConfigurableObjects; import org.hwo.io.NewSerialPort.NewSerialPort; @@ -27,6 +32,7 @@ import org.hwo.servicelink.ServiceLink; import org.hwo.servicelink.ServiceLinkListener; import org.hwo.pulscounter.device.IDeviceConnector; import org.hwo.pulscounter.device.ServiceLinkDeviceConnector; +import org.hwo.pulscounter.device.SimulatedCounter; import org.hwo.pulscounter.ui.AppSettingsListener; import org.hwo.pulscounter.ui.BatchRunner; import org.hwo.pulscounter.ui.NewMainWindow; @@ -142,7 +148,10 @@ public class PulsCounterApplication implements ServiceLinkListener{ /* Initialize default configuration */ applicationConfiguration.setProperty("ui.class", NewMainWindow.class.getCanonicalName()); - applicationConfiguration.setProperty("interface.classes", StringHelper.join(new String[]{ServiceLinkDeviceConnector.class.getCanonicalName() }, ",")); + applicationConfiguration.setProperty("interface.classes", StringHelper.join(new String[]{ + ServiceLinkDeviceConnector.class.getCanonicalName(), + SimulatedCounter.class.getCanonicalName() + }, ",")); try { @@ -187,7 +196,7 @@ public class PulsCounterApplication implements ServiceLinkListener{ public void start(){ initialize(); - + String uiClassName = applicationConfiguration.getProperty("ui.class"); try { @@ -246,14 +255,18 @@ public class PulsCounterApplication implements ServiceLinkListener{ log(INFO,"Application shutdown..."); - + /* Dispose all left frames */ + for (Frame frame: JFrame.getFrames()){ + frame.setVisible(false); + frame.dispose(); + } if (shouldSaveConfiguration){ applicationConfiguration.setProperty("interfaces.n", Integer.toString(interfaces.size())); for (int n=0;n %s",serial,connectionSettings); + serial = Integer.parseInt(connectionSettings); + } + } + + @Override + public String getConnectionSettingsText() { + return String.format("Device Serial: %d\nSimulated Values", serial); + } + + @Override + public int[] getCounters() { + int i = random.nextInt(); + + values[ i & 0x1F ] += random.nextInt() & 0x07; + + for (i=0;i<8;i++){ + analogs[i] += (float)(random.nextFloat() * 0.6)-0.3; + if (analogs[i] > 10.0f){ + analogs[i] = 10.0f; + } + if (analogs[i] < 0.0f){ + analogs[i] = 0.0f; + } + } + + inputs = random.nextInt(); + + return values; + } + + @Override + public void setCounters(int[] values) { + this.values = values; + } + + @Override + public int getCounter(int channel) { + return values[channel]; + } + + @Override + public void setCounter(int channel, int counter) { + values[channel] = counter; + } + + @Override + public int[] getSimpleScript() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setSimpleScript(int[] simpleScript) { + // TODO Auto-generated method stub + + } + + @Override + public int getInputs() { + return inputs; + } + + @Override + public int getOutputs() { + return outputs; + } + + @Override + public void setOutputs(int outputs) { + this.outputs = outputs; + } + + @Override + public int getPullups() { + return pullups; + } + + @Override + public void setPullups(int pullups) { + this.pullups = pullups; + } + + @Override + public int getInverts() { + return inverts; + } + + @Override + public void setInverts(int inverts) { + this.inverts = inverts; + } + + @Override + public float[] getAnalogs() { + return analogs; + } + + @Override + public float getAnalog(int channel) { + return analogs[channel]; + } + +} diff --git a/src/org/hwo/pulscounter/device/SimulatedCounterSettingsDialog.java b/src/org/hwo/pulscounter/device/SimulatedCounterSettingsDialog.java new file mode 100644 index 0000000..32619d0 --- /dev/null +++ b/src/org/hwo/pulscounter/device/SimulatedCounterSettingsDialog.java @@ -0,0 +1,108 @@ +package org.hwo.pulscounter.device; + +import java.awt.BorderLayout; +import java.awt.FlowLayout; + +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; +import java.awt.GridBagLayout; +import javax.swing.JLabel; +import java.awt.GridBagConstraints; +import javax.swing.JTextField; +import java.awt.Insets; + +public class SimulatedCounterSettingsDialog extends JDialog { + + public static boolean show(SimulatedCounter counter){ + SimulatedCounterSettingsDialog dlg = new SimulatedCounterSettingsDialog(); + dlg.setSerial(counter.getConnectionSettings()); + dlg.setVisible(true); + + if (dlg.accepted){ + counter.setConnectionSettings(dlg.getSerial()); + dlg.dispose(); + return true; + } + return false; + } + + + private final JPanel contentPanel = new JPanel(); + + private boolean accepted; + private JTextField tfSerial; + + public SimulatedCounterSettingsDialog() { + setTitle("Simulierter Zähler"); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + setBounds(100, 100, 450, 300); + setModalityType(ModalityType.APPLICATION_MODAL); + getContentPane().setLayout(new BorderLayout()); + contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); + getContentPane().add(contentPanel, BorderLayout.CENTER); + GridBagLayout gbl_contentPanel = new GridBagLayout(); + gbl_contentPanel.columnWidths = new int[]{0, 0, 0}; + gbl_contentPanel.rowHeights = new int[]{0, 0}; + gbl_contentPanel.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE}; + gbl_contentPanel.rowWeights = new double[]{0.0, Double.MIN_VALUE}; + contentPanel.setLayout(gbl_contentPanel); + { + JLabel lblAnschluss = new JLabel("Seriennummer:"); + GridBagConstraints gbc_lblAnschluss = new GridBagConstraints(); + gbc_lblAnschluss.insets = new Insets(0, 0, 0, 5); + gbc_lblAnschluss.anchor = GridBagConstraints.EAST; + gbc_lblAnschluss.gridx = 0; + gbc_lblAnschluss.gridy = 0; + contentPanel.add(lblAnschluss, gbc_lblAnschluss); + } + { + tfSerial = new JTextField(); + GridBagConstraints gbc_tfSerial = new GridBagConstraints(); + gbc_tfSerial.anchor = GridBagConstraints.NORTH; + gbc_tfSerial.fill = GridBagConstraints.HORIZONTAL; + gbc_tfSerial.gridx = 1; + gbc_tfSerial.gridy = 0; + contentPanel.add(tfSerial, gbc_tfSerial); + tfSerial.setColumns(10); + } + { + JPanel buttonPane = new JPanel(); + buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); + getContentPane().add(buttonPane, BorderLayout.SOUTH); + { + JButton okButton = new JButton("OK"); + okButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + accepted = true; + setVisible(false); + } + }); + okButton.setActionCommand("OK"); + buttonPane.add(okButton); + getRootPane().setDefaultButton(okButton); + } + { + JButton cancelButton = new JButton("Cancel"); + cancelButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + setVisible(false); + } + }); + cancelButton.setActionCommand("Cancel"); + buttonPane.add(cancelButton); + } + } + } + + public String getSerial(){ + return tfSerial.getText(); + } + public void setSerial(String serial){ + tfSerial.setText(serial); + } + +} diff --git a/src/org/hwo/pulscounter/ui/BatchRunner.java b/src/org/hwo/pulscounter/ui/BatchRunner.java index c1a7e25..2aa263b 100644 --- a/src/org/hwo/pulscounter/ui/BatchRunner.java +++ b/src/org/hwo/pulscounter/ui/BatchRunner.java @@ -44,17 +44,6 @@ public class BatchRunner implements PulsCounterApplicationListener{ pulsCounterApplication.notifyUiIsFinished(false); } - @Override - public void serialPortChanged() { - } - - @Override - public void connectionStateChanged(Boolean connected) { - if (connected){ - } - - } - @Override public void messageArrived(String message) { System.err.println(message); diff --git a/src/org/hwo/pulscounter/ui/ChannelDisplay.java b/src/org/hwo/pulscounter/ui/ChannelDisplay.java index 539847e..f0ab819 100644 --- a/src/org/hwo/pulscounter/ui/ChannelDisplay.java +++ b/src/org/hwo/pulscounter/ui/ChannelDisplay.java @@ -151,7 +151,6 @@ public class ChannelDisplay extends JPanel { lName = new JTextField(); lName.setEditable(false); - lName.setForeground(Color.LIGHT_GRAY); lName.setInheritsPopupMenu(true); GridBagConstraints gbc_lName = new GridBagConstraints(); gbc_lName.fill = GridBagConstraints.HORIZONTAL; @@ -291,7 +290,13 @@ public class ChannelDisplay extends JPanel { } public void setCounter(Integer counter) { this.counter = counter; - tfCounter.setText(String.format("%d", counter)); + if (counter != null){ + tfCounter.setText(String.format("%d", counter)); + tfCounter.setEnabled(true); + } else { + tfCounter.setEnabled(false); + tfCounter.setText(""); + } } public Double getVoltage() { @@ -299,7 +304,13 @@ public class ChannelDisplay extends JPanel { } public void setVoltage(Double voltage) { this.voltage = voltage; - tfAnalog.setText(String.format("%.02f V",voltage)); + if (voltage != null){ + tfAnalog.setText(String.format("%.02f V",voltage)); + tfAnalog.setEnabled(true); + } else { + tfAnalog.setEnabled(false); + tfAnalog.setText(""); + } } public void setChannelName(String channelName) { @@ -317,4 +328,16 @@ public class ChannelDisplay extends JPanel { return lName.getText(); } + @Override + public void setEnabled(boolean enabled) { + if (enabled){ + } else { + setVoltage(null); + setCounter(null); + setOutput(false); + setInput(false); + setPullup(false); + } + } + } diff --git a/src/org/hwo/pulscounter/ui/DeviceTestFrame.java b/src/org/hwo/pulscounter/ui/DeviceTestFrame.java index e40aec4..d727321 100644 --- a/src/org/hwo/pulscounter/ui/DeviceTestFrame.java +++ b/src/org/hwo/pulscounter/ui/DeviceTestFrame.java @@ -188,17 +188,11 @@ public class DeviceTestFrame extends JFrame implements PulsCounterApplicationLis lMessages.setModel(messageListModel); application().addPulsCounterApplicationListener(this); - application().fireConnectionStateChanged(false); setVisible(true); } - @Override - public void serialPortChanged() { - // TODO Auto-generated method stub - - } - + /* @Override public void connectionStateChanged(Boolean connected) { @@ -237,7 +231,8 @@ public class DeviceTestFrame extends JFrame implements PulsCounterApplicationLis } } - + */ + @Override public synchronized void messageArrived(String message) { if (EventQueue.isDispatchThread()){ diff --git a/src/org/hwo/pulscounter/ui/NewMainWindow.java b/src/org/hwo/pulscounter/ui/NewMainWindow.java index 36a11e6..a90b426 100644 --- a/src/org/hwo/pulscounter/ui/NewMainWindow.java +++ b/src/org/hwo/pulscounter/ui/NewMainWindow.java @@ -7,6 +7,7 @@ import java.awt.GridBagLayout; import java.awt.BorderLayout; import javax.swing.JToolBar; import javax.swing.JSplitPane; +import javax.swing.JTextArea; import javax.swing.JPanel; import java.awt.GridBagConstraints; import javax.swing.border.TitledBorder; @@ -21,11 +22,13 @@ import org.hwo.pulscounter.PulsCounterApplication; import org.hwo.pulscounter.PulsCounterApplicationListener; import org.hwo.pulscounter.SnapshotManager.Notification; import org.hwo.pulscounter.device.IDeviceConnector; +import org.hwo.pulscounter.device.NoDeviceConnectionException; import org.hwo.servicelink.ServiceLinkException; import org.hwo.servicelink.ServiceLinkRequestFailedException; import org.hwo.tasklet.Tasklet; import org.hwo.tasklet.TaskletListener; import org.hwo.tasklet.TaskletManager; +import org.hwo.ui.JObjectSelector; import org.hwo.ui.dialog.SerialPortChooser; import org.omg.CORBA.Environment; @@ -69,8 +72,13 @@ import javax.swing.event.ChangeListener; import javax.swing.plaf.metal.MetalBorders.ToolBarBorder; import javax.swing.event.ChangeEvent; import static org.hwo.logging.Logging.log; +import static org.hwo.logging.LogLevel.*; + import javax.swing.event.ListSelectionListener; import javax.swing.event.ListSelectionEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.WindowAdapter; public class NewMainWindow implements PulsCounterApplicationListener, TaskletListener{ @@ -82,9 +90,10 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis private FlexibleObjectListModel lmInterfaces = new FlexibleObjectListModel<>(); + private BackgroundThread backgroundThread; + private JFrame frmSynolog; private JSplitPane splitter; - private JTextField tfConnection; private JButton btnSetup; private DefaultListModel messageListModel; @@ -115,7 +124,7 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis private JButton bIntfAdd; private JButton bIntfDel; private JPanel panel_4; - private JTextField tfConnectionSettings; + private JTextArea tfConnectionSettings; public static void startGUI(){ @@ -172,9 +181,6 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis application().addPulsCounterApplicationListener(this); - application().fireConnectionStateChanged(); - application().fireSerialPortChanged(); - application().message("Synololog Applikation wurde gestartet."); timerReconnect.scheduleAtFixedRate(new TimerTask() { @@ -211,50 +217,24 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis } - frmSynolog.addWindowListener(new WindowListener() { - - @Override - public void windowOpened(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowIconified(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowDeiconified(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowDeactivated(WindowEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void windowClosing(WindowEvent e) { - } + frmSynolog.addWindowListener(new WindowAdapter() { @Override public void windowClosed(WindowEvent e) { - application().notifyUiIsFinished(true); - + backgroundThread.exit(); + application().notifyUiIsFinished(true); } - @Override - public void windowActivated(WindowEvent e) { - // TODO Auto-generated method stub - - } }); - lmInterfaces.setItems(pulsCounterApplication.getInterfaces()); + //lmInterfaces.setItems(pulsCounterApplication.getInterfaces()); + if (pulsCounterApplication.getInterfaces().size()>0){ + interfacesChanged(pulsCounterApplication); + lInterfaces.setSelectedIndex(0); + } + + backgroundThread = new BackgroundThread(); + backgroundThread.start(); frmSynolog.setVisible(true); } @@ -364,9 +344,9 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis splitter.setRightComponent(panel); GridBagLayout gbl_panel = new GridBagLayout(); gbl_panel.columnWidths = new int[]{0, 0}; - gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0}; + gbl_panel.rowHeights = new int[]{0, 0, 0, 0}; gbl_panel.columnWeights = new double[]{1.0, Double.MIN_VALUE}; - gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 1.0, 0.0, Double.MIN_VALUE}; + gbl_panel.rowWeights = new double[]{0.0, 1.0, 0.0, Double.MIN_VALUE}; panel.setLayout(gbl_panel); JPanel panel_1 = new JPanel(); @@ -381,9 +361,9 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis panel.add(panel_1, gbc_panel_1); GridBagLayout gbl_panel_1 = new GridBagLayout(); gbl_panel_1.columnWidths = new int[]{0, 0, 0}; - gbl_panel_1.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0}; + gbl_panel_1.rowHeights = new int[]{0, 0, 0, 0, 0}; gbl_panel_1.columnWeights = new double[]{1.0, 1.0, Double.MIN_VALUE}; - gbl_panel_1.rowWeights = new double[]{0.0, 1.0, 1.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; + gbl_panel_1.rowWeights = new double[]{0.0, 1.0, 1.0, 0.0, Double.MIN_VALUE}; panel_1.setLayout(gbl_panel_1); bIntfAdd = new JButton("+"); @@ -423,6 +403,17 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis panel_1.add(scrollPane_2, gbc_scrollPane_2); lInterfaces = new JList(lmInterfaces); + lInterfaces.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if ((e.getClickCount()==2)&&(e.getButton()==e.BUTTON1)){ + if (selectedDeviceInterface != null){ + selectedDeviceInterface.showConnctionSetup(); + frmSynolog.repaint(); + } + } + } + }); lInterfaces.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { selectedInterfaceChanged(); @@ -445,7 +436,7 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis panel_4.setBorder(new TitledBorder(null, "Anschlusseinstellungen", TitledBorder.LEADING, TitledBorder.TOP, null, null)); GridBagConstraints gbc_panel_4 = new GridBagConstraints(); gbc_panel_4.gridwidth = 2; - gbc_panel_4.insets = new Insets(0, 0, 5, 5); + gbc_panel_4.insets = new Insets(0, 0, 5, 0); gbc_panel_4.fill = GridBagConstraints.BOTH; gbc_panel_4.gridx = 0; gbc_panel_4.gridy = 2; @@ -457,7 +448,7 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis gbl_panel_4.rowWeights = new double[]{1.0, Double.MIN_VALUE}; panel_4.setLayout(gbl_panel_4); - tfConnectionSettings = new JTextField(); + tfConnectionSettings = new JTextArea(); tfConnectionSettings.setEditable(false); GridBagConstraints gbc_tfConnectionSettings = new GridBagConstraints(); gbc_tfConnectionSettings.fill = GridBagConstraints.BOTH; @@ -467,25 +458,12 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis tfConnectionSettings.setColumns(10); GridBagConstraints gbc_cbTrimDevice = new GridBagConstraints(); + gbc_cbTrimDevice.gridwidth = 2; gbc_cbTrimDevice.anchor = GridBagConstraints.WEST; - gbc_cbTrimDevice.insets = new Insets(0, 0, 5, 5); gbc_cbTrimDevice.gridx = 0; - gbc_cbTrimDevice.gridy = 4; + gbc_cbTrimDevice.gridy = 3; panel_1.add(cbTrimDevice, gbc_cbTrimDevice); - tfConnection = new JTextField(); - tfConnection.setHorizontalAlignment(SwingConstants.CENTER); - tfConnection.setText("..."); - tfConnection.setBackground(Color.WHITE); - tfConnection.setEditable(false); - GridBagConstraints gbc_tfConnection = new GridBagConstraints(); - gbc_tfConnection.fill = GridBagConstraints.HORIZONTAL; - gbc_tfConnection.gridwidth = 2; - gbc_tfConnection.gridx = 0; - gbc_tfConnection.gridy = 5; - panel_1.add(tfConnection, gbc_tfConnection); - tfConnection.setColumns(10); - JPanel panel_2 = new JPanel(); panel_2.setBackground(Color.WHITE); panel_2.setBorder(new TitledBorder(null, "Meldungen", TitledBorder.LEADING, TitledBorder.TOP, null, null)); @@ -493,7 +471,7 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis gbc_panel_2.insets = new Insets(0, 0, 5, 0); gbc_panel_2.fill = GridBagConstraints.BOTH; gbc_panel_2.gridx = 0; - gbc_panel_2.gridy = 4; + gbc_panel_2.gridy = 1; panel.add(panel_2, gbc_panel_2); GridBagLayout gbl_panel_2 = new GridBagLayout(); gbl_panel_2.columnWidths = new int[]{142, 0}; @@ -519,7 +497,7 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis GridBagConstraints gbc_panel_3 = new GridBagConstraints(); gbc_panel_3.fill = GridBagConstraints.BOTH; gbc_panel_3.gridx = 0; - gbc_panel_3.gridy = 5; + gbc_panel_3.gridy = 2; panel.add(panel_3, gbc_panel_3); panel_3.setLayout(new BoxLayout(panel_3, BoxLayout.X_AXIS)); @@ -558,7 +536,9 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis } else { bIntfDel.setEnabled(true); +// tfConnectionSettings.setText(String.format("%s", selectedDeviceInterface.getConnectionSettingsText().replaceAll("\n", "
"))); tfConnectionSettings.setText(selectedDeviceInterface.getConnectionSettingsText()); + } } @@ -573,12 +553,22 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis @Override public void interfacesChanged(PulsCounterApplication pulsCounterApplication) { - lmInterfaces.setItems(pulsCounterApplication.getInterfaces()); + lmInterfaces.setItems(pulsCounterApplication.getInterfaces()); } private void addInterface(){ - pulsCounterApplication.addInterface(pulsCounterApplication.getInterfaceClasses().get(0), ""); + Class cidc; + + if (pulsCounterApplication.getInterfaceClasses().size()==1){ + cidc = pulsCounterApplication.getInterfaceClasses().get(0); + } else { + cidc = (Class)JObjectSelector.execute(pulsCounterApplication.getInterfaceClasses().toArray()); + } + + if (cidc != null){ + pulsCounterApplication.addInterface(cidc, ""); + }; } private void removeInterface(){ @@ -588,14 +578,53 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis } } - private void setSerialPort(NewSerialPort serialPort){ - PulsCounterApplication.getApplication().setSerialPort(serialPort); - } - @Override - public void serialPortChanged() { + + private synchronized void updateDeviceView(){ + if (selectedDeviceInterface != null){ + try { + int[] values = selectedDeviceInterface.getCounters(); + float[] analogs = selectedDeviceInterface.getAnalogs(); + int inputs, + outputs, + pullups; + + inputs = selectedDeviceInterface.getInputs(); + outputs = selectedDeviceInterface.getOutputs(); + pullups = selectedDeviceInterface.getPullups(); + + + for (int n=0;n<32;n++){ + channelDisplays[n].setEnabled(true); + channelDisplays[n].setCounter(values[n]); + + channelDisplays[n].setInput( ((inputs & (1<