package com.jopdesign.jopeclipse.internal.ui.launchConfigurations; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; 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.swt.SWT; import org.eclipse.swt.SWTException; 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.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Text; import com.jopdesign.jopeclipse.internal.ui.IJOPUIConstants; import com.jopdesign.jopeclipse.internal.ui.JOPUIImages; import com.jopdesign.jopeclipse.internal.ui.JOPUIUtils; /** * @author johan * */ public class JOPBoardConfigurationTab extends AbstractLaunchConfigurationTab { protected Text fQuartusProjectText; protected IPath fQuartusProjectLocation; protected Button fQuartusProjButton; /** * A listener which handles widget change events for the controls in * this tab. */ private class WidgetListener implements ModifyListener, SelectionListener { public void modifyText(ModifyEvent e) { updateLaunchConfigurationDialog(); } public void widgetSelected(SelectionEvent e) { Object source = e.getSource(); if (source == fQuartusProjButton) { handleQuartusProjectButtonSelected(); } else { updateLaunchConfigurationDialog(); } } public void widgetDefaultSelected(SelectionEvent e) { } } // Default widget listener private WidgetListener fListener = new WidgetListener(); /* (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); createQuartusProjectEditor(comp); Dialog.applyDialogFont(parent); } /** * Create Quarus file group. * * @param parent */ private void createQuartusProjectEditor(Composite parent) { Group group = JOPUIUtils.createHorizontalGrabGroup(parent); group.setLayout(new GridLayout(2, false)); group.setText("Quartus project file:"); fQuartusProjectText = new Text(group, SWT.SINGLE | SWT.BORDER); fQuartusProjectText.setLayoutData(JOPUIUtils.FILL_HORIZONTAL); fQuartusProjButton = createPushButton(group, "Browse...", null); fQuartusProjButton.addSelectionListener(fListener); } /** * @param configuration */ protected void updateQuartusProjectLocation( ILaunchConfigurationWorkingCopy configuration) { configuration.setAttribute( IJOPLaunchConfigurationConstants.ATTR_QUARTUS_PROJECT, fQuartusProjectLocation.toString()); JOPUIUtils.setProjectSetting(configuration, IJOPLaunchConfigurationConstants.ATTR_QUARTUS_PROJECT, fQuartusProjectLocation.toString()); } /** * @param configuration */ protected void updateQuartusProjectLocationFromConfig( ILaunchConfiguration configuration) { String qproj = IJOPUIConstants.EMPTY_STRING; try { qproj = configuration.getAttribute( IJOPLaunchConfigurationConstants.ATTR_QUARTUS_PROJECT, IJOPUIConstants.EMPTY_STRING); } catch (CoreException e) { setErrorMessage(e.getStatus().getMessage()); } fQuartusProjectLocation = new Path(qproj); fQuartusProjectText.setText(fQuartusProjectLocation.toOSString()); } /** * Handle selection of the Quartus project file button. * */ protected void handleQuartusProjectButtonSelected() { FileDialog dialog = new FileDialog(getShell()); IPath rootPath = fQuartusProjectLocation != null ? fQuartusProjectLocation .removeLastSegments(1) : ResourcesPlugin.getWorkspace().getRoot().getLocation(); dialog.setFilterPath(rootPath.toString()); dialog.setFilterExtensions(new String[] { "*.qpf" }); try { dialog.open(); if (dialog.getFileName().equals("")) { return; } IPath filterPath = new Path(dialog.getFilterPath()); IPath fileName = new Path(dialog.getFileName()); fQuartusProjectLocation = filterPath.append(fileName); fQuartusProjectText.setText(fQuartusProjectLocation.toString()); } catch (SWTException e) { } } /* (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() */ public String getName() { return JOPLaunchConfigurationMessages.JOP_BOARDCONFIGURATIONTAB_NAME; } /* (non-Javadoc) * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getImage() */ @Override public Image getImage() { return JOPUIImages.getImage(IJOPUIConstants.IMG_CONFIGURE_BOARD_TAB); } /* (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) */ public void initializeFrom(ILaunchConfiguration configuration) { updateQuartusProjectLocationFromConfig(configuration); } /* (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ public void performApply(ILaunchConfigurationWorkingCopy configuration) { if (fQuartusProjectLocation != null) { configuration.setAttribute( IJOPLaunchConfigurationConstants.ATTR_QUARTUS_PROJECT, fQuartusProjectLocation.toString()); } else { configuration.setAttribute( IJOPLaunchConfigurationConstants.ATTR_QUARTUS_PROJECT, IJOPUIConstants.EMPTY_STRING); } } /* (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { if (fQuartusProjectText == null) { return; } fQuartusProjectText.setText(JOPUIUtils.getProjectSetting(configuration, IJOPLaunchConfigurationConstants.ATTR_QUARTUS_PROJECT, "")); } }