home *** CD-ROM | disk | FTP | other *** search
- // This is a part of the Microsoft Visual J++ library.
- // Copyright (C) 1996 Microsoft Corporation
- // All rights reserved.
-
- //package java.awt;
-
- import java.util.Hashtable;
- import java.awt.LayoutManager;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.Rectangle;
- import java.awt.FontMetrics;
- import java.awt.Insets;
- import java.awt.Label;
-
- //
- // class DialogLayout
- //
- // DialogLayout is a simple layout manager which works with what the Win32
- // API calls "dialog logical units" (DLUs). DLUs are resolution independent
- // coordinates which work well for laying out controls on a dialog box. The
- // mapping from DLUs to pixels is based on the font in use in the dialog box.
- // An x-coordinate DLU is described as 1/4 (.25) of the of the average character
- // width of the font used in the dialog. A y-coordinate DLU is described as
- // 1/8 (.125) of the character height used in the dialog. One tricky issue to
- // note: The average character width is not the average of all characters --
- // rather it is the average of all alpha characters both uppercase and
- // lowercase. That is, it is the extent of the string "a...zA...Z" divided
- // by 52.
- //
- // This class allows you to associate a Rectangle (x, y, width, height) with a
- // Component in a Container. If called upon to layout the container, this
- // layout manager will layout based on the translation of dialog units to
- // pixels.
- //
-
- public class DialogLayout
- implements LayoutManager
- {
- protected Hashtable m_map = new Hashtable();
- protected int m_width;
- protected int m_height;
-
- // DialogLayout methods
-
- public DialogLayout(Container parent, int width, int height)
- {
- Construct(parent, width, height);
- }
-
- public DialogLayout(Container parent, Dimension d)
- {
- Construct(parent, d.width, d.height);
- }
-
- public void setShape(Component comp, int x, int y, int width, int height)
- {
- m_map.put(comp, new Rectangle(x, y, width, height));
- }
-
- public void setShape(Component comp, Rectangle rect)
- {
- m_map.put(comp, new Rectangle(rect.x, rect.y, rect.width, rect.height));
- }
-
- public Rectangle getShape(Component comp)
- {
- Rectangle rect = (Rectangle)m_map.get(comp);
- return new Rectangle(rect.x, rect.y, rect.width, rect.height);
- }
-
- public Dimension getDialogSize()
- {
- return new Dimension(m_width, m_height);
- }
-
- // LayoutManager Methods
-
- public void addLayoutComponent(String name, Component comp) { }
- public void removeLayoutComponent(Component comp) { }
-
- public Dimension preferredLayoutSize(Container parent)
- {
- return new Dimension(m_width, m_height);
- }
-
- public Dimension minimumLayoutSize(Container parent)
- {
- return new Dimension(m_width, m_height);
- }
-
- public void layoutContainer(Container parent)
- {
- int count = parent.countComponents();
- Rectangle rect = new Rectangle();
- int charHeight = getCharHeight(parent);
- int charWidth = getCharWidth(parent);
- Insets insets = parent.insets();
- FontMetrics m = parent.getFontMetrics(parent.getFont());
-
- for (int i = 0; i < count; i++)
- {
- Component c = parent.getComponent(i);
- Rectangle r = (Rectangle)m_map.get(c);
- if (r != null)
- {
- rect.x = r.x;
- rect.y = r.y;
- rect.height = r.height;
- rect.width = r.width;
- mapRectangle(rect, charWidth, charHeight);
- if (c instanceof Label)
- {
- // Adjusts for space at left of Java labels.
- rect.x -= 12;
- rect.width += 12;
- }
-
- rect.x += insets.left;
- rect.y += insets.top;
- c.reshape(rect.x, rect.y, rect.width, rect.height);
- }
- }
- }
-
- // Implementation Helpers
-
- protected void Construct(Container parent, int width, int height)
- {
- Rectangle rect = new Rectangle(0, 0, width, height);
- mapRectangle(rect, getCharWidth(parent), getCharHeight(parent));
- m_width = rect.width;
- m_height = rect.height;
- }
-
- protected int getCharWidth(Container parent)
- {
- FontMetrics m = parent.getFontMetrics(parent.getFont());
- String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
- int width = m.stringWidth(s) / s.length();
-
- if (width <= 0)
- width = 1;
- return width;
- }
-
- protected int getCharHeight(Container parent)
- {
- FontMetrics m = parent.getFontMetrics(parent.getFont());
- int height = m.getHeight();
- return height;
- }
-
- protected void mapRectangle(Rectangle rect, int charWidth, int charHeight)
- {
- rect.x = (rect.x * charWidth) / 4;
- rect.y = (rect.y * charHeight) / 8;
- rect.width = (rect.width * charWidth) / 4;
- rect.height = (rect.height * charHeight) / 8;
- }
- }
-
-