1 11 package org.eclipse.search2.internal.ui; 12 13 import java.text.MessageFormat ; 14 15 import org.eclipse.swt.SWT; 16 import org.eclipse.swt.widgets.Control; 17 import org.eclipse.swt.widgets.Menu; 18 import org.eclipse.swt.widgets.MenuItem; 19 20 import org.eclipse.jface.action.Action; 21 import org.eclipse.jface.action.ActionContributionItem; 22 import org.eclipse.jface.action.IMenuCreator; 23 import org.eclipse.jface.resource.ImageDescriptor; 24 25 import org.eclipse.search.ui.ISearchQuery; 26 import org.eclipse.search.ui.ISearchResult; 27 28 import org.eclipse.search.internal.ui.SearchPluginImages; 29 30 class SearchDropDownAction extends Action implements IMenuCreator { 31 32 33 public static final int RESULTS_IN_DROP_DOWN= 10; 34 35 private Menu fMenu; 36 private SearchView fSearchView; 37 38 public SearchDropDownAction(SearchView searchView) { 39 setText(SearchMessages.SearchDropDownAction_label); 40 setToolTipText(SearchMessages.SearchDropDownAction_tooltip); 41 SearchPluginImages.setImageDescriptors(this, SearchPluginImages.T_LCL, SearchPluginImages.IMG_LCL_SEARCH_HISTORY); 42 fSearchView= searchView; 43 setMenuCreator(this); 44 } 45 46 public void dispose() { 47 disposeMenu(); 48 } 49 50 void disposeMenu() { 51 if (fMenu != null) 52 fMenu.dispose(); 53 } 54 55 public Menu getMenu(Menu parent) { 56 return null; 57 } 58 59 public Menu getMenu(Control parent) { 60 ISearchQuery currentQuery= null; 61 ISearchResult currentSearch= fSearchView.getCurrentSearchResult(); 62 if (currentSearch != null) 63 currentQuery= currentSearch.getQuery(); 64 disposeMenu(); 65 66 fMenu= new Menu(parent); 67 ISearchQuery[] searches= InternalSearchUI.getInstance().getSearchManager().getQueries(); 68 for (int i= 0; i < searches.length; i++) { 69 ISearchResult search= searches[i].getSearchResult(); 70 String label= escapeAmp(search.getLabel()); 71 String tooltip= search.getTooltip(); 72 ImageDescriptor image= search.getImageDescriptor(); 73 if (InternalSearchUI.getInstance().isQueryRunning(search.getQuery())) 74 label= MessageFormat.format(SearchMessages.SearchDropDownAction_running_message, new String [] { label }); 75 ShowSearchAction action= new ShowSearchAction(fSearchView, search, label, image, tooltip ); 76 if (searches[i].equals(currentQuery)) 77 action.setChecked(true); 78 addActionToMenu(fMenu, action); 79 } 80 if (searches.length > 0) { 81 new MenuItem(fMenu, SWT.SEPARATOR); 82 addActionToMenu(fMenu, new RemoveAllSearchesAction()); 83 } 84 return fMenu; 85 } 86 87 private String escapeAmp(String label) { 88 StringBuffer buf= new StringBuffer (); 89 for (int i= 0; i < label.length(); i++) { 90 char ch= label.charAt(i); 91 buf.append(ch); 92 if (ch == '&') { 93 buf.append('&'); 94 } 95 } 96 return buf.toString(); 97 } 98 99 protected void addActionToMenu(Menu parent, Action action) { 100 ActionContributionItem item= new ActionContributionItem(action); 101 item.fill(parent, -1); 102 } 103 104 public void run() { 105 new ShowSearchesAction(fSearchView).run(); 106 } 107 } 108 | Popular Tags |