Back to index

wims  3.65+svn20090927
AbsoluteLayout.java
Go to the documentation of this file.
00001 /*
00002 $Id: AbsoluteLayout.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 import fr.ove.utils.FontInfo;
00038 
00045 public class AbsoluteLayout extends EnclosingLayout {
00049     public SymbolDisplay createOpening() {
00050         SymbolDisplay bar = new SymbolDisplay(displayToLay.getGraphicContext(), new Bar());
00051         // Le display de la barre est le display d'un opérateur (on peut le considérer comme tel)
00052         bar.setIsSymbolOperatorDisplay(true);
00053         return bar;
00054     }
00055     
00059     public SymbolDisplay createClosing() {
00060         return createOpening();
00061     }
00062 
00068     public Dimension computeAttributes() {
00069         Display display = null;
00070 
00071         // On calcule la taille de l'élement en valeur absolue
00072         display = (Display) displayToLay.getComponent(2);
00073         display.setSize(display.getPreferredSize());
00074         // On met un petit décalage horizontal pour que la barre de gauche ne soit pas collée au terme
00075         display.setShiftX(2);
00076         
00077         int width = display.getShiftX() + display.getWidth();
00078         int height = display.getShiftY() + display.getHeight();
00079         int ascent = display.getAscent();
00080         int descent = display.getDescent();
00081         int thickness = FontInfo.getLineThickness(displayToLay, displayToLay.getFont());
00082         
00083         // Maintenant, on peut fixer la hauteur des barres, qui est la hauteur du composant
00084         // qu'elles contiennent, et l'ascent, qui est celui du composant qu'elles contiennent.
00085         SymbolDisplay opening = getOpening();
00086         Bar bar = (Bar) opening.getSymbol();
00087         bar.setHeight(display.getHeight());
00088         bar.setWidth(thickness);
00089         bar.setAscent(ascent);
00090         bar.setDescent(descent);
00091         opening.setComputeAttributes(true);
00092         opening.invalidate();
00093         opening.setSize(opening.getPreferredSize());
00094 
00095         width += opening.getWidth();
00096         
00097         SymbolDisplay closing = getClosing();
00098         bar = (Bar) closing.getSymbol();
00099         bar.setHeight(display.getHeight());
00100         bar.setWidth(thickness);
00101         bar.setAscent(ascent);
00102         bar.setDescent(descent);
00103         closing.setComputeAttributes(true);
00104         closing.invalidate();
00105         closing.setSize(closing.getPreferredSize());
00106         // On met un petit décalage horizontal pour que la barre de droite ne soit pas collée au terme
00107         closing.setShiftX(2);
00108 
00109         width += closing.getShiftX() + closing.getWidth();
00110             
00111         displayToLay.setAscent(ascent);
00112         displayToLay.setDescent(descent);
00113         displayToLay.setSize(width, height);
00114         
00115         displayToLay.setComputeAttributes(false);
00116             
00117         // Cette taille là correspond au décalage qu'il faut appliquer à closing
00118         closing.setShiftX(width - 2*closing.getWidth());
00119         // Mais il faut l'enlever au display du milieu qui doit être contre l'opening (because HonrizontalLayout)
00120         display.setShiftX(display.getShiftX() - closing.getShiftX() - closing.getWidth());
00121             
00122         return new Dimension(width, height);
00123     }
00124 }