blob: 649010719044bb8f2bbb23ecff00d2e4825966d2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2009 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
******************************************************************************/
package org.eclipse.ui.navigator.resources;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IAggregateWorkingSet;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.navigator.framelist.Frame;
import org.eclipse.ui.internal.navigator.framelist.FrameList;
import org.eclipse.ui.internal.navigator.framelist.TreeFrame;
import org.eclipse.ui.internal.navigator.resources.ResourceToItemsMapper;
import org.eclipse.ui.internal.navigator.resources.plugin.WorkbenchNavigatorMessages;
import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.navigator.INavigatorContentService;
/**
*
* @see CommonNavigator
* @see INavigatorContentService
* @since 3.2
*
*/
public final class ProjectExplorer extends CommonNavigator {
/**
* Provides a constant for the standard instance of the Common Navigator.
*
* @see PlatformUI#getWorkbench()
* @see IWorkbench#getActiveWorkbenchWindow()
* @see IWorkbenchWindow#getActivePage()
*
* @see IWorkbenchPage#findView(String)
* @see IWorkbenchPage#findViewReference(String)
*/
public static final String VIEW_ID = IPageLayout.ID_PROJECT_EXPLORER;
/**
* @since 3.4
*/
public static final int WORKING_SETS = 0;
/**
* @since 3.4
*/
public static final int PROJECTS = 1;
private int rootMode;
/**
* Used only in the case of top level = PROJECTS and only when some
* working sets are selected.
*/
private String workingSetLabel;
public void createPartControl(Composite aParent) {
super.createPartControl(aParent);
if (!false)
getCommonViewer().setMapper(new ResourceToItemsMapper(getCommonViewer()));
}
/**
* The superclass does not deal with the content description, handle it
* here.
*
* @noreference
*/
public void updateTitle() {
super.updateTitle();
Object input = getCommonViewer().getInput();
if (input == null || input instanceof IAggregateWorkingSet) {
setContentDescription(""); //$NON-NLS-1$
return;
}
if (!(input instanceof IResource)) {
if (input instanceof IAdaptable) {
IWorkbenchAdapter wbadapter = (IWorkbenchAdapter) ((IAdaptable) input)
.getAdapter(IWorkbenchAdapter.class);
if (wbadapter != null) {
setContentDescription(wbadapter.getLabel(input));
return;
}
}
setContentDescription(input.toString());
return;
}
IResource res = (IResource) input;
setContentDescription(res.getName());
}
/**
* Returns the tool tip text for the given element.
*
* @param element
* the element
* @return the tooltip
* @noreference
*/
public String getFrameToolTipText(Object element) {
String result;
if (!(element instanceof IResource)) {
if (element instanceof IAggregateWorkingSet) {
result = WorkbenchNavigatorMessages.ProjectExplorerPart_workingSetModel;
} else if (element instanceof IWorkingSet) {
result = ((IWorkingSet) element).getLabel();
} else {
result = super.getFrameToolTipText(element);
}
} else {
IPath path = ((IResource) element).getFullPath();
if (path.isRoot()) {
result = WorkbenchNavigatorMessages.ProjectExplorerPart_workspace;
} else {
result = path.makeRelative().toString();
}
}
if (rootMode == PROJECTS) {
if (workingSetLabel == null)
return result;
if (result.length() == 0)
return NLS.bind(WorkbenchNavigatorMessages.ProjectExplorer_toolTip,
new String[] { workingSetLabel });
return NLS.bind(WorkbenchNavigatorMessages.ProjectExplorer_toolTip2, new String[] {
result, workingSetLabel });
}
// Working set mode. During initialization element and viewer can
// be null.
if (element != null && !(element instanceof IWorkingSet)
&& getCommonViewer() != null) {
FrameList frameList = getCommonViewer().getFrameList();
// Happens during initialization
if (frameList == null)
return result;
int index = frameList.getCurrentIndex();
IWorkingSet ws = null;
while (index >= 0) {
Frame frame = frameList.getFrame(index);
if (frame instanceof TreeFrame) {
Object input = ((TreeFrame) frame).getInput();
if (input instanceof IWorkingSet && !(input instanceof IAggregateWorkingSet)) {
ws = (IWorkingSet) input;
break;
}
}
index--;
}
if (ws != null) {
return NLS.bind(WorkbenchNavigatorMessages.ProjectExplorer_toolTip3,
new String[] { ws.getLabel(), result });
}
return result;
}
return result;
}
/**
* @param mode
* @noreference This method is not intended to be referenced by clients.
* @since 3.4
*/
public void setRootMode(int mode) {
rootMode = mode;
}
/**
* @return the root mode
* @noreference This method is not intended to be referenced by clients.
* @since 3.4
*/
public int getRootMode() {
return rootMode;
}
/**
* @param label
* @noreference This method is not intended to be referenced by clients.
* @since 3.4
*/
public void setWorkingSetLabel(String label) {
workingSetLabel = label;
}
/**
* @return the working set label
* @noreference This method is not intended to be referenced by clients.
* @since 3.4
*/
public String getWorkingSetLabel() {
return workingSetLabel;
}
}