001    /**
002     * ========================================
003     * JFreeReport : a free Java report library
004     * ========================================
005     *
006     * Project Info:  http://reporting.pentaho.org/
007     *
008     * (C) Copyright 2000-2007, by Object Refinery Limited, Pentaho Corporation and Contributors.
009     *
010     * This library is free software; you can redistribute it and/or modify it under the terms
011     * of the GNU Lesser General Public License as published by the Free Software Foundation;
012     * either version 2.1 of the License, or (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016     * See the GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public License along with this
019     * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020     * Boston, MA 02111-1307, USA.
021     *
022     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023     * in the United States and other countries.]
024     *
025     * ------------
026     * $Id: WindowSizeLimiter.java 3048 2007-07-28 18:02:42Z tmorgner $
027     * ------------
028     * (C) Copyright 2000-2005, by Object Refinery Limited.
029     * (C) Copyright 2005-2007, by Pentaho Corporation.
030     */
031    
032    package org.jfree.report.modules.gui.swing.common;
033    
034    import java.awt.Component;
035    import java.awt.Dimension;
036    import java.awt.event.ComponentAdapter;
037    import java.awt.event.ComponentEvent;
038    
039    /**
040     * A small helper class to limit the maximum size of an element to the elements maximum
041     * size. If the element is resized, the defined maximum size is enforced on the element.
042     *
043     * @author Thomas Morgner
044     */
045    public class WindowSizeLimiter extends ComponentAdapter
046    {
047      /**
048       * The current source.
049       */
050      private Object currentSource;
051    
052      /**
053       * Default-Constructor.
054       */
055      public WindowSizeLimiter()
056      {
057    
058      }
059    
060      /**
061       * Invoked when the component's size changes.
062       *
063       * @param e the event.
064       */
065      public void componentResized (final ComponentEvent e)
066      {
067        if (e.getSource() == currentSource)
068        {
069          return;
070        }
071    
072        if (e.getSource() instanceof Component)
073        {
074          currentSource = e.getSource();
075          final Component c = (Component) e.getSource();
076          final Dimension d = c.getMaximumSize();
077          final Dimension s = c.getSize();
078          if (s.width > d.width)
079          {
080            s.width = d.width;
081          }
082          if (s.height > d.height)
083          {
084            s.height = d.height;
085          }
086          c.setSize(s);
087          currentSource = null;
088        }
089    
090      }
091    }