001: /*******************************************************************************
002: * Copyright (c) 2000, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.ui.views.bookmarkexplorer;
011:
012: import org.eclipse.core.resources.IMarker;
013: import org.eclipse.core.runtime.IPath;
014: import org.eclipse.jface.resource.ImageDescriptor;
015: import org.eclipse.jface.resource.JFaceResources;
016: import org.eclipse.jface.viewers.ITableLabelProvider;
017: import org.eclipse.jface.viewers.LabelProvider;
018: import org.eclipse.osgi.util.NLS;
019: import org.eclipse.swt.graphics.Image;
020: import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
021: import org.eclipse.ui.internal.views.bookmarkexplorer.BookmarkMessages;
022:
023: /**
024: * Provides labels for the bookmark navigator table
025: */
026: class BookmarkLabelProvider extends LabelProvider implements
027: ITableLabelProvider {
028:
029: private Image image;
030: private ImageDescriptor desc;
031:
032: final static int COLUMN_ICON = 0;
033:
034: final static int COLUMN_DESCRIPTION = 1;
035:
036: final static int COLUMN_RESOURCE = 2;
037:
038: final static int COLUMN_FOLDER = 3;
039:
040: final static int COLUMN_LOCATION = 4;
041:
042: public BookmarkLabelProvider(BookmarkNavigator view) {
043: desc = IDEWorkbenchPlugin
044: .getIDEImageDescriptor("obj16/bkmrk_tsk.gif"); //$NON-NLS-1$
045: image = JFaceResources.getResources().createImageWithDefault(
046: desc);
047: }
048:
049: /* (non-Javadoc)
050: * Method declared on LabelProvider.
051: */
052: public void dispose() {
053: if (image != null) {
054: JFaceResources.getResources().destroyImage(desc);
055: image = null;
056: }
057: }
058:
059: /* (non-Javadoc)
060: * Method declared on LabelProvider.
061: */
062: public Image getImage(Object element) {
063: return image;
064: }
065:
066: public String getColumnText(Object element, int columnIndex) {
067: if (!(element instanceof IMarker)) {
068: return ""; //$NON-NLS-1$
069: }
070: IMarker marker = (IMarker) element;
071:
072: switch (columnIndex) {
073: case COLUMN_DESCRIPTION:
074: return marker.getAttribute(IMarker.MESSAGE, ""); //$NON-NLS-1$
075: case COLUMN_RESOURCE:
076: return marker.getResource().getName();
077: case COLUMN_FOLDER:
078: return getContainerName(marker);
079: case COLUMN_LOCATION: {
080: int line = marker.getAttribute(IMarker.LINE_NUMBER, -1);
081: if (line == -1) {
082: return ""; //$NON-NLS-1$
083: }
084: return NLS.bind(BookmarkMessages.LineIndicator_text, String
085: .valueOf(line));
086: }
087: }
088: return ""; //$NON-NLS-1$
089: }
090:
091: public Image getColumnImage(Object element, int index) {
092: if (index == COLUMN_ICON) {
093: return image;
094: }
095: return null;
096: }
097:
098: /**
099: * Returns the container name if it is defined, or empty string if not.
100: */
101: public static String getContainerName(IMarker marker) {
102: IPath path = marker.getResource().getFullPath();
103: int n = path.segmentCount() - 1;
104: // n is the number of segments in container, not path
105: if (n <= 0) {
106: return ""; //$NON-NLS-1$
107: }
108: int len = 0;
109: for (int i = 0; i < n; ++i) {
110: len += path.segment(i).length();
111: }
112: // account for /'s
113: if (n > 1) {
114: len += n - 1;
115: }
116: StringBuffer sb = new StringBuffer(len);
117: for (int i = 0; i < n; ++i) {
118: if (i != 0) {
119: sb.append('/');
120: }
121: sb.append(path.segment(i));
122: }
123: return sb.toString();
124: }
125: }
|