/* Copywrite 2016 Will Winder This file is part of Universal Gcode Sender (UGS). UGS 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, either version 3 of the License, or (at your option) any later version. UGS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with UGS. If not, see <http://www.gnu.org/licenses/>. */ package com.willwinder.universalgcodesender.uielements.panels; import com.willwinder.universalgcodesender.i18n.Localization; import com.willwinder.universalgcodesender.listeners.UGSEventListener; import com.willwinder.universalgcodesender.model.BackendAPI; import com.willwinder.universalgcodesender.model.UGSEvent; import net.miginfocom.swing.MigLayout; import javax.swing.*; import static com.willwinder.universalgcodesender.utils.GUIHelpers.displayErrorDialog; public class ActionButtonPanel extends JPanel implements UGSEventListener { private final BackendAPI backend; private final JButton resetCoordinatesButton = new JButton(Localization.getString("mainWindow.swing.resetCoordinatesButton")); private final JButton returnToZeroButton = new JButton(Localization.getString("mainWindow.swing.returnToZeroButton")); private final JButton softResetMachineControl = new JButton(Localization.getString("mainWindow.swing.softReset")); private final JButton performHomingCycleButton = new JButton("$H"); private final JButton requestStateInformation = new JButton("$G"); private final JButton killAlarmLock = new JButton("$X"); private final JButton toggleCheckMode = new JButton("$C"); private final JButton helpButtonMachineControl = new JButton(Localization.getString("help")); /** * No-Arg constructor to make this control work in the UI builder tools * @deprecated Use constructor with BackendAPI. */ @Deprecated public ActionButtonPanel() { this(null); } public ActionButtonPanel(BackendAPI backend) { this.backend = backend; if (backend != null) { backend.addUGSEventListener(this); } initComponents(); updateControls(); } private void initComponents() { helpButtonMachineControl.addActionListener(this::helpButtonMachineControl); softResetMachineControl.addActionListener(this::softResetMachineControl); requestStateInformation.addActionListener(this::requestStateInformation); returnToZeroButton.addActionListener(this::returnToZeroButton); resetCoordinatesButton.addActionListener(this::resetCoordinatesButton); performHomingCycleButton.addActionListener(this::performHomingCycleButton); killAlarmLock.addActionListener(this::killAlarmLock); toggleCheckMode.addActionListener(this::toggleCheckMode); MigLayout layout = new MigLayout("fill, wrap 2"); setLayout(layout); String constraints = "sg 1"; add(resetCoordinatesButton, constraints); add(returnToZeroButton, constraints); add(softResetMachineControl, constraints); add(performHomingCycleButton, constraints); add(killAlarmLock, constraints); add(requestStateInformation, constraints); add(toggleCheckMode, constraints + ", wrap"); add(helpButtonMachineControl, "growx, span 2"); } @Override public void UGSEvent(UGSEvent evt) { if (evt.isStateChangeEvent()) { updateControls(); } } private void updateControls() { this.updateWorkflowControls(backend.isIdle()); } private void updateWorkflowControls(boolean enabled) { this.resetCoordinatesButton.setEnabled(enabled); this.returnToZeroButton.setEnabled(enabled); this.performHomingCycleButton.setEnabled(enabled); this.softResetMachineControl.setEnabled(enabled); this.killAlarmLock.setEnabled(enabled); this.toggleCheckMode.setEnabled(enabled); this.requestStateInformation.setEnabled(enabled); } private void killAlarmLock(java.awt.event.ActionEvent evt) { try { this.backend.killAlarmLock(); } catch (Exception ex) { displayErrorDialog(ex.getMessage()); } } private void performHomingCycleButton(java.awt.event.ActionEvent evt) { try { this.backend.performHomingCycle(); } catch (Exception ex) { displayErrorDialog(ex.getMessage()); } } private void resetCoordinatesButton(java.awt.event.ActionEvent evt) { try { this.backend.resetCoordinatesToZero(); } catch (Exception ex) { displayErrorDialog(ex.getMessage()); } } private void toggleCheckMode(java.awt.event.ActionEvent evt) { try { this.backend.toggleCheckMode(); } catch (Exception ex) { displayErrorDialog(ex.getMessage()); } } private void returnToZeroButton(java.awt.event.ActionEvent evt) { try { backend.returnToZero(); } catch (Exception ex) { displayErrorDialog(ex.getMessage()); } } private void requestStateInformation(java.awt.event.ActionEvent evt) { try { this.backend.requestParserState(); } catch (Exception ex) { displayErrorDialog(ex.getMessage()); } } private void softResetMachineControl(java.awt.event.ActionEvent evt) { try { this.backend.issueSoftReset(); } catch (Exception ex) { displayErrorDialog(ex.getMessage()); } } private void helpButtonMachineControl(java.awt.event.ActionEvent evt) { StringBuilder message = new StringBuilder() .append(Localization.getString("mainWindow.resetZero")).append("\n") .append(Localization.getString("mainWindow.returnToZero")).append("\n") .append(Localization.getString("mainWindow.softReset")).append("\n") .append(Localization.getString("mainWindow.homing")).append("\n") .append(Localization.getString("mainWindow.alarmLock")).append("\n") .append(Localization.getString("mainWindow.checkMode")).append("\n") .append(Localization.getString("mainWindow.getState")).append("\n") .append(Localization.getString("mainWindow.helpKeyboard")).append("\n") //.append(Localization.getString("mainWindow.helpKeyX")).append("\n") //.append(Localization.getString("mainWindow.helpKeyY")).append("\n") //.append(Localization.getString("mainWindow.helpKeyZ")).append("\n") .append(Localization.getString("mainWindow.helpKeyPlusMinus")).append("\n") .append(Localization.getString("mainWindow.helpKeyDivMul")).append("\n") .append(Localization.getString("mainWindow.helpKeyZero")).append("\n") ; JOptionPane.showMessageDialog(new JFrame(), message, Localization.getString("mainWindow.helpDialog"), JOptionPane.INFORMATION_MESSAGE); } }