Back to index

wims  3.65+svn20090927
AbstractStringDisplay.java
Go to the documentation of this file.
00001 /*
00002 $Id: AbstractStringDisplay.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.awt.event.*;
00033 import java.text.*;
00034 import fr.ove.utils.NumberUtils;
00035 import fr.ove.openmath.jome.ctrlview.bidim.StringLayout;
00036 import fr.ove.openmath.jome.ctrlview.bidim.Display;
00037 import fr.ove.openmath.jome.ctrlview.bidim.GraphicContext;
00038 import fr.ove.openmath.jome.model.*;
00039 import fr.ove.openmath.jome.model.events.ModelEvent;
00040 
00047 public abstract class AbstractStringDisplay extends BidimDisplay {
00051     private String string;
00052         
00058     public AbstractStringDisplay(GraphicContext graphicContext, String string) {
00059         super(graphicContext);
00060         this.string = string;
00061     }
00062     
00067     public void setString( String string ) {
00068         this.string = string;
00069     }
00070     
00075     public String getString() {
00076         return string;
00077     }
00078     
00082     public void scaleDisplay() {
00083         //System.out.println("string : " + string +"   Level = " + getLevel());
00084         setTheFont(getGraphicContext().scaleFont(getLevel()));
00085         // Il faut que le layout manager recalcule les attributs du display.
00086         setComputeAttributes(true);
00087         // Ceci est nécessaire pour que ce soit le layout manager qui retourne
00088         // la preferredSize du display, et donc qu'il y ait recalcul des attributs.
00089         // Sinon, le container considère qu'il a une taille valide, et donc retourne
00090         // comme preferredSize, la précédente, sans qu'il demande le recalcul au LM.
00091         invalidate();
00092     }    
00093 
00098     public void paint(Graphics g) {
00099         super.paint(g);
00100         
00101         Color old = g.getColor();
00102         Font oldFont = g.getFont();
00103         Rectangle bounds = getBounds();
00104         
00105         if (isSelected())
00106             g.setColor(getSelectionColor());
00107         else
00108             g.setColor(getBackgroundColor());
00109             
00110         g.fillRect(0, 0, bounds.width /*- 1*/, bounds.height /*- 1*/);
00111         
00112         g.setColor(getForegroundColor());
00113         g.setFont(getFont());
00114         
00115         if (weDrawBounds())
00116             g.drawRect(0, 0, bounds.width - 1, bounds.height - 1);
00117         
00118         
00119         if ( string.equals("*") )
00120             g.drawString(string, 1, getHeight());
00121         else if ( string.equals("-") )
00122             g.drawString(string, 1, getAscent() - (int) Math.round(getDescent()*(40.0f/100.0f)));
00123         else
00124             g.drawString(string, 1, getAscent());
00125         
00126         /*
00127         // on trace la baseline
00128         g.setColor(Color.red);
00129         g.drawLine(0, getAscent(), bounds.width, getAscent());
00130         */
00131         
00132         g.setColor(old);
00133         g.setFont(oldFont);
00134     }
00135     
00140     public int computeInsertionPosition(int mouseX) {
00141         int insertionPosition;
00142         // Si l'instance courante est un display d'opérateur, alors la position
00143         // d'insertion est la position de l'opérande dont le display suit l'instance
00144         // courante.
00145         if (isSymbolOperatorDisplay()) {
00146             Display display = (Display) getParent();
00147             display = (Display) display.getComponent(getRank() + 1);  // On est sûr de pouvoir prendre rank+1
00148             // puisque si on est sur une display d'opérateur, au pire on a un template.
00149             insertionPosition = ((FormulaTreeStructure) display.getListener()).getRank();
00150         }
00151         else {
00152             // On regarde la position de la souris.
00153             // Si elle est inférieure à la moitié de la largeur de l'instance, alors
00154             // la position d'insertion est la position de l'opérande dont l'instance est
00155             // le display. Sinon, la position d'insertion est la position de l'opérande 
00156             // dont l'instance l'instance est le display + 1.
00157             if (mouseX <= (getWidth() / 2))
00158                 insertionPosition = ((FormulaTreeStructure) getListener()).getRank();
00159             else
00160                 insertionPosition = ((FormulaTreeStructure) getListener()).getRank() + 1;
00161                 // Pas de pb de test pour savoir si on n'est pas sur le dernier opérande
00162                 // puisqu'on est obligé dans ce cas de retourner le nbre réel + 1 pour dire
00163                 // effectivement que l'on insère à la dernière position.
00164         }
00165         // On retourne la position d'insertion calculée.
00166         return insertionPosition;
00167     }
00168     
00169     public void ToString() {
00170         super.ToString();
00171         System.out.println(" string = " + string);
00172     }
00173 
00174     public void whoAmI() {
00175         System.out.println("I am the StringDisplay : " + string);
00176         System.out.println("My level is " + getLevel());
00177     }
00178     
00179 }