Back to index

wims  3.65+svn20090927
HorizontalListLayout.java
Go to the documentation of this file.
00001 /*
00002 $Id: HorizontalListLayout.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 
00046 public class HorizontalListLayout extends CurlyLayout {
00055     public void initDisplay(Display displayToLay) {
00056         super.initDisplay(displayToLay);  // Par cet appel, on ajoute dans displayToLay les accolades
00057         // On va maintenant y rajouter un display, dans lequel on va mettre tous les displays correspondants
00058         // aux éléments de la liste, display à qui on va affecter un SeparatorOperatorLayout, qui va se charger
00059         // d'afficher les éléments de la liste de manière horizontale avec chacun des éléments séparés par une
00060         // virgule (un séparateur)
00061         Display elementsDisplay = new BidimDisplay(displayToLay.getGraphicContext());
00062         // On met un listener à elementsDisplay
00063         // En fait, il n'y en a pas besoin, dans le sens où il n'y a pas spécifiquement de fts qui
00064         // écoute le comportement de ce display. Néanmoins, il s'avère nécessaire qu'il en ait
00065         // un, par exemple lors de l'iconification, car c'est le display qui reçoit la demande
00066         // d'iconification qui envoie l'événement correspondant à la FTS. Or si ce display n'a pas
00067         // d'écouteur, alors pb. Par cohérence, l'écouteur du display d'opérateur, est le fts qui
00068         // représente cette opération. Par contre, la fts en question, n'écoute pas le display
00069         // d'opérateur.
00070         elementsDisplay.addControlListener((FormulaTreeStructure) displayToLay.getListener());
00071         
00072         SeparatorOperatorLayout layout = new SeparatorOperatorLayout();
00073         layout.initDisplay(elementsDisplay);
00074         elementsDisplay.setLayout(layout);
00075         
00076         // On l'ajoute comme fils à display
00077         this.displayToLay.add(elementsDisplay);
00078     }
00079     
00085     public Dimension computeAttributes() {
00086         updateLevel(displayToLay.getLevel());
00087         
00088         if (displayToLay.getComponentCount() > 3) {
00089             // Dans l'ordre, displayToLay contient [opening, closing, elementsDisplay, var1, var2, ...]
00090             // Il faut mettre tous les vari dans elementsDisplay.
00091             
00092             Display elementsDisplay = (Display) displayToLay.getComponent(2);
00093             Display d;
00094             for (int i = 3; i < displayToLay.getComponentCount(); ) {
00095                 d = (Display) displayToLay.getComponent(i);
00096                 // elementsDisplay.add(d) appelle un displayToLay.remove(d).
00097                 // remove(d), enlève également d de la liste des listeners de l'objet (fts) qu'il écoutait.
00098                 // Ce qu'on ne veut pas, puisqu'il s'agit d'un simple déplacement de display. 
00099                 d.setDoRemoveFromListListeners(false);
00100                 elementsDisplay.add(d);
00101                 // On remet le comportement de suppression par défault.
00102                 d.setDoRemoveFromListListeners(true);
00103             }
00104         }
00105         
00106         return super.computeAttributes();
00107     }
00108 }