diff --git a/src/main/java/ch/psi/mxsc/Controller.java b/src/main/java/ch/psi/mxsc/Controller.java new file mode 100644 index 0000000..08a00fe --- /dev/null +++ b/src/main/java/ch/psi/mxsc/Controller.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. + */ + +package ch.psi.mxsc; + +import ch.psi.pshell.core.DevicePoolListener; +import ch.psi.pshell.device.Device; +import ch.psi.pshell.device.GenericDevice; +import ch.psi.pshell.ui.Panel; + +/** + * + */ +public class Controller { + static Controller instance; + final BasePlate basePlate; + final Panel mainFrame; + + public static Controller getInstance(){ + return instance; + } + + static void createInstance(Panel mainFrame){ + instance = new Controller(mainFrame); + } + + enum PuckSensorAccess{ + RaspberryPi, + Esera; +} + + final PuckSensorAccess puckSensorAccess = PuckSensorAccess.RaspberryPi; + + + static String PUCK_ESERA_DEVICE = "onewire"; + + public static final int NUMBER_OF_PUCKS = 30; + + private Controller(Panel mainFrame){ + basePlate = new BasePlate(); + puckState = new PuckState[NUMBER_OF_PUCKS]; + for (int i=0; iNUMBER_OF_PUCKS)){ + throw new Exception("invalid puck id: "+ id); + } + return getPuckStates()[id-1]; + } + + public void clearPuckStates(){ + for (PuckState puck:getPuckStates()){ + puck.clear(); + } + getMainFrame().repaint(); + } + +} diff --git a/src/main/java/ch/psi/mxsc/EseraDetection.java b/src/main/java/ch/psi/mxsc/EseraDetection.java index d80fec3..6ca6035 100644 --- a/src/main/java/ch/psi/mxsc/EseraDetection.java +++ b/src/main/java/ch/psi/mxsc/EseraDetection.java @@ -1,6 +1,6 @@ package ch.psi.mxsc; -import static ch.psi.mxsc.MainPanel.NUMBER_OF_PUCKS; +import static ch.psi.mxsc.Controller.NUMBER_OF_PUCKS; import ch.psi.pshell.device.Device; import ch.psi.pshell.device.DeviceAdapter; import ch.psi.utils.State; @@ -24,17 +24,17 @@ public class EseraDetection implements AutoCloseable{ @Override public void onStateChanged(Device device, State state, State former) { if (!state.isInitialized()){ - MainPanel.getInstance().clearPuckStates(); + Controller.getInstance().clearPuckStates(); } } @Override public void onValueChanged(Device device, Object value, Object former) { if ((value == null) || !(value instanceof List)){ - MainPanel.getInstance().clearPuckStates(); + Controller.getInstance().clearPuckStates(); } else { List l = (List)value; - PuckState[] puckState = MainPanel.getInstance().getPuckStates(); + PuckState[] puckState = Controller.getInstance().getPuckStates(); for (int i=0; i - - - - + - - - - + - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/java/ch/psi/mxsc/MainPanel.java b/src/main/java/ch/psi/mxsc/MainPanel.java index ddbf86c..96052c4 100644 --- a/src/main/java/ch/psi/mxsc/MainPanel.java +++ b/src/main/java/ch/psi/mxsc/MainPanel.java @@ -4,105 +4,25 @@ package ch.psi.mxsc; -import ch.psi.pshell.core.DevicePoolListener; import ch.psi.pshell.device.Device; -import ch.psi.pshell.device.GenericDevice; import ch.psi.pshell.ui.Panel; -import ch.psi.utils.swing.SwingUtils; -import java.awt.Component; /** * */ public class MainPanel extends Panel { - BasePlate basePlate; - /** Creates new form Panel */ - static MainPanel instance; + /** Creates new form Panel */ - enum PuckSensorAccess{ - RaspberryPi, - Esera; - } - - final PuckSensorAccess puckSensorAccess = PuckSensorAccess.RaspberryPi; - - static String PUCK_ESERA_DEVICE = "onewire"; - - public static final int NUMBER_OF_PUCKS = 30; - - final PuckState[] puckState; - public PuckState[] getPuckStates(){ - return puckState; - } - EseraDetection detection; - - //From 1 to PUCKS_NUMBER - public PuckState getPuckState(int id) throws Exception{ - if ((id<=0) || (id>NUMBER_OF_PUCKS)){ - throw new Exception("invalid puck id: "+ id); - } - return getPuckStates()[id-1]; - } - - public void clearPuckStates(){ - for (PuckState puck:getPuckStates()){ - puck.clear(); - } - repaint(); - } - - - public static MainPanel getInstance(){ - return instance; - } public MainPanel() { initComponents(); - instance = this; - basePlate = new BasePlate(); - SwingUtils.setEnumCombo(comboMode, BasePlatePanel.Mode.class); - comboMode.setSelectedItem(basePlatePanel.getMode()); - this.setPersistedComponents(new Component[]{comboMode}); - puckState = new PuckState[NUMBER_OF_PUCKS]; - for (int i=0; i(); - - comboMode.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); - comboMode.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - comboModeActionPerformed(evt); - } - }); javax.swing.GroupLayout basePlatePanelLayout = new javax.swing.GroupLayout(basePlatePanel); basePlatePanel.setLayout(basePlatePanelLayout); basePlatePanelLayout.setHorizontalGroup( basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, basePlatePanelLayout.createSequentialGroup() - .addGap(0, 386, Short.MAX_VALUE) - .addComponent(comboMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(0, 442, Short.MAX_VALUE) ); basePlatePanelLayout.setVerticalGroup( basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(basePlatePanelLayout.createSequentialGroup() - .addComponent(comboMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 280, Short.MAX_VALUE)) + .addGap(0, 300, Short.MAX_VALUE) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); @@ -152,14 +60,9 @@ public class MainPanel extends Panel { ); }// //GEN-END:initComponents - private void comboModeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboModeActionPerformed - basePlatePanel.setMode((BasePlatePanel.Mode) comboMode.getSelectedItem()); - }//GEN-LAST:event_comboModeActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables private ch.psi.mxsc.BasePlatePanel basePlatePanel; - private javax.swing.JComboBox comboMode; // End of variables declaration//GEN-END:variables } diff --git a/src/main/java/ch/psi/mxsc/MainPanelTest.form b/src/main/java/ch/psi/mxsc/MainPanelTest.form new file mode 100644 index 0000000..74346f2 --- /dev/null +++ b/src/main/java/ch/psi/mxsc/MainPanelTest.form @@ -0,0 +1,71 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/ch/psi/mxsc/MainPanelTest.java b/src/main/java/ch/psi/mxsc/MainPanelTest.java new file mode 100644 index 0000000..2c585ae --- /dev/null +++ b/src/main/java/ch/psi/mxsc/MainPanelTest.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved. + */ + +package ch.psi.mxsc; + +import ch.psi.pshell.device.Device; +import ch.psi.pshell.ui.Panel; +import ch.psi.utils.swing.SwingUtils; +import java.awt.Component; + +/** + * + */ +public class MainPanelTest extends Panel { + /** Creates new form Panel */ + + public MainPanelTest() { + initComponents(); + SwingUtils.setEnumCombo(comboMode, BasePlatePanel.Mode.class); + comboMode.setSelectedItem(basePlatePanel.getMode()); + setPersistedComponents(new Component[]{comboMode}); + Controller.createInstance(this); + } + + + @Override + public void onInitialize(int runCount) { + Controller.getInstance().onInitialize(runCount); + basePlatePanel.setDevice((Device) getDevice("BasePlate")); + } + + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + basePlatePanel = new ch.psi.mxsc.BasePlatePanel(); + comboMode = new javax.swing.JComboBox<>(); + + comboMode.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + comboMode.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + comboModeActionPerformed(evt); + } + }); + + javax.swing.GroupLayout basePlatePanelLayout = new javax.swing.GroupLayout(basePlatePanel); + basePlatePanel.setLayout(basePlatePanelLayout); + basePlatePanelLayout.setHorizontalGroup( + basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, basePlatePanelLayout.createSequentialGroup() + .addGap(0, 386, Short.MAX_VALUE) + .addComponent(comboMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + ); + basePlatePanelLayout.setVerticalGroup( + basePlatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(basePlatePanelLayout.createSequentialGroup() + .addComponent(comboMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 280, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(basePlatePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(basePlatePanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + + private void comboModeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboModeActionPerformed + basePlatePanel.setMode((BasePlatePanel.Mode) comboMode.getSelectedItem()); + }//GEN-LAST:event_comboModeActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private ch.psi.mxsc.BasePlatePanel basePlatePanel; + private javax.swing.JComboBox comboMode; + // End of variables declaration//GEN-END:variables + +} diff --git a/src/main/java/ch/psi/mxsc/PuckDetection.java b/src/main/java/ch/psi/mxsc/PuckDetection.java index cf3ff9e..bc2e2a5 100644 --- a/src/main/java/ch/psi/mxsc/PuckDetection.java +++ b/src/main/java/ch/psi/mxsc/PuckDetection.java @@ -44,7 +44,7 @@ public class PuckDetection extends DeviceBase{ while (!Thread.currentThread().isInterrupted()) { if (chrono.isTimeout(3000)){ setState(State.Offline); - MainPanel.getInstance().clearPuckStates(); + Controller.getInstance().clearPuckStates(); } Thread.sleep(1000); } @@ -71,14 +71,14 @@ public class PuckDetection extends DeviceBase{ String contents = subscriber.recvStr(); //System.out.println(contents); processMessage(contents); - if (MainPanel.getInstance()!=null){ - MainPanel.getInstance().repaint(); + if (Controller.getInstance()!=null){ + Controller.getInstance().getMainFrame().repaint(); } setState(State.Ready); chrono = new Chrono(); } } finally{ - MainPanel.getInstance().clearPuckStates(); + Controller.getInstance().clearPuckStates(); subscriber.close(); context.term(); } @@ -96,7 +96,7 @@ public class PuckDetection extends DeviceBase{ String[] tokens = line.split(" "); int id = Integer.valueOf(tokens[0].substring(1)); present.add(id); - PuckState puck = MainPanel.getInstance().getPuckState(id); + PuckState puck = Controller.getInstance().getPuckState(id); if (tokens.length<3){ puck.clear(); } else { @@ -106,10 +106,10 @@ public class PuckDetection extends DeviceBase{ getLogger().log(Level.INFO, null, ex); } } - for (int i=1; i<= MainPanel.NUMBER_OF_PUCKS; i++){ + for (int i=1; i<= Controller.NUMBER_OF_PUCKS; i++){ if (!Arr.containsEqual(present.toArray(), i)){ try{ - MainPanel.getInstance().getPuckState(i).clear(); + Controller.getInstance().getPuckState(i).clear(); } catch (Exception ex){ getLogger().log(Level.INFO, null, ex); } diff --git a/src/main/java/ch/psi/mxsc/PuckState.java b/src/main/java/ch/psi/mxsc/PuckState.java index 313cccc..3415329 100644 --- a/src/main/java/ch/psi/mxsc/PuckState.java +++ b/src/main/java/ch/psi/mxsc/PuckState.java @@ -18,10 +18,10 @@ public class PuckState { } BasePlate getBasePlate() { - if (MainPanel.getInstance() == null) { + if (Controller.getInstance() == null) { return null; } - return MainPanel.getInstance().basePlate; + return Controller.getInstance().basePlate; } void clear() {