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 24326 Details for
Bug 102081
Abandon the combo box of preferenceDialog
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]
A patch for 102081
102081Combo.txt (text/plain), 15.54 KB, created by
shujie liao
on 2005-07-04 15:06:39 EDT
(
hide
)
Description:
A patch for 102081
Filename:
MIME Type:
Creator:
shujie liao
Created:
2005-07-04 15:06:39 EDT
Size:
15.54 KB
patch
obsolete
>Index: Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredComboTree.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredComboTree.java,v >retrieving revision 1.12 >diff -u -r1.12 FilteredComboTree.java >--- Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredComboTree.java 9 Jun 2005 19:30:24 -0000 1.12 >+++ Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredComboTree.java 4 Jul 2005 19:03:41 -0000 >@@ -10,21 +10,35 @@ > *******************************************************************************/ > package org.eclipse.ui.internal.dialogs; > >+import java.util.ArrayList; >+import java.util.List; >+ > import org.eclipse.jface.dialogs.IDialogSettings; > import org.eclipse.swt.SWT; >+import org.eclipse.swt.events.ControlAdapter; >+import org.eclipse.swt.events.ControlEvent; > import org.eclipse.swt.events.DisposeEvent; > import org.eclipse.swt.events.DisposeListener; > import org.eclipse.swt.events.FocusAdapter; > import org.eclipse.swt.events.FocusEvent; >+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.TraverseEvent; > import org.eclipse.swt.events.TraverseListener; > import org.eclipse.swt.graphics.Point; >-import org.eclipse.swt.widgets.Combo; >+import org.eclipse.swt.graphics.Rectangle; >+import org.eclipse.swt.layout.GridData; >+import org.eclipse.swt.layout.GridLayout; > import org.eclipse.swt.widgets.Composite; >-import org.eclipse.swt.widgets.Control; > import org.eclipse.swt.widgets.Display; >+import org.eclipse.swt.widgets.Event; >+import org.eclipse.swt.widgets.Listener; >+import org.eclipse.swt.widgets.Shell; >+import org.eclipse.swt.widgets.Table; >+import org.eclipse.swt.widgets.TableItem; >+import org.eclipse.swt.widgets.Text; > import org.eclipse.ui.internal.WorkbenchPlugin; > > /** >@@ -32,13 +46,13 @@ > * editable combo rather than just a text. > */ > public class FilteredComboTree extends FilteredTree { >- >- private Combo filterCombo; >+ //A list contains all strings in search history >+ private List searchHistory; > > private static final String SEARCHHISTORY = "search"; //$NON-NLS-1$ >- >- //Set a number limitation of items to be saved in combo >- private static final int maxNumItems = 20; >+ >+ //A table which contains only strings begin with typed strings >+ private Table table; > /** > * Create a new instance of the receiver. > * @param parent >@@ -61,14 +75,28 @@ > /* (non-Javadoc) > * @see org.eclipse.ui.internal.dialogs.FilteredTree#createFilterControl(org.eclipse.swt.widgets.Composite) > */ >- protected void createFilterControl(Composite parent) { >- filterCombo = new Combo(parent, SWT.DROP_DOWN | SWT.BORDER); >- filterCombo.setFont(parent.getFont()); >- getPreferenceSearchHistory(); >- filterCombo.addTraverseListener( new TraverseListener () { >+ protected void createFilterControl(final Composite parent) { >+ filterText = new Text(parent, SWT.DROP_DOWN | SWT.BORDER); >+ filterText.setFont(parent.getFont()); >+ searchHistory = getPreferenceSearchHistory(); >+ >+ final Shell shell = new Shell (parent.getShell(), SWT.NO_TRIM ); >+ shell.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE)); >+ GridLayout shellGL = new GridLayout(); >+ shellGL.marginHeight = 0; >+ shellGL.marginWidth = 0; >+ shell.setLayout(shellGL); >+ shell.setLayoutData (new GridData((GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL))); >+ >+ table = new Table(shell, SWT.SINGLE |SWT.BORDER); >+ table.setLayoutData(new GridData((GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL))); >+ >+ >+ filterText.addTraverseListener( new TraverseListener () { > public void keyTraversed(TraverseEvent e) { > if (e.detail == SWT.TRAVERSE_RETURN) { > e.doit = false; >+ shell.setVisible(false); > if (getViewer().getTree().getItemCount() == 0) { > Display.getCurrent().beep(); > setFilterText(""); //$NON-NLS-1$ >@@ -78,41 +106,107 @@ > } > } > }); >- filterCombo.addFocusListener(new FocusAdapter(){ >+ >+ filterText.addKeyListener(new KeyAdapter() { >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events.KeyEvent) >+ */ >+ public void keyReleased(KeyEvent e) { >+ >+ if(e.keyCode == SWT.ARROW_DOWN){ >+ if(table.isVisible()) >+ table.setFocus(); >+ else >+ treeViewer.getTree().setFocus(); >+ } >+ >+ else{ >+ if(e.character == '\r') >+ return; >+ >+ textChanged(); >+ List result = new ArrayList(); >+ result = reduceSearch(searchHistory,filterText.getText()); >+ upDateTable(table,result); >+ >+ if(table.getItemCount()> 0){ >+ Rectangle textBounds = filterText.getBounds(); >+ Point point = getDisplay().map(parent, null, textBounds.x, textBounds.y); >+ int space = table.getItemHeight(); >+ shell.setBounds(point.x, point.y + textBounds.height,textBounds.width, >+ table.getItemHeight()*table.getItemCount()+ space); >+ >+ if(shell.isDisposed()) >+ shell.open (); >+ >+ if(!shell.getVisible()){ >+ shell.setVisible(true); >+ filterText.setFocus(); >+ } >+ >+ }else >+ shell.setVisible(false); >+ } >+ >+ } >+ }); >+ >+ >+ filterText.addFocusListener(new FocusAdapter(){ > /* (non-Javadoc) > * @see org.eclipse.swt.events.FocusAdapter#focusLost(org.eclipse.swt.events.FocusEvent) > */ > public void focusLost(FocusEvent e) { >- String [] textValues = filterCombo.getItems(); >- String newText = filterCombo.getText(); >+ Object[] textValues = searchHistory.toArray(); >+ String newText = filterText.getText(); > > if((newText.equals(""))||(newText .equals(initialText)))//$NON-NLS-1$ > return; > > for (int i = 0; i < textValues.length; i++) { >- if(textValues[i].equals(newText)) >+ if(((String)textValues[i]).equals(newText)) > return; > } > >- if(textValues.length >= maxNumItems) >- //Discard the oldest search to get space for new search >- filterCombo.remove(maxNumItems-1); >- >- filterCombo.add(newText,0); >+ searchHistory.add(newText); >+ } >+ }); >+ >+ parent.getDisplay().addFilter(SWT.MouseDown , new Listener(){ >+ >+ public void handleEvent(Event event) { >+ if(!shell.isDisposed()) >+ shell.setVisible(false); >+ }}); >+ >+ getShell().addControlListener(new ControlAdapter(){ >+ public void controlMoved(ControlEvent e) { >+ >+ shell.setVisible(false); > } > }); >- filterCombo.addSelectionListener(new SelectionAdapter(){ >+ table.addSelectionListener(new SelectionAdapter(){ > /* (non-Javadoc) > * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) > */ > public void widgetSelected(SelectionEvent e) { >+ >+ setFilterText(table.getSelection()[0].getText()); > textChanged(); > } >+ >+ public void widgetDefaultSelected(SelectionEvent e) { >+ shell.setVisible(false); >+ } > }); >+ >+ filterText.addDisposeListener(new DisposeListener() { > >- filterCombo.addDisposeListener(new DisposeListener() { >- >- /* (non-Javadoc) >+ /* >+ (non-Javadoc) > * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent) > */ > public void widgetDisposed(DisposeEvent e) { >@@ -120,53 +214,65 @@ > } > }); > >- filterCombo.getAccessible().addAccessibleListener(getAccessibleListener()); > >- } >- >- /* (non-Javadoc) >- * @see org.eclipse.ui.internal.dialogs.FilteredTree#getFilterControl() >- */ >- public Control getFilterControl() { >- return filterCombo; >+ filterText.getAccessible().addAccessibleListener(getAccessibleListener()); >+ > } > > /* (non-Javadoc) > * @see org.eclipse.ui.internal.dialogs.FilteredTree#getFilterControlText() > */ > protected String getFilterControlText() { >- return filterCombo.getText(); >+ return filterText.getText(); > } > > /* (non-Javadoc) > * @see org.eclipse.ui.internal.dialogs.FilteredTree#setFilterText(java.lang.String) > */ > protected void setFilterText(String string) { >- filterCombo.setText(string); >- selectAll(); >+ filterText.setText(string); > } > >- protected void selectAll() { >- filterCombo.setSelection(new Point(0,filterCombo.getText().length())); >- } > >- /** >- * Get the combo box used by the receiver. >- * @return Combo >+ /** >+ * Find all items which start with typyed words >+ * list the list contains all strings of the search history >+ * @param wordsEntered >+ * @return a list in which all strings start from the typed letter(s) > */ >- public Combo getFilterCombo() { >- return filterCombo; >- } >+ public List reduceSearch(List list,String wordsEntered){ >+ List result = new ArrayList(); >+ for(int i = 0; i<list.size();i++){ >+ if(filterText.getText()== "") //$NON-NLS-1$ >+ return result; >+ else if(((String)list.get(i)).startsWith(wordsEntered)) >+ result.add(list.get(i)); >+ } >+ >+ return result; >+ } >+ >+ >+ /**Copy all elements from a list to a table >+ * @param table >+ * @param list >+ */ >+ public void upDateTable(Table table, List list){ >+ table.removeAll(); >+ if(list.size()>0){ >+ TableItem newItem ; >+ for(int i=0;i<list.size();i++){ >+ newItem = new TableItem(table, SWT.NULL, i); >+ newItem.setText((String)list.get(i)); >+ >+ } >+ } >+ >+ } > >- /* (non-Javadoc) >- * @see org.eclipse.ui.internal.dialogs.FilteredTree#getFilterText() >- */ >- protected String getFilterText() { >- return filterCombo.getText(); >- } >- > /** > * Return a dialog setting section for this dialog >+ * @return IDialogSettings > */ > private IDialogSettings getDialogSettings() { > IDialogSettings settings = WorkbenchPlugin.getDefault() >@@ -182,18 +288,19 @@ > /** > * Get the preferences search history for this eclipse's start, > * Note that this history will not be cleared until this eclipse closes >- * >+ * @return a list > */ >- public void getPreferenceSearchHistory(){ >+ public List getPreferenceSearchHistory(){ > IDialogSettings settings = getDialogSettings(); > String[] search = settings.getArray(SEARCHHISTORY); //$NON-NLS-1$ > > if(search == null) >- return; >+ return null; > >- for(int i = 0; i < search.length;i++){ >- filterCombo.add(search[i]); >- } >+ List searchList = new ArrayList(); >+ for(int i = 0; i < search.length;i++) >+ searchList.add(search[i]); >+ return searchList; > > } > >@@ -204,7 +311,16 @@ > IDialogSettings settings =getDialogSettings(); > > //If the settings contains the same key, the previous value will be replaced by new one >- settings.put(SEARCHHISTORY,filterCombo.getItems()); >+ String []result = new String[searchHistory.size()]; >+ listToArray(searchHistory,result); >+ settings.put(SEARCHHISTORY, result); > > } >+ >+ private void listToArray(List list,String[] string){ >+ int size = list.size(); >+ for(int i=0;i<size;i++) >+ string[i]=(String)list.get(i); >+ } >+ > } >Index: Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredPreferenceDialog.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredPreferenceDialog.java,v >retrieving revision 1.65 >diff -u -r1.65 FilteredPreferenceDialog.java >--- Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredPreferenceDialog.java 9 Jun 2005 21:02:04 -0000 1.65 >+++ Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredPreferenceDialog.java 4 Jul 2005 19:03:41 -0000 >@@ -34,7 +34,6 @@ > import org.eclipse.jface.viewers.TreeViewer; > import org.eclipse.swt.SWT; > import org.eclipse.swt.graphics.Font; >-import org.eclipse.swt.graphics.Point; > import org.eclipse.swt.layout.GridData; > import org.eclipse.swt.layout.GridLayout; > import org.eclipse.swt.widgets.Composite; >@@ -123,8 +122,8 @@ > > //if the tree has only one or zero pages, make the combo area disable > if(hasAtMostOnePage(tree)){ >- filteredTree.getFilterCombo().setEnabled(false); >- filteredTree.getFilterCombo().setSelection(new Point(0,0)); >+ filteredTree.getFilterControl().setEnabled(false); >+ //filteredTree.getFilterControl().setSelection(new Point(0,0)); > } > > >Index: Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredTree.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredTree.java,v >retrieving revision 1.27 >diff -u -r1.27 FilteredTree.java >--- Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredTree.java 24 May 2005 18:08:37 -0000 1.27 >+++ Eclipse UI/org/eclipse/ui/internal/dialogs/FilteredTree.java 4 Jul 2005 19:03:41 -0000 >@@ -28,12 +28,9 @@ > import org.eclipse.swt.events.DisposeListener; > import org.eclipse.swt.events.FocusEvent; > import org.eclipse.swt.events.FocusListener; >-import org.eclipse.swt.events.KeyAdapter; >-import org.eclipse.swt.events.KeyEvent; > import org.eclipse.swt.graphics.Color; > import org.eclipse.swt.layout.GridData; > import org.eclipse.swt.layout.GridLayout; >-import org.eclipse.swt.widgets.Combo; > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Control; > import org.eclipse.swt.widgets.Text; >@@ -52,11 +49,11 @@ > */ > public class FilteredTree extends Composite { > >- private Text filterText; >- >+ protected Text filterText; >+ > private ToolBarManager filterToolBar; > >- private TreeViewer treeViewer; >+ protected TreeViewer treeViewer; > > private Composite filterParent; > >@@ -133,25 +130,7 @@ > | GridData.GRAB_HORIZONTAL)); > > createFilterControl(filterParent); >- getFilterControl().addKeyListener(new KeyAdapter() { >- >- /* >- * (non-Javadoc) >- * >- * @see org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events.KeyEvent) >- */ >- public void keyReleased(KeyEvent e) { >- // on a CR we want to transfer focus to the list >- if(e.keyCode == SWT.ARROW_DOWN){ >- >- if (!(getFilterControl() instanceof Combo)) { >- treeViewer.getTree().setFocus(); >- } >- } else >- textChanged(); >- } >- }); >- >+ > GridData data = new GridData(GridData.FILL_HORIZONTAL > | GridData.GRAB_HORIZONTAL); > getFilterControl().setLayoutData(data);
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 102081
:
24326
|
24383
|
24783
|
25296
|
25430
|
25584
|
27648
|
27653
|
27838
|
27868
|
27957
|
27967
|
27979
|
28401
|
28603