Mercurial > illumos > onarm
annotate usr/src/cmd/cmd-inet/usr.sadm/dhcpmgr/com/sun/dhcpmgr/ui/ProportionalLayout.java @ 4:1a15d5aaf794
synchronized with onnv_86 (6202) in onnv-gate
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Mon, 31 Aug 2009 14:38:03 +0900 |
parents | c9caec207d52 |
children |
rev | line source |
---|---|
0 | 1 /* |
2 * CDDL HEADER START | |
3 * | |
4 * The contents of this file are subject to the terms of the | |
5 * Common Development and Distribution License, Version 1.0 only | |
6 * (the "License"). You may not use this file except in compliance | |
7 * with the License. | |
8 * | |
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
10 * or http://www.opensolaris.org/os/licensing. | |
11 * See the License for the specific language governing permissions | |
12 * and limitations under the License. | |
13 * | |
14 * When distributing Covered Code, include this CDDL HEADER in each | |
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
16 * If applicable, add the following below this CDDL HEADER, with the | |
17 * fields enclosed by brackets "[]" replaced with your own identifying | |
18 * information: Portions Copyright [yyyy] [name of copyright owner] | |
19 * | |
20 * CDDL HEADER END | |
21 */ | |
22 /* | |
4
1a15d5aaf794
synchronized with onnv_86 (6202) in onnv-gate
Koji Uno <koji.uno@sun.com>
parents:
0
diff
changeset
|
23 * ident "%Z%%M% %I% %E% SMI" |
0 | 24 * |
25 * Copyright (c) 1998-1999 by Sun Microsystems, Inc. | |
26 * All rights reserved. | |
27 */ | |
28 package com.sun.dhcpmgr.ui; | |
29 | |
30 import java.awt.*; | |
31 import java.util.Hashtable; | |
32 | |
33 /** | |
34 * This layout manager provides a layout which allocates space either | |
35 * horizontally or vertically to components in proportion to a weight assigned | |
36 * to each component. All components receive the same dimension along the | |
37 * other axis. | |
38 */ | |
39 public class ProportionalLayout implements LayoutManager { | |
40 /** | |
41 * Constant for a horizontal proportional layout. | |
42 */ | |
43 public static final int HORIZONTAL = 0; | |
44 /** | |
45 * Constant for a vertical proportional layout. | |
46 */ | |
47 public static final int VERTICAL = 1; | |
48 private int direction; | |
49 private Hashtable components; | |
50 private int totalWeight = 0; | |
51 | |
52 /** | |
53 * Construct a horizontal version of this layout. | |
54 */ | |
55 public ProportionalLayout() { | |
56 this(HORIZONTAL); | |
57 } | |
58 | |
59 /** | |
60 * Construct a proportional layout in the direction specified. | |
61 * @param direction Must be either HORIZONTAL or VERTICAL | |
62 */ | |
63 public ProportionalLayout(int direction) { | |
64 this.direction = direction; | |
65 components = new Hashtable(); | |
66 } | |
67 | |
68 public void addLayoutComponent(String name, Component component) { | |
69 Integer weight; | |
70 try { | |
71 weight = Integer.decode(name); | |
72 } catch (NumberFormatException e) { | |
73 weight = new Integer(1); | |
74 } | |
75 totalWeight += weight.intValue(); | |
76 components.put(component, weight); | |
77 } | |
78 | |
79 public void removeLayoutComponent(Component component) { | |
80 Integer weight = (Integer)components.get(component); | |
81 totalWeight -= weight.intValue(); | |
82 components.remove(component); | |
83 } | |
84 | |
85 private Dimension computeLayoutSize(Container target, boolean minimum) { | |
86 Dimension dim = new Dimension(0, 0); | |
87 for (int i = 0; i < target.getComponentCount(); ++i) { | |
88 Component c = target.getComponent(i); | |
89 if (c.isVisible()) { | |
90 Dimension d; | |
91 if (minimum) { | |
92 d = c.getMinimumSize(); | |
93 } else { | |
94 d = c.getPreferredSize(); | |
95 } | |
96 if (direction == HORIZONTAL) { | |
97 dim.height = Math.max(dim.height, d.height); | |
98 dim.width += d.width; | |
99 } else { | |
100 dim.height += d.height; | |
101 dim.width = Math.max(dim.width, d.width); | |
102 } | |
103 } | |
104 } | |
105 Insets insets = target.getInsets(); | |
106 dim.width += insets.left + insets.right; | |
107 dim.height += insets.top + insets.bottom; | |
108 return dim; | |
109 } | |
110 | |
111 public Dimension preferredLayoutSize(Container target) { | |
112 return computeLayoutSize(target, false); | |
113 } | |
114 | |
115 public Dimension minimumLayoutSize(Container target) { | |
116 return computeLayoutSize(target, true); | |
117 } | |
118 | |
119 public void layoutContainer(Container target) { | |
120 Insets insets = target.getInsets(); | |
121 Dimension dim = target.getSize(); | |
122 int x = insets.left; | |
123 int y = insets.top; | |
124 int totalHeight = dim.height - insets.bottom; | |
125 int totalWidth = dim.width - insets.right; | |
126 | |
127 for (int i = 0; i < target.getComponentCount(); ++i) { | |
128 Component c = target.getComponent(i); | |
129 if (c.isVisible()) { | |
130 if (direction == HORIZONTAL) { | |
131 float fw = (float)totalWidth | |
132 * (float)((Integer)components.get(c)).intValue() | |
133 / (float)totalWeight; | |
134 c.setBounds(x, y, (int)fw, totalHeight); | |
135 x += (int)fw; | |
136 } else { | |
137 float fh = (float)totalHeight | |
138 * (float)((Integer)components.get(c)).intValue() | |
139 / (float)totalWeight; | |
140 c.setBounds(x, y, totalWidth, (int)fh); | |
141 y += (int)fh; | |
142 } | |
143 } | |
144 } | |
145 } | |
146 } |