Back to index

wims  3.65+svn20090927
BinaryInfixOperatorLayout.java
Go to the documentation of this file.
00001 /*
00002 $Id: BinaryInfixOperatorLayout.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 fr.ove.openmath.jome.ctrlview.bidim.*;
00032 import fr.ove.openmath.jome.ctrlview.bidim.selection.events.SelectionEvent;
00033 import fr.ove.openmath.jome.model.*;
00034 
00041 public abstract class BinaryInfixOperatorLayout extends InfixOperatorLayout {    
00045     public void validateSelection() {
00046         SelectionEvent selEvt = new SelectionEvent(displayToLay);
00047 
00048         // La validité de la sélection est triviale.
00049         // Si les opérandes sont sélectionnés ou ont un élément sélectionné, ou si l'opérateur
00050         // est sélectionnée, alors on sélectionne tout.
00051         Display left = (Display) displayToLay.getComponent(0);
00052         Display ope = (Display) displayToLay.getComponent(1);
00053         Display right = (Display) displayToLay.getComponent(2);
00054         if ((left.gotSelectedElements() && right.gotSelectedElements()) ||
00055             (ope.isSelected())) {
00056             // Sélectionne le display.
00057             displayToLay.select();
00058             // On purge la liste des éléments sélectionnés.
00059             selEvt.setAction(SelectionEvent.PURGE, null);
00060             displayToLay.fireSelectionEvent(selEvt);
00061             // On y ajoute l'opération
00062             selEvt.setAction(SelectionEvent.ADD, displayToLay);
00063             displayToLay.fireSelectionEvent(selEvt);
00064         }
00065 
00066         // On a vérifié la validité de la sélection de la puissance. On doit maitenant
00067         // la contrôler au niveau supérieur, au niveau du père.
00068         Display display = displayToLay;
00069         if (displayToLay.getParent() instanceof Display) {
00070             display = (Display) displayToLay.getParent();
00071             FormulaTreeStructure fts = (FormulaTreeStructure) display.getListener();
00072             if (fts.getFather() != null)
00073                 ((DisplayLayout) display.getLayout()).validateSelection();
00074         }
00075 
00076         // On met à jour l'affichage.
00077         display.repaint();
00078     }
00079     
00084     public void validateDeselection(Display display) {
00085         Display father = displayToLay;
00086         SelectionEvent selEvt = new SelectionEvent(father);
00087         
00088         // Si l'opération est sélectionnée, alors il faut la déselectionner.
00089         if (father.isSelected()) {
00090             father.setNotSelected();
00091             // On enlève le display père de la liste des display sélectionnés.
00092             selEvt.setAction(SelectionEvent.REMOVE, father);
00093             father.fireSelectionEvent(selEvt);
00094             
00095             Display left = (Display) father.getComponent(0);
00096             Display ope = (Display) father.getComponent(1);
00097             Display right = (Display) father.getComponent(2);
00098             
00099             if (display == left) {
00100                 ope.setNotSelected();
00101                 selEvt.setAction(SelectionEvent.ADD, right);
00102                 father.fireSelectionEvent(selEvt);
00103             }
00104             else if (display == right) {
00105                 ope.setNotSelected();
00106                 selEvt.setAction(SelectionEvent.ADD, left);
00107                 father.fireSelectionEvent(selEvt);
00108             }
00109             else {
00110                 left.deselect();
00111                 ope.setNotSelected();
00112                 right.deselect();
00113             }
00114 
00115             // Comme pour la sélection, on contrôle la validité de la désélection.
00116             if (father.getParent() instanceof Display) {
00117                 father = (Display) father.getParent();
00118                 FormulaTreeStructure fts = (FormulaTreeStructure) father.getListener();
00119                 if (fts.getFather() != null)
00120                     ((DisplayLayout) father.getLayout()).validateDeselection(displayToLay);
00121             }
00122             
00123             // Hé oui, on contrôle la validité de la sélection... dans une désélection.
00124             // Toujours le même pb, est-ce que le nouvel état de la sélection (après
00125             // désélection donc) est syntaxiquement cohérent ?
00126             validateSelection();
00127             
00128             // On met à jour l'affichage.
00129             father.repaint();
00130         }        
00131     }
00132 }