Mercurial > hg > jslab
view src/samer/core_/util/VLayout.java @ 8:5e3cbbf173aa tip
Reorganise some more
author | samer |
---|---|
date | Fri, 05 Apr 2019 22:41:58 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
/* * VLayout.java * * Copyright (c) 2000, Samer Abdallah, King's College London. * All rights reserved. * * This software is provided AS iS and WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. */ package samer.core.util; import java.awt.*; /** Things are layed out horizontally. Everyone gets to be their preferred size, except for the filler, which is stretched horizontally (but not vertically) to fill the space available. The whole thing is centered vertically. */ public class VLayout implements LayoutManager, java.io.Serializable { private int gap=4; private int filler=1; // index of filler component private int fillerHeight=10; public VLayout( int f, int g) { gap=g; filler=f; } public VLayout( int f) { gap=0; filler=f; } public void setGap(int a) { gap=a; } public int getGap() { return gap; } public void setFiller(int f) { filler=f; } public int getFiller() { return filler; } public void addLayoutComponent(String name, Component comp) {} public void removeLayoutComponent(Component comp) {} public Dimension preferredLayoutSize(Container parent) { Component[] c=parent.getComponents(); Dimension d1=new Dimension(0,0), d2; int n=c.length; for (int i=0; i<n; i++) { d2 = c[i].getPreferredSize(); d1.width += d2.width; d1.height = Math.max(d1.height,d2.height); } if (n>1) d1.width += (n-1)*gap; Insets insets=parent.getInsets(); d1.width += insets.left + insets.right; d1.height += insets.top + insets.bottom; return d1; } public Dimension minimumLayoutSize(Container parent) { Component[] c=parent.getComponents(); Dimension d1=new Dimension(0,0), d2; int n=c.length; for (int i=0; i<n; i++) { d2 = c[i].getMinimumSize(); d1.width += d2.width; d1.height = Math.max(d1.height,d2.height); } if (n>1) d1.width += (n-1)*gap; Insets insets=parent.getInsets(); d1.width += insets.left + insets.right; d1.height += insets.top + insets.bottom; return d1; } public void layoutContainer(Container parent) { Component[] c=parent.getComponents(); Insets insets=parent.getInsets(); int xl, xr, y, havail, h; Dimension p=parent.getSize(), d; havail = p.height - (insets.top+insets.bottom); int n=c.length; // first layout components left of filler xl = insets.left; for (int i=0; i<filler && i<n; i++) { d = c[i].getPreferredSize(); if (d.height>havail) { h=havail; y=insets.bottom; } else { h=d.height; y=(p.height-h)/2; } c[i].setBounds(xl,y,d.width,h); xl += d.width + gap; } // xl is now position of left hand edge of filler // next, layout components right of filler // x is now position of RIGHTHAND edge xr = p.width-insets.right; for (int i=n-1; i>filler && i>=0; i--) { d = c[i].getPreferredSize(); if (d.height>havail) { h=havail; y=insets.bottom; } else { h=d.height; y=(p.height-h)/2; } c[i].setBounds(xr-d.width,y,d.width,h); xr -= d.width + gap; } // xr is now position of right hand edge of filler // now we can position the filler component if (filler>=0 && filler<n) { d = c[filler].getPreferredSize(); if (d.height>havail) { h=havail; y=insets.bottom; } else { h=d.height; y=(p.height-h)/2; } c[filler].setBounds(xl,y,xr-xl,h); } } }