### Eclipse Workspace Patch 1.0 #P org.eclipse.ui.ide Index: META-INF/MANIFEST.MF =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/META-INF/MANIFEST.MF,v retrieving revision 1.45 diff -u -r1.45 MANIFEST.MF --- META-INF/MANIFEST.MF 8 Feb 2009 21:10:46 -0000 1.45 +++ META-INF/MANIFEST.MF 5 Mar 2009 01:35:06 -0000 @@ -15,7 +15,7 @@ org.eclipse.ui.ide.dialogs, org.eclipse.ui.ide.fileSystem, org.eclipse.ui.ide.undo, - org.eclipse.ui.internal.ide;x-friends:="org.eclipse.ui.ide.application,org.eclipse.ui.navigator.resources", + org.eclipse.ui.internal.ide;x-friends:="org.eclipse.ui.ide.application,org.eclipse.ui.navigator.resources,org.eclipse.debug.ui", org.eclipse.ui.internal.ide.actions;x-internal:=true, org.eclipse.ui.internal.ide.commands;x-internal:=true, org.eclipse.ui.internal.ide.dialogs;x-friends:="org.eclipse.ui.ide.application", Index: src/org/eclipse/ui/ide/dialogs/AbstractEncodingFieldEditor.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/AbstractEncodingFieldEditor.java,v retrieving revision 1.21 diff -u -r1.21 AbstractEncodingFieldEditor.java --- src/org/eclipse/ui/ide/dialogs/AbstractEncodingFieldEditor.java 23 Jan 2009 09:34:44 -0000 1.21 +++ src/org/eclipse/ui/ide/dialogs/AbstractEncodingFieldEditor.java 5 Mar 2009 01:35:06 -0000 @@ -50,13 +50,13 @@ private Composite container; - private Button defaultEncodingButton; + protected Button defaultEncodingButton; private String defaultEnc; - private Button otherEncodingButton; + protected Button otherEncodingButton; - private Combo encodingCombo; + protected Combo encodingCombo; private boolean isValid = true; @@ -198,7 +198,7 @@ updateDefaultEncoding(); } - private void updateDefaultEncoding() { + protected void updateDefaultEncoding() { defaultEncodingButton.setText(defaultButtonText()); } @@ -235,7 +235,7 @@ topControl = top; } - GridData data = new GridData(GridData.FILL_HORIZONTAL); + GridData data = createGridData(); topControl.setLayoutData(data); topControl.setLayout(layout); @@ -286,6 +286,10 @@ return topControl; } + protected GridData createGridData() { + return new GridData(GridData.FILL_HORIZONTAL); + } + /* * (non-Javadoc) * @@ -347,7 +351,7 @@ } } - private void updateEncodingState(boolean useDefault) { + protected void updateEncodingState(boolean useDefault) { defaultEncodingButton.setSelection(useDefault); otherEncodingButton.setSelection(!useDefault); if (useDefault) { @@ -420,6 +424,10 @@ return defaultEnc; } + protected void setDefaultEnc(String defaultEnc) { + this.defaultEnc = defaultEnc; + } + /** * Returns whether or not the encoding setting changed. * #P org.eclipse.debug.ui Index: ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java,v retrieving revision 1.66 diff -u -r1.66 LaunchConfigurationsMessages.java --- ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java 29 May 2008 15:31:04 -0000 1.66 +++ ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java 5 Mar 2009 01:35:07 -0000 @@ -174,8 +174,6 @@ public static String DebugModePromptStatusHandler_0; public static String DebugModePromptStatusHandler_1; - public static String CommonTab_No_Encoding_Selected; - static { // load message values from bundle file NLS.initializeMessages(BUNDLE_NAME, LaunchConfigurationsMessages.class); Index: ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties,v retrieving revision 1.196 diff -u -r1.196 LaunchConfigurationsMessages.properties --- ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties 29 May 2008 15:31:04 -0000 1.196 +++ ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties 5 Mar 2009 01:35:07 -0000 @@ -9,7 +9,6 @@ # IBM Corporation - initial API and implementation ############################################################################### -CommonTab_No_Encoding_Selected=Console encoding not selected CommonTab__Browse_6=&Browse... CommonTab__Common_15=&Common CommonTab_Display_in_favorites_menu__10=Display in favor&ites menu Index: ui/org/eclipse/debug/ui/CommonTab.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/CommonTab.java,v retrieving revision 1.97 diff -u -r1.97 CommonTab.java --- ui/org/eclipse/debug/ui/CommonTab.java 7 Jul 2008 15:48:27 -0000 1.97 +++ ui/org/eclipse/debug/ui/CommonTab.java 5 Mar 2009 01:35:08 -0000 @@ -61,7 +61,6 @@ 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.Control; import org.eclipse.swt.widgets.FileDialog; @@ -71,13 +70,10 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ContainerSelectionDialog; import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; -import org.eclipse.ui.ide.IDEEncoding; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.views.navigator.ResourceComparator; -import com.ibm.icu.text.MessageFormat; - /** * Launch configuration tab used to specify the location a launch configuration * is stored in, whether it should appear in the favorites list, and perspective @@ -125,9 +121,6 @@ private Text fSharedLocationText; private Button fSharedLocationButton; private Button fLaunchInBackgroundButton; - private Button fDefaultEncodingButton; - private Button fAltEncodingButton; - private Combo fEncodingCombo; private Button fConsoleOutput; private Button fFileOutput; private Button fFileBrowse; @@ -135,6 +128,7 @@ private Button fVariables; private Button fAppend; private Button fWorkspaceBrowse; + private ConsoleEncodingEditor fEncodingEditor; /** * Check box list for specifying favorites @@ -358,47 +352,9 @@ * @param parent the parent to add this composite to */ private void createEncodingComponent(Composite parent) { - Group group = SWTFactory.createGroup(parent, LaunchConfigurationsMessages.CommonTab_1, 2, 1, GridData.FILL_BOTH); - - fDefaultEncodingButton = createRadioButton(group, IInternalDebugCoreConstants.EMPTY_STRING); - GridData gd = new GridData(SWT.BEGINNING, SWT.NORMAL, true, false); - gd.horizontalSpan = 2; - fDefaultEncodingButton.setLayoutData(gd); - - fAltEncodingButton = createRadioButton(group, LaunchConfigurationsMessages.CommonTab_3); - fAltEncodingButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); - - fEncodingCombo = new Combo(group, SWT.READ_ONLY); - fEncodingCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - fEncodingCombo.setFont(parent.getFont()); - List allEncodings = IDEEncoding.getIDEEncodings(); - String[] encodingArray = (String[]) allEncodings.toArray(new String[0]); - fEncodingCombo.setItems(encodingArray); - if (encodingArray.length > 0) { - fEncodingCombo.select(0); - } - fEncodingCombo.getAccessible().addAccessibleListener(new AccessibleAdapter() { - public void getName(AccessibleEvent e) { - e.result = LaunchConfigurationsMessages.CommonTab_3; - } - }); - SelectionListener listener = new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if(e.getSource() instanceof Button) { - Button button = (Button)e.getSource(); - if(button.getSelection()) { - updateLaunchConfigurationDialog(); - fEncodingCombo.setEnabled(fAltEncodingButton.getSelection() == true); - } - } - else { - updateLaunchConfigurationDialog(); - } - } - }; - fAltEncodingButton.addSelectionListener(listener); - fDefaultEncodingButton.addSelectionListener(listener); - fEncodingCombo.addSelectionListener(listener); + Composite composite = new Composite(parent, SWT.NONE); + composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + fEncodingEditor = new ConsoleEncodingEditor(composite, this); } /** @@ -558,24 +514,14 @@ * @param configuration the local configuration */ private void updateEncoding(ILaunchConfiguration configuration) { + fEncodingEditor.setDefaultEncoding(getDefaultEncoding(configuration)); String encoding = null; try { encoding = configuration.getAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, (String)null); } catch (CoreException e) { } - String defaultEncoding = getDefaultEncoding(configuration); - fDefaultEncodingButton.setText(MessageFormat.format(LaunchConfigurationsMessages.CommonTab_2, new String[]{defaultEncoding})); - fDefaultEncodingButton.pack(); - if (encoding != null) { - fAltEncodingButton.setSelection(true); - fDefaultEncodingButton.setSelection(false); - fEncodingCombo.setText(encoding); - fEncodingCombo.setEnabled(true); - } else { - fDefaultEncodingButton.setSelection(true); - fAltEncodingButton.setSelection(false); - fEncodingCombo.setEnabled(false); - } + fEncodingEditor.setEncoding(encoding); + fEncodingEditor.load(); } /** @@ -724,24 +670,10 @@ setMessage(null); setErrorMessage(null); - return validateLocalShared() && validateRedirectFile() && validateEncoding(); + return validateLocalShared() && validateRedirectFile() && fEncodingEditor.validateEncoding(); } /** - * validates the encoding selection - * @return true if the validate encoding is allowable, false otherwise - */ - private boolean validateEncoding() { - if (fAltEncodingButton.getSelection()) { - if (fEncodingCombo.getSelectionIndex() == -1) { - setErrorMessage(LaunchConfigurationsMessages.CommonTab_No_Encoding_Selected); - return false; - } - } - return true; - } - - /** * Validates if the redirect file is valid * @return true if the filename is not zero, false otherwise */ @@ -790,11 +722,7 @@ updateConfigFromLocalShared(configuration); updateConfigFromFavorites(configuration); setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, configuration, fLaunchInBackgroundButton.getSelection(), true); - String encoding = null; - if(fAltEncodingButton.getSelection()) { - encoding = fEncodingCombo.getText(); - } - configuration.setAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, encoding); + configuration.setAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, fEncodingEditor.getEncoding()); boolean captureOutput = false; if (fConsoleOutput.getSelection()) { captureOutput = true; @@ -842,7 +770,7 @@ * @see org.eclipse.debug.ui.ILaunchConfigurationTab#canSave() */ public boolean canSave() { - return validateLocalShared(); + return validateLocalShared() && fEncodingEditor.validateEncoding(); } /* (non-Javadoc) Index: ui/org/eclipse/debug/ui/ConsoleEncodingEditor.java =================================================================== RCS file: ui/org/eclipse/debug/ui/ConsoleEncodingEditor.java diff -N ui/org/eclipse/debug/ui/ConsoleEncodingEditor.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ ui/org/eclipse/debug/ui/ConsoleEncodingEditor.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,149 @@ +/******************************************************************************* + * Copyright (c) 2000, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Renato Silva - initial API and implementation + *******************************************************************************/ + +package org.eclipse.debug.ui; + +import org.eclipse.debug.internal.core.IInternalDebugCoreConstants; +import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsMessages; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.SWT; +import org.eclipse.swt.accessibility.AccessibleAdapter; +import org.eclipse.swt.accessibility.AccessibleEvent; +import org.eclipse.swt.events.KeyAdapter; +import org.eclipse.swt.events.KeyEvent; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.ide.IDEEncoding; +import org.eclipse.ui.ide.dialogs.AbstractEncodingFieldEditor; + +/** + * The console encoding editor. + */ +public class ConsoleEncodingEditor extends AbstractEncodingFieldEditor { + + private AbstractLaunchConfigurationTab launchConfigurationTab; + private String errorMessage; + + public ConsoleEncodingEditor(Composite parent, final AbstractLaunchConfigurationTab launchConfigurationTab) { + + super(IInternalDebugCoreConstants.EMPTY_STRING, IInternalDebugCoreConstants.EMPTY_STRING, LaunchConfigurationsMessages.CommonTab_1, parent); + this.launchConfigurationTab = launchConfigurationTab; + + encodingCombo.getAccessible().addAccessibleListener(new AccessibleAdapter() { + public void getName(AccessibleEvent e) { + e.result = LaunchConfigurationsMessages.CommonTab_3; + } + }); + + encodingCombo.addKeyListener(new KeyAdapter() { + public void keyReleased(KeyEvent e) { + validateEncoding(); + updateTab(); + } + }); + + SelectionListener listener = new SelectionAdapter(){ + public void widgetSelected(SelectionEvent e) { + updateTab(); + } + }; + + defaultEncodingButton.addSelectionListener(listener); + otherEncodingButton.addSelectionListener(listener); + encodingCombo.addSelectionListener(listener); + } + + private void updateTab() { + launchConfigurationTab.updateLaunchConfigurationDialog(); + } + + protected GridData createGridData() { + return new GridData(SWT.FILL, SWT.FILL, true, true); + } + + protected String defaultButtonText() { + return NLS.bind(LaunchConfigurationsMessages.CommonTab_2, getDefaultEnc()); + } + + protected String getStoredValue() { + final String comboValue = encodingCombo.getText(); + return comboValue.isEmpty()? null :comboValue; + } + + protected void doStore() { + } + + protected void showErrorMessage(String msg) { + errorMessage = msg; + } + + /** + * Checks whether current encoding is valid. + */ + public boolean isValid() { + refreshValidState(); + return super.isValid(); + } + + /** + * Loads the encodings regardless of preference store being null. + */ + public void load() { + doLoad(); // regardless of preference store being null + } + + /** + * Sets the default encoding for this editor. + * @param defaultEncoding the encoding to be considered as default + */ + public void setDefaultEncoding(String defaultEncoding) { + setDefaultEnc(defaultEncoding); + updateDefaultEncoding(); + } + + /** + * Sets the current encoding for this editor. + * @param encoding the encoding to set. + */ + public void setEncoding(String encoding) { + if (encoding != null) + encodingCombo.setText(encoding); + else + updateEncodingState(true); + } + + /** + * Gets the current encoding. + * @return the current encoding + */ + public String getEncoding() { + if (defaultEncodingButton.getSelection()) + return null; + return encodingCombo.getText(); } + + /** + * If the current encoding is valid, adds it to the list of available encodings, + * otherwise sets an error message to be displayed. + * @return + */ + public boolean validateEncoding() { + boolean isValid = isValid(); + if (!isValid) + launchConfigurationTab.setErrorMessage(errorMessage); + else + IDEEncoding.addIDEEncoding(encodingCombo.getText().toUpperCase()); + return isValid; + } + +}