Logo Search packages:      
Sourcecode: wims version File versions

void fr::ove::openmath::jome::ctrlview::bidim::Display::moveSelectedDisplays ( int  mouseX  )  [inline, inherited]

Moves the selected displays to the mouse position.

Parameters:
mouseX the mouse position.

Definition at line 516 of file Display.java.

References fr::ove::openmath::jome::ctrlview::bidim::Display::computeInsertionPosition(), fr::ove::openmath::jome::ctrlview::bidim::Display::deselect(), fr::ove::openmath::jome::ctrlview::bidim::Display::fireSelectionEvent(), fr::ove::openmath::jome::model::FormulaTreeStructure::getAreOperandsMovable(), fr::ove::openmath::jome::ctrlview::bidim::selection::events::SelectionEvent::getArgument(), fr::ove::openmath::jome::ctrlview::bidim::Display::getAscent(), fr::ove::openmath::jome::model::Node::getFather(), fr::ove::openmath::jome::ctrlview::bidim::Display::getListener(), fr::ove::openmath::jome::ctrlview::bidim::Display::getWidth(), fr::ove::openmath::jome::ctrlview::bidim::Display::getX(), fr::ove::openmath::jome::ctrlview::bidim::Display::isSymbolOperatorDisplay, fr::ove::openmath::jome::model::FormulaTreeStructure::moveOperands(), and fr::ove::openmath::jome::ctrlview::bidim::selection::events::SelectionEvent::setAction().

Referenced by fr::ove::openmath::jome::ctrlview::bidim::Display::Display().

                                                 {
        SelectionEvent selectionEvent = new SelectionEvent(this);

        // On récupère la taille de la sélection.
        Integer selectionSize = null;
        selectionEvent.setAction(SelectionEvent.GET_SELECTION_SIZE, selectionSize);
        fireSelectionEvent(selectionEvent);
        selectionSize = (Integer) selectionEvent.getArgument();
        // Si différente de 0, on peut faire du drag'n drop de qque chose.
        if (selectionSize.intValue() != 0) {
            // On récupère la sélection entière.
            Vector selection = null;
            selectionEvent.setAction(SelectionEvent.GET_SELECTION, selection);
            fireSelectionEvent(selectionEvent);
            selection = (Vector) selectionEvent.getArgument();
            Display display = (Display) selection.elementAt(0);
            // On récupère le fts associé au display.
            FormulaTreeStructure fts = (FormulaTreeStructure) display.getListener();
            // On récupère l'opérateur dont les display sont les opérandes.
            fts = (FormulaTreeStructure) fts.getFather();
            // On fonction du type de cet opérateur, on permet ou pas le drag'n
            // drop.
            if (!fts.getAreOperandsMovable())
                return;  // Pour ces opérateur là, on ne permet pas le drag'n drop.

            // Il faut maintenant savoir où on va dropper la sélection.
            // On récupère le display de l'opérateur, et on cherche cette position
            display = (Display) display.getParent();
            
            // On ajuste la position de la souris pour qu'on soit en coordonnée relative
            // dans le repère de display.
            // ATTENTION : l'instance courante est celle qui a reçu le mouseDragged. Elle
            // a reçu également le mouseReleased. Ce qui fait que le mouseX est une coordonnée
            // relative à l'instance. Donc, pour ramener notre coordonnée relativement à display
            // il faut rajouter la coordonnée de l'instance.
            Display tmp = this;
            while (tmp != display) {
                mouseX += tmp.getX();
                tmp = (Display) tmp.getParent();
            }
            
            // On regarde si la position de la souris ainsi calculée est toujours contenue
            // dans le display. Si ce n'est pas le cas, on se trouve dans un cas particulier.
            int insertionPosition;
            if (mouseX <= 0) {
                // On a droppé à gauche de display, on insère donc au début de celui-ci
                // Cela revient à dropper sur le premier display de la liste.
                tmp = (Display) display.getComponentAt(1, display.getAscent());
                insertionPosition = tmp.computeInsertionPosition(1);
            }
            else if (mouseX >= display.getWidth()) {
                // On a droppé à droite de display, on insère donc à la fin de celui-ci
                // Cela revient dropper sur le dernier display de la liste.
                tmp = (Display) display.getComponentAt(display.getWidth() - 1, display.getAscent());
                insertionPosition = tmp.computeInsertionPosition(display.getWidth() - 1 - tmp.getX());
            }
            else {
                // On a droppé qque part dans display. On récupère ce display.
                tmp = (Display) display.getComponentAt(mouseX, display.getAscent());
                insertionPosition = tmp.computeInsertionPosition(mouseX - tmp.getX());
            }
            
            // On créé la liste des opérandes à permuter
            Vector operands = new Vector();
            for (Enumeration e = selection.elements(); e.hasMoreElements(); ) {
                tmp = (Display) e.nextElement();
                // Si l'on n'a pas affaire à un display d'operateur, alors on ajoute l'operande
                // dans la liste.
                if (!tmp.isSymbolOperatorDisplay()) {
                    tmp.deselect();
                    operands.addElement(tmp.getListener());
                }
            }
            
            // On fait la permutation
            // Faut-il rajouter l'événement pour rester dans la philosophie ???
            fts.moveOperands(operands, insertionPosition);
            
            // On purge la liste de sélection
            selectionEvent.setAction(SelectionEvent.PURGE, null);
            fireSelectionEvent(selectionEvent);
        }
    }


Generated by  Doxygen 1.6.0   Back to index