blob: e25ee800f074fa8a0cdf89e17059562fa754b038 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 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.examples.readmetool;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.part.PluginTransfer;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
/**
* Content outline page for the readme editor.
*/
public class ReadmeContentOutlinePage extends ContentOutlinePage {
protected IFile input;
class OutlineAction extends Action {
private Shell shell;
public OutlineAction(String label) {
super(label);
getTreeViewer().addSelectionChangedListener(
new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
setEnabled(!event.getSelection().isEmpty());
}
});
}
public void setShell(Shell shell) {
this.shell = shell;
}
public void run() {
MessageDialog.openInformation(shell, MessageUtil
.getString("Readme_Outline"), //$NON-NLS-1$
MessageUtil.getString("ReadmeOutlineActionExecuted")); //$NON-NLS-1$
}
}
/**
* Creates a new ReadmeContentOutlinePage.
*/
public ReadmeContentOutlinePage(IFile input) {
super();
this.input = input;
}
/**
* Creates the control and registers the popup menu for this page
* Menu id "org.eclipse.ui.examples.readmetool.outline"
*/
public void createControl(Composite parent) {
super.createControl(parent);
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
IReadmeConstants.CONTENT_OUTLINE_PAGE_CONTEXT);
TreeViewer viewer = getTreeViewer();
viewer.setContentProvider(new WorkbenchContentProvider());
viewer.setLabelProvider(new WorkbenchLabelProvider());
viewer.setInput(getContentOutline(input));
initDragAndDrop();
// Configure the context menu.
MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS
+ "-end")); //$NON-NLS-1$
Menu menu = menuMgr.createContextMenu(viewer.getTree());
viewer.getTree().setMenu(menu);
// Be sure to register it so that other plug-ins can add actions.
getSite().registerContextMenu(
"org.eclipse.ui.examples.readmetool.outline", menuMgr, viewer); //$NON-NLS-1$
getSite().getActionBars().setGlobalActionHandler(
IReadmeConstants.RETARGET2,
new OutlineAction(MessageUtil.getString("Outline_Action2"))); //$NON-NLS-1$
OutlineAction action = new OutlineAction(MessageUtil
.getString("Outline_Action3")); //$NON-NLS-1$
action.setToolTipText(MessageUtil.getString("Readme_Outline_Action3")); //$NON-NLS-1$
getSite().getActionBars().setGlobalActionHandler(
IReadmeConstants.LABELRETARGET3, action);
action = new OutlineAction(MessageUtil.getString("Outline_Action4")); //$NON-NLS-1$
getSite().getActionBars().setGlobalActionHandler(
IReadmeConstants.ACTION_SET_RETARGET4, action);
action = new OutlineAction(MessageUtil.getString("Outline_Action5")); //$NON-NLS-1$
action.setToolTipText(MessageUtil.getString("Readme_Outline_Action5")); //$NON-NLS-1$
getSite().getActionBars().setGlobalActionHandler(
IReadmeConstants.ACTION_SET_LABELRETARGET5, action);
}
/**
* Gets the content outline for a given input element.
* Returns the outline (a list of MarkElements), or null
* if the outline could not be generated.
*/
private IAdaptable getContentOutline(IAdaptable input) {
return ReadmeModelFactory.getInstance().getContentOutline(input);
}
/**
* Initializes drag and drop for this content outline page.
*/
private void initDragAndDrop() {
int ops = DND.DROP_COPY | DND.DROP_MOVE;
Transfer[] transfers = new Transfer[] { TextTransfer.getInstance(),
PluginTransfer.getInstance() };
getTreeViewer().addDragSupport(ops, transfers,
new ReadmeContentOutlineDragListener(this));
}
/**
* Forces the page to update its contents.
*
* @see ReadmeEditor#doSave(IProgressMonitor)
*/
public void update() {
getControl().setRedraw(false);
getTreeViewer().setInput(getContentOutline(input));
getTreeViewer().expandAll();
getControl().setRedraw(true);
}
}