diff options
Diffstat (limited to 'libjava/javax/swing/ScrollPaneLayout.java')
-rw-r--r-- | libjava/javax/swing/ScrollPaneLayout.java | 622 |
1 files changed, 367 insertions, 255 deletions
diff --git a/libjava/javax/swing/ScrollPaneLayout.java b/libjava/javax/swing/ScrollPaneLayout.java index d6cc479..c857358 100644 --- a/libjava/javax/swing/ScrollPaneLayout.java +++ b/libjava/javax/swing/ScrollPaneLayout.java @@ -41,9 +41,11 @@ package javax.swing; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; +import java.awt.Insets; import java.awt.LayoutManager; import java.awt.Rectangle; import java.io.Serializable; +import javax.swing.border.Border; /** * ScrollPaneLayout @@ -55,258 +57,368 @@ public class ScrollPaneLayout { static final long serialVersionUID = -4480022884523193743L; - //------------------------------------------------------------- - // Classes ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * UIResource - */ - public static class UIResource extends ScrollPaneLayout - implements javax.swing.plaf.UIResource { - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor UIResource - */ - public UIResource() { - // TODO - } // UIResource() - - - } // UIResource - - - //------------------------------------------------------------- - // Variables -------------------------------------------------- - //------------------------------------------------------------- - - /** - * viewport - */ - protected JViewport viewport; - - /** - * vsb - */ - protected JScrollBar vsb; - - /** - * hsb - */ - protected JScrollBar hsb; - - /** - * rowHead - */ - protected JViewport rowHead; - - /** - * colHead - */ - protected JViewport colHead; - - /** - * lowerLeft - */ - protected Component lowerLeft; - - /** - * lowerRight - */ - protected Component lowerRight; - - /** - * upperLeft - */ - protected Component upperLeft; - - /** - * upperRight - */ - protected Component upperRight; - - /** - * vsbPolicy - */ - protected int vsbPolicy; - - /** - * hsbPolicy - */ - protected int hsbPolicy; - - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor ScrollPaneLayout - */ - public ScrollPaneLayout() { - // TODO - } // ScrollPaneLayout() - - - //------------------------------------------------------------- - // Methods ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * syncWithScrollPane - * @param scrollPane TODO - */ - public void syncWithScrollPane(JScrollPane scrollPane) { - // TODO - } // syncWithScrollPane() - - /** - * addSingletonComponent - * @param oldComponent TODO - * @param newComponent TODO - * @returns Component - */ - protected Component addSingletonComponent(Component oldComponent, - Component newComponent) { - return null; // TODO - } // addSingletonComponent() - - /** - * addLayoutComponent - * @param string TODO - * @param component TODO - */ - public void addLayoutComponent(String string, Component component) { - // TODO - } // addLayoutComponent() - - /** - * removeLayoutComponent - * @param component TODO - */ - public void removeLayoutComponent(Component component) { - // TODO - } // removeLayoutComponent() - - /** - * getVerticalScrollBarPolicy - * @returns int - */ - public int getVerticalScrollBarPolicy() { - return 0; // TODO - } // getVerticalScrollBarPolicy() - - /** - * setVerticalScrollBarPolicy - * @param policy TODO - */ - public void setVerticalScrollBarPolicy(int policy) { - // TODO - } // setVerticalScrollBarPolicy() - - /** - * getHorizontalScrollBarPolicy - * @returns int - */ - public int getHorizontalScrollBarPolicy() { - return 0; // TODO - } // getHorizontalScrollBarPolicy() - - /** - * setHorizontalScrollBarPolicy - * @param policy TODO - */ - public void setHorizontalScrollBarPolicy(int policy) { - // TODO - } // setHorizontalScrollBarPolicy() - - /** - * getViewport - * @returns JViewport - */ - public JViewport getViewport() { - return null; // TODO - } // getViewport() - - /** - * getHorizontalScrollBar - * @returns JScrollBar - */ - public JScrollBar getHorizontalScrollBar() { - return null; // TODO - } // getHorizontalScrollBar() - - /** - * getVerticalScrollBar - * @returns JScrollBar - */ - public JScrollBar getVerticalScrollBar() { - return null; // TODO - } // getVerticalScrollBar() - - /** - * getRowHeader - * @returns JViewport - */ - public JViewport getRowHeader() { - return null; // TODO - } // getRowHeader() - - /** - * getColumnHeader - * @returns JViewport - */ - public JViewport getColumnHeader() { - return null; // TODO - } // getColumnHeader() - - /** - * getCorner - * @param key TODO - * @returns Component - */ - public Component getCorner(String key) { - return null; // TODO - } // getCorner() - - /** - * preferredLayoutSize - * @param parent TODO - * @returns Dimension - */ - public Dimension preferredLayoutSize(Container parent) { - return null; // TODO - } // preferredLayoutSize() - - /** - * minimumLayoutSize - * @param parent TODO - * @returns Dimension - */ - public Dimension minimumLayoutSize(Container parent) { - return null; // TODO - } // minimumLayoutSize() - - /** - * layoutContainer - * @param parent TODO - */ - public void layoutContainer(Container parent) { - // TODO - } // layoutContainer() - - /** - * getViewportBorderBounds - * @param value0 TODO - * @returns Rectangle - */ - public Rectangle getViewportBorderBounds(JScrollPane scrollPane) { - return null; // TODO - } // getViewportBorderBounds() - - -} // ScrollPaneLayout + public static class UIResource extends ScrollPaneLayout + implements javax.swing.plaf.UIResource { + public UIResource() { + } + } + + JViewport viewport; + JScrollBar verticalScrollBar; + JScrollBar horizontalScrollBar; + JViewport rowHeader; + JViewport columnHeader; + Component lowerLeft; + Component lowerRight; + Component upperLeft; + Component upperRight; + int verticalScrollBarPolicy; + int horizontalScrollBarPolicy; + + public ScrollPaneLayout() { + + } + + public void syncWithScrollPane(JScrollPane scrollPane) { + viewport = scrollPane.getViewport(); + verticalScrollBar = scrollPane.getVerticalScrollBar(); + horizontalScrollBar = scrollPane.getHorizontalScrollBar(); + verticalScrollBarPolicy = scrollPane.getVerticalScrollBarPolicy(); + horizontalScrollBarPolicy = scrollPane.getHorizontalScrollBarPolicy(); + lowerLeft = scrollPane.getCorner(LOWER_LEFT_CORNER); + lowerRight = scrollPane.getCorner(LOWER_RIGHT_CORNER); + upperLeft = scrollPane.getCorner(UPPER_LEFT_CORNER); + upperRight = scrollPane.getCorner(UPPER_RIGHT_CORNER); + } + + protected Component addSingletonComponent(Component oldComponent, + Component newComponent) { + return null; + } + + public void addLayoutComponent(String key, Component component) + { + if (key == VIEWPORT) + viewport = (JViewport) component; + else if (key == VERTICAL_SCROLLBAR) + verticalScrollBar = (JScrollBar) component; + else if (key == HORIZONTAL_SCROLLBAR) + horizontalScrollBar = (JScrollBar) component; + else if (key == ROW_HEADER) + rowHeader = (JViewport) component; + else if (key == COLUMN_HEADER) + columnHeader = (JViewport) component; + else if (key == LOWER_RIGHT_CORNER) + lowerRight = component; + else if (key == UPPER_RIGHT_CORNER) + upperRight = component; + else if (key == LOWER_LEFT_CORNER) + lowerLeft = component; + else if (key == UPPER_LEFT_CORNER) + upperLeft = component; + } + + public void removeLayoutComponent(Component component) { + if (component == viewport) + viewport = null; + else if (component == verticalScrollBar) + verticalScrollBar = null; + else if (component == horizontalScrollBar) + horizontalScrollBar = null; + else if (component == rowHeader) + rowHeader = null; + else if (component == columnHeader) + columnHeader = null; + else if (component == lowerRight) + lowerRight = null; + else if (component == upperRight) + upperRight = null; + else if (component == lowerLeft) + lowerLeft = null; + else if (component == upperLeft) + upperLeft = null; + } + + public int getVerticalScrollBarPolicy() { + return verticalScrollBarPolicy; + } + + public void setVerticalScrollBarPolicy(int policy) { + verticalScrollBarPolicy = policy; + } + + public int getHorizontalScrollBarPolicy() { + return horizontalScrollBarPolicy; + } + + public void setHorizontalScrollBarPolicy(int policy) { + horizontalScrollBarPolicy = policy; + } + + public JViewport getViewport() { + return viewport; + } + + public JScrollBar getHorizontalScrollBar() { + return horizontalScrollBar; + } + + public JScrollBar getVerticalScrollBar() { + return verticalScrollBar; + } + + public JViewport getRowHeader() { + return rowHeader; + } + + public JViewport getColumnHeader() { + return columnHeader; + } + + public Component getCorner(String key) { + if (key == LOWER_RIGHT_CORNER) + return lowerRight; + else if (key == UPPER_RIGHT_CORNER) + return upperRight; + else if (key == LOWER_LEFT_CORNER) + return lowerLeft; + else if (key == UPPER_LEFT_CORNER) + return upperLeft; + return null; + } + + public Dimension preferredLayoutSize(Container parent) + { + if (parent instanceof JScrollPane) + { + JScrollPane sc = (JScrollPane) parent; + synchronized (sc.getTreeLock ()) + { + Dimension insetsSize = new Dimension(0,0); + Dimension viewportSize = new Dimension(0,0); + Dimension viewportInsetsSize = new Dimension(0,0); + Dimension columnHeaderSize = new Dimension(0,0); + Dimension rowHeaderSize = new Dimension(0,0); + Dimension verticalScrollBarSize = new Dimension(0,0); + Dimension horizontalScrollBarSize = new Dimension(0,0); + + Insets insets = sc.getInsets(); + Border viewportBorder = sc.getViewportBorder(); + Insets viewportInsets = null; + + if (viewportBorder != null) + viewportInsets = viewportBorder.getBorderInsets(parent); + + if (insets != null) + insetsSize.setSize(insets.left + insets.right, + insets.top + insets.bottom); + + if (viewport != null) + viewportSize.setSize(viewport.getPreferredSize()); + + if (columnHeader != null) + columnHeaderSize.setSize(columnHeader.getPreferredSize()); + + if (rowHeader != null) + rowHeaderSize.setSize(rowHeader.getPreferredSize()); + + if (verticalScrollBar != null) + verticalScrollBarSize.setSize(verticalScrollBar.getPreferredSize()); + + if (horizontalScrollBar != null) + horizontalScrollBarSize.setSize(horizontalScrollBar.getPreferredSize()); + + return new Dimension(insetsSize.width + + viewportSize.width + + viewportInsetsSize.width + + rowHeaderSize.width + + verticalScrollBarSize.width, + insetsSize.height + + viewportSize.height + + viewportInsetsSize.height + + columnHeaderSize.height + + horizontalScrollBarSize.height); + } + } + else + { + return new Dimension(0,0); + } + } + + public Dimension minimumLayoutSize(Container parent) + { + if (parent instanceof JScrollPane) + { + JScrollPane sc = (JScrollPane) parent; + synchronized (sc.getTreeLock ()) + { + Dimension insetsSize = new Dimension(0,0); + Dimension viewportSize = new Dimension(0,0); + Dimension viewportInsetsSize = new Dimension(0,0); + Dimension columnHeaderSize = new Dimension(0,0); + Dimension rowHeaderSize = new Dimension(0,0); + Dimension verticalScrollBarSize = new Dimension(0,0); + Dimension horizontalScrollBarSize = new Dimension(0,0); + + Insets insets = sc.getInsets(); + Border viewportBorder = sc.getViewportBorder(); + Insets viewportInsets = null; + + if (viewportBorder != null) + viewportInsets = viewportBorder.getBorderInsets(parent); + + if (insets != null) + insetsSize.setSize(insets.left + insets.right, + insets.top + insets.bottom); + + if (viewport != null) + viewportSize.setSize(viewport.getMinimumSize()); + + if (columnHeader != null) + columnHeaderSize.setSize(columnHeader.getMinimumSize()); + + if (rowHeader != null) + rowHeaderSize.setSize(rowHeader.getMinimumSize()); + + if (verticalScrollBar != null + && verticalScrollBarPolicy != VERTICAL_SCROLLBAR_NEVER) + verticalScrollBarSize.setSize(verticalScrollBar.getMinimumSize()); + + if (horizontalScrollBar != null + && horizontalScrollBarPolicy != HORIZONTAL_SCROLLBAR_NEVER) + horizontalScrollBarSize.setSize(horizontalScrollBar.getMinimumSize()); + + return new Dimension(insetsSize.width + + viewportSize.width + + viewportInsetsSize.width + + rowHeaderSize.width + + verticalScrollBarSize.width, + insetsSize.height + + viewportSize.height + + viewportInsetsSize.height + + columnHeaderSize.height + + horizontalScrollBarSize.height); + } + } + else + { + return new Dimension(0,0); + } + } + + /** + * + * +----+--------------------+----+ y1 + * | c1 | column header | c2 | + * +----+--------------------+----+ y2 + * | r | | v | + * | o | | | + * | w | | s | + * | | | r | + * | h | | o | + * | e | viewport | l | + * | a | | l | + * | d | | b | + * | e | | a | + * | r | | r | + * +----+--------------------+----+ y3 + * | c3 | h scrollbar | c4 | + * +----+--------------------+----+ y4 + * x1 x2 x3 x4 + * + */ + + public void layoutContainer(Container parent) { + if (parent instanceof JScrollPane) + { + JScrollPane sc = (JScrollPane) parent; + synchronized (sc.getTreeLock ()) + { + Rectangle scrollPaneBounds = sc.getBounds(); + Dimension viewportSize = new Dimension(0,0); + Dimension viewSize = new Dimension(0,0); + JViewport viewport = sc.getViewport(); + + int x1 = 0, x2 = 0, x3 = 0, x4 = 0; + int y1 = 0, y2 = 0, y3 = 0, y4 = 0; + + x1 = scrollPaneBounds.x; + y1 = scrollPaneBounds.y; + x4 = scrollPaneBounds.x + scrollPaneBounds.width; + y4 = scrollPaneBounds.y + scrollPaneBounds.height; + + if (columnHeader != null) + y2 = columnHeader.getPreferredSize().height; + else + y2 = y1; + + if (rowHeader != null) + x2 = rowHeader.getPreferredSize().width; + else + x2 = x1; + + int vsbPolicy = sc.getVerticalScrollBarPolicy(); + int hsbPolicy = sc.getHorizontalScrollBarPolicy(); + + boolean showVsb = + (verticalScrollBar != null) + && ((vsbPolicy == VERTICAL_SCROLLBAR_ALWAYS) + || (vsbPolicy == VERTICAL_SCROLLBAR_AS_NEEDED + && viewSize.height > viewportSize.height)); + + boolean showHsb = + (horizontalScrollBar != null) + && ((hsbPolicy == HORIZONTAL_SCROLLBAR_ALWAYS) + || (hsbPolicy == HORIZONTAL_SCROLLBAR_AS_NEEDED + && viewSize.width > viewportSize.width)); + + if (showVsb) + x3 = x4 - verticalScrollBar.getPreferredSize().width; + else + x3 = x4; + + if (showHsb) + y3 = y4 - horizontalScrollBar.getPreferredSize().height; + else + y3 = y4; + + // now set the layout + + if (viewport != null) + viewport.setBounds(new Rectangle(x2, y2, x3-x2, y3-y2)); + + if (columnHeader != null) + columnHeader.setBounds(new Rectangle(x2, y1, x3-x2, y2-y1)); + + if (rowHeader != null) + rowHeader.setBounds(new Rectangle(x1, y2, x2-x1, y3-y2)); + + if (showVsb) + verticalScrollBar.setBounds(new Rectangle(x3, y2, x4-x3, y3-y2)); + + if (showHsb) + horizontalScrollBar.setBounds(new Rectangle(x2, y3, x3-x2, y4-y3)); + + if (upperLeft != null) + upperLeft.setBounds(new Rectangle(x1, y1, x2-x1, y2-y1)); + + if (upperRight != null) + upperRight.setBounds(new Rectangle(x3, y1, x4-x3, y2-y1)); + + if (lowerLeft != null) + lowerLeft.setBounds(new Rectangle(x1, y3, x2-x1, y4-y3)); + + if (lowerRight != null) + lowerRight.setBounds(new Rectangle(x3, y3, x4-x3, y4-y3)); + + } + } + } + + public Rectangle getViewportBorderBounds(JScrollPane scrollPane) { + return null; + } + + +} |