Java tutorial
/******************************************************************************* * Copyright (c) 2000, 2008 IBM Corporation, Nokia 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 * Michael Fraenkel (fraenkel@us.ibm.com) - contributed a fix for: * o New search view sets incorrect title * (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=60966) *******************************************************************************/ package com.nokia.carbide.search.system2.internal.ui; import com.ibm.icu.text.MessageFormat; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.eclipse.core.commands.operations.IUndoContext; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; 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.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IMemento; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.actions.ContributionItemFactory; import org.eclipse.ui.keys.IBindingService; import org.eclipse.ui.operations.UndoRedoActionGroup; import org.eclipse.ui.part.IPage; import org.eclipse.ui.part.IPageBookViewPage; import org.eclipse.ui.part.IPageSite; import org.eclipse.ui.part.IShowInSource; import org.eclipse.ui.part.Page; import org.eclipse.ui.part.PageBook; import org.eclipse.ui.part.PageBookView; import org.eclipse.ui.part.PageSwitcher; import org.eclipse.ui.part.ShowInContext; import org.eclipse.ui.progress.IWorkbenchSiteProgressService; import com.nokia.carbide.search.system.internal.ui.ISearchHelpContextIds; import com.nokia.carbide.search.system.internal.ui.OpenSearchDialogAction; import com.nokia.carbide.search.system.internal.ui.SearchPlugin; import com.nokia.carbide.search.system.ui.IContextMenuConstants; import com.nokia.carbide.search.system.ui.IQueryListener; import com.nokia.carbide.search.system.ui.ISearchQuery; import com.nokia.carbide.search.system.ui.ISearchResult; import com.nokia.carbide.search.system.ui.ISearchResultPage; import com.nokia.carbide.search.system.ui.ISearchResultViewPart; import com.nokia.carbide.search.system.ui.NewSearchUI; public class SearchView extends PageBookView implements ISearchResultViewPart, IQueryListener { private static final String MEMENTO_TYPE = "view"; //$NON-NLS-1$ private static final String MEMENTO_KEY_IS_PINNED = "isPinned"; //$NON-NLS-1$ private static final String MEMENTO_KEY_LAST_ACTIVATION = "com.nokia.carbide.search.system.lastActivation"; //$NON-NLS-1$ private static final String MEMENTO_KEY_RESTORE = "com.nokia.carbide.search.system.restore"; //$NON-NLS-1$ private HashMap fPartsToPages; private HashMap fPagesToParts; private HashMap fSearchViewStates; private SearchPageRegistry fSearchViewPageService; private SearchHistoryDropDownAction fSearchesDropDownAction; private ISearchResult fCurrentSearch; private DummyPart fDefaultPart; private SearchAgainAction fSearchAgainAction; private CancelSearchAction fCancelAction; private PinSearchViewAction fPinSearchViewAction; private UndoRedoActionGroup fUndoRedoActionGroup; private IMemento fPageState; private boolean fIsPinned; private int fActivationCount = 0; private String fDefaultPartName; private Composite fPageContent; private Link fDescription; private Composite fDescriptionComposite; /** * Creates the groups and separators for the search view's context menu * * @param menu the context menu */ public static void createContextMenuGroups(IMenuManager menu) { menu.add(new Separator(IContextMenuConstants.GROUP_NEW)); menu.add(new GroupMarker(IContextMenuConstants.GROUP_GOTO)); menu.add(new GroupMarker(IContextMenuConstants.GROUP_OPEN)); menu.add(new Separator(IContextMenuConstants.GROUP_SHOW)); menu.add(new Separator(IContextMenuConstants.GROUP_EDIT)); menu.add(new GroupMarker(IContextMenuConstants.GROUP_REMOVE_MATCHES)); menu.add(new Separator(IContextMenuConstants.GROUP_REORGANIZE)); menu.add(new GroupMarker(IContextMenuConstants.GROUP_GENERATE)); menu.add(new Separator(IContextMenuConstants.GROUP_SEARCH)); menu.add(new Separator(IContextMenuConstants.GROUP_BUILD)); menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); menu.add(new Separator(IContextMenuConstants.GROUP_VIEWER_SETUP)); menu.add(new Separator(IContextMenuConstants.GROUP_PROPERTIES)); } /** * Creates the groups and separators for the search view's context menu * * @param menu the context menu */ private static void createViewMenuGroups(IMenuManager menu) { menu.add(new Separator(IContextMenuConstants.GROUP_VIEWER_SETUP)); menu.add(new Separator(IContextMenuConstants.GROUP_NEW)); menu.add(new GroupMarker(IContextMenuConstants.GROUP_GOTO)); menu.add(new GroupMarker(IContextMenuConstants.GROUP_OPEN)); menu.add(new Separator(IContextMenuConstants.GROUP_SHOW)); menu.add(new Separator(IContextMenuConstants.GROUP_EDIT)); menu.add(new GroupMarker(IContextMenuConstants.GROUP_REMOVE_MATCHES)); menu.add(new Separator(IContextMenuConstants.GROUP_REORGANIZE)); menu.add(new GroupMarker(IContextMenuConstants.GROUP_GENERATE)); menu.add(new Separator(IContextMenuConstants.GROUP_SEARCH)); menu.add(new Separator(IContextMenuConstants.GROUP_BUILD)); menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); menu.add(new Separator(IContextMenuConstants.GROUP_FILTERING)); menu.add(new Separator(IContextMenuConstants.GROUP_PROPERTIES)); } /** * Creates the groups and separators for the search view's * tool bar * * @param toolbar the toolbar */ public static void createToolBarGroups(IToolBarManager toolbar) { toolbar.add(new Separator(IContextMenuConstants.GROUP_NEW)); toolbar.add(new GroupMarker(IContextMenuConstants.GROUP_GOTO)); toolbar.add(new GroupMarker(IContextMenuConstants.GROUP_OPEN)); toolbar.add(new Separator(IContextMenuConstants.GROUP_SHOW)); toolbar.add(new Separator(IContextMenuConstants.GROUP_BUILD)); toolbar.add(new Separator(IContextMenuConstants.GROUP_REORGANIZE)); toolbar.add(new Separator(IContextMenuConstants.GROUP_EDIT)); toolbar.add(new GroupMarker(IContextMenuConstants.GROUP_REMOVE_MATCHES)); toolbar.add(new GroupMarker(IContextMenuConstants.GROUP_GENERATE)); toolbar.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); toolbar.add(new Separator(IContextMenuConstants.GROUP_VIEWER_SETUP)); toolbar.add(new Separator(IContextMenuConstants.GROUP_PROPERTIES)); toolbar.add(new Separator(IContextMenuConstants.GROUP_SEARCH)); } static class DummyPart implements IWorkbenchPart { private int fLastActivation = 0; public void setLastActivation(int lastActivation) { fLastActivation = lastActivation; } public int getLastActivation() { return fLastActivation; } public void addPropertyListener(IPropertyListener listener) { /*dummy*/} public void createPartControl(Composite parent) { /*dummy*/} public void dispose() { /*dummy*/} public IWorkbenchPartSite getSite() { return null; } public String getTitle() { return null; } public Image getTitleImage() { return null; } public String getTitleToolTip() { return null; } public void removePropertyListener(IPropertyListener listener) { /*dummy*/} public void setFocus() { /*dummy*/} public Object getAdapter(Class adapter) { return null; } } static class EmptySearchView extends Page implements ISearchResultPage { private Composite fControl; private String fId; public void createControl(Composite parent) { Color background = parent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND); Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(1, false)); composite.setBackground(background); Link link = new Link(composite, SWT.NONE); link.setText(SearchMessages.SearchView_empty_search_label); link.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false)); link.setBackground(background); link.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { new OpenSearchDialogAction().run(); } }); fControl = composite; } public Control getControl() { return fControl; } public void setFocus() { if (fControl != null) fControl.setFocus(); } /* (non-Javadoc) * @see com.nokia.carbide.search.system2.ui.ISearchResultsPage#setInput(com.nokia.carbide.search.system2.ui.ISearchResult, java.lang.Object) */ public void setInput(ISearchResult search, Object viewState) { // do nothing } /* (non-Javadoc) * @see com.nokia.carbide.search.system2.ui.ISearchResultsPage#setViewPart(com.nokia.carbide.search.system2.ui.ISearchResultView) */ public void setViewPart(ISearchResultViewPart part) { // do nothing } public Object getUIState() { // empty implementation return null; } public void init(IPageSite pageSite) { super.init(pageSite); getSite().setSelectionProvider(null); // add something to avoid the empty menu IMenuManager menuManager = pageSite.getActionBars().getMenuManager(); menuManager.appendToGroup(IContextMenuConstants.GROUP_PROPERTIES, new OpenSearchPreferencesAction()); } /* (non-Javadoc) * @see com.nokia.carbide.search.system.ui.ISearchResultPage#saveState(org.eclipse.ui.IMemento) */ public void saveState(IMemento memento) { // do nothing } /* (non-Javadoc) * @see com.nokia.carbide.search.system.ui.ISearchResultPage#restoreState(org.eclipse.ui.IMemento) */ public void restoreState(IMemento memento) { // do nothing } /* (non-Javadoc) * @see com.nokia.carbide.search.system.ui.ISearchResultPage#setID(java.lang.String) */ public void setID(String id) { fId = id; } /* (non-Javadoc) * @see com.nokia.carbide.search.system.ui.ISearchResultPage#getID() */ public String getID() { return fId; } /* (non-Javadoc) * @see com.nokia.carbide.search.system.ui.ISearchResultPage#getLabel() */ public String getLabel() { return ""; //$NON-NLS-1$ } } public SearchView() { super(); fPartsToPages = new HashMap(); fPagesToParts = new HashMap(); fSearchViewPageService = new SearchPageRegistry(); fSearchViewStates = new HashMap(); fIsPinned = false; } /** * @return the search result page registry */ public SearchPageRegistry getSearchPageRegistry() { return fSearchViewPageService; } /* (non-Javadoc) * @see org.eclipse.ui.part.PageBookView#partActivated(org.eclipse.ui.IWorkbenchPart) */ public void partActivated(IWorkbenchPart part) { super.partActivated(part); if (part == this) { InternalSearchUI.getInstance().getSearchViewManager().searchViewActivated(this); } } protected IPage createDefaultPage(PageBook book) { IPageBookViewPage page = new EmptySearchView(); page.createControl(book); initPage(page); DummyPart part = new DummyPart(); fPartsToPages.put(part, page); fPagesToParts.put(page, part); fDefaultPart = part; return page; } protected PageRec doCreatePage(IWorkbenchPart part) { IPageBookViewPage page = (IPageBookViewPage) fPartsToPages.get(part); initPage(page); page.createControl(getPageBook()); PageRec rec = new PageRec(part, page); return rec; } protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) { IPage page = pageRecord.page; page.dispose(); pageRecord.dispose(); // empty cross-reference cache fPartsToPages.remove(part); } protected IWorkbenchPart getBootstrapPart() { return null; } protected boolean isImportant(IWorkbenchPart part) { return part instanceof DummyPart; } public void showSearchResult(ISearchResult search) { ISearchResultPage newPage = null; if (search != null) { newPage = fSearchViewPageService.findPageForSearchResult(search, true); if (newPage == null) { String format = SearchMessages.SearchView_error_noResultPage; String message = MessageFormat.format(format, new Object[] { search.getClass().getName() }); SearchPlugin.log(new Status(IStatus.ERROR, SearchPlugin.getID(), 0, message, null)); return; } } internalShowSearchPage(newPage, search); } public void showEmptySearchPage(String pageId) { ISearchResultPage newPage = fSearchViewPageService.findPageForPageId(pageId, true); internalShowSearchPage(newPage, null); } private void internalShowSearchPage(ISearchResultPage page, ISearchResult search) { // detach the previous page. ISearchResultPage currentPage = (ISearchResultPage) getCurrentPage(); if (fCurrentSearch != null && currentPage != null) { fSearchViewStates.put(fCurrentSearch, currentPage.getUIState()); currentPage.setInput(null, null); } fCurrentSearch = search; if (page != null) { if (page != currentPage) { DummyPart part = (DummyPart) fPagesToParts.get(page); if (part == null) { part = new DummyPart(); fPagesToParts.put(page, part); fPartsToPages.put(part, page); page.setViewPart(this); } part.setLastActivation(++fActivationCount); partActivated(part); } // connect to the new pages Object uiState = search != null ? fSearchViewStates.get(search) : null; page.setInput(search, uiState); } updatePartName(); updateLabel(); updateCancelAction(); updateHelpContextID(page); } private void updateHelpContextID(ISearchResultPage page) { String helpContextId = null; String pageId = null; if (page != null) pageId = page.getID(); if (pageId != null) helpContextId = fSearchViewPageService.getHelpContextId(pageId); if (helpContextId == null) helpContextId = ISearchHelpContextIds.New_SEARCH_VIEW; PlatformUI.getWorkbench().getHelpSystem().setHelp(fPageContent.getParent(), helpContextId); } public void updateLabel() { ISearchResultPage page = getActivePage(); String label = ""; //$NON-NLS-1$ if (page != null) { label = page.getLabel(); } if (!fPageContent.isDisposed()) { if (label.length() == 0) { if (fDescriptionComposite != null) { fDescriptionComposite.dispose(); fDescriptionComposite = null; fPageContent.layout(); } } else { if (fDescriptionComposite == null) { fDescriptionComposite = new Composite(fPageContent, SWT.NONE); fDescriptionComposite.moveAbove(null); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; layout.verticalSpacing = 0; fDescriptionComposite.setLayout(layout); fDescriptionComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); fDescription = new Link(fDescriptionComposite, SWT.NONE); GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false); gridData.horizontalIndent = 5; fDescription.setLayoutData(gridData); fDescription.setText(label); Label separator = new Label(fDescriptionComposite, SWT.SEPARATOR | SWT.HORIZONTAL); separator.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); fPageContent.layout(); } else { fDescription.setText(label); } } } } public ISearchResult getCurrentSearchResult() { return fCurrentSearch; } public void createPartControl(Composite parent) { createActions(); fPageContent = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; layout.horizontalSpacing = 0; layout.verticalSpacing = 0; fPageContent.setLayout(layout); fDescriptionComposite = null; super.createPartControl(fPageContent); getPageBook().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); fDefaultPartName = getPartName(); initializeToolBar(); InternalSearchUI.getInstance().getSearchManager().addQueryListener(this); initializePageSwitcher(); PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ISearchHelpContextIds.New_SEARCH_VIEW); restorePageFromMemento(); } private void initializePageSwitcher() { new PageSwitcher(this) { public void activatePage(Object page) { ISearchResult searchResult = ((ISearchQuery) page).getSearchResult(); InternalSearchUI.getInstance().showSearchResult(SearchView.this, searchResult, false); } public ImageDescriptor getImageDescriptor(Object page) { ISearchResult searchResult = ((ISearchQuery) page).getSearchResult(); return searchResult.getImageDescriptor(); } public String getName(Object page) { ISearchResult searchResult = ((ISearchQuery) page).getSearchResult(); return searchResult.getLabel(); } public Object[] getPages() { return NewSearchUI.getQueries(); } }; } private void restorePageFromMemento() { if (fPageState != null) { int bestActivation = -1; IMemento restorePageMemento = null; IMemento[] children = fPageState.getChildren(MEMENTO_TYPE); for (int i = 0; i < children.length; i++) { IMemento pageMemento = children[i]; if (pageMemento.getString(MEMENTO_KEY_RESTORE) != null) { Integer lastActivation = pageMemento.getInteger(MEMENTO_KEY_LAST_ACTIVATION); if (lastActivation != null && lastActivation.intValue() > bestActivation) { bestActivation = lastActivation.intValue(); restorePageMemento = pageMemento; } } } if (restorePageMemento != null) { showEmptySearchPage(restorePageMemento.getID()); String pinned = fPageState.getString(MEMENTO_KEY_IS_PINNED); if (String.valueOf(true).equals(pinned)) { setPinned(true); fPinSearchViewAction.update(); } } } } private void initializeToolBar() { IToolBarManager tbm = getViewSite().getActionBars().getToolBarManager(); createToolBarGroups(tbm); tbm.appendToGroup(IContextMenuConstants.GROUP_SEARCH, fSearchAgainAction); tbm.appendToGroup(IContextMenuConstants.GROUP_SEARCH, fCancelAction); tbm.appendToGroup(IContextMenuConstants.GROUP_SEARCH, fSearchesDropDownAction); tbm.appendToGroup(IContextMenuConstants.GROUP_SEARCH, fPinSearchViewAction); getViewSite().getActionBars().updateActionBars(); } private void createActions() { fSearchesDropDownAction = new SearchHistoryDropDownAction(this); fSearchesDropDownAction.updateEnablement(); fSearchAgainAction = new SearchAgainAction(this); fSearchAgainAction.setEnabled(false); // hackery to get the shortcut to show up fSearchAgainAction.setActionDefinitionId("org.eclipse.ui.file.refresh"); //$NON-NLS-1$ fCancelAction = new CancelSearchAction(this); fCancelAction.setEnabled(false); fPinSearchViewAction = new PinSearchViewAction(this); IUndoContext workspaceContext = (IUndoContext) ResourcesPlugin.getWorkspace() .getAdapter(IUndoContext.class); fUndoRedoActionGroup = new UndoRedoActionGroup(getViewSite(), workspaceContext, true); } public void dispose() { if (fUndoRedoActionGroup != null) { fUndoRedoActionGroup.dispose(); } InternalSearchUI.getInstance().getSearchViewManager().searchViewClosed(this); InternalSearchUI.getInstance().getSearchManager().removeQueryListener(this); super.dispose(); } public void queryStarting(ISearchQuery query) { if (fCurrentSearch != null && fCurrentSearch.equals(query.getSearchResult())) { updateCancelAction(); } } public void queryFinished(ISearchQuery query) { if (fCurrentSearch != null && fCurrentSearch.equals(query.getSearchResult())) { updateCancelAction(); } } private void updateCancelAction() { ISearchResult result = getCurrentSearchResult(); boolean queryRunning = false; if (result != null) { queryRunning = InternalSearchUI.getInstance().isQueryRunning(result.getQuery()); } fCancelAction.setEnabled(queryRunning); fSearchAgainAction.setEnabled(!queryRunning && result != null && result.getQuery().canRerun()); } public void queryAdded(ISearchQuery query) { fSearchesDropDownAction.updateEnablement(); } public void queryRemoved(ISearchQuery query) { InternalSearchUI.getInstance().cancelSearch(query); if (query.getSearchResult().equals(fCurrentSearch)) { showSearchResult(null); partActivated(fDefaultPart); } fSearchViewStates.remove(query.getSearchResult()); fSearchesDropDownAction.disposeMenu(); fSearchesDropDownAction.updateEnablement(); } /* (non-Javadoc) * @see com.nokia.carbide.search.system2.ui.ISearchView#fillContextMenu(org.eclipse.jface.action.IMenuManager) */ public void fillContextMenu(IMenuManager menuManager) { ISearchResult result = getCurrentSearchResult(); if (result != null) { menuManager.appendToGroup(IContextMenuConstants.GROUP_SEARCH, fSearchAgainAction); // first check if we have a selection for the show in mechanism, bugzilla 127718 IShowInSource showInSource = (IShowInSource) getAdapter(IShowInSource.class); if (showInSource != null) { ShowInContext context = showInSource.getShowInContext(); if (context != null) { ISelection sel = context.getSelection(); if (sel != null && !sel.isEmpty()) { MenuManager showInSubMenu = new MenuManager(getShowInMenuLabel()); showInSubMenu.add( ContributionItemFactory.VIEWS_SHOW_IN.create(getViewSite().getWorkbenchWindow())); menuManager.appendToGroup(IContextMenuConstants.GROUP_OPEN, showInSubMenu); } } } } } private String getShowInMenuLabel() { String keyBinding = null; IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench() .getAdapter(IBindingService.class); if (bindingService != null) keyBinding = bindingService.getBestActiveBindingFormattedFor("org.eclipse.ui.navigate.showInQuickMenu"); //$NON-NLS-1$ if (keyBinding == null) keyBinding = ""; //$NON-NLS-1$ return NLS.bind(SearchMessages.SearchView_showIn_menu, keyBinding); } // Methods related to saving page state. ------------------------------------------- public void saveState(IMemento memento) { for (Iterator iter = fPagesToParts.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); ISearchResultPage page = (ISearchResultPage) entry.getKey(); DummyPart part = (DummyPart) entry.getValue(); IMemento child = memento.createChild(MEMENTO_TYPE, page.getID()); page.saveState(child); child.putInteger(MEMENTO_KEY_LAST_ACTIVATION, part.getLastActivation()); } memento.putString(MEMENTO_KEY_IS_PINNED, String.valueOf(isPinned())); } public void init(IViewSite site, IMemento memento) throws PartInitException { super.init(site, memento); IMenuManager menuManager = site.getActionBars().getMenuManager(); createViewMenuGroups(menuManager); fPageState = memento; IWorkbenchSiteProgressService progressService = getProgressService(); if (progressService != null) progressService.showBusyForFamily(InternalSearchUI.FAMILY_SEARCH); } protected void initPage(IPageBookViewPage page) { super.initPage(page); IActionBars actionBars = page.getSite().getActionBars(); actionBars.setGlobalActionHandler(ActionFactory.REFRESH.getId(), fSearchAgainAction); actionBars.updateActionBars(); fUndoRedoActionGroup.fillActionBars(actionBars); ISearchResultPage srPage = (ISearchResultPage) page; IMemento memento = null; if (fPageState != null) { IMemento[] mementos = fPageState.getChildren(MEMENTO_TYPE); for (int i = 0; i < mementos.length; i++) { if (mementos[i].getID().equals(srPage.getID())) { memento = mementos[i]; break; } } } srPage.restoreState(memento); } /* * TODO workaround for focus problem. Clarify focus behavior. * @see org.eclipse.ui.IWorkbenchPart#setFocus() */ public void setFocus() { IPage currentPage = getCurrentPage(); if (currentPage != null) currentPage.setFocus(); else super.setFocus(); } public ISearchResultPage getActivePage() { IPage page = getCurrentPage(); if (page instanceof ISearchResultPage) return (ISearchResultPage) page; return null; } public IWorkbenchSiteProgressService getProgressService() { IWorkbenchSiteProgressService service = null; Object siteService = getSite().getAdapter(IWorkbenchSiteProgressService.class); if (siteService != null) service = (IWorkbenchSiteProgressService) siteService; return service; } public void showBusy(boolean busy) { super.showBusy(busy); getProgressService().warnOfContentChange(); } public Object getAdapter(Class adapter) { Object superAdapter = super.getAdapter(adapter); if (superAdapter != null) return superAdapter; if (adapter == IShowInSource.class) { return new IShowInSource() { public ShowInContext getShowInContext() { return new ShowInContext(null, getSelectionProvider().getSelection()); } }; } return null; } /** * Marks the view as pinned. * * @param pinned if <code>true</code> the view is marked as pinned */ public void setPinned(boolean pinned) { fIsPinned = pinned; } /** * @return returns <code>true</code> the view is marked as pinned */ public boolean isPinned() { return fIsPinned; } public void updatePartName() { if (fDefaultPartName != null) { // mstodo not yet enabled. // String partName= null; // ISearchResultPage page= getActivePage(); // if (page != null && isPinned()) { // partName= getSearchPageRegistry().findLabelForPageId(page.getID()); // } // setPartName(partName != null ? partName : fDefaultPartName); } } }