/******************************************************************************* * Copyright (c) 2001, 2004 IBM Corporation 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 * Jens Lukowski/Innoopract - initial renaming/restructuring * *******************************************************************************/ package org.eclipse.wst.sse.ui.internal.search; import org.eclipse.jface.text.TextSelection; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.search.ui.text.AbstractTextSearchViewPage; import org.eclipse.search.ui.text.Match; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.eclipse.wst.sse.ui.internal.Logger; /** * Base page for Occurrences in file search results. * * @author pavery */ public class OccurrencesSearchViewPage extends AbstractTextSearchViewPage { private OccurrencesContentProvider fContentProvider = null; public OccurrencesSearchViewPage() { super(AbstractTextSearchViewPage.FLAG_LAYOUT_FLAT); } /** * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#clear() */ protected void clear() { if (this.fContentProvider != null) this.fContentProvider.clear(); } /** * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#configureTableViewer(org.eclipse.jface.viewers.TableViewer) */ protected void configureTableViewer(TableViewer viewer) { //sort results by line number, low to high viewer.setComparator(new ViewerComparator() { public int compare(Viewer v, Object obj1, Object obj2) { BasicSearchMatchElement elem1= (BasicSearchMatchElement) obj1; BasicSearchMatchElement elem2= (BasicSearchMatchElement) obj2; return elem1.getLineNum() - elem2.getLineNum(); } }); //allow for formated labels viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(new BasicSearchLabelProvider(this))); this.fContentProvider = new OccurrencesContentProvider(); viewer.setContentProvider(this.fContentProvider); } /** * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#configureTreeViewer(org.eclipse.jface.viewers.TreeViewer) */ protected void configureTreeViewer(TreeViewer viewer) { // not supported at the moment } /** * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#elementsChanged(java.lang.Object[]) */ protected void elementsChanged(Object[] objects) { if (this.fContentProvider != null) { this.fContentProvider.elementsChanged(objects); } } public void forceRefresh() { this.fContentProvider.refresh(); } private IWorkbenchPage getActivePage() { IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); if (window == null) return null; return workbench.getActiveWorkbenchWindow().getActivePage(); } /** * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#showMatch(org.eclipse.search.ui.text.Match, * int, int) */ protected void showMatch(Match match, int currentOffset, int currentLength, boolean activate) throws PartInitException { BasicSearchMatchElement element = (BasicSearchMatchElement) match.getElement(); IWorkbenchPage activePage = getActivePage(); try { if (activePage != null) { // open editor if needed IDE.openEditor(getActivePage(), element.getFile()); //set the selection in the open editor IEditorPart editor = activePage.getActiveEditor(); if (activate) editor.getSite().getPage().activate(editor); editor.getEditorSite().getSelectionProvider().setSelection( new TextSelection(currentOffset, currentLength)); } } catch (PartInitException e) { // possible exception trying to open editor Logger.logException(e); } } }