| /******************************************************************************* |
| * Copyright (c) 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.bpel.common.ui.tray; |
| |
| import org.eclipse.bpel.common.ui.palette.GraphicalEditorWithPalette; |
| import org.eclipse.draw2d.FigureCanvas; |
| import org.eclipse.draw2d.IFigure; |
| import org.eclipse.draw2d.Viewport; |
| import org.eclipse.draw2d.ViewportLayout; |
| import org.eclipse.draw2d.geometry.Dimension; |
| import org.eclipse.draw2d.geometry.Point; |
| import org.eclipse.draw2d.geometry.Rectangle; |
| import org.eclipse.gef.GraphicalViewer; |
| import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Composite; |
| |
| |
| /** |
| * @author IBM Initial contribution |
| * @date January, 2006 |
| * |
| */ |
| |
| public abstract class GraphicalEditorWithPaletteAndTray extends GraphicalEditorWithPalette { |
| |
| protected TrayComposite trayComposite; |
| protected GraphicalViewer trayViewer; |
| |
| /** |
| * @see org.eclipse.bpel.common.ui.palette.GraphicalEditorWithPalette#dispose() |
| */ |
| @Override |
| public void dispose() { |
| super.dispose(); |
| trayViewer = null; |
| } |
| |
| /** |
| * Return the tray composite. |
| * @return the tray composite. |
| */ |
| public TrayComposite getTrayComposite() { |
| return trayComposite; |
| } |
| |
| /** |
| * Return the tray viewer. |
| * |
| * @return the tray viewer |
| */ |
| |
| public GraphicalViewer getTrayViewer() { |
| return trayViewer; |
| } |
| |
| /** |
| * Creates the palette and graphical viewers. |
| */ |
| @Override |
| public void createPartControl(Composite parent) { |
| trayComposite = new TrayComposite(parent, SWT.NONE); |
| |
| // create editor control |
| Composite editorComposite = trayComposite.getEditorComposite(); |
| super.createPartControl(editorComposite); |
| |
| // create tray control |
| createTrayViewer(trayComposite); |
| trayComposite.setTrayControl(trayViewer.getControl()); |
| } |
| |
| protected void createTrayViewer(Composite parent) { |
| trayViewer = new ScrollingGraphicalViewer(); |
| trayViewer.createControl(parent); |
| final FigureCanvas canvas = (FigureCanvas) trayViewer.getControl(); |
| canvas.setScrollBarVisibility(FigureCanvas.NEVER); |
| |
| // We need to modify the viewport layout so that it adjusts the |
| // size of the viewport contents according to the viewport size. |
| // The contents cannot be bigger than the viewport otherwise it |
| // will break the tray scrolling. |
| canvas.getViewport().setLayoutManager(new ViewportLayout() { |
| |
| @Override |
| public void layout(IFigure figure) { |
| Viewport viewport = (Viewport)figure; |
| IFigure contents = viewport.getContents(); |
| |
| if (contents == null) return; |
| Point p = viewport.getClientArea().getLocation(); |
| |
| p.translate(viewport.getViewLocation().getNegated()); |
| |
| Dimension newSize = viewport.getClientArea().getSize(); |
| |
| contents.setBounds(new Rectangle(p, newSize)); |
| } |
| }); |
| |
| trayViewer.setKeyHandler(new TrayKeyHandler(trayViewer)); |
| initializeTrayViewer(); |
| } |
| |
| /** |
| * @see org.eclipse.gef.ui.parts.GraphicalEditor#setFocus() |
| */ |
| @Override |
| public void setFocus() { |
| getGraphicalViewer().getControl().setFocus(); |
| } |
| |
| protected abstract void initializeTrayViewer(); |
| } |