blob: 7a36de11fb48c0324474007a57bffdf61fccf2e9 [file] [log] [blame]
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
package org.eclipse.search.internal.ui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.Assert;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.help.ViewContextComputer;
import org.eclipse.ui.help.WorkbenchHelp;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.search.ui.IContextMenuContributor;
import org.eclipse.search.ui.IGroupByKeyComputer;
import org.eclipse.search.ui.ISearchResultView;
public class SearchResultView extends ViewPart implements ISearchResultView {
private SearchResultViewer fViewer;
private Map fResponse;
/**
* Creates the search list inner viewer.
*/
public void createPartControl(Composite parent) {
Assert.isTrue(fViewer == null);
fViewer= new SearchResultViewer(this, parent);
IWorkspace workspace= SearchPlugin.getWorkspace();
SearchManager.getDefault().addSearchChangeListener(fViewer);
Search search= SearchManager.getDefault().getCurrentSearch();
if (search != null)
fViewer.setPageId(search.getPageId());
fViewer.setInput(SearchManager.getDefault().getCurrentResults());
fillToolBar(getViewSite().getActionBars().getToolBarManager());
getSite().setSelectionProvider(fViewer);
WorkbenchHelp.setHelp(fViewer.getControl(), new ViewContextComputer(this, ISearchHelpContextIds.SEARCH_VIEW));
}
/**
* Returns the search result viewer.
*/
SearchResultViewer getViewer() {
return fViewer;
}
//---- IWorkbenchPart ------------------------------------------------------
public void setFocus() {
fViewer.getControl().setFocus();
}
public void dispose() {
SearchManager.getDefault().removeSearchChangeListener(fViewer);
fViewer= null;
super.dispose();
}
protected void setTitle(String title) {
super.setTitle(title);
}
protected void setTitleToolTip(String text) {
super.setTitleToolTip(text);
}
//---- Adding Action to Toolbar -------------------------------------------
private void fillToolBar(IToolBarManager tbm) {
fViewer.fillToolBar(tbm);
}
private void setLabelProvider(final ILabelProvider provider) {
// Make sure we are doing it in the right thread.
getDisplay().syncExec(new Runnable() {
public void run() {
fViewer.internalSetLabelProvider(provider);
}
});
}
private void setContextMenuContributor(final IContextMenuContributor contributor) {
// Make sure we are doing it in the right thread.
getDisplay().syncExec(new Runnable() {
public void run() {
fViewer.setContextMenuTarget(contributor);
}
});
}
private void setGotoMarkerAction(final IAction gotoMarkerAction) {
// Make sure we are doing it in the right thread.
getDisplay().syncExec(new Runnable() {
public void run() {
fViewer.setGotoMarkerAction(gotoMarkerAction);
}
});
}
Display getDisplay() {
return fViewer.getControl().getDisplay();
}
//---- ISearchResultView --------------------------------------------------
/*
* Implements method from ISearchResultView
*/
public ISelection getSelection() {
return fViewer.getSelection();
}
/*
* Implements method from ISearchResultView
*/
public void searchStarted(
String pageId,
String label,
ImageDescriptor imageDescriptor,
IContextMenuContributor contributor,
ILabelProvider labelProvider,
IAction gotoAction,
IGroupByKeyComputer groupByKeyComputer,
IRunnableWithProgress operation) {
Assert.isNotNull(pageId);
Assert.isNotNull(label);
Assert.isNotNull(gotoAction);
fResponse= new HashMap(500);
setGotoMarkerAction(gotoAction);
SearchManager.getDefault().addNewSearch(
new Search(
pageId,
label,
labelProvider,
imageDescriptor,
fViewer.getGotoMarkerAction(),
contributor,
groupByKeyComputer,
operation));
};
/*
* Implements method from ISearchResultView
*/
public void addMatch(String description, Object groupByKey, IResource resource, IMarker marker) {
SearchResultViewEntry entry= (SearchResultViewEntry)fResponse.get(groupByKey);
if (entry == null) {
entry= new SearchResultViewEntry(groupByKey, resource);
fResponse.put(groupByKey, entry);
}
entry.add(marker);
}
/*
* Implements method from ISearchResultView
*/
public void searchFinished() {
SearchManager.getDefault().setCurrentResults(new ArrayList(fResponse.values()));
}
}