Back to index

wims  3.65+svn20090927
Jome.java
Go to the documentation of this file.
00001 /*
00002 $Id: Jome.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;
00030 
00031 import java.awt.*;
00032 import java.util.Vector;
00033 import java.io.*;
00034 
00035 import fr.ove.openmath.jome.model.*;
00036 import fr.ove.openmath.jome.model.events.*;
00037 import fr.ove.openmath.jome.ctrlview.events.*;
00038 import fr.ove.openmath.jome.ctrlview.bidim.*;
00039 import fr.ove.openmath.jome.ctrlview.bidim.selection.events.*;
00040 import fr.ove.openmath.jome.ctrlview.bidim.selection.*;
00041 import fr.ove.openmath.jome.ctrlview.bidim.images.ImageLoader;
00042 import fr.ove.openmath.jome.ctrl.linear.*;
00043 
00044 public class Jome extends Container {
00048     private Formula formula;
00049 
00053     Display jomeDisplay;
00054 
00058     FormulaDisplay formulaDisplay;
00059 
00063     private GraphicContext graphicContext = new GraphicContext(
00064             new Font("Times New Roman", Font.PLAIN, 14),
00065             Color.black,
00066             Color.white,
00067             Color.yellow);
00068 
00069     LinearParser linearParser = new LinearParser();
00070 
00071     /*********************/
00072     /* Les constructeurs */
00073     /*********************/
00074 
00078     public Jome() {
00079         super();
00080         setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
00081         super.setFont(graphicContext.getFont());
00082 
00083         // Création de la formule (modèle)
00084         formula = new Formula();
00085 
00086         linearParser.addLinearParserListener(formula);
00087 
00088         // Création du gestionnaire de la sélection
00089         SelectionManager selectionManager = new SelectionManager();
00090 
00091         // Création du display par défaut de la formule (vue + contrôle)
00092         formulaDisplay = new FormulaDisplay();
00093         formulaDisplay.setGraphicContext(graphicContext);
00094         formulaDisplay.addControlListener(formula);
00095         formulaDisplay.setShiftX(10);
00096         formulaDisplay.setShiftY(10);
00097         formula.addModelListener(formulaDisplay);
00098 
00099         // Création du display de jome.
00100         // C'est également un display, qui va contenir le display (par défaut)
00101         // de la formule.
00102         jomeDisplay = new BidimDisplay(graphicContext);
00103         jomeDisplay.drawBounds();
00104         OneFormulaLayout layout = new OneFormulaLayout();
00105         layout.initDisplay(jomeDisplay);
00106         jomeDisplay.setLayout(layout);
00107         jomeDisplay.addSelectionEventListener(selectionManager);
00108         // On ajoute le display (par défaut) de la formule dans le display de fr.ove.openmath.jome
00109         jomeDisplay.add(formulaDisplay);
00110 
00111         // On ajoute de display de jome dans l'instance (i.e. en JOME)
00112         add(jomeDisplay);
00113 
00114         // On créé la formule.
00115         setLinear("");
00116     }
00117 
00118     /**********************************************/
00119     /* Méthodes nécessaires à cause de l'héritage */
00120     /**********************************************/
00121 
00125     public Dimension getPreferredSize() {
00126         return jomeDisplay.getPreferredSize();
00127     }
00128 
00133     public void paint(Graphics g) {
00134         Color oldColor = g.getColor();
00135         Color color = getBackground();
00136         if (color != null) {
00137             g.setColor(color);
00138             Dimension size = getSize();
00139             g.fillRect(0, 0, size.width, size.height);
00140             g.setColor(oldColor);
00141         }
00142 
00143         super.paint(g);
00144     }
00145 
00146     /*************************/
00147     /* Gestion de la formule */
00148     /*************************/
00149 
00154     public void setLinear(String exp) {
00155         linearParser.parse(exp);
00156         jomeDisplay.invalidate();
00157         jomeDisplay.setComputeAttributes(true);
00158         validate();
00159         repaint();
00160     }
00161 
00165     public String getLinear() {
00166         return formula.createLinear("");
00167     }
00168 
00169     /***************************/
00170     /* Gestion de la sélection */
00171     /***************************/
00172 
00176     public String getLinearSelection() {
00177         return formulaDisplay.getLinearSelection();
00178     }
00179 
00180 
00181     /*********************************************************************/
00182     /* Décalage de l'affichage de la formule à l'intérieur de la fenêtre */
00183     /*********************************************************************/
00184 
00189     public void setShiftX(int shiftX) {
00190         shiftX = (shiftX < 1) ? 1 : shiftX;
00191         formulaDisplay.setShiftX(shiftX);
00192         jomeDisplay.invalidate();
00193         jomeDisplay.setComputeAttributes(true);
00194         validate();
00195         repaint();
00196     }
00197 
00202     public int getShiftX() {
00203         return formulaDisplay.getShiftX();
00204     }
00205 
00210     public void setShiftY(int shiftY) {
00211         shiftY = (shiftY < 1) ? 1 : shiftY;
00212         formulaDisplay.setShiftY(shiftY);
00213         jomeDisplay.invalidate();
00214         jomeDisplay.setComputeAttributes(true);
00215         validate();
00216         repaint();
00217     }
00218 
00223     public int getShiftY() {
00224         return formulaDisplay.getShiftY();
00225     }
00226 
00227 
00228     /**************************************/
00229     /* Manipulation du contexte graphique */
00230     /**************************************/
00231 
00236     public void setFont(Font font) {
00237         graphicContext.setFont(font);
00238         formulaDisplay.setFont(font);
00239         jomeDisplay.invalidate();
00240         jomeDisplay.setComputeAttributes(true);
00241         validate();
00242 
00243         super.setFont(font);
00244     }
00245 
00250     public void setForegroundColor(Color foregroundColor) {
00251         graphicContext.setForegroundColor(foregroundColor);
00252         repaint();
00253     }
00254 
00258     public Color getForegroundColor() {
00259         return graphicContext.getForegroundColor();
00260     }
00261 
00266     public void setBackgroundColor(Color backgroundColor) {
00267         graphicContext.setBackgroundColor(backgroundColor);
00268         repaint();
00269     }
00270 
00274     public Color getBackgroundColor() {
00275         return graphicContext.getBackgroundColor();
00276     }
00277 
00282     public void setSelectionColor(Color selectionColor) {
00283         graphicContext.setSelectionColor(selectionColor);
00284         repaint();
00285     }
00286 
00290     public Color getSelectionColor() {
00291         return graphicContext.getSelectionColor();
00292     }
00293 
00299     public void setDrawBounds(boolean drawBounds) {
00300         if (drawBounds)
00301             jomeDisplay.drawBounds();
00302         else
00303             jomeDisplay.dontDrawBounds();
00304     }
00305 
00310     public boolean getDrawBounds() {
00311         return jomeDisplay.weDrawBounds();
00312     }
00313 
00314     /**************************************************/
00315     /* Iconification/Désiconification de la sélection */
00316     /**************************************************/
00317 
00321     public void iconifySelection() {
00322         formulaDisplay.iconify();
00323     }
00324 
00328     public void uniconifySelectedIcons() {
00329         formulaDisplay.uniconify();
00330     }
00331 
00335     public void uniconifyAllIcons() {
00336         formulaDisplay.uniconifyAll();
00337     }
00338 
00343     public void substitute(String name) {
00344         if ((name != null) && !name.equals(""))
00345             formulaDisplay.substitute(name);
00346     }
00347 }