Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] bug41828: Search Usability

- set default C++ search sort order to be by path
- modified search dialog to use checkboxes instead of radio buttons

SearchFor buttons are now organized like this:
        Class / Struct          Function        Variable
        Union                   Method          Field
        Enumeration             Namespace       Any Element

When multiple buttons are selected, they are combined using the Or 
Pattern.

Andrew

Index: search/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/ChangeLog,v
retrieving revision 1.19
diff -u -r1.19 ChangeLog
--- search/ChangeLog	26 Aug 2003 19:15:58 -0000	1.19
+++ search/ChangeLog	3 Sep 2003 18:14:29 -0000
@@ -1,3 +1,7 @@
+2003-09-03 Andrew Niefer
+	- added CLASS_STRUCT to the SearchFor constants
+	- Modified CSearchPattern to handle CLASS_STRUCT
+
 2003-08-26 Bogdan Gheorghe
 	- Added debug tracing statements to SearchEngine
 	- Modified scanForNames in CSearchPattern to treat append
Index: search/org/eclipse/cdt/core/search/ICSearchConstants.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/ICSearchConstants.java,v
retrieving revision 1.5
diff -u -r1.5 ICSearchConstants.java
--- search/org/eclipse/cdt/core/search/ICSearchConstants.java	12 Aug 2003 14:29:07 -0000	1.5
+++ search/org/eclipse/cdt/core/search/ICSearchConstants.java	3 Sep 2003 18:14:29 -0000
@@ -95,6 +95,8 @@
 	
 	public static final SearchFor MACRO = new SearchFor( 10 );
 	
+	public static final SearchFor CLASS_STRUCT = new SearchFor( 11 );
+	
 	/* Nature of match */
 	
 	/**
Index: search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java,v
retrieving revision 1.17
diff -u -r1.17 CSearchPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java	26 Aug 2003 19:15:58 -0000	1.17
+++ search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java	3 Sep 2003 18:14:30 -0000
@@ -76,7 +76,7 @@
 		}
 		
 		CSearchPattern pattern = null;
-		if( searchFor == TYPE || searchFor == CLASS || searchFor == STRUCT || searchFor == ENUM || searchFor == UNION ){
+		if( searchFor == TYPE || searchFor == CLASS || searchFor == STRUCT || searchFor == ENUM || searchFor == UNION || searchFor == CLASS_STRUCT ){
 			pattern = createClassPattern( patternString, searchFor, limitTo, matchMode, caseSensitive );
 		} else if ( searchFor == METHOD || searchFor == FUNCTION ){
 			pattern = createMethodPattern( patternString, searchFor, limitTo, matchMode, caseSensitive );
@@ -236,6 +236,13 @@
 			OrPattern orPattern = new OrPattern();
 			orPattern.addPattern( createClassPattern( patternString, searchFor, DECLARATIONS, matchMode, caseSensitive ) );
 			orPattern.addPattern( createClassPattern( patternString, searchFor, REFERENCES, matchMode, caseSensitive ) );
+			return orPattern;
+		}
+		
+		if( searchFor == CLASS_STRUCT ){
+			OrPattern orPattern = new OrPattern();
+			orPattern.addPattern( createClassPattern( patternString, CLASS, limitTo, matchMode, caseSensitive ) );
+			orPattern.addPattern( createClassPattern( patternString, STRUCT, limitTo, matchMode, caseSensitive ) );
 			return orPattern;
 		}
 		
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/ChangeLog,v
retrieving revision 1.154
diff -u -r1.154 ChangeLog
--- ChangeLog	3 Sep 2003 13:35:33 -0000	1.154
+++ ChangeLog	3 Sep 2003 18:12:23 -0000
@@ -1,3 +1,11 @@
+2003-09-03 Andrew Niefer
+	C++ Search: Changed default sort order to be by path
+	changed search dialog to have checkboxes for Search For items.
+ 	* src/org/eclipse/cdt/ui/CSearchResultLabelProvider.java
+	* src/org/eclipse/cdt/internal/ui/search/CSearchPage.java
+	* src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java
+	* src/org/eclipse/cdt/internal/ui/search/CSearchMessages.properties
+
 2003-09-3 Alain Magloire
 
 	Wrong fix to a warning the call is needed but not the variable.
Index: src/org/eclipse/cdt/internal/ui/search/CSearchMessages.properties
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchMessages.properties,v
retrieving revision 1.5
diff -u -r1.5 CSearchMessages.properties
--- src/org/eclipse/cdt/internal/ui/search/CSearchMessages.properties	11 Aug 2003 13:48:39 -0000	1.5
+++ src/org/eclipse/cdt/internal/ui/search/CSearchMessages.properties	3 Sep 2003 18:12:24 -0000
@@ -50,11 +50,17 @@
 
 CSearchPage.searchFor.label= Search For
 CSearchPage.searchFor.type= &Type
-CSearchPage.searchFor.namespace= N&amespace
+CSearchPage.searchFor.namespace= Name&space
 CSearchPage.searchFor.method= &Method
 CSearchPage.searchFor.function= F&unction
 CSearchPage.searchFor.field= &Field
 CSearchPage.searchFor.variable= &Variable
+CSearchPage.searchFor.class= &Class
+CSearchPage.searchFor.struct= &Struct
+CSearchPage.searchFor.union= U&nion
+CSearchPage.searchFor.enum= &Enumeration
+CSearchPage.searchFor.any= An&y Element
+CSearchPage.searchFor.classStruct= &Class / Struct
 
 CSearchPage.limitTo.label= Limit To
 CSearchPage.limitTo.declarations= Dec&larations
Index: src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java,v
retrieving revision 1.5
diff -u -r1.5 CSearchOperation.java
--- src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java	12 Aug 2003 14:31:55 -0000	1.5
+++ src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java	3 Sep 2003 18:12:25 -0000
@@ -14,12 +14,15 @@
 package org.eclipse.cdt.internal.ui.search;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+import java.util.List;
 
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.search.ICSearchConstants;
 import org.eclipse.cdt.core.search.ICSearchPattern;
 import org.eclipse.cdt.core.search.ICSearchScope;
 import org.eclipse.cdt.core.search.SearchEngine;
+import org.eclipse.cdt.internal.core.search.matching.OrPattern;
 import org.eclipse.cdt.internal.ui.CPluginImages;
 import org.eclipse.cdt.ui.CUIPlugin;
 import org.eclipse.core.resources.IWorkspace;
@@ -41,7 +44,7 @@
 		_elementPattern = element;
 	}
 
-	public CSearchOperation(IWorkspace workspace, String pattern, boolean caseSensitive, SearchFor searchFor, LimitTo limitTo, ICSearchScope scope, String scopeDescription, CSearchResultCollector collector) {
+	public CSearchOperation(IWorkspace workspace, String pattern, boolean caseSensitive, List searchFor, LimitTo limitTo, ICSearchScope scope, String scopeDescription, CSearchResultCollector collector) {
 		this( workspace, limitTo, scope, scopeDescription, collector );
 		_stringPattern = pattern;
 		_caseSensitive = caseSensitive;
@@ -69,7 +72,21 @@
 		if( _elementPattern != null ){
 			engine.search( _workspace, _elementPattern, _limitTo, _scope, _collector );
 		} else {
-			ICSearchPattern pattern = SearchEngine.createSearchPattern( _stringPattern, _searchFor, _limitTo, _caseSensitive );
+			ICSearchPattern pattern = null;
+			if( _searchFor.size() > 1 ){
+				OrPattern orPattern = new OrPattern();
+				for (Iterator iter = _searchFor.iterator(); iter.hasNext();) {
+					SearchFor element = (SearchFor)iter.next();
+					orPattern.addPattern( SearchEngine.createSearchPattern( _stringPattern, element, _limitTo, _caseSensitive ) );	
+				}
+				
+				pattern = orPattern;
+				
+			} else {
+				Iterator iter = _searchFor.iterator();
+				pattern = SearchEngine.createSearchPattern( _stringPattern, (SearchFor)iter.next(), _limitTo, _caseSensitive );
+			}
+			
 			engine.search( _workspace, pattern, _scope, _collector );
 		}
 
@@ -139,7 +156,7 @@
 	private String					_scopeDescription;
 	private boolean					_caseSensitive;
 	private LimitTo					_limitTo;
-	private SearchFor				_searchFor;
+	private List					_searchFor;
 
 		
 }
Index: src/org/eclipse/cdt/internal/ui/search/CSearchPage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchPage.java,v
retrieving revision 1.5
diff -u -r1.5 CSearchPage.java
--- src/org/eclipse/cdt/internal/ui/search/CSearchPage.java	15 Jul 2003 14:43:48 -0000	1.5
+++ src/org/eclipse/cdt/internal/ui/search/CSearchPage.java	3 Sep 2003 18:12:27 -0000
@@ -19,6 +19,8 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 
 import org.eclipse.cdt.core.model.ICElement;
@@ -31,15 +33,11 @@
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.DialogPage;
 import org.eclipse.jface.dialogs.IDialogSettings;
-
 import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.util.Assert;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
-
 import org.eclipse.search.internal.ui.util.RowLayouter;
-
 import org.eclipse.search.ui.ISearchPage;
 import org.eclipse.search.ui.ISearchPageContainer;
 import org.eclipse.search.ui.ISearchResultViewEntry;
@@ -155,7 +153,7 @@
 					fCElement= fInitialData.cElement;
 				else
 					fCElement= null;
-					
+				handleAllElements( event );
 				setLimitTo( getSearchFor() );
 				updateCaseSensitiveCheckbox();
 			}
@@ -222,7 +220,14 @@
 		return result;
 	}
 
-
+	private void handleAllElements( SelectionEvent event ){
+		Button allElements = fSearchFor[ fSearchFor.length - 1 ];
+		if( event.widget == allElements ){
+			for( int i = 0; i < fSearchFor.length - 1; i++ )
+				fSearchFor[i].setEnabled( ! allElements.getSelection() );
+		}
+	}
+	
 	private void handlePatternSelected() {
 		if( fPattern.getSelectionIndex() < 0 )
 			return;
@@ -255,6 +260,12 @@
 			button.setText( fLimitToText[i] );
 			fLimitTo[i] = button;
 		}
+
+		// Fill with dummy radio buttons
+		Button filler= new Button(result, SWT.RADIO);
+		filler.setVisible(false);
+		filler= new Button(result, SWT.RADIO);
+		filler.setVisible(false);		
 		
 		return result;		
 	}
@@ -267,16 +278,22 @@
 		return null;
 	}
 	
-	private void setLimitTo( SearchFor searchFor ) {
+	private void setLimitTo( List searchFor ) {
 		HashSet set = new HashSet();
-		
-		if ( searchFor == FUNCTION || searchFor == METHOD ) {
-			set.add( DEFINITIONS );
-		}
-		
+
+		set.add( DEFINITIONS );
 		set.add( DECLARATIONS );
 		set.add( REFERENCES );
 		set.add( ALL_OCCURRENCES );
+				
+		for (Iterator iter = searchFor.iterator(); iter.hasNext();) {
+			SearchFor element = (SearchFor) iter.next();
+			if( element != FUNCTION && element != METHOD ){
+				set.remove( DEFINITIONS );
+				break;
+			}
+			
+		}
 		
 		for( int i = 0; i < fLimitTo.length; i++ )
 			fLimitTo[ i ].setEnabled( set.contains( fLimitToValues[ i ] ) );
@@ -291,27 +308,25 @@
 
 		fSearchFor= new Button[fSearchForText.length];
 		for (int i= 0; i < fSearchForText.length; i++) {
-			Button button= new Button(result, SWT.RADIO);
+			Button button= new Button(result, SWT.CHECK);
 			button.setText(fSearchForText[i]);
 			fSearchFor[i]= button;
 		}
 
-		// Fill with dummy radio buttons
-		//Button filler= new Button(result, SWT.RADIO);
-		//filler.setVisible(false);
-		//filler= new Button(result, SWT.RADIO);
-		//filler.setVisible(false);
-
 		return result;		
 	}
 	
-	private SearchFor getSearchFor() {
-		for (int i= 0; i < fSearchFor.length; i++) {
-			if( fSearchFor[i].getSelection() )
-				return fSearchForValues[ i ];
+	private List getSearchFor() {
+		List search = new LinkedList( );
+		
+		boolean all = fSearchFor[ fSearchFor.length - 1 ].getSelection();
+		
+		for (int i= 0; i < fSearchFor.length - 1; i++) {
+			if( fSearchFor[i].getSelection() || all )
+				search.add( fSearchForValues[i] );
 		}
-		Assert.isTrue(false, "shouldNeverHappen"); //$NON-NLS-1$
-		return null;
+		
+		return search;
 	}
 	
 	public void setContainer(ISearchPageContainer container) {
@@ -384,9 +399,15 @@
 		fCaseSensitive.setSelection( fInitialData.isCaseSensitive );
 		fCaseSensitive.setEnabled( fInitialData.cElement == null );
 		
-		for (int i = 0; i < fSearchFor.length; i++)
-			fSearchFor[i].setSelection( fSearchForValues[i] == fInitialData.searchFor );
-
+		HashSet set = new HashSet( fInitialData.searchFor );
+		
+		boolean enabled = ! set.contains( fSearchForValues[ fSearchFor.length - 1 ] );
+		
+		for (int i = 0; i < fSearchFor.length; i++){
+			fSearchFor[i].setSelection( set.contains( fSearchForValues[i] ) );
+			fSearchFor[i].setEnabled( enabled );			
+		}
+		
 		setLimitTo( fInitialData.searchFor );
 			
 		for (int i = 0; i < fLimitTo.length; i++)
@@ -414,8 +435,11 @@
 				return determineInitValuesFrom( element );
 			} else {
 				IWorkbenchAdapter adapter= (IWorkbenchAdapter)((IAdaptable)o).getAdapter( IWorkbenchAdapter.class );
-				if( adapter != null )
-					return new SearchPatternData( TYPE, REFERENCES, fIsCaseSensitive, adapter.getLabel(o), null );
+				if( adapter != null ){
+					List searchFor = new LinkedList();
+					searchFor.add( CLASS_STRUCT );
+					return new SearchPatternData( searchFor, REFERENCES, fIsCaseSensitive, adapter.getLabel(o), null );
+				}
 			}
 		}
 		return null;
@@ -438,13 +462,18 @@
 			} catch (IOException ex) {
 				text= ""; //$NON-NLS-1$
 			}
-			result= new SearchPatternData( TYPE, REFERENCES, fIsCaseSensitive, text, null);
+			
+			List searchFor = new LinkedList();
+			searchFor.add( CLASS_STRUCT );
+			result= new SearchPatternData( searchFor, REFERENCES, fIsCaseSensitive, text, null);
 		}
 		return result;
 	}
 	
 	private SearchPatternData getDefaultInitValues() {
-		return new SearchPatternData( TYPE, REFERENCES, fIsCaseSensitive, "", null); //$NON-NLS-1$
+		List searchFor = new LinkedList();
+		searchFor.add( CLASS_STRUCT );
+		return new SearchPatternData( searchFor, REFERENCES, fIsCaseSensitive, "", null); //$NON-NLS-1$
 	}
 		
 	private String[] getPreviousSearchPatterns() {
@@ -475,22 +504,22 @@
 	private SearchPatternData determineInitValuesFrom( ICElement element ) {
 		if( element == null )
 			return null;
-			
-		SearchFor searchFor = UNKNOWN_SEARCH_FOR;
-		LimitTo limitTo   	= UNKNOWN_LIMIT_TO;
-		
-		String pattern = null; 
-		switch( element.getElementType() ) {
-			/*case ICElement.PACKAGE_FRAGMENT:
-				searchFor= PACKAGE;
-				limitTo= REFERENCES;
-				pattern= element.getElementName();
-				break;*/
-		}
-		
-		if( searchFor != UNKNOWN_SEARCH_FOR && limitTo != UNKNOWN_LIMIT_TO && pattern != null )
-			return new SearchPatternData( searchFor, limitTo, true, pattern, element );
-		
+		//TODO search pattern data from element	
+//		SearchFor searchFor = UNKNOWN_SEARCH_FOR;
+//		LimitTo limitTo   	= UNKNOWN_LIMIT_TO;
+//		
+//		String pattern = null; 
+//		switch( element.getElementType() ) {
+//			/*case ICElement.PACKAGE_FRAGMENT:
+//				searchFor= PACKAGE;
+//				limitTo= REFERENCES;
+//				pattern= element.getElementName();
+//				break;*/
+//		}
+//		
+//		if( searchFor != UNKNOWN_SEARCH_FOR && limitTo != UNKNOWN_LIMIT_TO && pattern != null )
+//			return new SearchPatternData( searchFor, limitTo, true, pattern, element );
+//		
 		return null;	
 	}
 
@@ -528,7 +557,7 @@
 	}
 	
 	private static class SearchPatternData {
-		SearchFor	searchFor;
+		List 		searchFor;
 		LimitTo		limitTo;
 		String		pattern;
 		boolean		isCaseSensitive;
@@ -536,11 +565,11 @@
 		int			scope;
 		IWorkingSet[]	 	workingSets;
 	
-		public SearchPatternData(SearchFor s, LimitTo l, boolean i, String p, ICElement element) {
+		public SearchPatternData(List s, LimitTo l, boolean i, String p, ICElement element) {
 			this(s, l, p, i, element, ISearchPageContainer.WORKSPACE_SCOPE, null);
 		}
 	
-		public SearchPatternData(SearchFor s, LimitTo l, String p, boolean i, ICElement element, int scope, IWorkingSet[] workingSets) {
+		public SearchPatternData(List s, LimitTo l, String p, boolean i, ICElement element, int scope, IWorkingSet[] workingSets) {
 			searchFor= s;
 			limitTo= l;
 			pattern= p;
@@ -558,14 +587,19 @@
 	private static List fgPreviousSearchPatterns = new ArrayList(20);
 
 	private Button[] fSearchFor;
-	private SearchFor[] fSearchForValues = { TYPE, NAMESPACE, METHOD, FUNCTION, FIELD, VAR };
+	private SearchFor[] fSearchForValues = { CLASS_STRUCT, FUNCTION, VAR, UNION, METHOD, FIELD, NAMESPACE, ENUM, null };
+	
 	private String[] fSearchForText= {
-		CSearchMessages.getString("CSearchPage.searchFor.type"), //$NON-NLS-1$
-		CSearchMessages.getString("CSearchPage.searchFor.namespace"), //$NON-NLS-1$
-		CSearchMessages.getString("CSearchPage.searchFor.method"), //$NON-NLS-1$
-		CSearchMessages.getString("CSearchPage.searchFor.function"),
-		CSearchMessages.getString("CSearchPage.searchFor.field"),
-		CSearchMessages.getString("CSearchPage.searchFor.variable") }; //$NON-NLS-1$
+		CSearchMessages.getString("CSearchPage.searchFor.classStruct"), //$NON-NLS-1$
+		CSearchMessages.getString("CSearchPage.searchFor.function"),	//$NON-NLS-1$
+		CSearchMessages.getString("CSearchPage.searchFor.variable"), 	//$NON-NLS-1$
+		CSearchMessages.getString("CSearchPage.searchFor.union"),		//$NON-NLS-1$
+		CSearchMessages.getString("CSearchPage.searchFor.method"), 		//$NON-NLS-1$
+		CSearchMessages.getString("CSearchPage.searchFor.field"),		//$NON-NLS-1$
+		CSearchMessages.getString("CSearchPage.searchFor.enum"),		//$NON-NLS-1$
+		CSearchMessages.getString("CSearchPage.searchFor.namespace"),	//$NON-NLS-1$
+		CSearchMessages.getString("CSearchPage.searchFor.any") }; 		//$NON-NLS-1$
+		
 		
 	private Button[] fLimitTo;
 	private LimitTo[] fLimitToValues = { DECLARATIONS, DEFINITIONS, REFERENCES, ALL_OCCURRENCES };
Index: src/org/eclipse/cdt/ui/CSearchResultLabelProvider.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CSearchResultLabelProvider.java,v
retrieving revision 1.2
diff -u -r1.2 CSearchResultLabelProvider.java
--- src/org/eclipse/cdt/ui/CSearchResultLabelProvider.java	12 Aug 2003 20:20:13 -0000	1.2
+++ src/org/eclipse/cdt/ui/CSearchResultLabelProvider.java	3 Sep 2003 18:12:28 -0000
@@ -35,15 +35,15 @@
  */
 public class CSearchResultLabelProvider extends LabelProvider {
 
-	public static final int SHOW_NAME_ONLY		   = 0; //default
+	public static final int SHOW_NAME_ONLY		   = 0; 
 	public static final int SHOW_ELEMENT_CONTAINER = 1;
 	public static final int SHOW_CONTAINER_ELEMENT = 2;
-	public static final int SHOW_PATH			   = 3;
+	public static final int SHOW_PATH			   = 3;//default
 	
 	public static final String POTENTIAL_MATCH = CSearchMessages.getString("CSearchResultLabelProvider.potentialMatch"); //$NON-NLS-1$
 
 	public CSearchResultLabelProvider(){
-		_sortOrder = SHOW_NAME_ONLY;
+		_sortOrder = SHOW_PATH;
 	}
 	
 	public Image getImage( Object element ) {

Back to the top