### Eclipse Workspace Patch 1.0 #P org.eclipse.pde.ui Index: src/org/eclipse/pde/internal/ui/pderesources.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties,v retrieving revision 1.1004 diff -u -r1.1004 pderesources.properties --- src/org/eclipse/pde/internal/ui/pderesources.properties 5 Sep 2008 14:36:48 -0000 1.1004 +++ src/org/eclipse/pde/internal/ui/pderesources.properties 18 Sep 2008 17:18:20 -0000 @@ -463,6 +463,7 @@ BaseBlock_directoryNotFoundMessage=The specified directory could not be found. BaseBlock_directoryErrorMessage=The specified directory could not be opened. ProgramBlock_runProduct=Run a &product: +ProgramBlock_productDecorationWarning0=A product with this name cannot be found in any required bundle. This launch may fail to start as expected unless there is an available IProductProvider that can supply this product. ProgramBlock_programToRun=Program to Run ProgramBlock_runApplication=Run an &application: BasicLauncherTab_javaExec=Java Executable: Index: src/org/eclipse/pde/internal/ui/PDEUIMessages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java,v retrieving revision 1.381 diff -u -r1.381 PDEUIMessages.java --- src/org/eclipse/pde/internal/ui/PDEUIMessages.java 5 Sep 2008 14:36:48 -0000 1.381 +++ src/org/eclipse/pde/internal/ui/PDEUIMessages.java 18 Sep 2008 17:18:13 -0000 @@ -1156,6 +1156,8 @@ public static String BasicLauncherTab_environments; public static String BasicLauncherTab_installedJREs; + public static String ProgramBlock_productDecorationWarning0; + public static String ProgramBlock_programToRun; public static String BasicLauncherTab_bootstrap; public static String BasicLauncherTab_javaExecDefault; Index: src/org/eclipse/pde/internal/ui/launcher/ProgramBlock.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/ProgramBlock.java,v retrieving revision 1.9 diff -u -r1.9 ProgramBlock.java --- src/org/eclipse/pde/internal/ui/launcher/ProgramBlock.java 16 Jan 2008 17:08:31 -0000 1.9 +++ src/org/eclipse/pde/internal/ui/launcher/ProgramBlock.java 18 Sep 2008 17:18:20 -0000 @@ -15,13 +15,13 @@ import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; +import org.eclipse.jface.fieldassist.*; import org.eclipse.pde.core.plugin.TargetPlatform; import org.eclipse.pde.internal.ui.PDEUIMessages; import org.eclipse.pde.ui.launcher.AbstractLauncherTab; import org.eclipse.pde.ui.launcher.IPDELauncherConstants; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.*; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; @@ -34,8 +34,9 @@ private Button fApplicationButton; private AbstractLauncherTab fTab; private Listener fListener = new Listener(); + private ControlDecoration fProductComboDecoration; - class Listener extends SelectionAdapter { + class Listener extends SelectionAdapter implements ModifyListener { public void widgetSelected(SelectionEvent e) { Object source = e.getSource(); if (source == fProductButton) { @@ -43,8 +44,30 @@ fProductCombo.setEnabled(enabled); fApplicationCombo.setEnabled(!enabled); } + fTab.updateLaunchConfigurationDialog(); } + + public void modifyText(ModifyEvent e) { + if (e.getSource() == fProductCombo) { + String productValue = fProductCombo.getText(); + String[] knownProducts = TargetPlatform.getProducts(); + boolean found = false; + for (int i = 0; i < knownProducts.length; i++) { + String knownProduct = knownProducts[i]; + if (knownProduct.equals(productValue)) { + found = true; + break; + } + } + if (found) + fProductComboDecoration.hide(); + else + fProductComboDecoration.show(); + + fTab.updateLaunchConfigurationDialog(); + } + } } public ProgramBlock(AbstractLauncherTab tab) { @@ -68,10 +91,17 @@ fProductButton.setText(PDEUIMessages.ProgramBlock_runProduct); fProductButton.addSelectionListener(fListener); - fProductCombo = new Combo(parent, SWT.READ_ONLY | SWT.DROP_DOWN); + fProductCombo = new Combo(parent, SWT.DROP_DOWN); fProductCombo.setItems(TargetPlatform.getProducts()); fProductCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fProductCombo.addSelectionListener(fListener); + fProductCombo.addModifyListener(fListener); + + fProductComboDecoration = new ControlDecoration(fProductCombo, SWT.TOP | SWT.LEFT); + FieldDecoration warningDecoration = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_WARNING); + fProductComboDecoration.setDescriptionText(PDEUIMessages.ProgramBlock_productDecorationWarning0); + fProductComboDecoration.setImage(warningDecoration.getImage()); + } protected void createApplicationSection(Composite parent) { @@ -97,13 +127,9 @@ } protected void initializeProductSection(ILaunchConfiguration config) throws CoreException { - if (fProductCombo.getItemCount() > 0) { - String productName = config.getAttribute(IPDELauncherConstants.PRODUCT, (String) null); - int index = productName == null ? -1 : fProductCombo.indexOf(productName); - if (index == -1) - index = 0; - fProductCombo.setText(fProductCombo.getItem(index)); - } + String productName = config.getAttribute(IPDELauncherConstants.PRODUCT, (String) null); + if (productName != null) + fProductCombo.setText(productName); } protected void initializeApplicationSection(ILaunchConfiguration config) throws CoreException {