Back to index

wims  3.65+svn20090927
LeftAssocPrefixedUnaryOperatorLayout.java
Go to the documentation of this file.
00001 /*
00002 $Id: LeftAssocPrefixedUnaryOperatorLayout.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 fr.ove.openmath.jome.ctrlview.bidim.*;
00033 import fr.ove.openmath.jome.ctrlview.bidim.selection.events.SelectionEvent;
00034 import fr.ove.openmath.jome.model.*;
00035 
00044 public abstract class LeftAssocPrefixedUnaryOperatorLayout extends UnaryOperatorLayout {
00048     private boolean selectLeftDisplay;
00049     
00055     public boolean selectLeftDisplay() {
00056         // On est dans les opérateurs unaires, donc si le display tout entier
00057         // est sélectionné, alors cela revient à avoir sélectionné l'opérateur,
00058         // et donc il faut sélectionner le display de gauche dans la liste de 
00059         // display de son père.
00060         if (displayToLay.isSelected())
00061             return selectLeftDisplay;
00062         else
00063             return false;
00064     }    
00065     
00072     public void setSelectLeftDisplay(boolean selectLeftDisplay) {
00073         this.selectLeftDisplay = selectLeftDisplay;
00074     }
00075     
00079     public void validateSelection() {
00080         SelectionEvent selEvt = new SelectionEvent(displayToLay);
00081 
00082         // La validité de la sélection est triviale.
00083         // Si le display de l'opérateur ou si le display de l'opérande est
00084         // sélectionné, on sélectionne tout le display.
00085         Display op = (Display) displayToLay.getComponent(0);
00086         Display opRand = (Display) displayToLay.getComponent(1);
00087         if (op.isSelected() || opRand.isSelected()) {
00088             
00089             selectLeftDisplay = op.isSelected() ? true : false;
00090             
00091             displayToLay.select();
00092             // On purge la liste des éléments sélectionnés.
00093             selEvt.setAction(SelectionEvent.PURGE, null);
00094             displayToLay.fireSelectionEvent(selEvt);
00095             // On y ajoute l'instance dans la liste des sélectionnés
00096             selEvt.setAction(SelectionEvent.ADD, displayToLay);
00097             displayToLay.fireSelectionEvent(selEvt);
00098         }
00099         
00100         // On a vérifié la validité de la sélection de l'opérateur. On doit maitenant
00101         // la contrôler au niveau supérieur, au niveau du père.
00102         Display display = displayToLay;
00103         if (displayToLay.getParent() instanceof Display) {
00104             display = (Display) displayToLay.getParent();
00105             FormulaTreeStructure fts = (FormulaTreeStructure) display.getListener();
00106             if (fts.getFather() != null)
00107                 ((DisplayLayout) display.getLayout()).validateSelection();
00108         }
00109 
00110         // On met à jour l'affichage.
00111         display.repaint();
00112     }             
00113     
00118     public void validateDeselection(Display display) {
00119         // father est le display de l'opérateur unaire.
00120         Display father = displayToLay;
00121         Display tmp;
00122         SelectionEvent selEvt = new SelectionEvent(father);
00123         
00124         // Si l'opérateur en entier est sélectionné, il faut le désélectionner
00125         if (father.isSelected()) {
00126             selectLeftDisplay = false;
00127             father.deselect();
00128             // On enlève le display père de la liste des display sélectionnés.
00129             selEvt.setAction(SelectionEvent.REMOVE, father);
00130             father.fireSelectionEvent(selEvt);
00131             
00132             // Comme pour la sélection, on contrôle la validité de la désélection.
00133             if (father.getParent() instanceof Display) {
00134                 father = (Display) father.getParent();
00135                 FormulaTreeStructure fts = (FormulaTreeStructure) father.getListener();
00136                 if (fts.getFather() != null)
00137                     ((DisplayLayout) father.getLayout()).validateDeselection(displayToLay);
00138             }
00139             
00140             // Hé oui, on contrôle la validité de la sélection... dans une désélection.
00141             // Toujours le même pb, est-ce que le nouvel état de la sélection (après
00142             // désélection donc) est syntaxiquement cohérent ?
00143             validateSelection();
00144             
00145             // On met à jour l'affichage.
00146             father.repaint();
00147         }
00148     }
00149 }