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 89490 Details for
Bug 174739
[Viewers] TableViewer - Combo cell editor - on single click needs to 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.
this time the correct patch
patch.txt (text/plain), 22.05 KB, created by
Thomas Schindl
on 2008-02-12 07:53:53 EST
(
hide
)
Description:
this time the correct patch
Filename:
MIME Type:
Creator:
Thomas Schindl
Created:
2008-02-12 07:53:53 EST
Size:
22.05 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jface >Index: src/org/eclipse/jface/viewers/ComboBoxCellEditor.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/viewers/ComboBoxCellEditor.java,v >retrieving revision 1.23 >diff -u -r1.23 ComboBoxCellEditor.java >--- src/org/eclipse/jface/viewers/ComboBoxCellEditor.java 22 May 2007 19:22:15 -0000 1.23 >+++ src/org/eclipse/jface/viewers/ComboBoxCellEditor.java 12 Feb 2008 12:53:06 -0000 >@@ -11,7 +11,8 @@ > > package org.eclipse.jface.viewers; > >-import java.text.MessageFormat; // Not using ICU to support standalone JFace scenario >+import java.text.MessageFormat; // Not using ICU to support standalone JFace >+// scenario > > import org.eclipse.core.runtime.Assert; > import org.eclipse.swt.SWT; >@@ -29,263 +30,269 @@ > import org.eclipse.swt.widgets.Control; > > /** >- * A cell editor that presents a list of items in a combo box. >- * The cell editor's value is the zero-based index of the selected >- * item. >+ * A cell editor that presents a list of items in a combo box. The cell editor's >+ * value is the zero-based index of the selected item. > * <p> > * This class may be instantiated; it is not intended to be subclassed. > * </p> > */ >-public class ComboBoxCellEditor extends CellEditor { >+public class ComboBoxCellEditor extends AbstractComboBoxCellEditor { > >- /** >- * The list of items to present in the combo box. >- */ >- private String[] items; >- >- /** >- * The zero-based index of the selected item. >- */ >- int selection; >- >- /** >- * The custom combo box control. >- */ >- CCombo comboBox; >- >- /** >- * Default ComboBoxCellEditor style >- */ >- private static final int defaultStyle = SWT.NONE; >- >- /** >- * Creates a new cell editor with no control and no st of choices. Initially, >- * the cell editor has no cell validator. >- * >- * @since 2.1 >- * @see CellEditor#setStyle >- * @see CellEditor#create >- * @see ComboBoxCellEditor#setItems >- * @see CellEditor#dispose >- */ >- public ComboBoxCellEditor() { >- setStyle(defaultStyle); >- } >- >- /** >- * Creates a new cell editor with a combo containing the given >- * list of choices and parented under the given control. The cell >- * editor value is the zero-based index of the selected item. >- * Initially, the cell editor has no cell validator and >- * the first item in the list is selected. >- * >- * @param parent the parent control >- * @param items the list of strings for the combo box >- */ >- public ComboBoxCellEditor(Composite parent, String[] items) { >- this(parent, items, defaultStyle); >- } >- >- /** >- * Creates a new cell editor with a combo containing the given >- * list of choices and parented under the given control. The cell >- * editor value is the zero-based index of the selected item. >- * Initially, the cell editor has no cell validator and >- * the first item in the list is selected. >- * >- * @param parent the parent control >- * @param items the list of strings for the combo box >- * @param style the style bits >- * @since 2.1 >- */ >- public ComboBoxCellEditor(Composite parent, String[] items, int style) { >- super(parent, style); >- setItems(items); >- } >- >- /** >- * Returns the list of choices for the combo box >- * >- * @return the list of choices for the combo box >- */ >- public String[] getItems() { >- return this.items; >- } >- >- /** >- * Sets the list of choices for the combo box >- * >- * @param items the list of choices for the combo box >- */ >- public void setItems(String[] items) { >- Assert.isNotNull(items); >- this.items = items; >- populateComboBoxItems(); >- } >- >- /* (non-Javadoc) >- * Method declared on CellEditor. >- */ >- protected Control createControl(Composite parent) { >- >- comboBox = new CCombo(parent, getStyle()); >- comboBox.setFont(parent.getFont()); >- >- populateComboBoxItems(); >- >- comboBox.addKeyListener(new KeyAdapter() { >- // hook key pressed - see PR 14201 >- public void keyPressed(KeyEvent e) { >- keyReleaseOccured(e); >- } >- }); >- >- comboBox.addSelectionListener(new SelectionAdapter() { >- public void widgetDefaultSelected(SelectionEvent event) { >- applyEditorValueAndDeactivate(); >- } >- >- public void widgetSelected(SelectionEvent event) { >- selection = comboBox.getSelectionIndex(); >- } >- }); >- >- comboBox.addTraverseListener(new TraverseListener() { >- public void keyTraversed(TraverseEvent e) { >- if (e.detail == SWT.TRAVERSE_ESCAPE >- || e.detail == SWT.TRAVERSE_RETURN) { >- e.doit = false; >- } >- } >- }); >- >- comboBox.addFocusListener(new FocusAdapter() { >- public void focusLost(FocusEvent e) { >- ComboBoxCellEditor.this.focusLost(); >- } >- }); >- return comboBox; >- } >- >- /** >- * The <code>ComboBoxCellEditor</code> implementation of >- * this <code>CellEditor</code> framework method returns >- * the zero-based index of the current selection. >- * >- * @return the zero-based index of the current selection wrapped >- * as an <code>Integer</code> >- */ >- protected Object doGetValue() { >- return new Integer(selection); >- } >- >- /* (non-Javadoc) >- * Method declared on CellEditor. >- */ >- protected void doSetFocus() { >- comboBox.setFocus(); >- } >- >- /** >- * The <code>ComboBoxCellEditor</code> implementation of >- * this <code>CellEditor</code> framework method sets the >- * minimum width of the cell. The minimum width is 10 characters >- * if <code>comboBox</code> is not <code>null</code> or <code>disposed</code> >- * else it is 60 pixels to make sure the arrow button and some text is visible. >- * The list of CCombo will be wide enough to show its longest item. >- */ >- public LayoutData getLayoutData() { >- LayoutData layoutData = super.getLayoutData(); >- if ((comboBox == null) || comboBox.isDisposed()) { >+ /** >+ * The list of items to present in the combo box. >+ */ >+ private String[] items; >+ >+ /** >+ * The zero-based index of the selected item. >+ */ >+ int selection; >+ >+ /** >+ * The custom combo box control. >+ */ >+ CCombo comboBox; >+ >+ /** >+ * Default ComboBoxCellEditor style >+ */ >+ private static final int defaultStyle = SWT.NONE; >+ >+ /** >+ * Creates a new cell editor with no control and no st of choices. >+ * Initially, the cell editor has no cell validator. >+ * >+ * @since 2.1 >+ * @see CellEditor#setStyle >+ * @see CellEditor#create >+ * @see ComboBoxCellEditor#setItems >+ * @see CellEditor#dispose >+ */ >+ public ComboBoxCellEditor() { >+ setStyle(defaultStyle); >+ } >+ >+ /** >+ * Creates a new cell editor with a combo containing the given list of >+ * choices and parented under the given control. The cell editor value is >+ * the zero-based index of the selected item. Initially, the cell editor has >+ * no cell validator and the first item in the list is selected. >+ * >+ * @param parent >+ * the parent control >+ * @param items >+ * the list of strings for the combo box >+ */ >+ public ComboBoxCellEditor(Composite parent, String[] items) { >+ this(parent, items, defaultStyle); >+ } >+ >+ /** >+ * Creates a new cell editor with a combo containing the given list of >+ * choices and parented under the given control. The cell editor value is >+ * the zero-based index of the selected item. Initially, the cell editor has >+ * no cell validator and the first item in the list is selected. >+ * >+ * @param parent >+ * the parent control >+ * @param items >+ * the list of strings for the combo box >+ * @param style >+ * the style bits >+ * @since 2.1 >+ */ >+ public ComboBoxCellEditor(Composite parent, String[] items, int style) { >+ super(parent, style); >+ setItems(items); >+ } >+ >+ /** >+ * Returns the list of choices for the combo box >+ * >+ * @return the list of choices for the combo box >+ */ >+ public String[] getItems() { >+ return this.items; >+ } >+ >+ /** >+ * Sets the list of choices for the combo box >+ * >+ * @param items >+ * the list of choices for the combo box >+ */ >+ public void setItems(String[] items) { >+ Assert.isNotNull(items); >+ this.items = items; >+ populateComboBoxItems(); >+ } >+ >+ /* >+ * (non-Javadoc) Method declared on CellEditor. >+ */ >+ protected Control createControl(Composite parent) { >+ >+ comboBox = new CCombo(parent, getStyle()); >+ comboBox.setFont(parent.getFont()); >+ >+ populateComboBoxItems(); >+ >+ comboBox.addKeyListener(new KeyAdapter() { >+ // hook key pressed - see PR 14201 >+ public void keyPressed(KeyEvent e) { >+ keyReleaseOccured(e); >+ } >+ }); >+ >+ comboBox.addSelectionListener(new SelectionAdapter() { >+ public void widgetDefaultSelected(SelectionEvent event) { >+ applyEditorValueAndDeactivate(); >+ } >+ >+ public void widgetSelected(SelectionEvent event) { >+ selection = comboBox.getSelectionIndex(); >+ } >+ }); >+ >+ comboBox.addTraverseListener(new TraverseListener() { >+ public void keyTraversed(TraverseEvent e) { >+ if (e.detail == SWT.TRAVERSE_ESCAPE >+ || e.detail == SWT.TRAVERSE_RETURN) { >+ e.doit = false; >+ } >+ } >+ }); >+ >+ comboBox.addFocusListener(new FocusAdapter() { >+ public void focusLost(FocusEvent e) { >+ ComboBoxCellEditor.this.focusLost(); >+ } >+ }); >+ return comboBox; >+ } >+ >+ /** >+ * The <code>ComboBoxCellEditor</code> implementation of this >+ * <code>CellEditor</code> framework method returns the zero-based index >+ * of the current selection. >+ * >+ * @return the zero-based index of the current selection wrapped as an >+ * <code>Integer</code> >+ */ >+ protected Object doGetValue() { >+ return new Integer(selection); >+ } >+ >+ /* >+ * (non-Javadoc) Method declared on CellEditor. >+ */ >+ protected void doSetFocus() { >+ comboBox.setFocus(); >+ } >+ >+ /** >+ * The <code>ComboBoxCellEditor</code> implementation of this >+ * <code>CellEditor</code> framework method sets the minimum width of the >+ * cell. The minimum width is 10 characters if <code>comboBox</code> is >+ * not <code>null</code> or <code>disposed</code> else it is 60 pixels >+ * to make sure the arrow button and some text is visible. The list of >+ * CCombo will be wide enough to show its longest item. >+ */ >+ public LayoutData getLayoutData() { >+ LayoutData layoutData = super.getLayoutData(); >+ if ((comboBox == null) || comboBox.isDisposed()) { > layoutData.minimumWidth = 60; > } else { >- // make the comboBox 10 characters wide >- GC gc = new GC(comboBox); >- layoutData.minimumWidth = (gc.getFontMetrics() >- .getAverageCharWidth() * 10) + 10; >- gc.dispose(); >- } >- return layoutData; >- } >- >- /** >- * The <code>ComboBoxCellEditor</code> implementation of >- * this <code>CellEditor</code> framework method >- * accepts a zero-based index of a selection. >- * >- * @param value the zero-based index of the selection wrapped >- * as an <code>Integer</code> >- */ >- protected void doSetValue(Object value) { >- Assert.isTrue(comboBox != null && (value instanceof Integer)); >- selection = ((Integer) value).intValue(); >- comboBox.select(selection); >- } >- >- /** >- * Updates the list of choices for the combo box for the current control. >- */ >- private void populateComboBoxItems() { >- if (comboBox != null && items != null) { >- comboBox.removeAll(); >- for (int i = 0; i < items.length; i++) { >+ // make the comboBox 10 characters wide >+ GC gc = new GC(comboBox); >+ layoutData.minimumWidth = (gc.getFontMetrics() >+ .getAverageCharWidth() * 10) + 10; >+ gc.dispose(); >+ } >+ return layoutData; >+ } >+ >+ /** >+ * The <code>ComboBoxCellEditor</code> implementation of this >+ * <code>CellEditor</code> framework method accepts a zero-based index of >+ * a selection. >+ * >+ * @param value >+ * the zero-based index of the selection wrapped as an >+ * <code>Integer</code> >+ */ >+ protected void doSetValue(Object value) { >+ Assert.isTrue(comboBox != null && (value instanceof Integer)); >+ selection = ((Integer) value).intValue(); >+ comboBox.select(selection); >+ } >+ >+ /** >+ * Updates the list of choices for the combo box for the current control. >+ */ >+ private void populateComboBoxItems() { >+ if (comboBox != null && items != null) { >+ comboBox.removeAll(); >+ for (int i = 0; i < items.length; i++) { > comboBox.add(items[i], i); > } > >- setValueValid(true); >- selection = 0; >- } >- } >- >- /** >- * Applies the currently selected value and deactivates the cell editor >- */ >- void applyEditorValueAndDeactivate() { >- // must set the selection before getting value >- selection = comboBox.getSelectionIndex(); >- Object newValue = doGetValue(); >- markDirty(); >- boolean isValid = isCorrect(newValue); >- setValueValid(isValid); >- >- if (!isValid) { >- // Only format if the 'index' is valid >- if (items.length > 0 && selection >= 0 && selection < items.length) { >- // try to insert the current value into the error message. >- setErrorMessage(MessageFormat.format(getErrorMessage(), >- new Object[] { items[selection] })); >- } >- else { >- // Since we don't have a valid index, assume we're using an 'edit' >- // combo so format using its text value >- setErrorMessage(MessageFormat.format(getErrorMessage(), >- new Object[] { comboBox.getText() })); >- } >- } >- >- fireApplyEditorValue(); >- deactivate(); >- } >- >- /* >- * (non-Javadoc) >- * @see org.eclipse.jface.viewers.CellEditor#focusLost() >- */ >- protected void focusLost() { >- if (isActivated()) { >- applyEditorValueAndDeactivate(); >- } >- } >- >- /* >- * (non-Javadoc) >- * @see org.eclipse.jface.viewers.CellEditor#keyReleaseOccured(org.eclipse.swt.events.KeyEvent) >- */ >- protected void keyReleaseOccured(KeyEvent keyEvent) { >- if (keyEvent.character == '\u001b') { // Escape character >- fireCancelEditor(); >- } else if (keyEvent.character == '\t') { // tab key >- applyEditorValueAndDeactivate(); >- } >- } >+ setValueValid(true); >+ selection = 0; >+ } >+ } >+ >+ /** >+ * Applies the currently selected value and deactivates the cell editor >+ */ >+ void applyEditorValueAndDeactivate() { >+ // must set the selection before getting value >+ selection = comboBox.getSelectionIndex(); >+ Object newValue = doGetValue(); >+ markDirty(); >+ boolean isValid = isCorrect(newValue); >+ setValueValid(isValid); >+ >+ if (!isValid) { >+ // Only format if the 'index' is valid >+ if (items.length > 0 && selection >= 0 && selection < items.length) { >+ // try to insert the current value into the error message. >+ setErrorMessage(MessageFormat.format(getErrorMessage(), >+ new Object[] { items[selection] })); >+ } else { >+ // Since we don't have a valid index, assume we're using an >+ // 'edit' >+ // combo so format using its text value >+ setErrorMessage(MessageFormat.format(getErrorMessage(), >+ new Object[] { comboBox.getText() })); >+ } >+ } >+ >+ fireApplyEditorValue(); >+ deactivate(); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.CellEditor#focusLost() >+ */ >+ protected void focusLost() { >+ if (isActivated()) { >+ applyEditorValueAndDeactivate(); >+ } >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.CellEditor#keyReleaseOccured(org.eclipse.swt.events.KeyEvent) >+ */ >+ protected void keyReleaseOccured(KeyEvent keyEvent) { >+ if (keyEvent.character == '\u001b') { // Escape character >+ fireCancelEditor(); >+ } else if (keyEvent.character == '\t') { // tab key >+ applyEditorValueAndDeactivate(); >+ } >+ } > } >Index: src/org/eclipse/jface/viewers/ComboBoxViewerCellEditor.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/viewers/ComboBoxViewerCellEditor.java,v >retrieving revision 1.1 >diff -u -r1.1 ComboBoxViewerCellEditor.java >--- src/org/eclipse/jface/viewers/ComboBoxViewerCellEditor.java 7 Nov 2007 22:55:10 -0000 1.1 >+++ src/org/eclipse/jface/viewers/ComboBoxViewerCellEditor.java 12 Feb 2008 12:53:06 -0000 >@@ -34,7 +34,7 @@ > * {@link ComboBoxCellEditor} it wraps the underlying {@link CCombo} using a > * {@link ComboViewer} > */ >-public class ComboBoxViewerCellEditor extends CellEditor { >+public class ComboBoxViewerCellEditor extends AbstractComboBoxCellEditor { > > /** > * The custom combo box control. >@@ -50,7 +50,7 @@ > > /** > * Creates a new cell editor with a combo viewer and a default style >- * >+ * > * @param parent > * the parent control > */ >@@ -60,7 +60,7 @@ > > /** > * Creates a new cell editor with a combo viewer and the given style >- * >+ * > * @param parent > * the parent control > * @param style >@@ -124,7 +124,7 @@ > * The <code>ComboBoxCellEditor</code> implementation of this > * <code>CellEditor</code> framework method returns the zero-based index > * of the current selection. >- * >+ * > * @return the zero-based index of the current selection wrapped as an > * <code>Integer</code> > */ >@@ -163,7 +163,7 @@ > > /** > * Set a new value >- * >+ * > * @param value > * the new value > */ >@@ -235,7 +235,7 @@ > > /* > * (non-Javadoc) >- * >+ * > * @see org.eclipse.jface.viewers.CellEditor#focusLost() > */ > protected void focusLost() { >@@ -246,7 +246,7 @@ > > /* > * (non-Javadoc) >- * >+ * > * @see org.eclipse.jface.viewers.CellEditor#keyReleaseOccured(org.eclipse.swt.events.KeyEvent) > */ > protected void keyReleaseOccured(KeyEvent keyEvent) { >Index: src/org/eclipse/jface/viewers/AbstractComboBoxCellEditor.java >=================================================================== >RCS file: src/org/eclipse/jface/viewers/AbstractComboBoxCellEditor.java >diff -N src/org/eclipse/jface/viewers/AbstractComboBoxCellEditor.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/viewers/AbstractComboBoxCellEditor.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,114 @@ >+/******************************************************************************* >+ * Copyright (c) 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: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.viewers; >+ >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.custom.CCombo; >+import org.eclipse.swt.widgets.Composite; >+ >+/** >+ * Abstract base class for Cell-Editors presented as combo boxes >+ * >+ * @since 3.4 >+ * >+ */ >+abstract class AbstractComboBoxCellEditor extends CellEditor { >+ /** >+ * The list is dropped down when the activation is done through the mouse >+ */ >+ public static final int DROP_DOWN_ON_MOUSE_ACTIVATION = 1; >+ >+ /** >+ * The list is dropped down when the activation is done through the keyboard >+ */ >+ public static final int DROP_DOWN_ON_KEY_ACTIVATION = 1 << 1; >+ >+ /** >+ * The list is dropped down when the activation is done without >+ * ui-interaction >+ */ >+ public static final int DROP_DOWN_ON_PROGRAMMATIC_ACTIVATION = 1 << 2; >+ >+ /** >+ * The list is dropped down when the activation is done by traversing from >+ * cell to cell >+ */ >+ public static final int DROP_DOWN_ON_TRAVSE_ACTIVATION = 1 << 3; >+ >+ private int activationStyle = SWT.NONE; >+ >+ /** >+ * Create a new cell-editor >+ * >+ * @param parent >+ * the parent of the combo >+ * @param style >+ * the style used to create the combo >+ */ >+ AbstractComboBoxCellEditor(Composite parent, int style) { >+ super(parent, style); >+ } >+ >+ /** >+ * Creates a new cell editor with no control and no st of choices. >+ * Initially, the cell editor has no cell validator. >+ * >+ */ >+ AbstractComboBoxCellEditor() { >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.CellEditor#activate(org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent) >+ */ >+ public void activate(ColumnViewerEditorActivationEvent activationEvent) { >+ super.activate(activationEvent); >+ if (activationStyle != SWT.NONE) { >+ boolean dropDown = false; >+ if ((activationEvent.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION || activationEvent.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION) >+ && (activationStyle & DROP_DOWN_ON_MOUSE_ACTIVATION) == DROP_DOWN_ON_MOUSE_ACTIVATION) { >+ dropDown = true; >+ } else if (activationEvent.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED >+ && (activationStyle & DROP_DOWN_ON_KEY_ACTIVATION) == DROP_DOWN_ON_KEY_ACTIVATION) { >+ dropDown = true; >+ } else if (activationEvent.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC >+ && (activationStyle & DROP_DOWN_ON_PROGRAMMATIC_ACTIVATION) == DROP_DOWN_ON_PROGRAMMATIC_ACTIVATION) { >+ dropDown = true; >+ } else if (activationEvent.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL >+ && (activationStyle & DROP_DOWN_ON_TRAVSE_ACTIVATION) == DROP_DOWN_ON_TRAVSE_ACTIVATION) { >+ dropDown = true; >+ } >+ >+ if (dropDown) { >+ getControl().getDisplay().asyncExec(new Runnable() { >+ >+ public void run() { >+ ((CCombo) getControl()).setListVisible(true); >+ } >+ >+ }); >+ >+ } >+ } >+ } >+ >+ /** >+ * This method allows to control how the combo reacts when activated >+ * >+ * @param activationStyle >+ * the style used >+ */ >+ public void setActivationStyle(int activationStyle) { >+ this.activationStyle = activationStyle; >+ } >+}
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 Raw
Actions:
View
Attachments on
bug 174739
:
89487
|
89488
|
89489
| 89490