View | Details | Raw Unified | Return to bug 266579 | Differences between
and this patch

Collapse All | Expand All

(-)META-INF/MANIFEST.MF (-1 / +1 lines)
Lines 15-21 Link Here
15
 org.eclipse.ui.ide.dialogs,
15
 org.eclipse.ui.ide.dialogs,
16
 org.eclipse.ui.ide.fileSystem,
16
 org.eclipse.ui.ide.fileSystem,
17
 org.eclipse.ui.ide.undo,
17
 org.eclipse.ui.ide.undo,
18
 org.eclipse.ui.internal.ide;x-friends:="org.eclipse.ui.ide.application,org.eclipse.ui.navigator.resources",
18
 org.eclipse.ui.internal.ide;x-friends:="org.eclipse.ui.ide.application,org.eclipse.ui.navigator.resources,org.eclipse.debug.ui",
19
 org.eclipse.ui.internal.ide.actions;x-internal:=true,
19
 org.eclipse.ui.internal.ide.actions;x-internal:=true,
20
 org.eclipse.ui.internal.ide.commands;x-internal:=true,
20
 org.eclipse.ui.internal.ide.commands;x-internal:=true,
21
 org.eclipse.ui.internal.ide.dialogs;x-friends:="org.eclipse.ui.ide.application",
21
 org.eclipse.ui.internal.ide.dialogs;x-friends:="org.eclipse.ui.ide.application",
(-)src/org/eclipse/ui/ide/dialogs/AbstractEncodingFieldEditor.java (-6 / +14 lines)
Lines 50-62 Link Here
50
50
51
	private Composite container;
51
	private Composite container;
52
52
53
	private Button defaultEncodingButton;
53
	protected Button defaultEncodingButton;
54
54
55
	private String defaultEnc;
55
	private String defaultEnc;
56
56
57
	private Button otherEncodingButton;
57
	protected Button otherEncodingButton;
58
58
59
	private Combo encodingCombo;
59
	protected Combo encodingCombo;
60
60
61
	private boolean isValid = true;
61
	private boolean isValid = true;
62
62
Lines 198-204 Link Here
198
		updateDefaultEncoding();
198
		updateDefaultEncoding();
199
	}
199
	}
200
200
201
	private void updateDefaultEncoding() {
201
	protected void updateDefaultEncoding() {
202
		defaultEncodingButton.setText(defaultButtonText());
202
		defaultEncodingButton.setText(defaultButtonText());
203
	}
203
	}
204
204
Lines 235-241 Link Here
235
			topControl = top;
235
			topControl = top;
236
		}
236
		}
237
237
238
		GridData data = new GridData(GridData.FILL_HORIZONTAL);
238
		GridData data = createGridData();
239
		topControl.setLayoutData(data);
239
		topControl.setLayoutData(data);
240
		topControl.setLayout(layout);
240
		topControl.setLayout(layout);
241
241
Lines 286-291 Link Here
286
		return topControl;
286
		return topControl;
287
	}
287
	}
288
288
289
	protected GridData createGridData() {
290
		return new GridData(GridData.FILL_HORIZONTAL);
291
	}
292
	
289
	/*
293
	/*
290
	 * (non-Javadoc)
294
	 * (non-Javadoc)
291
	 * 
295
	 * 
Lines 347-353 Link Here
347
		}
351
		}
348
	}
352
	}
349
353
350
	private void updateEncodingState(boolean useDefault) {
354
	protected void updateEncodingState(boolean useDefault) {
351
		defaultEncodingButton.setSelection(useDefault);
355
		defaultEncodingButton.setSelection(useDefault);
352
		otherEncodingButton.setSelection(!useDefault);
356
		otherEncodingButton.setSelection(!useDefault);
353
		if (useDefault) {
357
		if (useDefault) {
Lines 420-425 Link Here
420
		return defaultEnc;
424
		return defaultEnc;
421
	}
425
	}
422
426
427
	protected void setDefaultEnc(String defaultEnc) {
428
		this.defaultEnc = defaultEnc;
429
	}
430
423
	/**
431
	/**
424
	 * Returns whether or not the encoding setting changed.
432
	 * Returns whether or not the encoding setting changed.
425
	 * 
433
	 * 
(-)ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java (-2 lines)
Lines 174-181 Link Here
174
	public static String DebugModePromptStatusHandler_0;
174
	public static String DebugModePromptStatusHandler_0;
175
	public static String DebugModePromptStatusHandler_1;
175
	public static String DebugModePromptStatusHandler_1;
176
176
177
    public static String CommonTab_No_Encoding_Selected;
178
179
	static {
177
	static {
180
		// load message values from bundle file
178
		// load message values from bundle file
181
		NLS.initializeMessages(BUNDLE_NAME, LaunchConfigurationsMessages.class);
179
		NLS.initializeMessages(BUNDLE_NAME, LaunchConfigurationsMessages.class);
(-)ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties (-1 lines)
Lines 9-15 Link Here
9
#     IBM Corporation - initial API and implementation
9
#     IBM Corporation - initial API and implementation
10
###############################################################################
10
###############################################################################
11
11
12
CommonTab_No_Encoding_Selected=Console encoding not selected
13
CommonTab__Browse_6=&Browse...
12
CommonTab__Browse_6=&Browse...
14
CommonTab__Common_15=&Common
13
CommonTab__Common_15=&Common
15
CommonTab_Display_in_favorites_menu__10=Display in favor&ites menu
14
CommonTab_Display_in_favorites_menu__10=Display in favor&ites menu
(-)ui/org/eclipse/debug/ui/CommonTab.java (-82 / +10 lines)
Lines 61-67 Link Here
61
import org.eclipse.swt.layout.GridData;
61
import org.eclipse.swt.layout.GridData;
62
import org.eclipse.swt.layout.GridLayout;
62
import org.eclipse.swt.layout.GridLayout;
63
import org.eclipse.swt.widgets.Button;
63
import org.eclipse.swt.widgets.Button;
64
import org.eclipse.swt.widgets.Combo;
65
import org.eclipse.swt.widgets.Composite;
64
import org.eclipse.swt.widgets.Composite;
66
import org.eclipse.swt.widgets.Control;
65
import org.eclipse.swt.widgets.Control;
67
import org.eclipse.swt.widgets.FileDialog;
66
import org.eclipse.swt.widgets.FileDialog;
Lines 71-83 Link Here
71
import org.eclipse.ui.PlatformUI;
70
import org.eclipse.ui.PlatformUI;
72
import org.eclipse.ui.dialogs.ContainerSelectionDialog;
71
import org.eclipse.ui.dialogs.ContainerSelectionDialog;
73
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
72
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
74
import org.eclipse.ui.ide.IDEEncoding;
75
import org.eclipse.ui.model.WorkbenchContentProvider;
73
import org.eclipse.ui.model.WorkbenchContentProvider;
76
import org.eclipse.ui.model.WorkbenchLabelProvider;
74
import org.eclipse.ui.model.WorkbenchLabelProvider;
77
import org.eclipse.ui.views.navigator.ResourceComparator;
75
import org.eclipse.ui.views.navigator.ResourceComparator;
78
76
79
import com.ibm.icu.text.MessageFormat;
80
81
/**
77
/**
82
 * Launch configuration tab used to specify the location a launch configuration
78
 * Launch configuration tab used to specify the location a launch configuration
83
 * is stored in, whether it should appear in the favorites list, and perspective
79
 * is stored in, whether it should appear in the favorites list, and perspective
Lines 125-133 Link Here
125
	private Text fSharedLocationText;
121
	private Text fSharedLocationText;
126
	private Button fSharedLocationButton;
122
	private Button fSharedLocationButton;
127
	private Button fLaunchInBackgroundButton;
123
	private Button fLaunchInBackgroundButton;
128
    private Button fDefaultEncodingButton;
129
    private Button fAltEncodingButton;
130
    private Combo fEncodingCombo;
131
    private Button fConsoleOutput;
124
    private Button fConsoleOutput;
132
    private Button fFileOutput;
125
    private Button fFileOutput;
133
    private Button fFileBrowse;
126
    private Button fFileBrowse;
Lines 135-140 Link Here
135
    private Button fVariables;
128
    private Button fVariables;
136
    private Button fAppend;
129
    private Button fAppend;
137
    private Button fWorkspaceBrowse;
130
    private Button fWorkspaceBrowse;
131
	private ConsoleEncodingEditor fEncodingEditor;
138
	
132
	
139
	/**
133
	/**
140
	 * Check box list for specifying favorites
134
	 * Check box list for specifying favorites
Lines 358-404 Link Here
358
     * @param parent the parent to add this composite to
352
     * @param parent the parent to add this composite to
359
     */
353
     */
360
    private void createEncodingComponent(Composite parent) {
354
    private void createEncodingComponent(Composite parent) {
361
	    Group group = SWTFactory.createGroup(parent, LaunchConfigurationsMessages.CommonTab_1, 2, 1, GridData.FILL_BOTH);
355
    	Composite composite = new Composite(parent, SWT.NONE);
362
	
356
    	composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
363
	    fDefaultEncodingButton = createRadioButton(group, IInternalDebugCoreConstants.EMPTY_STRING); 
357
    	fEncodingEditor = new ConsoleEncodingEditor(composite, this);    	
364
	    GridData gd = new GridData(SWT.BEGINNING, SWT.NORMAL, true, false);
365
	    gd.horizontalSpan = 2;
366
	    fDefaultEncodingButton.setLayoutData(gd);
367
	   
368
	    fAltEncodingButton = createRadioButton(group, LaunchConfigurationsMessages.CommonTab_3);  
369
	    fAltEncodingButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
370
	    
371
	    fEncodingCombo = new Combo(group, SWT.READ_ONLY);
372
	    fEncodingCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
373
	    fEncodingCombo.setFont(parent.getFont());
374
	    List allEncodings = IDEEncoding.getIDEEncodings();
375
        String[] encodingArray = (String[]) allEncodings.toArray(new String[0]);
376
	    fEncodingCombo.setItems(encodingArray);
377
        if (encodingArray.length > 0) {
378
            fEncodingCombo.select(0); 
379
        }
380
        fEncodingCombo.getAccessible().addAccessibleListener(new AccessibleAdapter() {
381
        	public void getName(AccessibleEvent e) {
382
        		e.result = LaunchConfigurationsMessages.CommonTab_3;
383
        	}
384
        });
385
	    SelectionListener listener = new SelectionAdapter() {
386
	        public void widgetSelected(SelectionEvent e) {
387
	        	if(e.getSource() instanceof Button) {
388
	        		Button button = (Button)e.getSource();
389
	        		if(button.getSelection()) {
390
		        		updateLaunchConfigurationDialog();
391
			            fEncodingCombo.setEnabled(fAltEncodingButton.getSelection() == true);
392
	        		}
393
	        	}
394
	        	else {
395
	        		updateLaunchConfigurationDialog();
396
	        	}
397
	        }
398
	    };
399
	    fAltEncodingButton.addSelectionListener(listener);
400
	    fDefaultEncodingButton.addSelectionListener(listener);
401
	    fEncodingCombo.addSelectionListener(listener);
402
	}
358
	}
403
359
404
	/**
360
	/**
Lines 558-581 Link Here
558
	 * @param configuration the local configuration
514
	 * @param configuration the local configuration
559
	 */
515
	 */
560
	private void updateEncoding(ILaunchConfiguration configuration) {
516
	private void updateEncoding(ILaunchConfiguration configuration) {
517
	    fEncodingEditor.setDefaultEncoding(getDefaultEncoding(configuration));	    
561
	    String encoding = null;
518
	    String encoding = null;
562
	    try {
519
	    try {
563
	        encoding = configuration.getAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, (String)null);
520
	        encoding = configuration.getAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, (String)null);
564
        } catch (CoreException e) {
521
        } catch (CoreException e) {
565
        }
522
        }
566
	    String defaultEncoding = getDefaultEncoding(configuration);
523
       	fEncodingEditor.setEncoding(encoding);
567
	    fDefaultEncodingButton.setText(MessageFormat.format(LaunchConfigurationsMessages.CommonTab_2, new String[]{defaultEncoding}));
524
        fEncodingEditor.load();
568
	    fDefaultEncodingButton.pack();
569
        if (encoding != null) {
570
            fAltEncodingButton.setSelection(true);
571
            fDefaultEncodingButton.setSelection(false);
572
            fEncodingCombo.setText(encoding);
573
            fEncodingCombo.setEnabled(true);
574
        } else {
575
            fDefaultEncodingButton.setSelection(true);
576
            fAltEncodingButton.setSelection(false);
577
            fEncodingCombo.setEnabled(false);
578
        }
579
	}
525
	}
580
	
526
	
581
	/**
527
	/**
Lines 724-747 Link Here
724
		setMessage(null);
670
		setMessage(null);
725
		setErrorMessage(null);
671
		setErrorMessage(null);
726
		
672
		
727
		return validateLocalShared() && validateRedirectFile() && validateEncoding();
673
		return validateLocalShared() && validateRedirectFile() && fEncodingEditor.validateEncoding();
728
	}
674
	}
729
	
675
	
730
    /**
676
    /**
731
     * validates the encoding selection
732
     * @return true if the validate encoding is allowable, false otherwise
733
     */
734
    private boolean validateEncoding() {
735
        if (fAltEncodingButton.getSelection()) {
736
            if (fEncodingCombo.getSelectionIndex() == -1) {
737
                setErrorMessage(LaunchConfigurationsMessages.CommonTab_No_Encoding_Selected);
738
                return false;
739
            }
740
        }
741
        return true;
742
    }
743
744
    /**
745
     * Validates if the redirect file is valid
677
     * Validates if the redirect file is valid
746
     * @return true if the filename is not zero, false otherwise
678
     * @return true if the filename is not zero, false otherwise
747
     */
679
     */
Lines 790-800 Link Here
790
		updateConfigFromLocalShared(configuration);
722
		updateConfigFromLocalShared(configuration);
791
		updateConfigFromFavorites(configuration);
723
		updateConfigFromFavorites(configuration);
792
		setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, configuration, fLaunchInBackgroundButton.getSelection(), true);
724
		setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, configuration, fLaunchInBackgroundButton.getSelection(), true);
793
		String encoding = null;
725
		configuration.setAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, fEncodingEditor.getEncoding());
794
		if(fAltEncodingButton.getSelection()) {
795
		    encoding = fEncodingCombo.getText();
796
		}
797
		configuration.setAttribute(DebugPlugin.ATTR_CONSOLE_ENCODING, encoding);
798
		boolean captureOutput = false;
726
		boolean captureOutput = false;
799
		if (fConsoleOutput.getSelection()) {
727
		if (fConsoleOutput.getSelection()) {
800
		    captureOutput = true;
728
		    captureOutput = true;
Lines 842-848 Link Here
842
	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#canSave()
770
	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#canSave()
843
	 */
771
	 */
844
	public boolean canSave() {
772
	public boolean canSave() {
845
		return validateLocalShared();
773
		return validateLocalShared() && fEncodingEditor.validateEncoding();
846
	}
774
	}
847
775
848
	/* (non-Javadoc)
776
	/* (non-Javadoc)
(-)ui/org/eclipse/debug/ui/ConsoleEncodingEditor.java (+149 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Renato Silva - initial API and implementation
10
 *******************************************************************************/
11
12
package org.eclipse.debug.ui;
13
14
import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
15
import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsMessages;
16
import org.eclipse.osgi.util.NLS;
17
import org.eclipse.swt.SWT;
18
import org.eclipse.swt.accessibility.AccessibleAdapter;
19
import org.eclipse.swt.accessibility.AccessibleEvent;
20
import org.eclipse.swt.events.KeyAdapter;
21
import org.eclipse.swt.events.KeyEvent;
22
import org.eclipse.swt.events.SelectionAdapter;
23
import org.eclipse.swt.events.SelectionEvent;
24
import org.eclipse.swt.events.SelectionListener;
25
import org.eclipse.swt.layout.GridData;
26
import org.eclipse.swt.widgets.Composite;
27
import org.eclipse.ui.ide.IDEEncoding;
28
import org.eclipse.ui.ide.dialogs.AbstractEncodingFieldEditor;
29
30
/**
31
 * The console encoding editor.
32
 */
33
public class ConsoleEncodingEditor extends AbstractEncodingFieldEditor {
34
35
	private AbstractLaunchConfigurationTab launchConfigurationTab;
36
	private String errorMessage; 
37
38
	public ConsoleEncodingEditor(Composite parent, final AbstractLaunchConfigurationTab launchConfigurationTab) {
39
		
40
		super(IInternalDebugCoreConstants.EMPTY_STRING, IInternalDebugCoreConstants.EMPTY_STRING, LaunchConfigurationsMessages.CommonTab_1, parent);		
41
		this.launchConfigurationTab = launchConfigurationTab;
42
43
		encodingCombo.getAccessible().addAccessibleListener(new AccessibleAdapter() {
44
        	public void getName(AccessibleEvent e) {
45
        		e.result = LaunchConfigurationsMessages.CommonTab_3;
46
        	}
47
        });			
48
49
		encodingCombo.addKeyListener(new KeyAdapter() {
50
			public void keyReleased(KeyEvent e) {
51
				validateEncoding();
52
				updateTab();				
53
			}
54
		});
55
56
		SelectionListener listener = new SelectionAdapter(){
57
			public void widgetSelected(SelectionEvent e) {
58
				updateTab();
59
			}
60
		};
61
		
62
		defaultEncodingButton.addSelectionListener(listener);
63
		otherEncodingButton.addSelectionListener(listener);
64
		encodingCombo.addSelectionListener(listener);
65
	}
66
	
67
	private void updateTab() {
68
		launchConfigurationTab.updateLaunchConfigurationDialog();
69
	}
70
71
	protected GridData createGridData() {
72
    	return new GridData(SWT.FILL, SWT.FILL, true, true);
73
    }
74
75
	protected String defaultButtonText() {
76
    	return NLS.bind(LaunchConfigurationsMessages.CommonTab_2, getDefaultEnc());
77
    }
78
79
    protected String getStoredValue() {
80
    	final String comboValue = encodingCombo.getText();
81
    	return comboValue.isEmpty()? null :comboValue; 
82
	}
83
    
84
    protected void doStore() {
85
	}
86
    
87
    protected void showErrorMessage(String msg) {
88
    	errorMessage = msg;
89
    }
90
    
91
    /**
92
     * Checks whether current encoding is valid. 
93
     */
94
    public boolean isValid() {
95
		refreshValidState();
96
		return super.isValid();
97
	}
98
99
    /**
100
     * Loads the encodings regardless of preference store being null.
101
     */
102
    public void load() {
103
    	doLoad(); // regardless of preference store being null
104
    }
105
    
106
    /**
107
     * Sets the default encoding for this editor.
108
     * @param defaultEncoding the encoding to be considered as default
109
     */
110
	public void setDefaultEncoding(String defaultEncoding) {
111
    	setDefaultEnc(defaultEncoding);
112
    	updateDefaultEncoding();
113
	}
114
	
115
	/**
116
	 * Sets the current encoding for this editor. 
117
	 * @param encoding the encoding to set.
118
	 */
119
	public void setEncoding(String encoding) {
120
		if (encoding != null)
121
			encodingCombo.setText(encoding);
122
		else
123
			updateEncodingState(true);
124
	}
125
	
126
	/**
127
	 * Gets the current encoding.
128
	 * @return the current encoding
129
	 */
130
    public String getEncoding() {
131
		if (defaultEncodingButton.getSelection()) 
132
			return null;
133
		return encodingCombo.getText();	}
134
    
135
    /**
136
	 * If the current encoding is valid, adds it to the list of available encodings,
137
	 * otherwise sets an error message to be displayed.  
138
	 * @return
139
	 */
140
	public boolean validateEncoding() {
141
		boolean isValid = isValid();
142
		if (!isValid)
143
			launchConfigurationTab.setErrorMessage(errorMessage);
144
		else
145
			IDEEncoding.addIDEEncoding(encodingCombo.getText().toUpperCase());
146
		return isValid;
147
	}
148
    
149
}

Return to bug 266579