| /******************************************************************************* |
| * 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.draw2d.IFigure; |
| import org.eclipse.draw2d.ScrollBar; |
| import org.eclipse.draw2d.ScrollPane; |
| import org.eclipse.draw2d.ScrollPaneLayout; |
| import org.eclipse.draw2d.Viewport; |
| import org.eclipse.draw2d.geometry.Dimension; |
| import org.eclipse.draw2d.geometry.Insets; |
| import org.eclipse.draw2d.geometry.Rectangle; |
| |
| |
| public class TrayScrollPaneLayout extends ScrollPaneLayout { |
| |
| public TrayScrollPaneLayout() { |
| super(); |
| } |
| |
| @Override |
| public void layout(IFigure parent) { |
| ScrollPane scrollpane = (ScrollPane)parent; |
| Rectangle clientArea = parent.getClientArea(); |
| |
| ScrollBar hBar = scrollpane.getHorizontalScrollBar(), |
| vBar = scrollpane.getVerticalScrollBar(); |
| Viewport viewport = scrollpane.getViewport(); |
| |
| Insets insets = new Insets(); |
| insets.bottom = hBar.getPreferredSize(clientArea.width, clientArea.height).height; |
| insets.right = vBar.getPreferredSize(clientArea.width, clientArea.height).width; |
| |
| int hVis = scrollpane.getHorizontalScrollBarVisibility(), |
| vVis = scrollpane.getVerticalScrollBarVisibility(); |
| |
| Dimension available = clientArea.getSize(), |
| preferred = |
| viewport.getPreferredSize(available.width, available.height).getCopy(); |
| |
| boolean none = available.contains(preferred), |
| both = !none && vVis != NEVER && hVis != NEVER && preferred.contains(available), |
| showV = both || preferred.height > available.height, |
| showH = both || preferred.width > available.width; |
| |
| //Adjust for visibility override flags |
| showV = !(vVis == NEVER) && (showV || vVis == ALWAYS); |
| showH = !(hVis == NEVER) && (showH || hVis == ALWAYS); |
| |
| if (!showV) insets.right = 0; |
| if (!showH) insets.bottom = 0; |
| Rectangle bounds, viewportArea = clientArea; |
| |
| if (showV) { |
| bounds = new Rectangle( |
| viewportArea.right() - insets.right, |
| viewportArea.y, insets.right, viewportArea.height); |
| vBar.setBounds(bounds); |
| } |
| if (showH) { |
| bounds = new Rectangle(viewportArea.x, |
| viewportArea.bottom() - insets.bottom, |
| viewportArea.width, insets.bottom); |
| hBar.setBounds(bounds); |
| } |
| vBar.setVisible(showV); |
| hBar.setVisible(showH); |
| viewport.setBounds(viewportArea); |
| } |
| } |