/* * * Goko * Copyright (C) 2013 PsyKo * * 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, either version 3 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 * 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 this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.goko.tools.commandpanel; import java.math.BigDecimal; import java.util.Map; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.inject.Inject; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.core.di.extensions.Preference; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.di.PersistState; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; import org.eclipse.wb.swt.ResourceManager; import org.eclipse.wb.swt.SWTResourceManager; import org.goko.common.GkUiComponent; import org.goko.core.common.exception.GkException; import org.goko.core.common.measure.quantity.Length; import org.goko.core.common.measure.quantity.LengthUnit; import org.goko.core.common.measure.quantity.QuantityUtils; import org.goko.core.common.measure.quantity.Speed; import org.goko.core.common.measure.quantity.SpeedUnit; import org.goko.core.config.GokoPreference; import org.goko.core.controller.IGkConstants; import org.goko.core.controller.action.DefaultControllerAction; import org.goko.core.controller.bean.EnumControllerAxis; import org.goko.core.gcode.rs274ngcv3.context.CoordinateSystem; import org.goko.core.log.GkLog; import org.goko.tools.commandpanel.controller.CommandPanelController; import org.goko.tools.commandpanel.controller.CommandPanelModel; public class CommandPanelPart extends GkUiComponent<CommandPanelController, CommandPanelModel> implements IPropertyChangeListener { private static final String JOG_PRECISE = "org.goko.tools.commandpanel.jogPrecise"; private static final String JOG_STEP = "org.goko.tools.commandpanel.jogStep"; private static final String JOG_FEEDRATE = "org.goko.tools.commandpanel.jogFeedrate"; private static GkLog LOG = GkLog.getLogger(CommandPanelPart.class); private Button btnHome; private Button btnStop; private Button btnPause; private Button btnStart; private Button btnResetZero; private Button btnJogZPos; private Button btnSpindleOn; private Button btnSpindleOff; private Button btnJogXNeg; private Button btnJogXPos; private Button btnJogYNeg; private Button btnJogYPos; private Button btnJogZNeg; private Button btnResetX; private Button btnResetY; private Button btnResetZ; private Composite composite_7; private Button btnJogANeg; private Button btnJogAPos; private Button btnResetA; @Inject @Preference IEclipsePreferences prefs; private Button btnPreciseJog; private Button btnKillAlarm; private Spinner jogStepSpinner; private Spinner jogSpeedSpinner; private Composite composite_10; private Group grpCoordinatesSystem; private Button btnCSG54; private Button btnCSG55; private Button btnCSG56; private Button btnCSG57; private Button btnCSG58; private Button btnCSG59; private Button btnResetCsZero; private Label lblLengthUnit; private Label lblJogStep; private Button btnReset; private Label lblSpeedUnit; @Inject public CommandPanelPart(IEclipseContext context) throws GkException { super(context, new CommandPanelController(new CommandPanelModel())); } /** * Create contents of the view part. * * @throws GkException */ @PostConstruct public void createControls(Composite parent, MPart part) throws GkException { parent.setLayout(new FormLayout()); Composite composite = new Composite(parent, SWT.NONE); FormData fd_composite = new FormData(); fd_composite.top = new FormAttachment(0); fd_composite.left = new FormAttachment(0); composite.setLayoutData(fd_composite); GridLayout gl_composite = new GridLayout(3, false); gl_composite.verticalSpacing = 3; gl_composite.marginHeight = 3; gl_composite.marginWidth = 3; composite.setLayout(gl_composite); Group grpManualJog = new Group(composite, SWT.NONE); grpManualJog.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD)); grpManualJog.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1)); grpManualJog.setText("Manual jog"); GridLayout gl_grpManualJog = new GridLayout(1, false); gl_grpManualJog.verticalSpacing = 2; gl_grpManualJog.marginWidth = 4; gl_grpManualJog.marginHeight = 2; gl_grpManualJog.horizontalSpacing = 4; grpManualJog.setLayout(gl_grpManualJog); btnPreciseJog = new Button(grpManualJog, SWT.CHECK); btnPreciseJog.setEnabled(false); btnPreciseJog.setText("Precise jog"); Composite composite_5 = new Composite(grpManualJog, SWT.NONE); composite_5.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); GridLayout gl_composite_5 = new GridLayout(3, false); gl_composite_5.marginWidth = 0; composite_5.setLayout(gl_composite_5); lblJogStep = new Label(composite_5, SWT.NONE); lblJogStep.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblJogStep.setText("Step"); jogStepSpinner = new Spinner(composite_5, SWT.BORDER); jogStepSpinner.setMaximum(100000); jogStepSpinner.setMinimum(1); jogStepSpinner.setDigits(GokoPreference.getInstance().getDigitCount()); GridData gd_jogSpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_jogSpinner.widthHint = 30; jogStepSpinner.setLayoutData(gd_jogSpinner); lblLengthUnit = new Label(composite_5, SWT.NONE); lblLengthUnit.setText("mm"); Label lblJogSpeed = new Label(composite_5, SWT.NONE); lblJogSpeed.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblJogSpeed.setBounds(0, 0, 55, 15); lblJogSpeed.setText("Speed"); jogSpeedSpinner = new Spinner(composite_5, SWT.BORDER); jogSpeedSpinner.setMaximum(10000); GridData gd_jogSpeedSpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_jogSpeedSpinner.widthHint = 30; jogSpeedSpinner.setLayoutData(gd_jogSpeedSpinner); lblSpeedUnit = new Label(composite_5, SWT.NONE); lblSpeedUnit.setText("mm/min"); Composite composite_4 = new Composite(grpManualJog, SWT.NONE); GridLayout gl_composite_4 = new GridLayout(2, false); gl_composite_4.marginWidth = 0; gl_composite_4.marginHeight = 0; gl_composite_4.horizontalSpacing = 0; gl_composite_4.verticalSpacing = 0; composite_4.setLayout(gl_composite_4); Composite composite_2 = new Composite(composite_4, SWT.NONE); composite_2.setSize(45, 125); GridLayout gl_composite_2 = new GridLayout(1, false); gl_composite_2.marginWidth = 2; gl_composite_2.verticalSpacing = 2; gl_composite_2.horizontalSpacing = 2; gl_composite_2.marginHeight = 2; composite_2.setLayout(gl_composite_2); btnJogZPos = new Button(composite_2, SWT.NONE); btnJogZPos.setText("+Z"); GridData gd_btnJogZPos = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_btnJogZPos.heightHint = 55; gd_btnJogZPos.widthHint = 35; btnJogZPos.setLayoutData(gd_btnJogZPos); btnJogZNeg = new Button(composite_2, SWT.NONE); btnJogZNeg.setText("-Z"); GridData gd_btnJogZNeg = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_btnJogZNeg.widthHint = 35; gd_btnJogZNeg.heightHint = 55; btnJogZNeg.setLayoutData(gd_btnJogZNeg); Composite composite_1 = new Composite(composite_4, SWT.NONE); GridLayout gl_composite_1 = new GridLayout(3, false); gl_composite_1.verticalSpacing = 2; gl_composite_1.marginWidth = 2; gl_composite_1.horizontalSpacing = 0; gl_composite_1.marginHeight = 0; composite_1.setLayout(gl_composite_1); new Label(composite_1, SWT.NONE); btnJogYPos = new Button(composite_1, SWT.NONE); btnJogYPos.setText("+Y"); GridData gd_btnJogYPos = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_btnJogYPos.heightHint = 35; gd_btnJogYPos.widthHint = 35; btnJogYPos.setLayoutData(gd_btnJogYPos); new Label(composite_1, SWT.NONE); btnJogXNeg = new Button(composite_1, SWT.NONE); btnJogXNeg.setText("-X"); GridData gd_btnJogXNeg = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_btnJogXNeg.widthHint = 35; gd_btnJogXNeg.heightHint = 35; btnJogXNeg.setLayoutData(gd_btnJogXNeg); new Label(composite_1, SWT.NONE); btnJogXPos = new Button(composite_1, SWT.NONE); btnJogXPos.setText("+X"); GridData gd_btnJogXPos = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_btnJogXPos.heightHint = 35; gd_btnJogXPos.widthHint = 35; btnJogXPos.setLayoutData(gd_btnJogXPos); new Label(composite_1, SWT.NONE); btnJogYNeg = new Button(composite_1, SWT.NONE); btnJogYNeg.setText("-Y"); GridData gd_btnJogYNeg = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_btnJogYNeg.widthHint = 35; gd_btnJogYNeg.heightHint = 35; btnJogYNeg.setLayoutData(gd_btnJogYNeg); new Label(composite_1, SWT.NONE); new Label(composite_4, SWT.NONE); composite_7 = new Composite(composite_4, SWT.NONE); composite_7.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); GridLayout gl_composite_7 = new GridLayout(2, true); gl_composite_7.verticalSpacing = 2; gl_composite_7.marginWidth = 2; gl_composite_7.marginHeight = 2; gl_composite_7.horizontalSpacing = 2; composite_7.setLayout(gl_composite_7); btnJogANeg = new Button(composite_7, SWT.NONE); GridData gd_btnANeg = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_btnANeg.heightHint = 35; btnJogANeg.setLayoutData(gd_btnANeg); btnJogANeg.setText("A-"); btnJogAPos = new Button(composite_7, SWT.NONE); GridData gd_btnAPos = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_btnAPos.heightHint = 35; btnJogAPos.setLayoutData(gd_btnAPos); btnJogAPos.setText("A+"); Composite composite_9 = new Composite(composite, SWT.NONE); GridLayout gl_composite_9 = new GridLayout(1, false); gl_composite_9.horizontalSpacing = 4; gl_composite_9.verticalSpacing = 4; gl_composite_9.marginWidth = 0; gl_composite_9.marginHeight = 0; composite_9.setLayout(gl_composite_9); composite_9.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); Group grpCommands = new Group(composite_9, SWT.NONE); grpCommands.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD)); grpCommands.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); GridLayout gl_grpCommands = new GridLayout(1, false); gl_grpCommands.verticalSpacing = 2; gl_grpCommands.marginWidth = 2; gl_grpCommands.marginHeight = 2; gl_grpCommands.horizontalSpacing = 2; grpCommands.setLayout(gl_grpCommands); grpCommands.setText("Homing"); btnHome = new Button(grpCommands, SWT.NONE); btnHome.setText("Home"); GridData gd_btnNewButton_1 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_btnNewButton_1.widthHint = 140; gd_btnNewButton_1.heightHint = 35; btnHome.setLayoutData(gd_btnNewButton_1); Label label = new Label(grpCommands, SWT.SEPARATOR | SWT.HORIZONTAL); label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); btnResetZero = new Button(grpCommands, SWT.NONE); btnResetZero.setText("Zero all axis"); GridData gd_btnNewButton_2 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_btnNewButton_2.heightHint = 35; btnResetZero.setLayoutData(gd_btnNewButton_2); Composite composite_6 = new Composite(grpCommands, SWT.NONE); composite_6.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); GridLayout gl_composite_6 = new GridLayout(4, true); gl_composite_6.horizontalSpacing = 1; gl_composite_6.marginHeight = 0; gl_composite_6.verticalSpacing = 2; gl_composite_6.marginWidth = 0; composite_6.setLayout(gl_composite_6); btnResetX = new Button(composite_6, SWT.NONE); btnResetX.setText("X"); btnResetX.setFont(SWTResourceManager.getFont("Segoe UI", 8, SWT.NORMAL)); GridData gd_btnResetX = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_btnResetX.heightHint = 30; btnResetX.setLayoutData(gd_btnResetX); btnResetY = new Button(composite_6, SWT.NONE); btnResetY.setText("Y"); btnResetY.setFont(SWTResourceManager.getFont("Segoe UI", 8, SWT.NORMAL)); GridData gd_btnNewButton = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_btnNewButton.heightHint = 30; btnResetY.setLayoutData(gd_btnNewButton); btnResetZ = new Button(composite_6, SWT.NONE); btnResetZ.setText("Z"); btnResetZ.setFont(SWTResourceManager.getFont("Segoe UI", 8, SWT.NORMAL)); GridData gd_btnNewButton_21 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnNewButton_21.heightHint = 30; btnResetZ.setLayoutData(gd_btnNewButton_21); btnResetA = new Button(composite_6, SWT.NONE); GridData gd_btnResetA = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnResetA.heightHint = 30; btnResetA.setLayoutData(gd_btnResetA); btnResetA.setText("A"); grpCoordinatesSystem = new Group(composite_9, SWT.NONE); grpCoordinatesSystem.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD)); GridLayout gl_grpCoordinatesSystem = new GridLayout(1, false); gl_grpCoordinatesSystem.verticalSpacing = 2; gl_grpCoordinatesSystem.marginWidth = 2; gl_grpCoordinatesSystem.marginHeight = 2; gl_grpCoordinatesSystem.horizontalSpacing = 2; grpCoordinatesSystem.setLayout(gl_grpCoordinatesSystem); grpCoordinatesSystem.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1)); grpCoordinatesSystem.setText("Coordinates system"); Composite composite_11 = new Composite(grpCoordinatesSystem, SWT.NONE); composite_11.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); GridLayout gl_composite_11 = new GridLayout(3, true); gl_composite_11.verticalSpacing = 2; gl_composite_11.horizontalSpacing = 2; gl_composite_11.marginWidth = 0; gl_composite_11.marginHeight = 0; composite_11.setLayout(gl_composite_11); btnCSG54 = new Button(composite_11, SWT.NONE); btnCSG54.setText("G54"); btnCSG54.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { try { getController().setCoordinateSystem(CoordinateSystem.G54); } catch (GkException e1) { displayMessage(e1); } } }); GridData gd_btnCSG54 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_btnCSG54.heightHint = 30; btnCSG54.setLayoutData(gd_btnCSG54); btnCSG55 = new Button(composite_11, SWT.NONE); btnCSG55.setText("G55"); btnCSG55.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { try { getController().setCoordinateSystem(CoordinateSystem.G55); } catch (GkException e1) { displayMessage(e1); } } }); GridData gd_btnCSG55 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnCSG55.heightHint = 30; btnCSG55.setLayoutData(gd_btnCSG55); btnCSG56 = new Button(composite_11, SWT.NONE); btnCSG56.setText("G56"); btnCSG56.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { try { getController().setCoordinateSystem(CoordinateSystem.G56); } catch (GkException e1) { displayMessage(e1); } } }); GridData gd_btnCSG56 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnCSG56.heightHint = 30; btnCSG56.setLayoutData(gd_btnCSG56); btnCSG57 = new Button(composite_11, SWT.NONE); btnCSG57.setText("G57"); btnCSG57.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { try { getController().setCoordinateSystem(CoordinateSystem.G57); } catch (GkException e1) { displayMessage(e1); } } }); GridData gd_btnCSG57 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnCSG57.heightHint = 30; btnCSG57.setLayoutData(gd_btnCSG57); btnCSG58 = new Button(composite_11, SWT.NONE); btnCSG58.setText("G58"); btnCSG58.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { try { getController().setCoordinateSystem(CoordinateSystem.G58); } catch (GkException e1) { displayMessage(e1); } } }); GridData gd_btnCSG58 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnCSG58.heightHint = 30; btnCSG58.setLayoutData(gd_btnCSG58); btnCSG59 = new Button(composite_11, SWT.NONE); btnCSG59.setText("G59"); btnCSG59.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { try { getController().setCoordinateSystem(CoordinateSystem.G59); } catch (GkException e1) { displayMessage(e1); } } }); GridData gd_btnCSG59 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnCSG59.heightHint = 30; btnCSG59.setLayoutData(gd_btnCSG59); Composite composite_12 = new Composite(grpCoordinatesSystem, SWT.NONE); composite_12.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1)); GridLayout gl_composite_12 = new GridLayout(1, false); gl_composite_12.verticalSpacing = 2; gl_composite_12.marginHeight = 2; gl_composite_12.marginWidth = 0; gl_composite_12.horizontalSpacing = 0; composite_12.setLayout(gl_composite_12); btnResetCsZero = new Button(composite_12, SWT.NONE); btnResetCsZero.setText("Set current zero"); btnResetCsZero.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { try { getController().zeroCoordinateSystem(); } catch (GkException e1) { displayMessage(e1); } } }); GridData gd_btnResetCsZero = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1); gd_btnResetCsZero.heightHint = 35; gd_btnNewButton_1.heightHint = 35; btnResetCsZero.setLayoutData(gd_btnResetCsZero); btnResetCsZero.setBounds(0, 0, 75, 25); composite_10 = new Composite(composite, SWT.NONE); GridData gd_composite_10 = new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1); gd_composite_10.widthHint = 140; composite_10.setLayoutData(gd_composite_10); GridLayout gl_composite_10 = new GridLayout(1, false); gl_composite_10.verticalSpacing = 4; gl_composite_10.marginWidth = 2; gl_composite_10.marginHeight = 2; gl_composite_10.horizontalSpacing = 4; composite_10.setLayout(gl_composite_10); Group grpControls = new Group(composite_10, SWT.NONE); grpControls.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); grpControls.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD)); grpControls.setLayout(new GridLayout(1, false)); grpControls.setText("Controls"); Composite composite_8 = new Composite(grpControls, SWT.NONE); composite_8.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); GridLayout gl_composite_8 = new GridLayout(2, true); gl_composite_8.verticalSpacing = 2; gl_composite_8.horizontalSpacing = 2; gl_composite_8.marginWidth = 0; gl_composite_8.marginHeight = 0; composite_8.setLayout(gl_composite_8); btnStart = new Button(composite_8, SWT.NONE); GridData gd_btnStart = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnStart.heightHint = 37; btnStart.setLayoutData(gd_btnStart); btnStart.setText("Resume"); btnPause = new Button(composite_8, SWT.NONE); GridData gd_btnPause = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_btnPause.heightHint = 37; btnPause.setLayoutData(gd_btnPause); btnPause.setText("Pause"); btnStop = new Button(grpControls, SWT.NONE); btnStop.setImage(ResourceManager.getPluginImage("org.goko.tools.commandpanel", "icons/stop.png")); btnStop.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED)); GridData gd_btnStop = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_btnStop.heightHint = 37; btnStop.setLayoutData(gd_btnStop); btnStop.setText("Stop"); btnKillAlarm = new Button(grpControls, SWT.NONE); btnKillAlarm.setImage(ResourceManager.getPluginImage("org.goko.tools.commandpanel", "icons/bell--minus.png")); GridData gd_btnKillAlarm = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnKillAlarm.heightHint = 37; btnKillAlarm.setLayoutData(gd_btnKillAlarm); btnKillAlarm.setText("Kill alarm"); btnReset = new Button(grpControls, SWT.NONE); GridData gd_btnReset = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnReset.heightHint = 37; btnReset.setLayoutData(gd_btnReset); btnReset.setText("Reset"); btnReset.setImage(ResourceManager.getPluginImage("org.goko.tools.commandpanel", "icons/reset.png")); Group grpSpindle = new Group(composite_10, SWT.NONE); grpSpindle.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD)); grpSpindle.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); grpSpindle.setLayout(new FillLayout(SWT.HORIZONTAL)); grpSpindle.setText("Spindle"); Composite composite_3 = new Composite(grpSpindle, SWT.NONE); GridLayout gl_composite_3 = new GridLayout(2, true); gl_composite_3.marginWidth = 2; gl_composite_3.horizontalSpacing = 2; gl_composite_3.marginHeight = 2; composite_3.setLayout(gl_composite_3); btnSpindleOn = new Button(composite_3, SWT.NONE); btnSpindleOn.setText("On"); GridData gd_btnSpindleOn = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_btnSpindleOn.heightHint = 38; btnSpindleOn.setLayoutData(gd_btnSpindleOn); btnSpindleOff = new Button(composite_3, SWT.NONE); btnSpindleOff.setText("Off"); GridData gd_btnSpindleOff = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1); gd_btnSpindleOff.heightHint = 38; btnSpindleOff.setLayoutData(gd_btnSpindleOff); initFromPersistedState(part); if(getDataModel().getJogSpeed() != null){ jogSpeedSpinner.setSelection((int) (getDataModel().getJogSpeed().doubleValue(GokoPreference.getInstance().getSpeedUnit()) * Math.pow(10, jogSpeedSpinner.getDigits()))); } initCustomBindings(part); enableAdaptiveSpinner(); } protected void enableAdaptiveSpinner() throws GkException { if(jogStepSpinner != null){ BigDecimal selection = getDataModel().getJogIncrement().multiply(new BigDecimal(10).pow(jogStepSpinner.getDigits())).value(GokoPreference.getInstance().getLengthUnit()); jogStepSpinner.setSelection(selection.intValue()); jogStepSpinner.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { int selection = jogStepSpinner.getSelection(); if (selection < 100) { jogStepSpinner.setIncrement(10); } else if (selection < 1000) { jogStepSpinner.setIncrement(100); } else if (selection < 10000) { jogStepSpinner.setIncrement(1000); } BigDecimal step = new BigDecimal(selection).divide(new BigDecimal(10).pow(jogStepSpinner.getDigits())); try { getDataModel().setJogIncrement(Length.valueOf(step, GokoPreference.getInstance().getLengthUnit())); } catch (GkException e) { LOG.error(e); } } }); } jogSpeedSpinner.setSelection((int) (getDataModel().getJogSpeed().doubleValue(GokoPreference.getInstance().getSpeedUnit()) * Math.pow(10, jogSpeedSpinner.getDigits()))); jogSpeedSpinner.setIncrement(10); jogSpeedSpinner.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { try { getDataModel().setJogSpeed(Speed.valueOf(jogSpeedSpinner.getSelection(), GokoPreference.getInstance().getSpeedUnit())); } catch (GkException e) { LOG.error(e); } } }); } protected void initCustomBindings(MPart part) throws GkException { getController().addTextDisplayBinding(lblLengthUnit, "lengthUnitSymbol"); getController().addTextDisplayBinding(lblSpeedUnit, "speedUnitSymbol"); getController().bindEnableControlWithAction(btnHome, DefaultControllerAction.HOME); getController().bindButtonToExecuteAction(btnHome, DefaultControllerAction.HOME); getController().bindEnableControlWithAction(btnStart, DefaultControllerAction.START); getController().bindButtonToExecuteAction(btnStart, DefaultControllerAction.START); getController().bindEnableControlWithAction(btnPause, DefaultControllerAction.PAUSE); getController().bindButtonToExecuteAction(btnPause, DefaultControllerAction.PAUSE); getController().bindEnableControlWithAction(btnStop, DefaultControllerAction.STOP); getController().bindButtonToExecuteAction(btnStop, DefaultControllerAction.STOP); getController().bindEnableControlWithAction(btnResetZero, DefaultControllerAction.RESET_ZERO); getController().bindButtonToExecuteAction(btnResetZero, DefaultControllerAction.RESET_ZERO); getController().bindEnableControlWithAction(btnResetX, DefaultControllerAction.RESET_ZERO); getController().bindButtonToExecuteAction(btnResetX, DefaultControllerAction.RESET_ZERO, IGkConstants.X_AXIS); getController().bindEnableControlWithAction(btnResetY, DefaultControllerAction.RESET_ZERO); getController().bindButtonToExecuteAction(btnResetY, DefaultControllerAction.RESET_ZERO, IGkConstants.Y_AXIS); getController().bindEnableControlWithAction(btnResetZ, DefaultControllerAction.RESET_ZERO); getController().bindButtonToExecuteAction(btnResetZ, DefaultControllerAction.RESET_ZERO, IGkConstants.Z_AXIS); getController().bindEnableControlWithAction(btnResetA, DefaultControllerAction.RESET_ZERO); getController().bindButtonToExecuteAction(btnResetA, DefaultControllerAction.RESET_ZERO, IGkConstants.A_AXIS); getController().bindEnableControlWithAction(btnSpindleOn, DefaultControllerAction.SPINDLE_ON); getController().bindButtonToExecuteAction(btnSpindleOn, DefaultControllerAction.SPINDLE_ON); getController().bindEnableControlWithAction(btnSpindleOff, DefaultControllerAction.SPINDLE_OFF); getController().bindButtonToExecuteAction(btnSpindleOff, DefaultControllerAction.SPINDLE_OFF); getController().bindEnableControlWithAction(btnKillAlarm, DefaultControllerAction.KILL_ALARM); getController().bindButtonToExecuteAction(btnKillAlarm, DefaultControllerAction.KILL_ALARM); getController().bindEnableControlWithAction(btnReset, DefaultControllerAction.HARD_RESET); getController().bindButtonToExecuteAction(btnReset, DefaultControllerAction.HARD_RESET); getController().addSelectionBinding(btnPreciseJog, "preciseJog"); if(getDataModel().isPreciseJogForced()){ btnPreciseJog.setEnabled(false); }else{ getController().bindEnableControlWithAction(btnPreciseJog, DefaultControllerAction.JOG_START); } //getController().bindEnableControlWithAction(jogStepSpinner, DefaultControllerAction.JOG_START); getController().addEnableBinding(jogStepSpinner, CommandPanelModel.PRECISE_JOG_ENABLED); getController().bindEnableControlWithAction(jogStepSpinner, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(jogSpeedSpinner, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnJogYPos, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnJogYNeg, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnJogXPos, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnJogXNeg, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnJogZPos, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnJogZNeg, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnJogAPos, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnJogANeg, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnCSG54, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnCSG55, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnCSG56, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnCSG57, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnCSG58, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnCSG59, DefaultControllerAction.JOG_START); getController().bindEnableControlWithAction(btnResetCsZero, DefaultControllerAction.JOG_START); getController().bindJogButton(btnJogYPos, EnumControllerAxis.Y_POSITIVE); getController().bindJogButton(btnJogYNeg, EnumControllerAxis.Y_NEGATIVE); getController().bindJogButton(btnJogXPos, EnumControllerAxis.X_POSITIVE); getController().bindJogButton(btnJogXNeg, EnumControllerAxis.X_NEGATIVE); getController().bindJogButton(btnJogZPos, EnumControllerAxis.Z_POSITIVE); getController().bindJogButton(btnJogZNeg, EnumControllerAxis.Z_NEGATIVE); getController().bindJogButton(btnJogAPos, EnumControllerAxis.A_POSITIVE); getController().bindJogButton(btnJogANeg, EnumControllerAxis.A_NEGATIVE); GokoPreference.getInstance().addPropertyChangeListener(this); } @PreDestroy public void dispose() { } @Focus public void setFocus() throws GkException { getController().refreshExecutableAction(); } /** * @param event */ @Override public void propertyChange(PropertyChangeEvent event) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { try { lblLengthUnit.setText(GokoPreference.getInstance().getLengthUnit().getSymbol()); lblLengthUnit.pack(); } catch (GkException e) { LOG.error(e); } } }); } @PersistState public void persistState(MPart part){ if(getDataModel() != null){ part.getPersistedState().put(JOG_PRECISE, String.valueOf(getDataModel().isPreciseJog())); part.getPersistedState().put(JOG_STEP, QuantityUtils.format(getDataModel().getJogIncrement(), 4, false, true)); part.getPersistedState().put(JOG_FEEDRATE, QuantityUtils.format(getDataModel().getJogSpeed(), 4, false, true)); } } private void initFromPersistedState(MPart part) throws GkException{ Map<String, String> state = part.getPersistedState(); String jogPrecise = state.get(JOG_PRECISE); if(StringUtils.isNotEmpty(jogPrecise)){ getDataModel().setPreciseJog(BooleanUtils.toBoolean(jogPrecise)); }else{ getDataModel().setPreciseJog(false); } String jogStepStr = state.get(JOG_STEP); if(StringUtils.isNotEmpty(jogStepStr)){ getDataModel().setJogIncrement(Length.parse(jogStepStr)); }else{ getDataModel().setJogIncrement(Length.valueOf(1, LengthUnit.MILLIMETRE)); } String feedrateStr = state.get(JOG_FEEDRATE); if(StringUtils.isNotEmpty(feedrateStr)){ getDataModel().setJogSpeed(Speed.parse(feedrateStr)); }else{ getDataModel().setJogSpeed(Speed.valueOf(1000, SpeedUnit.MILLIMETRE_PER_MINUTE)); } } }