/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.ui.swt.util; import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.widgets.*; public class BorderLayout extends Layout{ /*public static final int CENTER = 0; public static final int WEST = 1; public static final int EAST = 2; public static final int NORTH = 3; public static final int SOUTH = 4;*/ public int northHeight = SWT.DEFAULT; public int southHeight = SWT.DEFAULT; public int westWidth = SWT.DEFAULT; public int eastWidth = SWT.DEFAULT; public Control centerComposite = null; public Control northComposite = null; public Control southComposite = null; public Control westComposite = null; public Control eastComposite = null; public BorderLayout() {} private void validate() { if(northComposite != null && northComposite.isDisposed()) northComposite = null; if(westComposite != null && westComposite.isDisposed()) westComposite = null; if(southComposite != null && southComposite.isDisposed()) southComposite = null; if(eastComposite != null && eastComposite.isDisposed()) eastComposite = null; if(centerComposite != null && centerComposite.isDisposed()) centerComposite = null; } protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache){ validate(); int width=0, height=0; int ewHeight = 0; if(northComposite != null){ if(northHeight == SWT.DEFAULT) { height += northComposite.computeSize(wHint, SWT.DEFAULT).y; } else { height += northHeight; } } if(southComposite != null){ if(southHeight == SWT.DEFAULT) { height += southComposite.computeSize(wHint, SWT.DEFAULT).y; } else { height += southHeight; } } if(westComposite != null){ if(westWidth == SWT.DEFAULT) { width += westComposite.computeSize(SWT.DEFAULT, hHint).x; } else { width += westWidth; } ewHeight = westComposite.computeSize(SWT.DEFAULT, hHint).y; } if(eastComposite != null){ if(eastWidth == SWT.DEFAULT) { width += eastComposite.computeSize(SWT.DEFAULT, hHint).x; } else { width += eastWidth; } int eH = eastComposite.computeSize(SWT.DEFAULT, hHint).y; if(eH > ewHeight) ewHeight = eH; } if(centerComposite != null){ width += centerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT).x; int ch = centerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y; if(ewHeight < ch) ewHeight = ch; } height += ewHeight; return new Point (width, height); } protected void layout(Composite composite, boolean flushCache) { int x = composite.getClientArea().x; int y = composite.getClientArea().y; int width = composite.getClientArea().width; int height = composite.getClientArea().height; int remWidth = width; int remHeight = height; int remX = composite.getClientArea().x; int remY = composite.getClientArea().y; if(northComposite != null){ int nH = (northHeight == SWT.DEFAULT) ? northComposite.computeSize(width, SWT.DEFAULT).y : northHeight; northComposite.setBounds(x, y, width, nH); remHeight -= nH; remY += nH; } if(southComposite != null){ int sH = (southHeight == SWT.DEFAULT) ? southComposite.computeSize(width, SWT.DEFAULT).y : southHeight; southComposite.setBounds(x, y + height - sH, width, sH); remHeight -= sH; } if(westComposite != null){ int wW = (westWidth == SWT.DEFAULT) ? westComposite.computeSize(SWT.DEFAULT, height).x : westWidth; westComposite.setBounds(x, remY, wW, remHeight); remWidth -= wW; remX += wW; } if(eastComposite != null){ int eW = (eastWidth == SWT.DEFAULT) ? eastComposite.computeSize(SWT.DEFAULT, height).x : eastWidth; eastComposite.setBounds(x + width - eW, remY, eW, remHeight); remWidth -= eW; } if(centerComposite != null){ centerComposite.setBounds(remX, remY, remWidth, remHeight); } } }