Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 173095 | Differences between
and this patch

Collapse All | Expand All

(-)Eclipse UI/org/eclipse/ui/dialogs/EditorSelectionDialog.java (-118 / +135 lines)
Lines 22-34 Link Here
22
import org.eclipse.jface.resource.ResourceManager;
22
import org.eclipse.jface.resource.ResourceManager;
23
import org.eclipse.jface.util.Util;
23
import org.eclipse.jface.util.Util;
24
import org.eclipse.jface.viewers.ArrayContentProvider;
24
import org.eclipse.jface.viewers.ArrayContentProvider;
25
import org.eclipse.jface.viewers.IOpenListener;
25
import org.eclipse.jface.viewers.LabelProvider;
26
import org.eclipse.jface.viewers.LabelProvider;
27
import org.eclipse.jface.viewers.OpenEvent;
26
import org.eclipse.jface.viewers.TableViewer;
28
import org.eclipse.jface.viewers.TableViewer;
27
import org.eclipse.osgi.util.TextProcessor;
29
import org.eclipse.osgi.util.TextProcessor;
28
import org.eclipse.swt.SWT;
30
import org.eclipse.swt.SWT;
29
import org.eclipse.swt.graphics.Cursor;
31
import org.eclipse.swt.graphics.Cursor;
30
import org.eclipse.swt.graphics.Font;
31
import org.eclipse.swt.graphics.Image;
32
import org.eclipse.swt.graphics.Image;
33
import org.eclipse.swt.layout.FillLayout;
32
import org.eclipse.swt.layout.GridData;
34
import org.eclipse.swt.layout.GridData;
33
import org.eclipse.swt.layout.GridLayout;
35
import org.eclipse.swt.layout.GridLayout;
34
import org.eclipse.swt.widgets.Button;
36
import org.eclipse.swt.widgets.Button;
Lines 39-44 Link Here
39
import org.eclipse.swt.widgets.Label;
41
import org.eclipse.swt.widgets.Label;
40
import org.eclipse.swt.widgets.Listener;
42
import org.eclipse.swt.widgets.Listener;
41
import org.eclipse.swt.widgets.Shell;
43
import org.eclipse.swt.widgets.Shell;
44
import org.eclipse.swt.widgets.TabFolder;
45
import org.eclipse.swt.widgets.TabItem;
42
import org.eclipse.swt.widgets.Table;
46
import org.eclipse.swt.widgets.Table;
43
import org.eclipse.swt.widgets.TableItem;
47
import org.eclipse.swt.widgets.TableItem;
44
import org.eclipse.ui.IEditorDescriptor;
48
import org.eclipse.ui.IEditorDescriptor;
Lines 60-72 Link Here
60
public final class EditorSelectionDialog extends Dialog {
64
public final class EditorSelectionDialog extends Dialog {
61
	private EditorDescriptor selectedEditor;
65
	private EditorDescriptor selectedEditor;
62
66
63
	private Button externalButton;
67
	/**
68
	 * The tab folder that holds the tabs for the listing of internal and
69
	 * external editors.
70
	 */
71
	private TabFolder editorsFolder;
64
72
65
	private Table editorTable;
73
	/**
74
	 * The table that renders the list of internal editors to the user.
75
	 */
76
	private Table internalEditorsTable;
66
77
67
	private Button browseExternalEditorsButton;
78
	/**
79
	 * The table that renders the list of external editors to the user.
80
	 */
81
	private Table externalEditorsTable;
68
82
69
	private Button internalButton;
83
	/**
84
	 * The button for browsing to an external application for opening a file.
85
	 */
86
	private Button browseExternalEditorsButton;
70
87
71
	private Button okButton;
88
	private Button okButton;
72
89
Lines 85-91 Link Here
85
102
86
	private ResourceManager resourceManager;
103
	private ResourceManager resourceManager;
87
104
88
	private TableViewer editorTableViewer;
105
	private TableViewer internalEditorsTableViewer;
106
107
	private TableViewer externalEditorsTableViewer;
108
109
	private LabelProvider labelProvider;
89
110
90
	private static final String[] Executable_Filters;
111
	private static final String[] Executable_Filters;
91
112
Lines 113-123 Link Here
113
	/**
134
	/**
114
	 * This method is called if a button has been pressed.
135
	 * This method is called if a button has been pressed.
115
	 */
136
	 */
116
	protected void buttonPressed(int buttonId) {
137
	protected void okPressed() {
117
		if (buttonId == IDialogConstants.OK_ID) {
138
		saveWidgetValues();
118
			saveWidgetValues();
139
		super.okPressed();
119
		}
120
		super.buttonPressed(buttonId);
121
	}
140
	}
122
141
123
	/**
142
	/**
Lines 151-199 Link Here
151
	 * @return the dialog area control
170
	 * @return the dialog area control
152
	 */
171
	 */
153
	protected Control createDialogArea(Composite parent) {
172
	protected Control createDialogArea(Composite parent) {
154
		Font font = parent.getFont();
155
		// create main group
173
		// create main group
156
		Composite contents = (Composite) super.createDialogArea(parent);
174
		Composite contents = (Composite) super.createDialogArea(parent);
157
		((GridLayout) contents.getLayout()).numColumns = 2;
158
175
159
		// begin the layout
176
		// begin the layout
160
		Label textLabel = new Label(contents, SWT.NONE);
177
		Label textLabel = new Label(contents, SWT.NONE);
161
		textLabel.setText(message);
178
		textLabel.setText(message);
162
		GridData data = new GridData();
163
		data.horizontalSpan = 2;
164
		textLabel.setLayoutData(data);
165
		textLabel.setFont(font);
166
167
		internalButton = new Button(contents, SWT.RADIO | SWT.LEFT);
168
		internalButton.setText(WorkbenchMessages.EditorSelection_internal);
169
		internalButton.addListener(SWT.Selection, listener);
170
		data = new GridData();
171
		data.horizontalSpan = 1;
172
		internalButton.setLayoutData(data);
173
		internalButton.setFont(font);
174
175
		externalButton = new Button(contents, SWT.RADIO | SWT.LEFT);
176
		externalButton.setText(WorkbenchMessages.EditorSelection_external);
177
		externalButton.addListener(SWT.Selection, listener);
178
		data = new GridData();
179
		data.horizontalSpan = 1;
180
		externalButton.setLayoutData(data);
181
		externalButton.setFont(font);
182
179
183
		editorTable = new Table(contents, SWT.SINGLE | SWT.BORDER);
180
		editorsFolder = new TabFolder(contents, SWT.TOP);
184
		data = new GridData();
181
		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
185
		data.widthHint = convertHorizontalDLUsToPixels(TABLE_WIDTH);
182
		data.widthHint = convertHorizontalDLUsToPixels(TABLE_WIDTH);
186
		data.horizontalAlignment = GridData.FILL;
183
		editorsFolder.setLayoutData(data);
187
		data.grabExcessHorizontalSpace = true;
184
188
		data.verticalAlignment = GridData.FILL;
185
		labelProvider = new LabelProvider() {
189
		data.grabExcessVerticalSpace = true;
190
		data.horizontalSpan = 2;
191
		editorTable.setLayoutData(data);
192
		editorTable.setFont(font);
193
		data.heightHint = editorTable.getItemHeight() * 12;
194
		editorTableViewer = new TableViewer(editorTable);
195
		editorTableViewer.setContentProvider(ArrayContentProvider.getInstance());
196
		editorTableViewer.setLabelProvider(new LabelProvider() {
197
			public String getText(Object element) {
186
			public String getText(Object element) {
198
				IEditorDescriptor d = (IEditorDescriptor) element;
187
				IEditorDescriptor d = (IEditorDescriptor) element;
199
				return TextProcessor.process(d.getLabel(), "."); //$NON-NLS-1$
188
				return TextProcessor.process(d.getLabel(), "."); //$NON-NLS-1$
Lines 203-238 Link Here
203
				IEditorDescriptor d = (IEditorDescriptor) element;
192
				IEditorDescriptor d = (IEditorDescriptor) element;
204
				return (Image) resourceManager.get(d.getImageDescriptor());
193
				return (Image) resourceManager.get(d.getImageDescriptor());
205
			}
194
			}
206
		});
195
		};
207
		editorTable.addListener(SWT.Selection, listener);
196
208
		editorTable.addListener(SWT.DefaultSelection, listener);
197
		createInternalEditorsTable();
209
		editorTable.addListener(SWT.MouseDoubleClick, listener);
198
		createExternalEditorsTable();
210
211
		browseExternalEditorsButton = new Button(contents, SWT.PUSH);
212
		browseExternalEditorsButton
213
				.setText(WorkbenchMessages.EditorSelection_browse);
214
		browseExternalEditorsButton.addListener(SWT.Selection, listener);
215
		data = new GridData();
216
		int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
217
		data.widthHint = Math.max(widthHint, browseExternalEditorsButton
218
				.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
219
		browseExternalEditorsButton.setLayoutData(data);
220
		browseExternalEditorsButton.setFont(font);
221
199
222
		restoreWidgetValues(); // Place buttons to the appropriate state
200
		restoreWidgetValues(); // Place buttons to the appropriate state
223
201
224
		fillEditorTable();
202
		internalEditorsTableViewer.setInput(getInternalEditors());
203
		handleTabSelection();
204
205
		editorsFolder.addListener(SWT.Selection, listener);
206
		editorsFolder.addListener(SWT.DefaultSelection, listener);
225
207
226
		updateEnableState();
208
		Dialog.applyDialogFont(contents);
209
210
		((GridData) externalEditorsTable.getLayoutData()).heightHint = externalEditorsTable
211
				.getItemHeight() * 12;
227
212
228
		return contents;
213
		return contents;
229
	}
214
	}
230
215
231
	protected void fillEditorTable() {
216
	private void createInternalEditorsTable() {
232
		if (internalButton.getSelection()) {
217
		TabItem internalEditorsItem = new TabItem(editorsFolder, SWT.LEAD);
233
			editorTableViewer.setInput(getInternalEditors());
218
		internalEditorsItem.setText(WorkbenchMessages.EditorSelection_internal);
219
220
		Composite internalComposite = new Composite(editorsFolder, SWT.NONE);
221
		internalComposite.setLayout(new FillLayout());
222
223
		internalEditorsTable = new Table(internalComposite, SWT.SINGLE | SWT.BORDER);
224
		internalEditorsTable.addListener(SWT.Selection, listener);
225
		internalEditorsTable.addListener(SWT.DefaultSelection, listener);
226
227
		internalEditorsTableViewer = new TableViewer(internalEditorsTable);
228
		internalEditorsTableViewer.setContentProvider(ArrayContentProvider.getInstance());
229
		internalEditorsTableViewer.setLabelProvider(labelProvider);
230
		internalEditorsTableViewer.addOpenListener(new IOpenListener() {
231
			public void open(OpenEvent event) {
232
				okPressed();
233
			}
234
		});
235
236
		internalEditorsItem.setControl(internalComposite);
237
	}
238
239
	private void createExternalEditorsTable() {
240
		Composite externalComposite = new Composite(editorsFolder, SWT.NONE);
241
		GridLayout layout = new GridLayout(1, false);
242
		layout.marginWidth = 0;
243
		layout.marginHeight = 0;
244
		externalComposite.setLayout(layout);
245
246
		TabItem externalEditorsItem = new TabItem(editorsFolder, SWT.LEAD);
247
		externalEditorsItem.setText(WorkbenchMessages.EditorSelection_external);
248
249
		externalEditorsTable = new Table(externalComposite, SWT.SINGLE | SWT.BORDER);
250
		externalEditorsTable.addListener(SWT.Selection, listener);
251
		externalEditorsTable.addListener(SWT.DefaultSelection, listener);
252
		externalEditorsTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
253
254
		externalEditorsTableViewer = new TableViewer(externalEditorsTable);
255
		externalEditorsTableViewer.setContentProvider(ArrayContentProvider.getInstance());
256
		externalEditorsTableViewer.setLabelProvider(labelProvider);
257
		externalEditorsTableViewer.addOpenListener(new IOpenListener() {
258
			public void open(OpenEvent event) {
259
				okPressed();
260
			}
261
		});
262
263
		browseExternalEditorsButton = new Button(externalComposite, SWT.PUSH);
264
		browseExternalEditorsButton.setText(WorkbenchMessages.EditorSelection_browse);
265
		browseExternalEditorsButton.addListener(SWT.Selection, listener);
266
267
		externalEditorsItem.setControl(externalComposite);
268
	}
269
270
	private void handleTabSelection() {
271
		if (editorsFolder.getSelectionIndex() == 0) {
272
			internalEditorsTable.setFocus();
234
		} else {
273
		} else {
235
			editorTableViewer.setInput(getExternalEditors());
274
			externalEditorsTableViewer.setInput(getExternalEditors());
275
			externalEditorsTable.setFocus();
236
		}
276
		}
237
	}
277
	}
238
278
Lines 344-360 Link Here
344
		if (result != null) {
384
		if (result != null) {
345
			EditorDescriptor editor = EditorDescriptor.createForProgram(result);
385
			EditorDescriptor editor = EditorDescriptor.createForProgram(result);
346
			// pretend we had obtained it from the list of os registered editors
386
			// pretend we had obtained it from the list of os registered editors
347
			TableItem ti = new TableItem(editorTable, SWT.NULL);
387
			TableItem ti = new TableItem(externalEditorsTable, SWT.NULL);
348
			ti.setData(editor);
388
			ti.setData(editor);
349
			ti.setText(editor.getLabel());
389
			ti.setText(editor.getLabel());
350
			Image image = editor.getImageDescriptor().createImage();
390
			Image image = editor.getImageDescriptor().createImage();
351
			ti.setImage(image);
391
			ti.setImage(image);
352
392
353
			// need to pass an array to setSelection -- 1FSKYVO: SWT:ALL -
393
			externalEditorsTable.setSelection(ti);
354
			// inconsistent setSelection api on Table
394
			externalEditorsTable.showSelection();
355
			editorTable.setSelection(new TableItem[] { ti });
395
			externalEditorsTable.setFocus();
356
			editorTable.showSelection();
357
			editorTable.setFocus();
358
			selectedEditor = editor;
396
			selectedEditor = editor;
359
397
360
			/*
398
			/*
Lines 370-390 Link Here
370
	}
408
	}
371
409
372
	/**
410
	/**
373
	 * Handle a double click event on the list
374
	 */
375
	protected void handleDoubleClickEvent() {
376
		buttonPressed(IDialogConstants.OK_ID);
377
	}
378
379
	/**
380
	 * Use the dialog store to restore widget values to the values that they
411
	 * Use the dialog store to restore widget values to the values that they
381
	 * held last time this wizard was used to completion
412
	 * held last time this wizard was used to completion
382
	 */
413
	 */
383
	protected void restoreWidgetValues() {
414
	protected void restoreWidgetValues() {
384
		IDialogSettings settings = getDialogSettings();
415
		IDialogSettings settings = getDialogSettings();
385
		boolean wasExternal = settings.getBoolean(STORE_ID_INTERNAL_EXTERNAL);
416
		boolean wasExternal = settings.getBoolean(STORE_ID_INTERNAL_EXTERNAL);
386
		internalButton.setSelection(!wasExternal);
417
		editorsFolder.setSelection(wasExternal ? 1 : 0);
387
		externalButton.setSelection(wasExternal);
388
	}
418
	}
389
419
390
	/**
420
	/**
Lines 394-401 Link Here
394
	protected void saveWidgetValues() {
424
	protected void saveWidgetValues() {
395
		IDialogSettings settings = getDialogSettings();
425
		IDialogSettings settings = getDialogSettings();
396
		// record whether use was viewing internal or external editors
426
		// record whether use was viewing internal or external editors
397
		settings
427
		settings.put(STORE_ID_INTERNAL_EXTERNAL, editorsFolder.getSelectionIndex() == 1);
398
				.put(STORE_ID_INTERNAL_EXTERNAL, !internalButton.getSelection());
399
	}
428
	}
400
429
401
	/**
430
	/**
Lines 418-437 Link Here
418
		editorsToFilter = editors;
447
		editorsToFilter = editors;
419
	}
448
	}
420
449
421
	/**
422
	 * Update enabled state.
423
	 */
424
	protected void updateEnableState() {
425
		boolean enableExternal = externalButton.getSelection();
426
		browseExternalEditorsButton.setEnabled(enableExternal);
427
		updateOkButton();
428
	}
429
430
	protected void createButtonsForButtonBar(Composite parent) {
450
	protected void createButtonsForButtonBar(Composite parent) {
431
		okButton = createButton(parent, IDialogConstants.OK_ID,
451
		super.createButtonsForButtonBar(parent);
432
				IDialogConstants.OK_LABEL, true);
452
		okButton = getButton(IDialogConstants.OK_ID);
433
		createButton(parent, IDialogConstants.CANCEL_ID,
434
				IDialogConstants.CANCEL_LABEL, false);
435
		// initially there is no selection so OK button should not be enabled
453
		// initially there is no selection so OK button should not be enabled
436
		okButton.setEnabled(false);
454
		okButton.setEnabled(false);
437
455
Lines 442-457 Link Here
442
	 */
460
	 */
443
	protected void updateOkButton() {
461
	protected void updateOkButton() {
444
		// Buttons are null during dialog creation
462
		// Buttons are null during dialog creation
445
		if (okButton == null) {
463
		if (okButton != null) {
446
			return;
464
			if (editorsFolder.getSelectionIndex() == 0) {
447
		}
465
				okButton.setEnabled(internalEditorsTable.getSelectionIndex() != -1);
448
		// If there is no selection, do not enable OK button
466
			} else {
449
		if (editorTable.getSelectionCount() == 0) {
467
				okButton.setEnabled(externalEditorsTable.getSelectionIndex() != -1);
450
			okButton.setEnabled(false);
468
			}
451
			return;
452
		}
469
		}
453
		// At this point, there is a selection
454
		okButton.setEnabled(selectedEditor != null);
455
	}
470
	}
456
471
457
	private class DialogListener implements Listener {
472
	private class DialogListener implements Listener {
Lines 462-485 Link Here
462
		 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
477
		 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
463
		 */
478
		 */
464
		public void handleEvent(Event event) {
479
		public void handleEvent(Event event) {
465
			if (event.type == SWT.MouseDoubleClick) {
480
			if (event.widget == editorsFolder) {
466
				handleDoubleClickEvent();
481
				handleTabSelection();
467
				return;
468
			}
469
			if (event.widget == externalButton) {
470
				fillEditorTable();
471
			} else if (event.widget == browseExternalEditorsButton) {
482
			} else if (event.widget == browseExternalEditorsButton) {
472
				promptForExternalEditor();
483
				promptForExternalEditor();
473
			} else if (event.widget == editorTable) {
484
			} else if (event.widget == internalEditorsTable) {
474
				if (editorTable.getSelectionIndex() != -1) {
485
				if (internalEditorsTable.getSelectionIndex() != -1) {
475
					selectedEditor = (EditorDescriptor) editorTable
486
					selectedEditor = (EditorDescriptor) internalEditorsTable.getSelection()[0]
476
							.getSelection()[0].getData();
487
							.getData();
488
				} else {
489
					selectedEditor = null;
490
				}
491
			} else if (event.widget == externalEditorsTable) {
492
				if (externalEditorsTable.getSelectionIndex() != -1) {
493
					selectedEditor = (EditorDescriptor) externalEditorsTable.getSelection()[0]
494
							.getData();
477
				} else {
495
				} else {
478
					selectedEditor = null;
496
					selectedEditor = null;
479
					okButton.setEnabled(false);
480
				}
497
				}
481
			}
498
			}
482
			updateEnableState();
499
			updateOkButton();
483
		}
500
		}
484
501
485
	}
502
	}

Return to bug 173095