Back to index

wims  3.65+svn20090927
Public Member Functions | Protected Member Functions | Protected Attributes
fr.ove.openmath.jome.ctrlview.bidim.BasicStringInfixOperatorLayout Class Reference

A layout manager for an infix operator which symbol can be rendered as a string (e.g. More...

Inheritance diagram for fr.ove.openmath.jome.ctrlview.bidim.BasicStringInfixOperatorLayout:
Inheritance graph
[legend]
Collaboration diagram for fr.ove.openmath.jome.ctrlview.bidim.BasicStringInfixOperatorLayout:
Collaboration graph
[legend]

List of all members.

Public Member Functions

void validateSelection ()
 Checks the validity of the selection.
void validateDeselection (Display display)
 Checks the validity of the deselection.
Display createOperatorDisplay ()
 Returns the display of the operator.
Dimension computeAttributes ()
 Computes the size of the display according to its children size (if any), and its different attributes.
void rebuildDisplay ()
 The display needs to be rebuilt.
void layoutContainer (Container parent)
void initDisplay (Display displayToLay)
 According to the operator, the layout manager has to add some components (e.g.
boolean selectLeftDisplay ()
 Returns true if during the selection, the display which is located to the left of the display that the instance lays, must be selected too.
boolean selectRightDisplay ()
 Returns true if during the selection, the display which is located to the right of the display that the instance lays, must be selected too.
void selectDisplay ()
 Selects the display (and its children if any)
void deselectDisplay ()
 Deselects the display.
void updateLevel (int level)
 Updates the level of the display laid out.
void addLayoutComponent (String name, Component comp)
 Adds the specified component with the specified name to the layout.
void addLayoutComponent (Component comp, Object constraints)
 Adds the specified component to the layout, using the specified constraint object.
void removeLayoutComponent (Component comp)
 Removes the specified component from the layout.
Dimension minimumLayoutSize (Container parent)
 Calculates the minimum size dimensions for the specified panel given the components in the specified parent container.
Dimension preferredLayoutSize (Container parent)
 Calculates the preferred size dimensions for the specified panel given the components in the specified parent container.
Dimension maximumLayoutSize (Container target)
 Returns the maximum size of this component.
float getLayoutAlignmentX (Container target)
 Returns the alignment along the x axis.
float getLayoutAlignmentY (Container target)
 Returns the alignment along the y axis.
void invalidateLayout (Container target)
 Invalidates the layout, indicating that if the layout manager has cached information it should be discarded.

Protected Member Functions

void insertOperatorDisplay ()
 Inserts, if necessary, a display of the operator symbol that the display laid by the instance represents.

Protected Attributes

boolean insertOperatorDisplay = true
 Do we need to insert an operator display ?
int prevNbComponent = 0
 The number of the components already present before an other insertion or removal.
Display displayToLay = null
 The display laid out by the instance.

Detailed Description

A layout manager for an infix operator which symbol can be rendered as a string (e.g.

+, *)

Author:
© 1999 DIRAT Laurent
Version:
2.0 14/12/1999

Definition at line 43 of file BasicStringInfixOperatorLayout.java.


Member Function Documentation

void fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.addLayoutComponent ( String  name,
Component  comp 
) [inline, inherited]

Adds the specified component with the specified name to the layout.

Parameters:
namethe component name
compthe component to be added

Definition at line 189 of file DisplayLayout.java.

                                                                {
    }
void fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.addLayoutComponent ( Component  comp,
Object  constraints 
) [inline, inherited]

Adds the specified component to the layout, using the specified constraint object.

Parameters:
compthe component to be added
constraintswhere/how the component is added to the layout.

Definition at line 236 of file DisplayLayout.java.

                                                                       {
           if (!(constraints instanceof Display))
              throw new IllegalArgumentException("The component to add must be a Display instance !!!");
    }

Computes the size of the display according to its children size (if any), and its different attributes.

Returns:
the size of the display.

Reimplemented from fr.ove.openmath.jome.ctrlview.bidim.HorizontalLayout.

Definition at line 116 of file InfixOperatorLayout.java.

                                         {
        // On regarde si le nombre de component dans le display a changé depuis
        // la dernière fois. Si oui, il faut contrôler s'il ne faut pas ajouter
        // des display d'opérateur.
        if (insertOperatorDisplay || (prevNbComponent != displayToLay.getComponentCount()))
            insertOperatorDisplay();
            
        return super.computeAttributes();
    }

Here is the call graph for this function:

Returns the display of the operator.

Implements fr.ove.openmath.jome.ctrlview.bidim.OperatorDisplayCreator.

Reimplemented in fr.ove.openmath.jome.ctrlview.bidim.SeparatorOperatorLayout.

Definition at line 46 of file StringInfixOperatorLayout.java.

                                           {
        Operator fts = (Operator) displayToLay.getListener();
        // On créé un display pour l'opérateur.
        StringDisplay stringDisplay = new StringDisplay(displayToLay.getGraphicContext(), fts.getTheOperator(), true);
        
        return stringDisplay;
    }

Here is the call graph for this function:

Here is the caller graph for this function:

Deselects the display.

Parameters:
thedisplay to deselect.

Reimplemented in fr.ove.openmath.jome.ctrlview.bidim.OneFormulaLayout.

Definition at line 107 of file DisplayLayout.java.

                                  {
        displayToLay.deselect();

        SelectionEvent selEvt = new SelectionEvent(displayToLay);
        selEvt.setAction(SelectionEvent.REMOVE, displayToLay);
        displayToLay.fireSelectionEvent(selEvt);
        
        if (displayToLay.getParent() instanceof Display) {
            Display display = (Display) displayToLay.getParent();
            ((DisplayLayout) display.getLayout()).validateDeselection(displayToLay);
        }
    }

Here is the call graph for this function:

Here is the caller graph for this function:

float fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.getLayoutAlignmentX ( Container  target) [inline, inherited]

Returns the alignment along the x axis.

This specifies how the component would like to be aligned relative to other components. The value should be a number between 0 and 1 where 0 represents alignment along the origin, 1 is aligned the furthest away from the origin, 0.5 is centered, etc.

Definition at line 258 of file DisplayLayout.java.

                                                       {
        return 0.0f;
    }
float fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.getLayoutAlignmentY ( Container  target) [inline, inherited]

Returns the alignment along the y axis.

This specifies how the component would like to be aligned relative to other components. The value should be a number between 0 and 1 where 0 represents alignment along the origin, 1 is aligned the furthest away from the origin, 0.5 is centered, etc.

Definition at line 269 of file DisplayLayout.java.

                                                       {
        return 0.0f;
    }
void fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.initDisplay ( Display  displayToLay) [inline, inherited]

According to the operator, the layout manager has to add some components (e.g.

brackets, ...) or has to perform some "re-oganisation" before rendering.
As soon as the layout manager is set to the display, this mehtod MUST be called with the display laid out as parameter. This method serves as well as a registering method. So all sub-classes of the instance MUST call super.initDisplay(displayToLay).

Parameters:
displayToLaythe display laid by the instance

Reimplemented in fr.ove.openmath.jome.ctrlview.bidim.EnclosingLayout, fr.ove.openmath.jome.ctrlview.bidim.SuperposedOperatorLayout, fr.ove.openmath.jome.ctrlview.bidim.VarDiffLayout, fr.ove.openmath.jome.ctrlview.bidim.MapsArrayLayout, fr.ove.openmath.jome.ctrlview.bidim.MapsToSigmaLayout, fr.ove.openmath.jome.ctrlview.bidim.IntegralLayout, fr.ove.openmath.jome.ctrlview.bidim.Mfd2SubstitutionLayout, fr.ove.openmath.jome.ctrlview.bidim.HorizontalListLayout, fr.ove.openmath.jome.ctrlview.bidim.DifferentiationLayout, fr.ove.openmath.jome.ctrlview.bidim.IntervalLayout, fr.ove.openmath.jome.ctrlview.bidim.LambdaExpLayout, fr.ove.openmath.jome.ctrlview.bidim.BetweenOperatorLayout, fr.ove.openmath.jome.ctrlview.bidim.EnumerationLayout, fr.ove.openmath.jome.ctrlview.bidim.FunctionLayout, fr.ove.openmath.jome.ctrlview.bidim.RootLayout, fr.ove.openmath.jome.ctrlview.bidim.LimitLayout, and fr.ove.openmath.jome.ctrlview.bidim.UnaryOperatorLayout.

Definition at line 58 of file DisplayLayout.java.

Here is the caller graph for this function:

Inserts, if necessary, a display of the operator symbol that the display laid by the instance represents.

Reimplemented from fr.ove.openmath.jome.ctrlview.bidim.InfixOperatorLayout.

Definition at line 48 of file BasicStringInfixOperatorLayout.java.

                                           {
        Display current, next, displayOperator;
        FormulaTreeStructure fatherFts = (FormulaTreeStructure) displayToLay.getListener();
        FormulaTreeStructure fts;
        int nbComponent = displayToLay.getComponentCount();
        
        // On parcourre tous les components présents dans le display.
        for (int i = 1; i < nbComponent; i++) {
            // la référence sur le component courant
            current = (Display) displayToLay.getComponent(i - 1);
            // la référence sur le suivant
            next = (Display) displayToLay.getComponent(i);
            
            // Si le courant est un display d'opérateur alors on continue
            if (current.isSymbolOperatorDisplay())
                continue;
                
            // Si le suivant n'est pas un display d'opérateur alors 2 cas
            if (!next.isSymbolOperatorDisplay()) {
                // La seule distinction qu'il faut faire à ce stade là, c'est le cas où next
                // est le diplay d'un - unaire. Si c'est le cas, on n'insère pas de display.
                fts = (FormulaTreeStructure) next.getListener();
                if (fts.isOperator()) {
                    String ope = ((Operator) fts).getTheOperator();
                    if (ope.equals("-"))
                        continue;
                }
                    
                // On ajoute un display d'opérateur.
                displayOperator = createOperatorDisplay();
                displayToLay.add(displayOperator, displayOperator, i);
                
                // On met un listener à l'opérateur.
                // En fait, il n'y en a pas besoin, dans le sens où il n'y a pas spécifiquement de fts qui
                // écoute le comportement de ce display. Néanmoins, il s'avère nécessaire qu'il en ait
                // un, par exemple lors de l'iconification, car c'est le display qui reçoit la demande
                // d'iconification qui envoie l'événement correspondant à la FTS. Or si ce display n'a pas
                // d'écouteur, alors pb. Par cohérence, l'écouteur du display d'opérateur, est le fts qui
                // représente cette opération. Par contre, la fts en question, n'écoute pas le display
                // d'opérateur.
                displayOperator.addControlListener(fatherFts);
                i++;
                nbComponent++;
            }
        }
        
        // Mise à jour des rangs des displays
        displayToLay.adjustRank();
        // Mise à jour du nombre de components présents dans le display.
        prevNbComponent = displayToLay.getComponentCount();
        // On n'a plus besoin d'insérer des displays d'opérateur.
        insertOperatorDisplay = false;
        // On fait en sorte que la mise à niveau des displays (opérateurs) soit faite.
        displayToLay.setUpdateLevel(true);
        // On a rajouté un display, on demande le recalcul de tous les ancêtres
        // de l'instance.
        displayToLay.computeAncestorsAttributes();
    }

Here is the call graph for this function:

void fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.invalidateLayout ( Container  target) [inline, inherited]

Invalidates the layout, indicating that if the layout manager has cached information it should be discarded.

Definition at line 277 of file DisplayLayout.java.

                                                   {
    }
void fr.ove.openmath.jome.ctrlview.bidim.HorizontalLayout.layoutContainer ( Container  parent) [inline, inherited]

Reimplemented in fr.ove.openmath.jome.ctrlview.bidim.RequestLayout.

Definition at line 95 of file HorizontalLayout.java.

                                                   {
        int x, y;
        Display display, previous;
        
        int count = parent.getComponentCount();
        for (int i = 0; i < count; i++) {
            display = (Display) parent.getComponent(i);
            display.setSize(display.getPreferredSize());

            if (i == 0)
                x = display.getShiftX();
            else {
                previous = (Display) parent.getComponent(i-1);
                x = previous.getX() + previous.getWidth() + display.getShiftX();
            }

            y = ((Display) parent).getAscent() - display.getAscent() + display.getShiftY();

            display.setLocation(x, y);

            // On place maintenant les éventuels display enfants du display courant
            display.doLayout();
        }
    }

Here is the call graph for this function:

Dimension fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.maximumLayoutSize ( Container  target) [inline, inherited]

Returns the maximum size of this component.

See also:
java.awt.Component::getMinimumSize()
java.awt.Component::getPreferredSize()
LayoutManager

Definition at line 247 of file DisplayLayout.java.

                                                         {
        return preferredLayoutSize(target);
    }

Here is the call graph for this function:

Dimension fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.minimumLayoutSize ( Container  parent) [inline, inherited]

Calculates the minimum size dimensions for the specified panel given the components in the specified parent container.

Parameters:
parentthe component to be laid out
See also:
preferredLayoutSize

Definition at line 205 of file DisplayLayout.java.

                                                         {
        return preferredLayoutSize(parent);
    }

Here is the call graph for this function:

Dimension fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.preferredLayoutSize ( Container  parent) [inline, inherited]

Calculates the preferred size dimensions for the specified panel given the components in the specified parent container.

Parameters:
parentthe component to be laid out
See also:
minimumLayoutSize

Definition at line 216 of file DisplayLayout.java.

                                                           {
        if (((Display) parent).getComputeAttributes())
            return computeAttributes();
        else
            return parent.getSize();
    }

Here is the call graph for this function:

Here is the caller graph for this function:

The display needs to be rebuilt.

We do this.

Implements fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.

Definition at line 129 of file InfixOperatorLayout.java.

                                 {
        Display tmp;
        int nbDisplay = ((FormulaTreeStructure) displayToLay.getListener()).getNbChildren();
        Display listDisplay[] = new Display[nbDisplay];
        
        int count = displayToLay.getComponentCount();
        for (int i = 0; i < count; i++) {
            tmp = (Display) displayToLay.getComponent(i);
            if (!tmp.isSymbolOperatorDisplay()) {
                // A voir !!!!!
                // Mais il semblerai que bon, sinon à la (re)construction du display il se base
                // sur des anciennes valeurs, et donc pas terrible niveau affichage.
                tmp.setLocation(0, 0);
                listDisplay[((FormulaTreeStructure) tmp.getListener()).getRank()] = tmp;
            }
        }
        
        // ATTENTION : ici, on enlève les displays fils de display, mais on ne les enlève pas de la liste
        // des listeners de la fts qu'il sont en train d'écouter. Exception faite pour les displays d'opérateur.
        displayToLay.removeAllDisplays();
                
        for (int i = 0; i < nbDisplay; i++)
            displayToLay.add(listDisplay[i]);
            
        // On a reconstruit le display, il faut maintenant insérer les displays d'opérateur.
        insertOperatorDisplay = true;
        
        // La taille des displays est probablement différente de ceux qui étaient
        // précédemment. On demande alors le recalcul des display ancêtres.
        displayToLay.computeAncestorsAttributes();
    }

Here is the call graph for this function:

Removes the specified component from the layout.

Parameters:
compthe component ot be removed

Definition at line 196 of file DisplayLayout.java.

                                                      {
    }

Selects the display (and its children if any)

Parameters:
thedisplay to select.

Reimplemented in fr.ove.openmath.jome.ctrlview.bidim.OneFormulaLayout.

Definition at line 85 of file DisplayLayout.java.

                                {
        displayToLay.select();
        
        SelectionEvent selEvt = new SelectionEvent(displayToLay);
        // On purge la liste des éléments sélectionnés.
        selEvt.setAction(SelectionEvent.PURGE, null);
        displayToLay.fireSelectionEvent(selEvt);
        selEvt.setAction(SelectionEvent.ADD, displayToLay);
        displayToLay.fireSelectionEvent(selEvt);
        
        Display display = displayToLay;
        if (displayToLay.getParent() instanceof Display) {
            display = (Display) displayToLay.getParent();
            ((DisplayLayout) display.getLayout()).validateSelection();
        }
    }

Here is the call graph for this function:

Here is the caller graph for this function:

Returns true if during the selection, the display which is located to the left of the display that the instance lays, must be selected too.

false otherwise.

Reimplemented in fr.ove.openmath.jome.ctrlview.bidim.LeftAssocPrefixedUnaryOperatorLayout, and fr.ove.openmath.jome.ctrlview.bidim.StringLayout.

Definition at line 68 of file DisplayLayout.java.

                                       {
        return false;
    }

Here is the caller graph for this function:

Returns true if during the selection, the display which is located to the right of the display that the instance lays, must be selected too.

false otherwise.

Reimplemented in fr.ove.openmath.jome.ctrlview.bidim.StringLayout.

Definition at line 77 of file DisplayLayout.java.

                                        {
        return false;
    }

Here is the caller graph for this function:

void fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.updateLevel ( int  level) [inline, inherited]

Updates the level of the display laid out.

Parameters:
displaythe display laid out
levelthe level put to the display.

Reimplemented in fr.ove.openmath.jome.ctrlview.bidim.LimitLayout, fr.ove.openmath.jome.ctrlview.bidim.RootLayout, fr.ove.openmath.jome.ctrlview.bidim.IntegralLayout, fr.ove.openmath.jome.ctrlview.bidim.MapsArrayLayout, fr.ove.openmath.jome.ctrlview.bidim.MapsToSigmaLayout, fr.ove.openmath.jome.ctrlview.bidim.ScriptLayout, and fr.ove.openmath.jome.ctrlview.bidim.AbstractStringLayout.

Definition at line 126 of file DisplayLayout.java.

                                       {
        Display tmp;
        
        if (displayToLay.getUpdateLevel()) {
            // On met le niveau adéquat
            displayToLay.setLevel(level);
            // On scale le display en fonction du niveau
            displayToLay.scaleDisplay();
            // On n'a plus besoin de mettre à jour le niveau de l'instance
            displayToLay.setUpdateLevel(false);
            // Le comportement par défaut est que les displays enfant de l'instance courante
            // ont le même niveau que leur père.
            int count = displayToLay.getComponentCount();
            for (int i = 0; i < count; i++) {
                tmp = (Display) displayToLay.getComponent(i);
                ((DisplayLayout) tmp.getLayout()).updateLevel(level);
            }
        }
    }

Here is the call graph for this function:

Here is the caller graph for this function:

Checks the validity of the deselection.

Parameters:
displaythe display to deselect.

Implements fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.

Definition at line 220 of file BasicStringInfixOperatorLayout.java.

                                                     {
        Display father = displayToLay;
        Display tmp;
        SelectionEvent selEvt = new SelectionEvent(father);
        int rank = display.getRank();

        // Premier cas: father (i.e. le display géré par l'instance) est sélectionné.
        if (father.isSelected()) {
            // On l'enlève de la liste des displays sélectionnés.
            father.setNotSelected();
            selEvt.setAction(SelectionEvent.REMOVE, father);
            father.fireSelectionEvent(selEvt);

            // Comme on arrive dans cette méthode par display, display a été déjà désélectionné.
            // De plus, ce LM gère principalement (voire que) des displays N-aires dont il s'agit
            // la plupart du temps d'une succession de displays opérandes entre lesquels se trouvent
            // des displays opérateur (ex: + ou *).
            // Donc, s'ils existent, on doit alors désélectionner le display précédent et le display
            // suivant... display. (d'où récupération du rang de display au début)

            // On s'occupe du display précédant... display.
            if (rank > 0) {
                if (!(display.getListener() instanceof UnaryMinus)) {
                    // Il existe un display avant... display, donc on prend garde de le désélectionner,
                    // s'il était sélectionné.
                    tmp = ((Display) father.getComponent(rank-1));
                    if (tmp.isSelected()) {
                        // On désélectionne donc ledit display.
                        tmp.deselect();

                        // Maintenant, on regarde s'il existe un display précédent celui que l'on vient
                        // de désélectionner, qui est un display d'opérateur et qui est sélectionné.
                        // Si c'est le cas, on le désélectionne.
                        if (rank > 1) {
                            tmp = ((Display) father.getComponent(rank-2));
                            if (tmp.isSymbolOperatorDisplay() && tmp.isSelected())
                                tmp.deselect();
                        }
                    }
                }
            }

            // On s'occupe du display suivant... display.
            if (rank < (father.getComponentCount()-1)) {
                // Il existe un display après... display, donc on prend garde de le désélectionner,
                // s'il était sélectionné.
                tmp = ((Display) father.getComponent(rank+1));
                // Il faut faire attention dans le cas d'une addition où il y aurait un opérateur unaire.
                // (Normalement seulement un UnaryMinus). Dans le cas le plus simple, une soustraction: a-b
                // Si a-b est sélectionné et que l'on arrive ici parce on a désélectionné a, alors -b doit rester
                // sélectionné. D'où ce cas particulier supplémentaire.
                if (!(tmp.getListener() instanceof UnaryMinus)) {
                    if (tmp.isSelected()) {
                        tmp.deselect();

                        // Maintenant, on regarde s'il existe un display suivant celui que l'on vient
                        // de désélectionner, qui est un display d'opérateur et qui est sélectionné.
                        // Si c'est le cas, on le désélectionne.
                        if (rank < (father.getComponentCount()-2)) {
                            tmp = ((Display) father.getComponent(rank+2));
                            if (tmp.isSymbolOperatorDisplay() && tmp.isSelected())
                                tmp.deselect();
                        }
                    }
                }
                else
                    ((LeftAssocPrefixedUnaryOperatorLayout) tmp.getLayout()).setSelectLeftDisplay(false);
            }
            
            // On parcourre la liste des display de father et on ajoute dans la liste des sélectionnés,
            // ... les sélectionnés.
            for (int i = 0; i < father.getComponentCount(); i++) {
                tmp = (Display) father.getComponent(i);
                if (tmp.isSelected()) {
                    selEvt.setAction(SelectionEvent.ADD, tmp);
                    father.fireSelectionEvent(selEvt);
                }
            }
            
            // On regarde maintenant au niveau supérieur, si la désélection de father génère
            // une désélection qui est valide.
            if (father.getParent() instanceof Display) {
                father = (Display) father.getParent();
                FormulaTreeStructure fts = (FormulaTreeStructure) father.getListener();
                if (fts.getFather() != null)
                    ((DisplayLayout) father.getLayout()).validateDeselection(displayToLay);
            }
        }
        // Deuxième cas: father (i.e. le display géré par l'instance) n'est pas sélectionné.
        // Mais, il en a des sélectionnés, puisque display fait partie de sa descendance.
        else {
            // Et bien, on fait exactement la même chose que précédemment, à la différence importante
            // que là, les displays sélectionnés font partie de la liste des displays sélectionnés.
            // Il faut donc les y enlever.
            if (rank > 0) {
                if (!(display.getListener() instanceof UnaryMinus)) {
                    tmp = ((Display) father.getComponent(rank-1));
                    if (tmp.isSelected()) {
                        tmp.deselect();
                        selEvt.setAction(SelectionEvent.REMOVE, tmp);
                        father.fireSelectionEvent(selEvt);

                        if (rank > 1) {
                            tmp = ((Display) father.getComponent(rank-2));
                            if (tmp.isSymbolOperatorDisplay() && tmp.isSelected()) {
                                tmp.deselect();
                                selEvt.setAction(SelectionEvent.REMOVE, tmp);
                                father.fireSelectionEvent(selEvt);
                            }
                        }
                    }
                }
            }

            if (rank < (father.getComponentCount()-1)) {
                tmp = ((Display) father.getComponent(rank+1));
                // Il faut faire attention dans le cas d'une addition où il y aurait un opérateur unaire.
                // (Normalement seulement un UnaryMinus). Dans le cas le plus simple, une soustraction: a-b
                // Si a-b est sélectionné et que l'on arrive ici parce on a désélectionné a, alors -b doit rester
                // sélectionné. D'où ce cas particulier supplémentaire.
                if (!(tmp.getListener() instanceof UnaryMinus)) {
                    if (tmp.isSelected()) {
                        tmp.deselect();

                        // Maintenant, on regarde s'il existe un display suivant celui que l'on vient
                        // de désélectionner, qui est un display d'opérateur et qui est sélectionné.
                        // Si c'est le cas, on le désélectionne.
                        if (rank < (father.getComponentCount()-2)) {
                            tmp = ((Display) father.getComponent(rank+2));
                            if (tmp.isSymbolOperatorDisplay() && tmp.isSelected())
                                tmp.deselect();
                        }
                    }
                }
                else
                    ((LeftAssocPrefixedUnaryOperatorLayout) tmp.getLayout()).setSelectLeftDisplay(false);
            }
        }

        // Comme toujours, on contrôle maintenant, avec les éventuels displays sélectionnés restant,
        // si la sélection est valide.
        validateSelection();
        // On met à jour le display.
        father.repaint();
    }

Here is the call graph for this function:

Checks the validity of the selection.

Implements fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout.

Definition at line 110 of file BasicStringInfixOperatorLayout.java.

                                    {
        Display childDisplay;
        DisplayLayout childLayout;
        SelectionEvent selEvt = new SelectionEvent(displayToLay);
        
        int nbChild = displayToLay.getComponentCount();
        
        // On parcourre la liste des displays, et on regarde sur chacun des dispays s'il faut sélectionner
        // un de ses voisins.
        for (int i = 0; i < nbChild; i++) {
            childDisplay = (Display) displayToLay.getComponent(i);
            childLayout = (DisplayLayout) childDisplay.getLayout();
            
            // On regarde ici s'il faut sélectionner le display à gauche de childLayout
            // Si ledit display n'est pas sélectionner, on le sélectionne.
            if (childLayout.selectLeftDisplay() && (i > 0)) {
                childDisplay = (Display) displayToLay.getComponent(i-1);
                if (!childDisplay.isSelected())
                    childDisplay.select();
            }

            // On regarde ici s'il faut sélectionner le display à droite de childLayout
            // Si ledit display n'est pas sélectionner, on le sélectionne.
            if (childLayout.selectRightDisplay() && (i < (nbChild - 1))) {
                childDisplay = (Display) displayToLay.getComponent(i+1);
                if (!childDisplay.isSelected())
                    childDisplay.select();
                // On a sélectionné le display à la position i+1, donc on incrémente ici i,
                // pour que dans le for, le i soit encore incrémenté et que l'on se positionne
                // ainsi sur un display suivant, non sélectionné
                i++;
            }
        }
        
        // On parcourre la liste des displays et on regarde si les displays à gauche et à droite du display
        // courant ont des éléments sélectionnés. Si c'est le cas et que le display courant est un display
        // d'opérateur et qu'il n'est pas sélectionné, alors on sélectionne le display à gauche, le displa
        // d'opérateur et le display à droite.
        // Ex: (...) + (...), dans chacune des parenthèses, un élément est sélectionné, on sélectionne tout
        Display prev;
        Display next;
        for (int i = 1; i < (nbChild - 1); i++) {
            prev = (Display) displayToLay.getComponent(i-1);
            childDisplay = (Display) displayToLay.getComponent(i);
            next = (Display) displayToLay.getComponent(i+1);
            if (prev.gotSelectedElements() && next.gotSelectedElements()) {
                //if ((childDisplay instanceof StringDisplay) && !childDisplay.isSelected()) {
                if (childDisplay.isSymbolOperatorDisplay() && !childDisplay.isSelected()) {
                    if (!prev.isSelected())
                        prev.select();
                    childDisplay.select();
                    if (!next.isSelected())
                        next.select();
                }
            }
        }
        
        // On créé maintenant une liste contenant tous les displays qui ont été sélectionnés au cours des
        // opérations précédentes.
        Vector list = new Vector();
        for (int i = 0; i < nbChild; i++) {
            childDisplay = (Display) displayToLay.getComponent(i);
            if (childDisplay.gotSelectedElements())
                list.addElement(childDisplay);
        }

        if (list.size() > 0) {
            if ((list.size() == nbChild) && !(displayToLay.getListener() instanceof Formula) && !(displayToLay.getListener() instanceof Slot)) {
                selEvt.setAction(SelectionEvent.PURGE, null);
                displayToLay.fireSelectionEvent(selEvt);

                displayToLay.setSelected();
                selEvt.setAction(SelectionEvent.ADD, displayToLay);
                displayToLay.fireSelectionEvent(selEvt);
            }
            else if (list.size() != 1) {
                selEvt.setAction(SelectionEvent.PURGE, null);
                displayToLay.fireSelectionEvent(selEvt);

                for (Enumeration e = list.elements(); e.hasMoreElements(); ) {
                    childDisplay = (Display) e.nextElement();
                    if (!childDisplay.isSelected())
                        childDisplay.select();
                    selEvt.setAction(SelectionEvent.ADD, childDisplay);
                    displayToLay.fireSelectionEvent(selEvt);
                }
            }
        }
        
        // On a une sélection valide dans le display layed.
        // On demande la validation au niveau de son père.
        // En principe, à cause du test sur le fait d'avoir une Formula, pas besoin
        // d'avoir le test juste suivant. A surveiller.
        Display display = displayToLay;
        if (display.getParent() instanceof Display) {
            display = (Display) display.getParent();
            //if (!(display.getListener() instanceof Formula))
            FormulaTreeStructure fts = (FormulaTreeStructure) display.getListener();
            if (fts.getFather() != null)
                ((DisplayLayout) display.getLayout()).validateSelection();
        }
        
        display.repaint(); // faut voir, parce que autant de repaint que de display ?????????
    }

Here is the call graph for this function:

Here is the caller graph for this function:


Member Data Documentation

The display laid out by the instance.

Definition at line 47 of file DisplayLayout.java.

Do we need to insert an operator display ?

Definition at line 47 of file InfixOperatorLayout.java.

The number of the components already present before an other insertion or removal.

This is necessary to keep in mind this, in order to know if we must parse the list of components to check if we have to insert symbol display or not.

Definition at line 55 of file InfixOperatorLayout.java.


The documentation for this class was generated from the following file: