Back to index

wims  3.65+svn20090927
FormulaDisplay.java
Go to the documentation of this file.
00001 /*
00002 $Id: FormulaDisplay.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.Vector;
00033 import fr.ove.openmath.jome.ctrlview.events.*;
00034 import fr.ove.openmath.jome.ctrlview.bidim.*;
00035 import fr.ove.openmath.jome.ctrlview.bidim.selection.events.*;
00036 import fr.ove.openmath.jome.ctrlview.bidim.selection.*;
00037 import fr.ove.openmath.jome.ctrlview.bidim.images.ImageLoader;
00038 import fr.ove.openmath.jome.model.*;
00039 
00047 public class FormulaDisplay extends BidimDisplay {
00051     private static ImageLoader loader;
00052     
00056     public FormulaDisplay() {
00057         super(new GraphicContext());
00058         
00059         // On affecte le layout manager d'une formule.
00060         OneFormulaLayout layout = new OneFormulaLayout();
00061         layout.initDisplay(this);
00062         super.setLayout(layout);
00063         
00064         // Création du gestionnaire de la sélection
00065         SelectionManager selectionManager = new SelectionManager();
00066         addSelectionEventListener(selectionManager);
00067         
00068         // On charge les icones
00069         loader = new ImageLoader(this);
00070     }
00071     
00076     public void addControlListener(ControlListener controlListener) {
00077         
00078         // ben ça, ça marche pas encore comme voulu !!!
00079         // au moins dans café.
00080         
00081         super.addControlListener(controlListener);
00082         buildDisplay();
00083         invalidate();
00084         setComputeAttributes(true);
00085         validate();
00086         repaint();
00087     }
00088     
00092     public Dimension getPreferredSize() {
00093         Dimension prefSize;
00094         
00095         if (getComponentCount() == 0)
00096             // si y a rien à afficher, on fixe une taille quelconque pour voir qque chose
00097             prefSize = new Dimension(/*100, 50*/10, 10);
00098         else
00099             prefSize = super.getPreferredSize();
00100             
00101         return prefSize;
00102     }
00103     
00110     public void setLayout(LayoutManager lm) {
00111     }
00112     
00113     
00114     /***************************/
00115     /* Gestion de la sélection */
00116     /***************************/
00117 
00118     
00122     public String getLinearSelection() {
00123         FormulaTreeStructure ftsSelection = getFtsSelection();
00124         
00125         if (ftsSelection == null)
00126             return "";
00127         else 
00128             return ftsSelection.createLinear("");
00129     }
00130 
00135     private Vector getSelection() {
00136         SelectionEvent selectionEvent = new SelectionEvent(this);
00137 
00138         // On récupère la taille de la sélection.
00139         Integer selectionSize = null;
00140         selectionEvent.setAction(SelectionEvent.GET_SELECTION_SIZE, selectionSize);
00141         fireSelectionEvent(selectionEvent);
00142         selectionSize = (Integer) selectionEvent.getArgument();
00143         // Si différente de 0, il y a qque chose à récupérer.
00144         if (selectionSize.intValue() != 0) {
00145             // On récupère la sélection entière.
00146             Vector selection = null;
00147             selectionEvent.setAction(SelectionEvent.GET_SELECTION, selection);
00148             fireSelectionEvent(selectionEvent);
00149             selection = (Vector) selectionEvent.getArgument();
00150             // On créé la liste des éléments à récupérer. (on enlève les displays
00151             // d'opérateurs parasites, et aux displays qui restent, on récupère
00152             // la fts dont ils sont le display).
00153             Display selectionDisplay;
00154             FormulaTreeStructure fts;
00155             Vector toGet = new Vector();
00156             for (int i = 0; i < selectionSize.intValue(); i++) {
00157                 selectionDisplay = (Display) selection.elementAt(i);
00158                 if (!selectionDisplay.isSymbolOperatorDisplay()) {
00159                     // On récupère le fts associé au display.
00160                     fts = (FormulaTreeStructure) selectionDisplay.getListener();
00161                     // On l'ajoute à la liste des fts à iconifier
00162                     toGet.addElement(fts);
00163                 }
00164             }
00165 
00166             return toGet;
00167         }
00168         
00169         return null;
00170     }
00171     
00179     private FormulaTreeStructure getFtsSelection() {
00180         FormulaTreeStructure ftsSelection = null;
00181         Vector selection = getSelection();
00182         
00183         if (selection != null) {
00184             ftsSelection = (FormulaTreeStructure) selection.elementAt(0);
00185             if ((selection.size() == 1) && 
00186                 (!ftsSelection.isIcon() || (ftsSelection.isIcon() && (((Icon) ftsSelection).getNbIconified() == 1)))) {
00187                 ftsSelection = (FormulaTreeStructure) ftsSelection.clone();
00188             }
00189             else {
00190                 FormulaTreeStructure childFts = null;
00191                 
00192                 // On récupère le père dans la FTS du premier élément sélectionné
00193                 // pour savoir à quel type d'opération on a affaire.
00194                 ftsSelection = (FormulaTreeStructure) ftsSelection.getFather();
00195                 ftsSelection = (FormulaTreeStructure) ftsSelection.duplicate();
00196                 int count = selection.size();
00197                 for (int i = 0; i < count; i++) {
00198                     childFts = (FormulaTreeStructure) selection.elementAt(i);
00199                     childFts = (FormulaTreeStructure) childFts.clone();
00200                     ftsSelection.addChild(childFts);
00201                 }
00202             }
00203         }
00204         
00205         return ftsSelection;
00206     }
00207 }
00208     
00209