diff options
author | dgreen | 2011-06-20 18:40:28 +0000 |
---|---|---|
committer | dgreen | 2011-06-20 18:40:28 +0000 |
commit | d60f5831641804ae8f583418ba5c0236d650e916 (patch) | |
tree | 5b1ca8885da187ec6264ed7a394684ca558e1265 | |
parent | ae2bf76c729d1a32fd4efb6a4abf5c0bff074d64 (diff) | |
download | org.eclipse.mylyn.incubator-d60f5831641804ae8f583418ba5c0236d650e916.tar.gz org.eclipse.mylyn.incubator-d60f5831641804ae8f583418ba5c0236d650e916.tar.xz org.eclipse.mylyn.incubator-d60f5831641804ae8f583418ba5c0236d650e916.zip |
349351: [search] enhance Eclipse search capabilities to include desktop resources (https://bugs.eclipse.org/bugs-349351)
Implement search results, with context menus and open action.
Implement styled label provider
11 files changed, 465 insertions, 10 deletions
diff --git a/org.eclipse.mylyn.sandbox.search.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.sandbox.search.ui/META-INF/MANIFEST.MF index f80b4157..b8e2c60e 100644 --- a/org.eclipse.mylyn.sandbox.search.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.mylyn.sandbox.search.ui/META-INF/MANIFEST.MF @@ -9,9 +9,11 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.5.0", org.eclipse.search, org.eclipse.ui;bundle-version="3.5.0", org.eclipse.jface.text;bundle-version="3.5.0", - org.eclipse.core.resources;bundle-version="3.5.0" + org.eclipse.core.resources;bundle-version="3.5.0", + org.eclipse.ui.ide;bundle-version="3.5.0" Bundle-ActivationPolicy: lazy Bundle-Activator: org.eclipse.mylyn.internal.sandbox.search.ui.SearchPlugin Eclipse-PlatformFilter: (&(osgi.os=win32) (osgi.arch=x86)) Export-Package: org.eclipse.mylyn.internal.sandbox.search.ui;x-internal:=true, org.eclipse.mylyn.sandbox.search.ui +Import-Package: org.eclipse.core.filesystem diff --git a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/ContentProvider.java b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/ContentProvider.java index c955f75a..602b8f15 100644 --- a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/ContentProvider.java +++ b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/ContentProvider.java @@ -10,8 +10,10 @@ *******************************************************************************/ package org.eclipse.mylyn.internal.sandbox.search.ui; +import java.util.Arrays; import java.util.List; +import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; @@ -49,7 +51,7 @@ class ContentProvider implements ITreeContentProvider, ISearchResultListener { public Object[] getElements(Object inputElement) { if (searchResult == inputElement) { List<SearchResult> items = searchResult.getItems(); - return items.toArray(new Object[items.size()]); + return convertToContent(items); } return new Object[0]; } @@ -81,7 +83,7 @@ class ContentProvider implements ITreeContentProvider, ISearchResultListener { if (!control.isDisposed() && viewer.getInput() == event.getSearchResult()) { switch (event.getKind()) { case ADDED: - viewer.add(searchResult, event.getItems()); + viewer.add(searchResult, convertToContent(Arrays.asList(event.getItems()))); break; case CLEARED: viewer.refresh(); @@ -89,7 +91,21 @@ class ContentProvider implements ITreeContentProvider, ISearchResultListener { } } } + }); } } + + private Object[] convertToContent(List<SearchResult> searchResults) { + Object[] converted = new Object[searchResults.size()]; + for (int x = 0; x < searchResults.size(); ++x) { + converted[x] = convertToContent(searchResults.get(x)); + } + return converted; + } + + private Object convertToContent(SearchResult result) { + IResource resource = result.getResource(); + return resource == null ? result : resource; + } } diff --git a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchActionGroup.java b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchActionGroup.java new file mode 100644 index 00000000..82913daf --- /dev/null +++ b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchActionGroup.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2011 Tasktop Technologies. + * 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: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.internal.sandbox.search.ui; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.search.ui.IContextMenuConstants; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IViewPart; +import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.actions.ActionGroup; +import org.eclipse.ui.actions.OpenWithMenu; +import org.eclipse.ui.dialogs.PropertyDialogAction; + +class DesktopSearchActionGroup extends ActionGroup { + + private final IViewPart viewPart; + + private final PropertyDialogAction propertyDialogAction; + + private final OpenFileAction openFileAction; + + DesktopSearchActionGroup(IViewPart viewPart) { + this.viewPart = viewPart; + + propertyDialogAction = new PropertyDialogAction(viewPart.getSite(), viewPart.getSite().getSelectionProvider()); + + openFileAction = new OpenFileAction(viewPart.getViewSite().getPage()); + } + + @Override + public void dispose() { + propertyDialogAction.dispose(); + super.dispose(); + } + + @Override + public void fillContextMenu(IMenuManager menu) { + super.fillContextMenu(menu); + ISelection selection = getContext().getSelection(); + if (!selection.isEmpty() && selection instanceof IStructuredSelection) { + addOpenWithMenu(menu, (IStructuredSelection) selection); + if (propertyDialogAction.isEnabled() + && propertyDialogAction.isApplicableForSelection((IStructuredSelection) selection)) { + menu.appendToGroup(IContextMenuConstants.GROUP_PROPERTIES, propertyDialogAction); + } + } + } + + private void addOpenWithMenu(IMenuManager menu, IStructuredSelection selection) { + openFileAction.selectionChanged(selection); + if (openFileAction.isEnabled()) { + menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, openFileAction); + } + if (selection.size() == 1) { + Object firstElement = selection.getFirstElement(); + if (firstElement instanceof IAdaptable) { + IMenuManager menuManager = new MenuManager(Messages.DesktopSearchActionGroup_MenuOpenWith); + + menuManager.add(new OpenWithMenu(viewPart.getViewSite().getPage(), (IAdaptable) firstElement)); + + menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, menuManager); + } + } + } + + @Override + public void fillActionBars(IActionBars actionBars) { + super.fillActionBars(actionBars); + actionBars.setGlobalActionHandler(ActionFactory.PROPERTIES.getId(), propertyDialogAction); + } +} diff --git a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchLabelProvider.java b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchLabelProvider.java new file mode 100644 index 00000000..abe2a79b --- /dev/null +++ b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchLabelProvider.java @@ -0,0 +1,81 @@ +/******************************************************************************* + * Copyright (c) 2011 Tasktop Technologies. + * 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: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.internal.sandbox.search.ui; + +import org.eclipse.jface.preference.JFacePreferences; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.viewers.ColumnViewer; +import org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider; +import org.eclipse.jface.viewers.ViewerColumn; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.IWorkbenchPreferenceConstants; +import org.eclipse.ui.PlatformUI; + +public class DesktopSearchLabelProvider extends DecoratingStyledCellLabelProvider implements IPropertyChangeListener { + + public DesktopSearchLabelProvider(IStyledLabelProvider labelProvider) { + super(labelProvider, PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(), null); + } + + @Override + public void initialize(ColumnViewer viewer, ViewerColumn column) { + registerListeners(); + setOwnerDrawEnabled(coloredLabels()); + super.initialize(viewer, column); + } + + private void registerListeners() { + PlatformUI.getPreferenceStore().addPropertyChangeListener(this); + JFaceResources.getColorRegistry().addListener(this); + } + + private void deregisterListeners() { + JFaceResources.getColorRegistry().removeListener(this); + PlatformUI.getPreferenceStore().removePropertyChangeListener(this); + } + + @Override + public void dispose() { + deregisterListeners(); + super.dispose(); + } + + private boolean coloredLabels() { + return PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS); + } + + public void propertyChange(PropertyChangeEvent event) { + final String property = event.getProperty(); + if (property.equals(JFacePreferences.QUALIFIER_COLOR) || property.equals(JFacePreferences.DECORATIONS_COLOR) + || property.equals(IWorkbenchPreferenceConstants.USE_COLORED_LABELS)) { + if (getViewer() == null || getViewer().getControl().isDisposed()) { + return; + } + Display display = getViewer().getControl().getDisplay(); + display.asyncExec(new Runnable() { + public void run() { + refresh(); + } + }); + } + } + + protected void refresh() { + ColumnViewer viewer = getViewer(); + if (viewer != null && !viewer.getControl().isDisposed()) { + setOwnerDrawEnabled(coloredLabels()); + viewer.refresh(); + } + } +} diff --git a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchResultPage.java b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchResultPage.java index af86a493..3d34ce49 100644 --- a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchResultPage.java +++ b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchResultPage.java @@ -10,8 +10,17 @@ *******************************************************************************/ package org.eclipse.mylyn.internal.sandbox.search.ui; +import org.eclipse.jface.action.GroupMarker; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.search.ui.IContextMenuConstants; import org.eclipse.search.ui.ISearchResult; import org.eclipse.search.ui.ISearchResultListener; import org.eclipse.search.ui.ISearchResultPage; @@ -22,7 +31,8 @@ import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IMemento; -import org.eclipse.ui.model.WorkbenchLabelProvider; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.actions.ActionContext; import org.eclipse.ui.part.Page; /** @@ -42,6 +52,10 @@ public class DesktopSearchResultPage extends Page implements ISearchResultPage { private ISearchResultListener listener; + private MenuManager menu; + + private DesktopSearchActionGroup actionGroup; + public Object getUIState() { return viewer == null ? null : viewer.getSelection(); } @@ -85,6 +99,7 @@ public class DesktopSearchResultPage extends Page implements ISearchResultPage { public void setViewPart(ISearchResultViewPart part) { this.viewPart = part; + actionGroup = new DesktopSearchActionGroup(part); } public ISearchResultViewPart getViewPart() { @@ -105,9 +120,10 @@ public class DesktopSearchResultPage extends Page implements ISearchResultPage { container.setLayout(new FillLayout()); viewer = new TreeViewer(container, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); + viewer.setUseHashlookup(true); viewer.setContentProvider(new ContentProvider()); - viewer.setLabelProvider(WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider()); + viewer.setLabelProvider(new DesktopSearchLabelProvider(new SearchResultLabelProvider())); getSite().setSelectionProvider(viewer); @@ -115,15 +131,80 @@ public class DesktopSearchResultPage extends Page implements ISearchResultPage { control = container; + createMenu(); + + viewer.getControl().setMenu(menu.createContextMenu(viewer.getControl())); + getSite().registerContextMenu(getViewPart().getViewSite().getId(), menu, viewer); + + viewer.addOpenListener(new IOpenListener() { + + public void open(OpenEvent event) { + ISelection selection = event.getSelection(); + if (selection instanceof IStructuredSelection) { + IStructuredSelection structuredSelection = (IStructuredSelection) selection; + OpenFileAction openFileAction = new OpenFileAction(getSite().getPage()); + openFileAction.selectionChanged(structuredSelection); + if (openFileAction.isEnabled()) { + openFileAction.run(); + } + } + } + }); + getViewPart().updateLabel(); } + private void createMenu() { + menu = new MenuManager("#PopUp"); //$NON-NLS-1$ + menu.setRemoveAllWhenShown(true); + menu.setParent(getSite().getActionBars().getMenuManager()); + menu.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager manager) { + fillContextMenu(manager); + } + }); + } + + protected void fillContextMenu(IMenuManager menu) { + createContextMenuGroups(menu); + + actionGroup.setContext(new ActionContext(getSite().getSelectionProvider().getSelection())); + actionGroup.fillContextMenu(menu); + + getViewPart().fillContextMenu(menu); + } + + private 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)); + } + @Override public Control getControl() { return control; } @Override + public void dispose() { + if (actionGroup != null) { + actionGroup.dispose(); + actionGroup = null; + } + super.dispose(); + } + + @Override public void setFocus() { getControl().setFocus(); } diff --git a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchWorkbenchAdapter.java b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchWorkbenchAdapter.java index 692489f7..2e3f59d6 100644 --- a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchWorkbenchAdapter.java +++ b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/DesktopSearchWorkbenchAdapter.java @@ -10,8 +10,14 @@ *******************************************************************************/ package org.eclipse.mylyn.internal.sandbox.search.ui; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.content.IContentDescription; +import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.mylyn.sandbox.search.ui.SearchResult; +import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.IWorkbenchAdapter; @@ -27,9 +33,24 @@ public class DesktopSearchWorkbenchAdapter implements IWorkbenchAdapter { if (o instanceof SearchResult) { SearchResult item = (SearchResult) o; - ImageDescriptor image = PlatformUI.getWorkbench() - .getEditorRegistry() - .getImageDescriptor(item.getFile().getName(), null); + IResource resource = item.getResource(); + + final IEditorRegistry editorRegistry = PlatformUI.getWorkbench().getEditorRegistry(); + + IContentType contentType = null; + if (resource instanceof IFile) { + IFile file = (IFile) resource; + try { + final IContentDescription contentDescription = file.getContentDescription(); + if (contentDescription != null) { + contentType = contentDescription.getContentType(); + } + } catch (CoreException e) { + // ignore + } + } + + ImageDescriptor image = editorRegistry.getImageDescriptor(item.getFile().getName(), contentType); if (image == null) { image = PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_FILE); } diff --git a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/Messages.java b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/Messages.java index a1cd1443..be296d3d 100644 --- a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/Messages.java +++ b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/Messages.java @@ -17,6 +17,8 @@ class Messages extends NLS { public static String CompositeSearchProvider_SearchingTask; + public static String DesktopSearchActionGroup_MenuOpenWith; + public static String DesktopSearchPage_CaseSensitive; public static String DesktopSearchPage_FilenamePatterns; @@ -41,8 +43,16 @@ class Messages extends NLS { public static String DesktopSearchResultPage_EmptyLabel; + public static String OpenFileAction_CannotOpenFile; + + public static String OpenFileAction_OpenFileErrorMessage; + + public static String OpenFileAction_OpenFileErrorTitle; + public static String SearchProviders_NoSearchProvidersAvailable; + public static String SearchResultLabelProvider_QualifierFormat; + static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, Messages.class); diff --git a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/OpenFileAction.java b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/OpenFileAction.java new file mode 100644 index 00000000..c810d49b --- /dev/null +++ b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/OpenFileAction.java @@ -0,0 +1,82 @@ +/******************************************************************************* + * Copyright (c) 2011 Tasktop Technologies. + * 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: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.internal.sandbox.search.ui; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.filesystem.EFS; +import org.eclipse.core.filesystem.IFileInfo; +import org.eclipse.core.filesystem.IFileStore; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.mylyn.sandbox.search.ui.SearchResult; +import org.eclipse.osgi.util.NLS; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.ide.IDE; + +class OpenFileAction extends org.eclipse.ui.actions.OpenFileAction { + + private final IWorkbenchPage page; + + public OpenFileAction(IWorkbenchPage page) { + super(page); + this.page = page; + } + + @Override + protected boolean updateSelection(IStructuredSelection selection) { + return !selection.isEmpty(); + } + + @Override + public void run() { + super.run(); + + List<SearchResult> unopenable = new ArrayList<SearchResult>(); + + List selectedNonResources = getSelectedNonResources(); + for (Object object : selectedNonResources) { + if (object instanceof SearchResult) { + SearchResult result = (SearchResult) object; + + IFileStore store = EFS.getLocalFileSystem().getStore(new Path(result.getFile().getParent())); + final IFileStore fileStore = store.getChild(result.getFile().getName()); + IFileInfo info = fileStore.fetchInfo(); + if (!info.isDirectory() && info.exists()) { + try { + IDE.openEditorOnFileStore(page, fileStore); + } catch (PartInitException e) { + String message = NLS.bind(Messages.OpenFileAction_CannotOpenFile, new String[] { + result.getFile().getName(), e.getMessage() }); + SearchPlugin.getDefault() + .getLog() + .log(new Status(IStatus.ERROR, SearchPlugin.BUNDLE_ID, message, e)); + MessageDialog.openError(page.getWorkbenchWindow().getShell(), + Messages.OpenFileAction_OpenFileErrorTitle, message); + } + } else { + unopenable.add(result); + } + } + } + if (!unopenable.isEmpty()) { + MessageDialog.openError(page.getWorkbenchWindow().getShell(), Messages.OpenFileAction_OpenFileErrorTitle, + NLS.bind(Messages.OpenFileAction_OpenFileErrorMessage, unopenable.size())); + } + } + +} diff --git a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/SearchResultLabelProvider.java b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/SearchResultLabelProvider.java new file mode 100644 index 00000000..3337f04e --- /dev/null +++ b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/SearchResultLabelProvider.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2011 Tasktop Technologies. + * 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: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.internal.sandbox.search.ui; + +import org.eclipse.core.resources.IResource; +import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.StyledCellLabelProvider; +import org.eclipse.jface.viewers.StyledString; +import org.eclipse.mylyn.sandbox.search.ui.SearchResult; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.graphics.Image; +import org.eclipse.ui.model.WorkbenchLabelProvider; + +public class SearchResultLabelProvider extends LabelProvider implements IStyledLabelProvider { + + private WorkbenchLabelProvider labelProvider = new WorkbenchLabelProvider(); + + @Override + public Image getImage(Object element) { + return labelProvider.getImage(element); + } + + @Override + public String getText(Object element) { + return getStyledText(element).toString(); + } + + @Override + public void dispose() { + labelProvider.dispose(); + labelProvider = null; + super.dispose(); + } + + public StyledString getStyledText(Object element) { + String name = null; + String qualifier = null; + if (element instanceof SearchResult) { + SearchResult result = (SearchResult) element; + name = result.getFile().getName(); + IResource resource = result.getResource(); + if (resource != null) { + element = resource; + } + qualifier = result.getFile().getParentFile().getPath(); + } + if (element instanceof IResource) { + IResource resource = (IResource) element; + name = resource.getName(); + qualifier = resource.getParent().getFullPath().toString(); + } + if (name != null) { + StyledString string = new StyledString(name); + String decorated = NLS.bind(Messages.SearchResultLabelProvider_QualifierFormat, + new String[] { string.toString(), qualifier }); + + StyledCellLabelProvider.styleDecoratedString(decorated, StyledString.QUALIFIER_STYLER, string); + return string; + } + return new StyledString(labelProvider.getText(element)); + } + +} diff --git a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/messages.properties b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/messages.properties index 423fa3bd..c6ce90f6 100644 --- a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/messages.properties +++ b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/internal/sandbox/search/ui/messages.properties @@ -9,6 +9,7 @@ # Tasktop Technologies - initial API and implementation ############################################################################### CompositeSearchProvider_SearchingTask=Searching for files matching "{0}" +DesktopSearchActionGroup_MenuOpenWith=Open With DesktopSearchPage_FilenamePatterns=File name patterns: DesktopSearchPage_SearchFailedMessage=Cannot perform search: {0} DesktopSearchPage_SearchFailedTitle=Search Failed @@ -21,4 +22,8 @@ DesktopSearchQuery_NFilesMatching={1} files matching "{0}" DesktopSearchQuery_NoFilesMatching=No files matching "{0}" DesktopSearchQuery_OneFileMatches=1 file matches "{0}" DesktopSearchResultPage_EmptyLabel= +OpenFileAction_CannotOpenFile=Cannot open file {0}: {1} +OpenFileAction_OpenFileErrorMessage={0} files could not be opened +OpenFileAction_OpenFileErrorTitle=Cannot Open Files SearchProviders_NoSearchProvidersAvailable=Cannot perform search: no search providers available +SearchResultLabelProvider_QualifierFormat={0} - {1} diff --git a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/sandbox/search/ui/SearchResult.java b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/sandbox/search/ui/SearchResult.java index 759f455e..59b0e584 100644 --- a/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/sandbox/search/ui/SearchResult.java +++ b/org.eclipse.mylyn.sandbox.search.ui/src/org/eclipse/mylyn/sandbox/search/ui/SearchResult.java @@ -43,9 +43,9 @@ public class SearchResult extends PlatformObject { IWorkspace workspace = ResourcesPlugin.getWorkspace(); if (file.isFile()) { - resource = workspace.getRoot().getFileForLocation(new Path(file.getName())); + resource = workspace.getRoot().getFileForLocation(new Path(file.getAbsolutePath())); } else if (file.isDirectory()) { - resource = workspace.getRoot().getContainerForLocation(new Path(file.getName())); + resource = workspace.getRoot().getContainerForLocation(new Path(file.getAbsolutePath())); } return resource; |