diff --git a/src/main/java/de/fhg/iais/roberta/connection/AbstractConnector.java b/src/main/java/de/fhg/iais/roberta/connection/AbstractConnector.java index 7f7026b..330d743 100644 --- a/src/main/java/de/fhg/iais/roberta/connection/AbstractConnector.java +++ b/src/main/java/de/fhg/iais/roberta/connection/AbstractConnector.java @@ -60,7 +60,6 @@ public void connect() { @Override public void close() { this.running = false; - this.fire(State.DISCOVER); } @Override diff --git a/src/main/java/de/fhg/iais/roberta/connection/SerialLoggingTask.java b/src/main/java/de/fhg/iais/roberta/connection/SerialLoggingTask.java index a26e8b3..45e70bc 100644 --- a/src/main/java/de/fhg/iais/roberta/connection/SerialLoggingTask.java +++ b/src/main/java/de/fhg/iais/roberta/connection/SerialLoggingTask.java @@ -34,6 +34,7 @@ public SerialLoggingTask(IOraListener listener, CharSequence port, int s @Override protected void log() { try { + LOG.info("TEST"); byte[] readBuffer = new byte[this.comPort.bytesAvailable()]; this.comPort.readBytes(readBuffer, readBuffer.length); fire(readBuffer); diff --git a/src/main/java/de/fhg/iais/roberta/main/RobotDetectorHelper.java b/src/main/java/de/fhg/iais/roberta/main/RobotDetectorHelper.java index 2b1aad9..01e1925 100644 --- a/src/main/java/de/fhg/iais/roberta/main/RobotDetectorHelper.java +++ b/src/main/java/de/fhg/iais/roberta/main/RobotDetectorHelper.java @@ -1,16 +1,20 @@ package de.fhg.iais.roberta.main; +import org.apache.commons.lang3.concurrent.ConcurrentUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; import de.fhg.iais.roberta.connection.IDetector; import de.fhg.iais.roberta.connection.IRobot; @@ -54,7 +58,7 @@ public List getDetectedRobots() { List robots = new ArrayList<>(5); // Check each detector future - for ( Map.Entry>> entry : this.futures.entrySet() ) { + for ( Entry>> entry : this.futures.entrySet() ) { IDetector detector = entry.getKey(); Future> future = entry.getValue(); @@ -106,8 +110,11 @@ public void update(IRobot object) { */ public void reset() { this.selectedRobot = null; - for ( Map.Entry entry : this.ranOnce.entrySet() ) { + for ( Entry entry : this.ranOnce.entrySet() ) { entry.setValue(false); } + for ( Entry>> entry : this.futures.entrySet() ) { + entry.setValue(ConcurrentUtils.constantFuture(Collections.emptyList())); + } } } diff --git a/src/main/java/de/fhg/iais/roberta/ui/main/HelpDialog.java b/src/main/java/de/fhg/iais/roberta/ui/main/HelpDialog.java index d3d8503..0a689c4 100644 --- a/src/main/java/de/fhg/iais/roberta/ui/main/HelpDialog.java +++ b/src/main/java/de/fhg/iais/roberta/ui/main/HelpDialog.java @@ -1,5 +1,6 @@ package de.fhg.iais.roberta.ui.main; +import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; @@ -19,6 +20,7 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; +import javax.swing.border.Border; import de.fhg.iais.roberta.ui.OraButton; @@ -28,6 +30,8 @@ class HelpDialog extends JDialog { static final String CMD_SELECT_OTHER = "select_other"; static final String CMD_CLOSE_HELP = "close_help"; + private static final Border BORDER = BorderFactory.createEmptyBorder(8, 10, 8, 10); + private final JPanel pnlGreet = new JPanel(); private final JLabel lblGreet = new JLabel(); @@ -46,16 +50,16 @@ class HelpDialog extends JDialog { HelpDialog(Frame frame, ResourceBundle messages, ActionListener listener) { super(frame); // General - this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS)); + this.setLayout(new BorderLayout()); this.setResizable(false); JPanel jPanel = new JPanel(); - this.add(jPanel); + this.add(jPanel, BorderLayout.PAGE_START); jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.LINE_AXIS)); jPanel.add(this.pnlGreet); this.pnlGreet.setLayout(new FlowLayout(FlowLayout.LEADING)); - this.pnlGreet.setBorder(BorderFactory.createEmptyBorder(8, 10, 8, 10)); + this.pnlGreet.setBorder(BORDER); this.pnlGreet.add(this.lblGreet); this.lblGreet.setText(messages.getString("helpConnectionGreeting")); @@ -67,20 +71,18 @@ class HelpDialog extends JDialog { this.butClose.setActionCommand(CMD_CLOSE_HELP); this.butClose.addActionListener(listener); - this.add(this.pnlInfo); - this.pnlInfo.setLayout(new FlowLayout(FlowLayout.LEADING)); - this.pnlInfo.setBorder(BorderFactory.createEmptyBorder(8, 10, 8, 10)); - this.pnlInfo.add(this.txtAreaInfo); - this.pnlInfo.setPreferredSize(new Dimension(300, 70)); + this.add(this.pnlInfo, BorderLayout.CENTER); + this.pnlInfo.setLayout(new BorderLayout()); + this.pnlInfo.setBorder(BORDER); + this.pnlInfo.add(this.txtAreaInfo, BorderLayout.CENTER); this.txtAreaInfo.setText(messages.getString("helpConnection")); this.txtAreaInfo.setLineWrap(true); this.txtAreaInfo.setWrapStyleWord(true); - this.txtAreaInfo.setColumns(20); this.txtAreaInfo.setEditable(false); - this.add(this.pnlRobots); + this.add(this.pnlRobots, BorderLayout.PAGE_END); this.pnlRobots.setLayout(new FlowLayout(FlowLayout.LEADING)); - this.pnlRobots.setBorder(BorderFactory.createEmptyBorder(8, 10, 8, 10)); + this.pnlRobots.setBorder(BORDER); this.pnlRobots.add(this.butEv3); this.butEv3.setActionCommand(CMD_SELECT_EV3); this.butEv3.addActionListener(listener); @@ -96,5 +98,6 @@ class HelpDialog extends JDialog { this.setUndecorated(true); this.pack(); + this.pack(); } } diff --git a/src/main/java/de/fhg/iais/roberta/ui/main/MainController.java b/src/main/java/de/fhg/iais/roberta/ui/main/MainController.java index 54ffe0e..ae73345 100644 --- a/src/main/java/de/fhg/iais/roberta/ui/main/MainController.java +++ b/src/main/java/de/fhg/iais/roberta/ui/main/MainController.java @@ -86,7 +86,7 @@ public class MainController implements IController, IOraListenable { private IConnector connector = null; // Child controllers of the main controller, this includes other windows/JFrames that are launched from the main controller - private SerialMonitorController serialMonitorController = null; + private final SerialMonitorController serialMonitorController; private final DeviceIdEditorController deviceIdEditorController; private final HelpDialog helpDialog; @@ -100,6 +100,8 @@ public MainController(ResourceBundle rb) { this.mainView.setCustomAddresses(this.addresses.get()); + this.serialMonitorController = new SerialMonitorController(this.rb); + this.helpDialog = new HelpDialog(this.mainView, rb, mainViewListener); // Check for updates on startup @@ -211,7 +213,6 @@ public void setConnector(IConnector connector) { // Serial monitor is only needed for serial supporting robots if ( (connector.getRobot() instanceof Arduino) || (connector.getRobot() instanceof Microbit) ) { - this.serialMonitorController = new SerialMonitorController(this.rb); this.serialMonitorController.setConnector(connector); } } @@ -236,6 +237,7 @@ private void setDiscover() { LOG.debug("setDiscover"); this.connected = false; this.mainView.setDiscover(); + this.serialMonitorController.setState(State.DISCOVER); } private void showAttentionPopup(String key, String... entries) { @@ -285,6 +287,7 @@ public void actionPerformed(ActionEvent e) { MainController.this.connector.connect(); break; case CMD_DISCONNECT: + setDiscover(); // first!, order is important, otherwise ui thread does into deadlock MainController.this.connector.close(); break; case CMD_HELP: diff --git a/src/main/java/de/fhg/iais/roberta/ui/main/MainView.java b/src/main/java/de/fhg/iais/roberta/ui/main/MainView.java index 9c61ccc..867f2af 100644 --- a/src/main/java/de/fhg/iais/roberta/ui/main/MainView.java +++ b/src/main/java/de/fhg/iais/roberta/ui/main/MainView.java @@ -19,6 +19,7 @@ import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowListener; +import java.util.Collections; import java.util.List; import java.util.ResourceBundle; @@ -598,7 +599,7 @@ void setDiscover() { this.txtAreaInfo.setText(this.messages.getString("plugInInfo")); ((CardLayout) this.pnlGif.getLayout()).show(this.pnlGif, UiState.DISCOVERING.toString() + ConnectionType.WIRED); this.hideArduinoMenu(); - this.showTopEmpty(); + this.showTopRobots(Collections.emptyList()); this.showCustomAddress(); } @@ -639,7 +640,6 @@ void setNew(ConnectionType connectionType, String prefix, String token, String s ((CardLayout) this.pnlGif.getLayout()).show(this.pnlGif, UiState.CONNECTING.toString() + connectionType); // dont show advanced options anymore - this.showCustomEmpty(); this.hideAdvancedOptions(); } @@ -694,11 +694,6 @@ void showTopTokenServer() { cl.show(this.pnlTopContainer, CARD_TOKEN_SERVER); } - private void showTopEmpty() { - CardLayout cl = (CardLayout) this.pnlTopContainer.getLayout(); - cl.show(this.pnlTopContainer, CARD_TOP_EMPTY); - } - // Custom private void showCustomAddress() { CardLayout cl = (CardLayout) this.pnlCustomContainer.getLayout(); @@ -710,11 +705,6 @@ void showCustomNaoLogin() { cl.show(this.pnlCustomContainer, CARD_NAO_LOGIN); } - private void showCustomEmpty() { - CardLayout cl = (CardLayout) this.pnlCustomContainer.getLayout(); - cl.show(this.pnlCustomContainer, CARD_CUSTOM_EMPTY); - } - private void showAdvancedOptions() { Dimension size = this.getSize(); diff --git a/src/main/java/de/fhg/iais/roberta/ui/serialMonitor/SerialMonitorController.java b/src/main/java/de/fhg/iais/roberta/ui/serialMonitor/SerialMonitorController.java index fb09569..e93a34e 100644 --- a/src/main/java/de/fhg/iais/roberta/ui/serialMonitor/SerialMonitorController.java +++ b/src/main/java/de/fhg/iais/roberta/ui/serialMonitor/SerialMonitorController.java @@ -49,6 +49,9 @@ public void setConnector(IConnector connector) { public void setState(State state) { LOG.debug("setState: {}", state); switch ( state ) { + case DISCOVER: + this.stopSerialLogging(); + break; case WAIT_UPLOAD: this.stopSerialLogging(); break; diff --git a/src/main/resources/images/connected_wireless.gif b/src/main/resources/images/connected_wireless.gif index 7d2ca3c..adbd379 100644 Binary files a/src/main/resources/images/connected_wireless.gif and b/src/main/resources/images/connected_wireless.gif differ