Package musicwriter.controller

Source Code of musicwriter.controller.NotesDeplacementSouris

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

package musicwriter.controller;

import musicwriter.donnees.actions.PartitionActionSelectionInserer;
import musicwriter.gui.partitionaffichage.PartitionVue;
import musicwriter.donnees.*;
import java.awt.Color;
import musicwriter.gui.Graphics;
import musicwriter.donnees.actions.PartitionActionSelectionRemplacer;


/**
* Cette classe gère le déplacement à la souris d'une sélection d'éléments musicaux.
* Ca gère la transposition (déplacement vertical), changement de portées (déplacement vertical),
* changement de moments (déplacement horizontal).
* @author Ancmin
*/
public class NotesDeplacementSouris
    {
        private final Curseur referenceCurseur;
        private final Selection selection;
        private final Controller partitionPanel;
        private Curseur referenceCurseurFutur;
        private boolean effectuerCopie = false;

        private static final Color colorElementMusicalDeplace = PartitionPanelModeSelection.getColorSelection();


        public NotesDeplacementSouris(Controller partitionPanel, Curseur referenceCurseur, Selection selection)
        {
            this.referenceCurseur = referenceCurseur;
            this.referenceCurseurFutur = referenceCurseur.clone();
            this.selection = selection;
            this.partitionPanel = partitionPanel;
        }




        private PartitionDonnees getPartitionDonnees()
        {
            return (PartitionDonnees) getPartitionVue().getPartitionDonnees();
        }

        public void setReferenceCurseurFutur(Curseur referenceCurseurFutur)
        {
            this.referenceCurseurFutur = referenceCurseurFutur;
        }



        public Curseur getReferenceCurseur() {
            return referenceCurseur;
        }

        public Curseur getReferenceCurseurFutur() {
            return referenceCurseurFutur;
        }


   






        /**
         * effectue le déplacement
         */
        public void effectuer() {
            if(!isTrivial())
            {
                Selection selectionFutur = getSelectionFutur();
                getHistoire().executer(
                        new PartitionActionSelectionRemplacer(selection, selectionFutur ));
                partitionPanel.calculer(Moment.min(getSelection().getMomentDebut(),
                                                   selectionFutur.getMomentDebut()));
                partitionPanel.setSelection(selectionFutur);
               
            }
            else
            {
                partitionPanel.setSelection(getSelection());
            }
        }


        /**
         * effectue une copie
         */
        public void effectuerCopie() {
            if(!isTrivial())
            {
                Selection selectionFutur = getSelectionFutur();
                getHistoire().executer(
                        new PartitionActionSelectionInserer( selectionFutur ));
                partitionPanel.calculer(Moment.min(getSelection().getMomentDebut(),
                                                   selectionFutur.getMomentDebut()),
                                        Moment.max(getSelection().getFinMomentElementMusicalDebute(),
                                                   selectionFutur.getFinMomentElementMusicalDebute()));
                partitionPanel.setSelection(selectionFutur);
               
            }
            else
            {
                partitionPanel.setSelection(getSelection());
            }
        }


       


        /**
         * affiche les éléments musicaux flottants qu'on est en train de déplacer
         * @param g
         */
        public void afficher(Graphics g)
        {
            g.setColor(colorElementMusicalDeplace);
            g.setPenWidth(2);
            getPartitionVue().afficherSelectionDehors(g, getSelectionFutur());
        }










/**
*
* @return la sélection mais déplacée sur la portée, moment indiqué par la souris
* + transposée aussi.
*/
        private Selection getSelectionFutur()
        {
            final Selection selectionfutur = new Selection();

            final Intervalle intervalle = getIntervalle();
            final Duree dureeDeplacement = getDureeDeplacement();


            for(ElementMusical el : getSelection().getElementsMusicaux())
            {
                final ElementMusical elnouveau = (ElementMusical) el.clone();
                elnouveau.deplacerRelatif(dureeDeplacement, intervalle, getPartitionDonnees(), getPorteeDeplacement());
                selectionfutur.elementMusicalAjouter(elnouveau);




            }

            return selectionfutur;


        }






/**
*
* @return true ssi le déplacement est trivial... autrement dit, true ssi rien n'est
* fait : pas de transposition, pas de changement de portées et pas de déplacement horizontal
*/
        public boolean isTrivial() {
            return getIntervalle().isNull() &&
               getDureeDeplacement().isZero() &&
               (getPorteeDeplacement() == 0);
        }

        private PartitionVue getPartitionVue() {
            return partitionPanel.getPartitionVue();
        }



        private Selection getSelection() {
            return selection;
        }


        private Intervalle getIntervalle()
        {
            return new Intervalle(this.referenceCurseur.getHauteur(),
                                  this.referenceCurseurFutur.getHauteur());
        }


        private Duree getDureeDeplacement()
        {
            return new Duree(this.referenceCurseur.getMoment(),
                             this.referenceCurseurFutur.getMoment());
        }



        private int getPorteeDeplacement()
        {
            if(this.referenceCurseur.getPortee() != null)
                   return this.referenceCurseurFutur.getPortee().getNumeroAffichage()
                        - this.referenceCurseur.getPortee().getNumeroAffichage();
            else
                return 0;
        }



        private Histoire getHistoire()
        {
            return partitionPanel.getHistoire();

        }

        public void setModeEffectuerCopie() {
            effectuerCopie = true;
         //   partitionPanel.modifierSourisCurseurMainQuiPrendPlus();
        }

        public void setModeEffectuerDeplacement() {
            effectuerCopie = false;
         //   partitionPanel.modifierSourisCurseurMainQuiPrend();
        }




        public boolean isEffectueraCopie()
        {
            return effectuerCopie;
        }

        public void setAlterationMoins() {
            final int a = referenceCurseurFutur.getHauteur().getAlteration().getNumero();
            referenceCurseurFutur.getHauteur().setAlteration(a-1);
        }


        public void setAlterationPlus() {
            final int a = referenceCurseurFutur.getHauteur().getAlteration().getNumero();
            referenceCurseurFutur.getHauteur().setAlteration(a+1);
        }
       
    }
TOP

Related Classes of musicwriter.controller.NotesDeplacementSouris

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.