Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 159378 Details for
Bug 173095
[EditorMgmt] "Open With > Other..." dialog should set focus on the list on open
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
EditorSelectionDialog patch v1
bug173095-patch-v1.txt (text/plain), 14.47 KB, created by
Remy Suen
on 2010-02-17 16:21:36 EST
(
hide
)
Description:
EditorSelectionDialog patch v1
Filename:
MIME Type:
Creator:
Remy Suen
Created:
2010-02-17 16:21:36 EST
Size:
14.47 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.ui.workbench >Index: Eclipse UI/org/eclipse/ui/dialogs/EditorSelectionDialog.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/EditorSelectionDialog.java,v >retrieving revision 1.9 >diff -u -r1.9 EditorSelectionDialog.java >--- Eclipse UI/org/eclipse/ui/dialogs/EditorSelectionDialog.java 22 Jan 2010 21:41:10 -0000 1.9 >+++ Eclipse UI/org/eclipse/ui/dialogs/EditorSelectionDialog.java 17 Feb 2010 21:20:52 -0000 >@@ -24,12 +24,13 @@ > import org.eclipse.jface.viewers.ArrayContentProvider; > import org.eclipse.jface.viewers.ColumnLabelProvider; > import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; >+import org.eclipse.jface.viewers.DoubleClickEvent; >+import org.eclipse.jface.viewers.IDoubleClickListener; > import org.eclipse.jface.viewers.ILabelDecorator; > import org.eclipse.jface.viewers.TableViewer; > import org.eclipse.osgi.util.TextProcessor; > import org.eclipse.swt.SWT; > import org.eclipse.swt.graphics.Cursor; >-import org.eclipse.swt.graphics.Font; > import org.eclipse.swt.graphics.Image; > import org.eclipse.swt.layout.GridData; > import org.eclipse.swt.layout.GridLayout; >@@ -41,6 +42,8 @@ > import org.eclipse.swt.widgets.Label; > import org.eclipse.swt.widgets.Listener; > import org.eclipse.swt.widgets.Shell; >+import org.eclipse.swt.widgets.TabFolder; >+import org.eclipse.swt.widgets.TabItem; > import org.eclipse.swt.widgets.Table; > import org.eclipse.swt.widgets.TableItem; > import org.eclipse.ui.IEditorDescriptor; >@@ -63,13 +66,26 @@ > public final class EditorSelectionDialog extends Dialog { > private EditorDescriptor selectedEditor; > >- private Button externalButton; >+ /** >+ * The tab folder that holds the tabs for the listing of internal and >+ * external editors. >+ */ >+ private TabFolder editorsFolder; > >- private Table editorTable; >+ /** >+ * The table that renders the list of internal editors to the user. >+ */ >+ private Table internalEditorsTable; > >- private Button browseExternalEditorsButton; >+ /** >+ * The table that renders the list of external editors to the user. >+ */ >+ private Table externalEditorsTable; > >- private Button internalButton; >+ /** >+ * The button for browsing to an external application for opening a file. >+ */ >+ private Button browseExternalEditorsButton; > > private Button okButton; > >@@ -88,7 +104,11 @@ > > private ResourceManager resourceManager; > >- private TableViewer editorTableViewer; >+ private TableViewer internalEditorsTableViewer; >+ >+ private TableViewer externalEditorsTableViewer; >+ >+ private ColumnLabelProvider labelProvider; > > private static final String[] Executable_Filters; > >@@ -154,54 +174,21 @@ > * @return the dialog area control > */ > protected Control createDialogArea(Composite parent) { >- Font font = parent.getFont(); > // create main group > Composite contents = (Composite) super.createDialogArea(parent); >- ((GridLayout) contents.getLayout()).numColumns = 2; > > // begin the layout > Label textLabel = new Label(contents, SWT.NONE); > textLabel.setText(message); >- GridData data = new GridData(); >- data.horizontalSpan = 2; >- textLabel.setLayoutData(data); >- textLabel.setFont(font); >- >- internalButton = new Button(contents, SWT.RADIO | SWT.LEFT); >- internalButton.setText(WorkbenchMessages.EditorSelection_internal); >- internalButton.addListener(SWT.Selection, listener); >- data = new GridData(); >- data.horizontalSpan = 1; >- internalButton.setLayoutData(data); >- internalButton.setFont(font); >- >- externalButton = new Button(contents, SWT.RADIO | SWT.LEFT); >- externalButton.setText(WorkbenchMessages.EditorSelection_external); >- externalButton.addListener(SWT.Selection, listener); >- data = new GridData(); >- data.horizontalSpan = 1; >- externalButton.setLayoutData(data); >- externalButton.setFont(font); >- >- editorTable = new Table(contents, SWT.SINGLE | SWT.BORDER); >- editorTable.addListener(SWT.Selection, listener); >- editorTable.addListener(SWT.DefaultSelection, listener); >- editorTable.addListener(SWT.MouseDoubleClick, listener); >- data = new GridData(); >+ >+ editorsFolder = new TabFolder(contents, SWT.TOP); >+ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); > data.widthHint = convertHorizontalDLUsToPixels(TABLE_WIDTH); >- data.horizontalAlignment = GridData.FILL; >- data.grabExcessHorizontalSpace = true; >- data.verticalAlignment = GridData.FILL; >- data.grabExcessVerticalSpace = true; >- data.horizontalSpan = 2; >- editorTable.setLayoutData(data); >- editorTable.setFont(font); >- data.heightHint = editorTable.getItemHeight() * 12; >- editorTableViewer = new TableViewer(editorTable); >- editorTableViewer.setContentProvider(ArrayContentProvider.getInstance()); >+ editorsFolder.setLayoutData(data); >+ > final ILabelDecorator decorator = PlatformUI.getWorkbench().getDecoratorManager() > .getLabelDecorator(ContributingPluginDecorator.ID); >- editorTableViewer.setLabelProvider(new ColumnLabelProvider() { >+ labelProvider = new ColumnLabelProvider() { > public String getText(Object element) { > IEditorDescriptor d = (IEditorDescriptor) element; > return TextProcessor.process(d.getLabel(), "."); //$NON-NLS-1$ >@@ -216,39 +203,104 @@ > if (decorator == null || !(element instanceof EditorDescriptor)) { > return null; > } >+ > EditorDescriptor d = (EditorDescriptor) element; > return decorator.decorateText(getText(element), d.getConfigurationElement()); > } >- }); >+ }; >+ > if (decorator != null) { >- ColumnViewerToolTipSupport.enableFor(editorTableViewer); >+ ColumnViewerToolTipSupport.enableFor(internalEditorsTableViewer); >+ ColumnViewerToolTipSupport.enableFor(externalEditorsTableViewer); > } > >- browseExternalEditorsButton = new Button(contents, SWT.PUSH); >- browseExternalEditorsButton >- .setText(WorkbenchMessages.EditorSelection_browse); >- browseExternalEditorsButton.addListener(SWT.Selection, listener); >- data = new GridData(); >- int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); >- data.widthHint = Math.max(widthHint, browseExternalEditorsButton >- .computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); >- browseExternalEditorsButton.setLayoutData(data); >- browseExternalEditorsButton.setFont(font); >+ createInternalEditorsTable(); >+ createExternalEditorsTable(); > > restoreWidgetValues(); // Place buttons to the appropriate state > >- fillEditorTable(); >+ internalEditorsTableViewer.setInput(getInternalEditors()); >+ handleTabSelection(); > >- updateEnableState(); >+ editorsFolder.addListener(SWT.Selection, listener); >+ editorsFolder.addListener(SWT.DefaultSelection, listener); >+ >+ Dialog.applyDialogFont(contents); >+ >+ ((GridData) internalEditorsTable.getLayoutData()).heightHint = internalEditorsTable >+ .getItemHeight() * 12; >+ ((GridData) externalEditorsTable.getLayoutData()).heightHint = externalEditorsTable >+ .getItemHeight() * 12; > > return contents; > } > >- protected void fillEditorTable() { >- if (internalButton.getSelection()) { >- editorTableViewer.setInput(getInternalEditors()); >+ private void createInternalEditorsTable() { >+ TabItem internalEditorsItem = new TabItem(editorsFolder, SWT.LEAD); >+ internalEditorsItem.setText(WorkbenchMessages.EditorSelection_internal); >+ >+ Composite internalComposite = new Composite(editorsFolder, SWT.NONE); >+ GridLayout layout = new GridLayout(1, false); >+ layout.marginWidth = 0; >+ layout.marginHeight = 0; >+ internalComposite.setLayout(layout); >+ >+ internalEditorsTable = new Table(internalComposite, SWT.SINGLE | SWT.BORDER); >+ internalEditorsTable.addListener(SWT.Selection, listener); >+ internalEditorsTable.addListener(SWT.DefaultSelection, listener); >+ internalEditorsTable.addListener(SWT.MouseDoubleClick, listener); >+ internalEditorsTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); >+ >+ internalEditorsTableViewer = new TableViewer(internalEditorsTable); >+ internalEditorsTableViewer.setContentProvider(ArrayContentProvider.getInstance()); >+ internalEditorsTableViewer.setLabelProvider(labelProvider); >+ internalEditorsTableViewer.addDoubleClickListener(new IDoubleClickListener() { >+ public void doubleClick(DoubleClickEvent event) { >+ handleDoubleClickEvent(); >+ } >+ }); >+ >+ internalEditorsItem.setControl(internalComposite); >+ } >+ >+ private void createExternalEditorsTable() { >+ Composite externalComposite = new Composite(editorsFolder, SWT.NONE); >+ GridLayout layout = new GridLayout(1, false); >+ layout.marginWidth = 0; >+ layout.marginHeight = 0; >+ externalComposite.setLayout(layout); >+ >+ TabItem externalEditorsItem = new TabItem(editorsFolder, SWT.LEAD); >+ externalEditorsItem.setText(WorkbenchMessages.EditorSelection_external); >+ >+ externalEditorsTable = new Table(externalComposite, SWT.SINGLE | SWT.BORDER); >+ externalEditorsTable.addListener(SWT.Selection, listener); >+ externalEditorsTable.addListener(SWT.DefaultSelection, listener); >+ externalEditorsTable.addListener(SWT.MouseDoubleClick, listener); >+ externalEditorsTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); >+ >+ externalEditorsTableViewer = new TableViewer(externalEditorsTable); >+ externalEditorsTableViewer.setContentProvider(ArrayContentProvider.getInstance()); >+ externalEditorsTableViewer.setLabelProvider(labelProvider); >+ externalEditorsTableViewer.addDoubleClickListener(new IDoubleClickListener() { >+ public void doubleClick(DoubleClickEvent event) { >+ handleDoubleClickEvent(); >+ } >+ }); >+ >+ browseExternalEditorsButton = new Button(externalComposite, SWT.PUSH); >+ browseExternalEditorsButton.setText(WorkbenchMessages.EditorSelection_browse); >+ browseExternalEditorsButton.addListener(SWT.Selection, listener); >+ >+ externalEditorsItem.setControl(externalComposite); >+ } >+ >+ private void handleTabSelection() { >+ if (editorsFolder.getSelectionIndex() == 0) { >+ internalEditorsTable.setFocus(); > } else { >- editorTableViewer.setInput(getExternalEditors()); >+ externalEditorsTableViewer.setInput(getExternalEditors()); >+ externalEditorsTable.setFocus(); > } > } > >@@ -360,7 +412,7 @@ > if (result != null) { > EditorDescriptor editor = EditorDescriptor.createForProgram(result); > // pretend we had obtained it from the list of os registered editors >- TableItem ti = new TableItem(editorTable, SWT.NULL); >+ TableItem ti = new TableItem(externalEditorsTable, SWT.NULL); > ti.setData(editor); > ti.setText(editor.getLabel()); > Image image = editor.getImageDescriptor().createImage(); >@@ -368,9 +420,9 @@ > > // need to pass an array to setSelection -- 1FSKYVO: SWT:ALL - > // inconsistent setSelection api on Table >- editorTable.setSelection(new TableItem[] { ti }); >- editorTable.showSelection(); >- editorTable.setFocus(); >+ externalEditorsTable.setSelection(ti); >+ externalEditorsTable.showSelection(); >+ externalEditorsTable.setFocus(); > selectedEditor = editor; > > /* >@@ -399,8 +451,7 @@ > protected void restoreWidgetValues() { > IDialogSettings settings = getDialogSettings(); > boolean wasExternal = settings.getBoolean(STORE_ID_INTERNAL_EXTERNAL); >- internalButton.setSelection(!wasExternal); >- externalButton.setSelection(wasExternal); >+ editorsFolder.setSelection(wasExternal ? 1 : 0); > } > > /** >@@ -410,8 +461,7 @@ > protected void saveWidgetValues() { > IDialogSettings settings = getDialogSettings(); > // record whether use was viewing internal or external editors >- settings >- .put(STORE_ID_INTERNAL_EXTERNAL, !internalButton.getSelection()); >+ settings.put(STORE_ID_INTERNAL_EXTERNAL, editorsFolder.getSelectionIndex() == 1); > } > > /** >@@ -434,20 +484,9 @@ > editorsToFilter = editors; > } > >- /** >- * Update enabled state. >- */ >- protected void updateEnableState() { >- boolean enableExternal = externalButton.getSelection(); >- browseExternalEditorsButton.setEnabled(enableExternal); >- updateOkButton(); >- } >- > protected void createButtonsForButtonBar(Composite parent) { >- okButton = createButton(parent, IDialogConstants.OK_ID, >- IDialogConstants.OK_LABEL, true); >- createButton(parent, IDialogConstants.CANCEL_ID, >- IDialogConstants.CANCEL_LABEL, false); >+ super.createButtonsForButtonBar(parent); >+ okButton = getButton(IDialogConstants.OK_ID); > // initially there is no selection so OK button should not be enabled > okButton.setEnabled(false); > >@@ -458,16 +497,13 @@ > */ > protected void updateOkButton() { > // Buttons are null during dialog creation >- if (okButton == null) { >- return; >- } >- // If there is no selection, do not enable OK button >- if (editorTable.getSelectionCount() == 0) { >- okButton.setEnabled(false); >- return; >+ if (okButton != null) { >+ if (editorsFolder.getSelectionIndex() == 0) { >+ okButton.setEnabled(internalEditorsTable.getSelectionIndex() != -1); >+ } else { >+ okButton.setEnabled(externalEditorsTable.getSelectionIndex() != -1); >+ } > } >- // At this point, there is a selection >- okButton.setEnabled(selectedEditor != null); > } > > private class DialogListener implements Listener { >@@ -478,24 +514,26 @@ > * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) > */ > public void handleEvent(Event event) { >- if (event.type == SWT.MouseDoubleClick) { >- handleDoubleClickEvent(); >- return; >- } >- if (event.widget == externalButton) { >- fillEditorTable(); >+ if (event.widget == editorsFolder) { >+ handleTabSelection(); > } else if (event.widget == browseExternalEditorsButton) { > promptForExternalEditor(); >- } else if (event.widget == editorTable) { >- if (editorTable.getSelectionIndex() != -1) { >- selectedEditor = (EditorDescriptor) editorTable >- .getSelection()[0].getData(); >+ } else if (event.widget == internalEditorsTable) { >+ if (internalEditorsTable.getSelectionIndex() != -1) { >+ selectedEditor = (EditorDescriptor) internalEditorsTable.getSelection()[0] >+ .getData(); >+ } else { >+ selectedEditor = null; >+ } >+ } else if (event.widget == externalEditorsTable) { >+ if (externalEditorsTable.getSelectionIndex() != -1) { >+ selectedEditor = (EditorDescriptor) externalEditorsTable.getSelection()[0] >+ .getData(); > } else { > selectedEditor = null; >- okButton.setEnabled(false); > } > } >- updateEnableState(); >+ updateOkButton(); > } > > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 173095
:
159378
|
164741
|
182717
|
182753
|
183292