home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / jfc.bin / ViewportLayout.java < prev    next >
Text File  |  1998-02-26  |  4KB  |  145 lines

  1. /*
  2.  * @(#)ViewportLayout.java    1.15 98/02/02
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20.  
  21. package com.sun.java.swing;
  22.  
  23. import java.awt.LayoutManager;
  24. import java.awt.Component;
  25. import java.awt.Container;
  26. import java.awt.Rectangle;
  27. import java.awt.Point;
  28. import java.awt.Dimension;
  29. import java.awt.Insets;
  30. import java.io.Serializable;
  31.  
  32. /**
  33.  * The default layout manager for JViewport.  JViewportLayout defines 
  34.  * a policy for layout that should be useful for most applications.
  35.  * The viewport makes its view as the same size as the viewport, 
  36.  * however it will not make the view smaller than its minimum size.
  37.  * As the viewport grows the view is kept bottom justified until 
  38.  * the entire view is visible, subsequently the view is kept top
  39.  * justified.
  40.  * <p>
  41.  * Warning: serialized objects of this class will not be compatible with
  42.  * future swing releases.  The current serialization support is appropriate 
  43.  * for short term storage or RMI between Swing1.0 applications.  It will
  44.  * not be possible to load serialized Swing1.0 objects with future releases
  45.  * of Swing.  The JDK1.2 release of Swing will be the compatibility
  46.  * baseline for the serialized form of Swing objects.
  47.  *
  48.  * @version 1.15 02/02/98
  49.  * @author unknown
  50.  */
  51. public class ViewportLayout implements LayoutManager, Serializable
  52. {
  53.     public void addLayoutComponent(String name, Component c) { }
  54.  
  55.     public void removeLayoutComponent(Component c) { }
  56.  
  57.  
  58.     public Dimension preferredLayoutSize(Container parent) {
  59.     Component view = ((JViewport)parent).getView();
  60.     if (view == null) {
  61.         return new Dimension(0, 0);
  62.     }
  63.     else if (view instanceof Scrollable) {
  64.         return ((Scrollable)view).getPreferredScrollableViewportSize();
  65.     } 
  66.     else {
  67.         return view.getPreferredSize();
  68.     } 
  69.     }
  70.  
  71.  
  72.     public Dimension minimumLayoutSize(Container parent) {
  73.     return new Dimension(4, 4);
  74.     }
  75.  
  76.  
  77.     public void layoutContainer(Container parent) 
  78.     {
  79.     JViewport vp = (JViewport)parent;
  80.     Component view = vp.getView();
  81.     Scrollable scrollableView = null;
  82.  
  83.     if (view == null) {
  84.         return;
  85.     } 
  86.     else if (view instanceof Scrollable) {
  87.         scrollableView = (Scrollable) view;
  88.     }
  89.  
  90.     /* All of the dimensions below are in view coordinates, except
  91.      * vpSize which we're converting.
  92.      */
  93.  
  94.     Insets insets = vp.getInsets();
  95.     Dimension viewPrefSize = view.getPreferredSize();
  96.     Dimension vpSize = vp.getSize();
  97.     Dimension extentSize = vp.toViewCoordinates(vpSize);
  98.     Dimension viewSize = viewPrefSize; 
  99.  
  100.     if (scrollableView != null) {
  101.         if (scrollableView.getScrollableTracksViewportWidth()) {
  102.         viewSize.width = vpSize.width;
  103.         }
  104.         if (scrollableView.getScrollableTracksViewportHeight()) {
  105.         viewSize.height = vpSize.height;
  106.         }
  107.     }
  108.  
  109.     Point viewPosition = vp.getViewPosition();
  110.  
  111.     /* If the new viewport size would leave empty space below the
  112.      * view, top justify the view.
  113.      */
  114.  
  115.     if ((viewPosition.y + extentSize.height) > viewSize.height) {
  116.         viewPosition.y = 0;
  117.     }
  118.     
  119.     /* If the new viewport size would leave empty space to the
  120.      * right of the view, left justify the view.
  121.      */
  122.  
  123.     if ((viewPosition.x + extentSize.width) > viewSize.width) {
  124.         viewPosition.x = 0;
  125.     }
  126.  
  127.     /* If the orgin of the view is showing and the viewport is 
  128.      * bigger than the views preferred size, then make the view
  129.      * the same size as the viewport.  
  130.      */
  131.     
  132.     if ((viewPosition.y == 0) && (vpSize.height > viewPrefSize.height)) {
  133.         viewPrefSize.height = vpSize.height;
  134.     }
  135.     
  136.     if ((viewPosition.x == 0) && (vpSize.width > viewPrefSize.width)) {
  137.         viewPrefSize.width = vpSize.width;
  138.     }
  139.  
  140.     vp.setViewPosition(viewPosition);
  141.     vp.setViewSize(viewPrefSize);
  142.     }
  143. }
  144.  
  145.