Back to index

wims  3.65+svn20090927
HorizontalLayout.java
Go to the documentation of this file.
00001 /*
00002 $Id: HorizontalLayout.java,v 1.3 2003/02/18 11:48:46 sander Exp $
00003 */
00004 
00005 
00006 /*
00007 Copyright (C) 2001-2002 Mainline Project (I3S - ESSI - CNRS -UNSA)
00008 
00009 This library is free software; you can redistribute it and/or
00010 modify it under the terms of the GNU Lesser General Public
00011 License as published by the Free Software Foundation; either
00012 version 2.1 of the License, or (at your option) any later version.
00013 
00014 This library is distributed in the hope that it will be useful,
00015 but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public
00020 License along with this library; if not, write to the Free Software
00021 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 
00023 For further information on the GNU Lesser General Public License,
00024 see: http://www.gnu.org/copyleft/lesser.html
00025 For further information on this library, contact: mainline@essi.fr
00026 */
00027 
00028 
00029 package fr.ove.openmath.jome.ctrlview.bidim;
00030 
00031 import java.awt.*;
00032 import java.util.*;
00033 import fr.ove.openmath.jome.ctrlview.bidim.Display;
00034 import fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout;
00035 import fr.ove.openmath.jome.ctrlview.bidim.selection.events.SelectionEvent;
00036 import fr.ove.openmath.jome.model.*;
00037 
00044 public abstract class HorizontalLayout extends DisplayLayout {
00050     public Dimension computeAttributes() {
00051         int ascent = 0;
00052         int descent = 0;
00053         Display tmp;
00054         int width = 0;
00055         int height = 0;
00056         
00057         updateLevel(displayToLay.getLevel());
00058 
00059         int count = displayToLay.getComponentCount();
00060         for (int i = 0; i < count; i++) {
00061             tmp = (Display) displayToLay.getComponent(i);
00062             tmp.setSize(tmp.getPreferredSize());
00063             
00064             width += tmp.getWidth() + tmp.getShiftX();
00065             
00066             ascent = Math.max(tmp.getAscent() - tmp.getShiftY(),
00067                               ascent);
00068             
00069             descent = Math.max(tmp.getDescent() + tmp.getShiftY(),
00070                                descent);
00071         }
00072 
00073         displayToLay.setAscent(Math.max( 0, ascent ));
00074         displayToLay.setDescent(Math.max( 0, descent));
00075         height += displayToLay.getAscent() + displayToLay.getDescent();
00076         displayToLay.setSize(width , height);
00077         displayToLay.setComputeAttributes(false);
00078 
00079         return new Dimension(width, height);
00080     }
00081 
00082 
00083     // #################################################
00084     // ### Implémentation des différentes interfaces ###
00085     // #################################################
00086 
00087     // ***************************************************
00088     // *** Implémentation de l'interface LayoutManager ***
00089 
00090 
00091     /*
00092      * Lays out the container in the specified panel.
00093      * @param parent the component which needs to be laid out
00094      */
00095      public void layoutContainer(Container parent) {
00096         int x, y;
00097         Display display, previous;
00098         
00099         int count = parent.getComponentCount();
00100         for (int i = 0; i < count; i++) {
00101             display = (Display) parent.getComponent(i);
00102             display.setSize(display.getPreferredSize());
00103 
00104             if (i == 0)
00105                 x = display.getShiftX();
00106             else {
00107                 previous = (Display) parent.getComponent(i-1);
00108                 x = previous.getX() + previous.getWidth() + display.getShiftX();
00109             }
00110 
00111             y = ((Display) parent).getAscent() - display.getAscent() + display.getShiftY();
00112 
00113             display.setLocation(x, y);
00114 
00115             // On place maintenant les éventuels display enfants du display courant
00116             display.doLayout();
00117         }
00118     }
00119 
00120     // *** Fin de l'interface LayoutManager ***
00121     // ****************************************
00122 }