package com.jopdesign.jopeclipse.internal.ui.launchConfigurations; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import com.jopdesign.jopeclipse.internal.RXTXCommUtils; import com.jopdesign.jopeclipse.internal.ui.CommPortIdentifierContentProvider; import com.jopdesign.jopeclipse.internal.ui.CommPortIdentifierLabelProvider; import com.jopdesign.jopeclipse.internal.ui.IJOPUIConstants; import com.jopdesign.jopeclipse.internal.ui.JOPUIImages; import com.jopdesign.jopeclipse.internal.ui.JOPUIUtils; public class JOPDownloadTab extends AbstractLaunchConfigurationTab { /** * A listener which handles widget change events for the controls in * this tab. */ private class WidgetListener implements ModifyListener, SelectionListener { public void modifyText(ModifyEvent e) { setDirty(true); updateLaunchConfigurationDialog(); } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { setDirty(true); updateLaunchConfigurationDialog(); } } private ComboViewer commPortViewer; private Button useUsbButton; private Button testConnectionButton; // Default widget listener private WidgetListener listener = new WidgetListener(); private Button simulateButton; /* (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { Composite comp = new Composite(parent, SWT.NONE); setControl(comp); GridLayout topLayout = new GridLayout(); topLayout.verticalSpacing = 0; comp.setLayout(topLayout); createSimulateCheckbox(comp); createCommPortViewer(comp); createVerticalSpacer(comp, 1); createBlasterTypeViewer(comp); Dialog.applyDialogFont(parent); } /** * * @param parent */ private void createSimulateCheckbox(Composite parent) { Group g = JOPUIUtils.createHorizontalGrabGroup(parent); simulateButton = createCheckButton(g, "Simulate with JopSim (overrides other settings)"); simulateButton.addSelectionListener(listener); } /* (non-Javadoc) * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getImage() */ @Override public Image getImage() { return JOPUIImages.getImage(IJOPUIConstants.IMG_DOWNLOAD_TAB); } /* (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() */ public String getName() { return "JOP Download"; } /* (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) */ public void initializeFrom(ILaunchConfiguration configuration) { // Update COM port String commPortId = ""; try { commPortId = configuration.getAttribute( IJOPLaunchConfigurationConstants.ATTR_COM_PORT, ""); } catch (CoreException e) { } Combo combo = commPortViewer.getCombo(); combo.select(combo.indexOf(commPortId)); commPortViewer.refresh(); // Update USB button try { useUsbButton.setSelection(configuration.getAttribute( IJOPLaunchConfigurationConstants.ATTR_USB_FLAG, false)); } catch (CoreException e) { useUsbButton.setSelection(false); } // Update simulate checkbox try { simulateButton.setSelection(configuration.getAttribute( IJOPLaunchConfigurationConstants.ATTR_SIMULATE, true)); } catch (CoreException e) { simulateButton.setSelection(true); } } /* (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ public void performApply(ILaunchConfigurationWorkingCopy configuration) { // Set COM port identifier if (!commPortViewer.getSelection().isEmpty()) { String commPortId = commPortViewer.getCombo().getText(); configuration.setAttribute( IJOPLaunchConfigurationConstants.ATTR_COM_PORT, commPortId); } // Set USB flag configuration.setAttribute( IJOPLaunchConfigurationConstants.ATTR_USB_FLAG, useUsbButton .getSelection()); configuration.setAttribute( IJOPLaunchConfigurationConstants.ATTR_SIMULATE, simulateButton .getSelection()); commPortViewer.getCombo().setEnabled(!simulateButton.getSelection()); useUsbButton.setEnabled(!simulateButton.getSelection()); } /* (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { // USB downloading off by default configuration.setAttribute( IJOPLaunchConfigurationConstants.ATTR_USB_FLAG, false); // Simulation on configuration.setAttribute( IJOPLaunchConfigurationConstants.ATTR_SIMULATE, true); } private void createBlasterTypeViewer(Composite parent) { Group group = JOPUIUtils.createHorizontalGrabGroup(parent); group.setText("Blaster Type"); // TODO: fill blaster type list } private void createCommPortViewer(Composite parent) { Group group = JOPUIUtils.createHorizontalGrabGroup(parent); group.setLayout(new GridLayout(2, false)); group.setText("COM Port:"); commPortViewer = new ComboViewer(group, SWT.SINGLE | SWT.READ_ONLY); commPortViewer .setContentProvider(new CommPortIdentifierContentProvider()); commPortViewer.setInput(RXTXCommUtils.getAvailableSerialPorts()); commPortViewer.setLabelProvider(new CommPortIdentifierLabelProvider()); createVerticalSpacer(group, 1); useUsbButton = createCheckButton(group, "Download with USB"); useUsbButton.addSelectionListener(listener); testConnectionButton = createPushButton(group, "Test connection", null); GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_END); testConnectionButton.setLayoutData(gd); } }