Package musicwriter.controller

Source Code of musicwriter.controller.PartitionPanelModeSelection

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package musicwriter.controller;

import java.awt.Color;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import java.util.Set;
import musicwriter.donnees.Hauteur.Alteration;
import musicwriter.donnees.*;
import musicwriter.donnees.actions.*;
import musicwriter.gui.Graphics;
import musicwriter.gui.Poignee;
import musicwriter.gui.partitionaffichage.AffichageCrocheReliee;
import musicwriter.gui.partitionaffichage.AffichageElementMusical;
import musicwriter.gui.partitionaffichage.SelectionAffichage;

/**
*
* @author Ancmin
*/
public class PartitionPanelModeSelection extends PartitionPanelModeStyletEsquisse {

    private final Selection selection;
    private final SelectionAffichage selectionAffichage;
    private boolean selectionIsSousCurseur = true;
    static private final Color colorSelection = new Color(0.2f, 0.2f, 1.0f);//new Color(0.8f, 0.0f, 0.2f);
    private final Curseur plageSelectionCurseurReference;
    private final Curseur plageSelectionCurseurDeuxieme;



    static public Color getColorSelection() {
        return colorSelection;
    }

   





    public Selection getSelection() {
        return selection;
    }



    private Curseur plageSelectionCurseurDeuxieme()
    {
        if(plageSelectionCurseurDeuxieme == null)
        {
            if(selection.getCurseurFin().getMoment().isStrictementApres(plageSelectionCurseurReference.getMoment()))
            {
                return selection.getCurseurFin();
            }
            else
                return selection.getCurseurDebut();
        }
        else
            return plageSelectionCurseurDeuxieme;
       
    }
   


    private Set<Poignee> getPoignees() {
        Set<Poignee> S = new HashSet<Poignee>();

        if(selection.isSingleton())
        {
            AffichageElementMusical a = getPartitionVue().getAffichageElementMusical(
            selection.getElementMusicalUnique());
            if(a != null)
                S.addAll(a.getPoignees());
        }

        return S;
    }




    /**
     *
     * @param evt
     * @return la poignée sous le curseur souris proposée par evt
     * Si il n'y a pas de poignées, renvoie null.
     */
    private Poignee getPoignee(ControllerMouseEvent evt) {

        for(Poignee p : getPoignees())
        {
            if(p.isContientPoint(evt.getPoint()))
            {
                return p;
            }
        }
        return null;
    }

    private void dessinerSelection(Graphics g) {
            g.setColor(colorSelection);
            g.setPenWidth(2);

            getPartitionVue().afficherSelection(g, selection);

            for(Poignee p : getPoignees())
            {
                p.draw(g);
            }
    }




    public PartitionPanelModeSelection(Controller controller, Selection selection) {
        this(controller, selection, selection.getCurseurDebut(), null);

    }



    public PartitionPanelModeSelection(Controller controller,
                                       Selection selection,
                                       Curseur plageSelectionCurseurReference,
                                       Curseur plageSelectionCurseurDeuxieme) {
        super(controller);

        this.selection = selection;
        this.selectionAffichage = new SelectionAffichage(getPartitionVue(), selection);
        this.plageSelectionCurseurReference = plageSelectionCurseurReference;
        this.plageSelectionCurseurDeuxieme = plageSelectionCurseurDeuxieme;
        calculer();
        getController().update();
    }
  
    @Override
    public void mouseClicked(ControllerMouseEvent evt) {
       


    }



    @Override
    public void mousePressed(ControllerMouseEvent evt) {
        Curseur curseur = getController().getCurseur(evt.getPoint());

        /**
         * sélection par plage
         */
        if(evt.isShiftDown())
        {
            selectionEtendre(curseur);
            return;
        }

        if(getPoignee(evt) != null)
        {
//            getController().modifierSourisCurseur(getPoignee(evt).getCursor());
            modeChanger(new PartitionPanelModePoignee(getController(), getSelection(), getPoignee(evt)));
           
        }
        else
        if(getPartitionVue().getAffichageCrocheRelie(evt.getPoint()) != null)
        {
            AffichageCrocheReliee a = getPartitionVue().getAffichageCrocheRelie(evt.getPoint());
            Selection nouvelleselection;
            if(!isClavierToucheSpeciale(evt))
                 nouvelleselection = new Selection();
            else
                nouvelleselection = selection;

                nouvelleselection.selectionAjouter(a.getSelection());

                modeChanger(new PartitionPanelModeSelectionDeplacementOuCopie(getController(),
                                                                          curseur,
                                                                          nouvelleselection));
        }
        else
        if(curseur.isSurElementMusical())
        {

            if(!selection.contains(curseur.getElementMusical()))
            {
                Selection nouvelleselection;
                if(!isClavierToucheSpeciale(evt))
                     nouvelleselection = new Selection();
                else
                    nouvelleselection = selection;

                nouvelleselection.elementMusicalAjouter(curseur.getElementMusical());

                modeChanger(new PartitionPanelModeSelectionDeplacementOuCopie(getController(),
                                                                          curseur,
                                                                          nouvelleselection));
            }
            else
                //le curseur est sous l'élément musical
            {
                modeChanger(new PartitionPanelModeSelectionDeplacementOuCopie(getController(),
                                                                          curseur,
                                                                          getSelection()));
            }

           

//            if(isClavierToucheSpeciale(evt))
//                getController().modifierSourisCurseurMainQuiPrendPlus();
//            else
//                getController().modifierSourisCurseurMainQuiPrend();
        }
        else if(selectionAffichage.isPointInSelectionPolygones(evt.getPoint()))
        {
            modeChanger(new PartitionPanelModeSelectionDeplacementOuCopie(getController(),
                                                                          curseur,
                                                                          selection));
//            if(isClavierToucheSpeciale(evt))
//                getController().modifierSourisCurseurMainQuiPrendPlus();
//            else
//                getController().modifierSourisCurseurMainQuiPrend();
        }
        else
        {
            super.mousePressed(evt);
        }

    }








    @Override
    public void mouseReleased(ControllerMouseEvent evt) {

/**
* copier-coller à la UNIX
*/
        if(evt.isMiddleButton())
        {
            Selection selectionAAjouter = this.selection.clone();
            selectionAAjouter.setDebutMoment(getController().getCurseurSouris().getMoment());
            getHistoire().executer(new PartitionActionSelectionInserer(selectionAAjouter));
            getController().calculer(selectionAAjouter.getMomentDebut());
            selectionChanger(selectionAAjouter);
           
            return;
        }


       
        Selection selectionProchaine = traiterSelectionPolygoneStyloEsquisse(getStyloEsquisse());
//        getController().getFenetrePrincipale().modeSelection(getSelection());
        getController().update();
       
        if(!isClavierToucheSpeciale(evt))
            //pas de touche spéciale comme ctrl, maj
        {
            if(selectionProchaine.isVide())
            {
                if(!selectionAffichage.isPointInSelectionPolygones(evt.getPoint()))
                     modeChanger(new PartitionPanelModeEcriture(getController()));
            }
            else
                selectionChanger(selectionProchaine);
        }
        else
            // on a appuyé sur maj, ctrl etc.
        {
            getSelection().ajouterSelection(selectionProchaine.getElementsMusicaux());
            selectionChanger(getSelection());
        }

        super.mouseReleased(evt);

    }

    @Override
    public void mouseDragged(ControllerMouseEvent evt) {
        super.mouseDragged(evt);
    }

    @Override
    public void mouseMoved(ControllerMouseEvent evt) {
        super.mouseMoved(evt);

        if(getPoignee(evt) != null)
            //on est sous une poignée
        {
//            getController().modifierSourisCurseur(getPoignee(evt).getCursor());
        }
        else
        if(getController().getCurseurSouris().isSurElementMusical() ||
           selectionAffichage.isPointInSelectionPolygones(evt.getPoint()) ||
           getPartitionVue().getAffichageCrocheRelie(evt.getPoint()) != null)
        {
            //when we have a selection under the mouse
            getController().fireCursorOverSomething();
            selectionSousCurseur();
        }
        else
        {
            //pas sur la sélection, sur rien
            getController().fireCursorOverNothing();
            selectionPasSousCurseur();
        }
    }

    @Override
    public void keyPressed(ControllerKeyEvent evt) {
//         if(isClavierToucheSpeciale(evt))
//             getFenetrePrincipale().modeSelectionPlus();
    //     DureeEntreeFractionPanel.tryDureePanel(evt, getController());

         /**
          * on échange les notes et les silences ;) si la touche espace a été
          * appuyé
          */
         if(evt.getKeyChar() == ' ')
         {
             PartitionActionSelectionNoteSilenceSwitcher action = new PartitionActionSelectionNoteSilenceSwitcher(getSelection());
             getHistoire().executer(action);
             getController().calculerModificationSelection();
             selectionChanger(action.getSelectionFutur());
         }


       
        if(evt.getKeyCode() == KeyEvent.VK_LEFT & evt.isControlDown())
         {
             selectionDeplacementTemporelRelatifMesureAvant();

         }
        else if(evt.getKeyCode() == KeyEvent.VK_RIGHT & evt.isControlDown())
         {
             selectionDeplacementTemporelRelatifMesureApres();
         }
        else if(evt.getKeyCode() == KeyEvent.VK_LEFT & evt.isShiftDown())
        {
            selectionEtendreGauche();
        }
        else if(evt.getKeyCode() == KeyEvent.VK_RIGHT & evt.isShiftDown())
        {
            selectionEtendreDroite();
        }
        else if(evt.getKeyCode() == KeyEvent.VK_UP & evt.isShiftDown())
        {
            selectionEtendreHaut();
        }
        else if(evt.getKeyCode() == KeyEvent.VK_DOWN & evt.isShiftDown())
        {
            selectionEtendreBas();
        }
        else if(evt.getKeyCode() == KeyEvent.VK_UP)
         {
             selectionDeplacementRelatif(1);
         }
        else if(evt.getKeyCode() == KeyEvent.VK_DOWN)
         {
             selectionDeplacementRelatif(-1);
         }
        else if(evt.getKeyCode() == KeyEvent.VK_LEFT)
         {
             selectionDeplacementTemporelRelatifAvant();

         }
        else if(evt.getKeyCode() == KeyEvent.VK_RIGHT)
         {
             selectionDeplacementTemporelRelatifApres();
         }

        else if((evt.getKeyCode() == KeyEvent.VK_ESCAPE) || (evt.getKeyCode() == KeyEvent.VK_ENTER))
        {
            modeChanger(new PartitionPanelModeEcriture(getController()));
            getController().setCurseurSouris(selection.getCurseurFin());
        }
        else
        {
            if(DureeSaisie.traiter(getNumber(evt)))
                getController().selectionElementsMusicauxDureeSet(DureeSaisie.getDuree());
        }




    }

    @Override
    public void keyReleased(ControllerKeyEvent evt) {
//         if(!isClavierToucheSpeciale(evt))
//         {
//              getFenetrePrincipale().modeSelectionPasPlus();
//
//         }
    }

    @Override
    public void keyTyped(ControllerKeyEvent evt) {
    }

    @Override
    public void paintComponentAvant(Graphics g) {
        selectionAffichage.drawSelectionFond(g, selectionIsSousCurseur);
    }






    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        dessinerSelection(g);
       
    }

    private void selectionSousCurseur() {
        selectionIsSousCurseur = true;
        getController().repaint();
    }

    private void selectionPasSousCurseur() {
        selectionIsSousCurseur = false;
        getController().repaint();
    }

    private void selectionDeplacementRelatif(int deplacementRelatif) {
        PartitionAction a = new PartitionActionSelectionDeplacerHauteur(
                getSelection(),
                new Intervalle(deplacementRelatif,
                               Alteration.NATUREL));
        getController().calculer(Moment.min(getSelection().getMomentDebut(),
                                                   getSelection().getMomentDebut()));
        getHistoire().executer(a);
        selectionChanger(selection);
    }



    private void selectionDeplacementTemporel(Moment selectionMomentDebut, Moment selectionMomentDebutNouveau) {
     
        getHistoire().executer(new PartitionActionSelectionTempsDeplacer(selection, new Duree(selectionMomentDebut, selectionMomentDebutNouveau)));
        getController().calculer(Moment.min(selectionMomentDebut, selectionMomentDebutNouveau));
        selectionChanger(new Selection(selection.getElementsMusicaux()));

    }

   
    private void selectionDeplacementTemporelRelatifAvant() {
        final Moment moment = selection.getMomentDebut();
       final Moment momentNouveau = getPartitionDonnees().getMomentPrecedent(moment);

       selectionDeplacementTemporel(moment, momentNouveau);

    }



    private void selectionDeplacementTemporelRelatifApres() {
       final Moment moment = selection.getMomentDebut();
       final Moment momentNouveau = getPartitionDonnees().getMomentSuivant(moment);

       selectionDeplacementTemporel(moment, momentNouveau);

    }

    private void selectionDeplacementTemporelRelatifMesureAvant() {
       final Moment moment = selection.getMomentDebut();
       final Moment momentNouveau = getPartitionDonnees().getMesurePrecedenteMomentDebut(moment);

       selectionDeplacementTemporel(moment, momentNouveau);
    }

    private void selectionDeplacementTemporelRelatifMesureApres() {
       final Moment moment = selection.getMomentDebut();
       final Moment momentNouveau = getPartitionDonnees().getMesureSuivanteMomentDebut(moment);

       selectionDeplacementTemporel(moment, momentNouveau);
    }



    private void selectionEtendre(Curseur curseurDeuxieme)
    {
        modeChanger(new PartitionPanelModeSelection(getController(),
                getPartitionDonnees().getSelectionPlage(plageSelectionCurseurReference,
                                                                curseurDeuxieme),
                plageSelectionCurseurReference,
                curseurDeuxieme));

    }

   
    private void selectionEtendreGauche() {
       final Curseur curseurDeuxieme = getPartitionDonnees().getCurseurMomentPrecedent(plageSelectionCurseurDeuxieme());
       selectionEtendre(curseurDeuxieme);
    }



    private void selectionEtendreHaut()
    {
        final Curseur curseurDeuxieme = getPartitionDonnees().getCurseurPorteeUneEnHaut(plageSelectionCurseurDeuxieme());
       selectionEtendre(curseurDeuxieme);
    }


    private void selectionEtendreBas()
    {
        final Curseur curseurDeuxieme = getPartitionDonnees().getCurseurPorteeUneEnBas(plageSelectionCurseurDeuxieme());
       selectionEtendre(curseurDeuxieme);
    }


    private void selectionEtendreDroite() {
       final Curseur curseurDeuxieme = getPartitionDonnees().getCurseurMomentSuivant(plageSelectionCurseurDeuxieme());
       selectionEtendre(curseurDeuxieme);
    }

    private void selectionChanger(Selection newSelection)
    {
        modeChanger(new PartitionPanelModeSelection(getController(), newSelection));
    }

   
   
    private Alteration intToAlteration(int i)
    {
        if(i < 0)
            return Alteration.DIESE;
        else
            return Alteration.BEMOL;
       
    }
   


   
   
   

}



//if(evt.getKeyCode() == KeyEvent.VK_DOWN)//enharmonie
//    {
//        if(getPartitionPanel().isSelection())
//        {
//            histoire.executer(
//                    new PartitionActionSelectionPorteeChanger(
//                          getPartitionDonnees(),
//                          getPartitionPanel().getSelection(),
//                          1));
//            getPartitionPanel().calculerModificationSelection();
//            getPartitionPanel().repaint();
//        }
//    }
//
//
//    if(evt.getKeyCode() == KeyEvent.VK_UP)//enharmonie
//    {
//        if(getPartitionPanel().isSelection())
//        {
//            histoire.executer(
//                    new PartitionActionSelectionPorteeChanger(
//                          getPartitionDonnees(),
//                          getPartitionPanel().getSelection(),
//                          -1));
//            partitionVue.miseEnPageCalculer();
//            getPartitionPanel().repaint();
//        }
//    }
TOP

Related Classes of musicwriter.controller.PartitionPanelModeSelection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.