Back to index

wims  3.65+svn20090927
OneFormulaLayout.java
Go to the documentation of this file.
00001 /*
00002 $Id: OneFormulaLayout.java,v 1.3 2003/02/18 11:48:47 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 fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout;
00033 import fr.ove.openmath.jome.ctrlview.bidim.Display;
00034 import fr.ove.openmath.jome.ctrlview.bidim.selection.events.SelectionEvent;
00035 import fr.ove.openmath.jome.model.*;
00036 
00043 public class OneFormulaLayout extends DisplayLayout {
00049     public Dimension computeAttributes() {
00050         int width = 10;  // Ca c'est parce que c'est la taille préferée du display de la formule
00051         int height = 10; // faudra voir de modifier ça de manière plus propre.
00052         
00053         if (displayToLay.getComponentCount() != 0) {
00054             updateLevel(displayToLay.getLevel());
00055             Display display = (Display) displayToLay.getComponent(0);
00056             display.setSize(display.getPreferredSize());
00057             width = 2*display.getShiftX() + display.getWidth();
00058             height = 2*display.getShiftY() + display.getHeight();
00059 
00060             displayToLay.setAscent(display.getShiftY() + display.getAscent());
00061             displayToLay.setDescent(height - display.getAscent());
00062             
00063             displayToLay.setSize(width , height);
00064             displayToLay.setComputeAttributes(false);
00065         }
00066         
00067         return new Dimension(width , height);
00068     }
00069     
00074     public void selectDisplay() {
00075         Display display = (Display) displayToLay.getComponent(0);
00076         display.select();
00077         
00078         SelectionEvent selEvt = new SelectionEvent(display);
00079         // On purge la liste des éléments sélectionnés.
00080         selEvt.setAction(SelectionEvent.PURGE, null);
00081         display.fireSelectionEvent(selEvt);
00082         selEvt.setAction(SelectionEvent.ADD, display);
00083         display.fireSelectionEvent(selEvt);
00084     }
00085 
00086 
00091     public void deselectDisplay() {
00092         Display display = (Display) displayToLay.getComponent(0);
00093         display.deselect();
00094         
00095         SelectionEvent selEvt = new SelectionEvent(display);
00096         selEvt.setAction(SelectionEvent.PURGE, null);
00097         display.fireSelectionEvent(selEvt);
00098     }
00099     
00103     public void validateSelection() {
00104     }
00105     
00110     public void validateDeselection(Display display) {
00111     }
00112 
00116     public void rebuildDisplay() {
00117         // La taille des displays est probablement différente de ceux qui étaient
00118         // précédemment. On demande alors le recalcul des display ancêtres.
00119         displayToLay.computeAncestorsAttributes();
00120     }
00121    
00122     // #################################################
00123     // ### Implémentation des différentes interfaces ###
00124     // #################################################
00125 
00126     // ***************************************************
00127     // *** Implémentation de l'interface LayoutManager ***
00128 
00129 
00130     /*
00131      * Lays out the container in the specified panel.
00132      * @param parent the component which needs to be laid out
00133      */
00134      public void layoutContainer(Container parent) {
00135         // Ca c'est parce que c'est le layout manager de la formule. Et comme personne ne dit au container
00136         // contenant la formule, que la taille de la formule a besoin d'être recalculée, il faut bien le
00137         // faire qque part. Chaque display informe son père qu'il doit être recalculé, mais la formule ne
00138         // le fait pas pour le sien.
00139         parent.setSize(parent.getPreferredSize());
00140         
00141         if (parent.getComponentCount() != 0) {
00142             // On est obligé de faire ce test car comme lorsque la formule est "vide", on ne met pas template,
00143             // parent ne contient aucun display fils.
00144             
00145             Display display = (Display) parent.getComponent(0);
00146             display.setSize(display.getPreferredSize());
00147             display.setLocation(display.getShiftX(), display.getShiftY());
00148 
00149             // On place maintenant les éventuels display enfants du display courant
00150             display.doLayout();
00151         }
00152     }
00153 
00154     // *** Fin de l'interface LayoutManager ***
00155     // ****************************************
00156 }