/************************************************************************************* * Copyright (c) 2004 Actuate 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: * Actuate Corporation - Initial implementation. ************************************************************************************/ package com.isencia.passerelle.workbench.model.editor.ui.views; import java.util.List; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.draw2d.GridData; import org.eclipse.gef.ui.actions.ActionRegistry; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseTrackAdapter; import org.eclipse.swt.events.TreeEvent; import org.eclipse.swt.events.TreeListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.dialogs.FilteredTree; import org.eclipse.ui.dialogs.PatternFilter; import com.isencia.passerelle.editor.common.model.PaletteGroup; import com.isencia.passerelle.editor.common.model.PaletteItemDefinition; import com.isencia.passerelle.workbench.model.editor.ui.palette.DefaultDragSupportBuilder; import com.isencia.passerelle.workbench.model.editor.ui.palette.DragSupportBuilder; import com.isencia.passerelle.workbench.model.editor.ui.palette.PaletteBuilder; /** * This class represents the tree view page of the data view */ public class ActorTreeViewerPage extends ActorPalettePage implements IAdaptable { private ActionRegistry actionRegistry; private FilteredTree tree; private DragSupportBuilder dragSupportBuilder; public ActorTreeViewerPage(ActionRegistry actionRegistry, DragSupportBuilder dragSupportBuilder) { super(); this.actionRegistry = actionRegistry; if (dragSupportBuilder != null) { this.dragSupportBuilder = dragSupportBuilder; } else { this.dragSupportBuilder = new DefaultDragSupportBuilder(); } } public ActionRegistry getActionRegistry() { return actionRegistry; } /** * Creates the tree view * * @param parent * the parent */ protected TreeViewer createTreeViewer(Composite parent) { PatternFilter filter = new PatternFilter(); this.tree = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, filter, true); tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); TreeViewer treeViewer = tree.getViewer(); return treeViewer; } public Control getControl() { return tree; } /** * Initializes the data view page. */ protected void initPage() { createContextMenus(); getTreeViewer().getTree().addTreeListener(new TreeListener() { public void treeExpanded(TreeEvent arg0) { // TODO Auto-generated method stub } public void treeCollapsed(TreeEvent arg0) { // TODO Auto-generated method stub } }); getTreeViewer().getTree().addMouseTrackListener(new MouseTrackAdapter() { public void mouseHover(MouseEvent event) { Widget widget = event.widget; if (widget == getTreeViewer().getTree()) { Point pt = new Point(event.x, event.y); TreeItem item = getTreeViewer().getTree().getItem(pt); getTreeViewer().getTree().setToolTipText(getTooltip(item)); } } }); PaletteBuilder builder = PaletteBuilder.getInstance(); final List<PaletteGroup> grps = builder.getRootPaletteGroups(); for (PaletteGroup grp : grps) { if (grp.isExpanded()) { getTreeViewer().expandToLevel(grp, 1); } for (PaletteGroup childGrp : grp.getChildren()) { if (childGrp.isExpanded()) { getTreeViewer().expandToLevel(childGrp, 1); } } } } private void createContextMenus() { MenuManager menuManager = new ActorTreeMenuProvider(getTreeViewer()); Menu menu = menuManager.createContextMenu(getTreeViewer().getControl()); getTreeViewer().getControl().setMenu(menu); getSite().registerContextMenu("#Pop up", menuManager, //$NON-NLS-1$ getSite().getSelectionProvider());//$NON-NLS-1$ } private String getTooltip(TreeItem item) { if (item != null) { Object object = item.getData(); StringBuffer tooltip = new StringBuffer(); if (object instanceof PaletteItemDefinition) { return ((PaletteItemDefinition) object).getName(); } if (object instanceof PaletteGroup) { return ((PaletteGroup) object).getName(); } return ""; } return ""; //$NON-NLS-1$ } /** * Configures the tree viewer. */ protected void configTreeViewer() { ActorTreeProvider provider = new ActorTreeProvider(); getTreeViewer().setContentProvider(provider); getTreeViewer().setLabelProvider(provider); initRoot(); // add inline renaming support // Adds drag and drop support dragSupportBuilder.addDragSupport(getTreeViewer()); } /** * Initializes the root of the view */ private void initRoot() { PaletteBuilder builder = PaletteBuilder.getInstance(); getTreeViewer().setInput(builder.getRootPaletteGroups().toArray()); } /** * The <code>Page</code> implementation of this <code>IPage</code> method disposes of this page's control (if it has one and it has not already been * disposed). Disposes the visitor of the element */ public void dispose() { super.dispose(); } public void refresh() { getTreeViewer().refresh(); } public Object getAdapter(Class type) { if (type == String.class) { return "Palette"; } return null; } }