Package musicwriter.controller

Source Code of musicwriter.controller.PartitionPanelModeInsertionTemps

/*
* 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 musicwriter.donnees.Duree;
import musicwriter.donnees.Moment;
import musicwriter.donnees.Rational;
import musicwriter.donnees.actions.PartitionActionInsererTempsOuSupprimerTemps;
import musicwriter.gui.Graphics;
import musicwriter.gui.partitionaffichage.Systeme;

/**
*
* @author Ancmin
*/
public class PartitionPanelModeInsertionTemps extends PartitionPanelMode {

    private final Moment momentDebut;
    private Duree dureeAInserer = Duree.getDureeNulle();


    private Systeme getSysteme()
    {
        return getPartitionVue().getSysteme(momentDebut);
    }


    private int getXMoment()
    {
        return (int) (getSysteme().getXNotes(momentDebut) - getSysteme().ligneSupplementaireLongueurGet());
    }

   

    public PartitionPanelModeInsertionTemps(Controller controller, Moment momentDebut)
    {
        super(controller);
        this.momentDebut = momentDebut;
    }

    private void valider()
    {
        getHistoire().executer(new PartitionActionInsererTempsOuSupprimerTemps(getPartitionDonnees(), momentDebut, dureeAInserer.getFinMoment(momentDebut)));
        getPartitionVue().miseEnPageCalculer(momentDebut);
        getController().repaint();
        modeChanger(new PartitionPanelModeEcriture(getController()));
    }
   
   
    @Override
    public void mouseClicked(ControllerMouseEvent evt) {
        valider();
    }

    @Override
    public void mousePressed(ControllerMouseEvent evt) {

    }

    @Override
    public void mouseReleased(ControllerMouseEvent evt) {
        mouseClicked(evt);
    }

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

    @Override
    public void mouseMoved(ControllerMouseEvent evt) {
         if(evt.getX() <=  getXMoment())
         {
             //dureeAInserer = Duree.getDureeNulle();
             dureeAInserer = new Duree(momentDebut, getSysteme().getMoment(evt.getPoint()));
         }
         else
         {
             dureeAInserer = new Duree(new Rational(((int) (evt.getX() -  getXMoment())) / (int) Systeme.getNbpixelDureeNoireParDefaut(), 1));
         }
         getController().repaint();
    }

    @Override
    public void keyPressed(ControllerKeyEvent evt) {
        if(evt.getKeyCode()== KeyEvent.VK_LEFT)
        {
            dureeAInserer = dureeAInserer.moins(Duree.getDureeNoire());
            getController().repaint();
        }
        else if(evt.getKeyCode()== KeyEvent.VK_RIGHT)
        {
            dureeAInserer = dureeAInserer.plus(Duree.getDureeNoire());
            getController().repaint();
        }
        else if(evt.getKeyCode() == KeyEvent.VK_ESCAPE)
        {
            quitter();
        }
        else if(evt.getKeyCode() == KeyEvent.VK_ENTER)
        {
            valider();
        }
           
           
    }

    @Override
    public void keyReleased(ControllerKeyEvent evt) {

    }

    @Override
    public void keyTyped(ControllerKeyEvent evt) {
        if(evt.getKeyCode() == 0)
            modeChanger(new PartitionPanelModeEcriture(getController()));
    }


    private int getYHaut()
    {
        return (int) getSysteme().getYToutEnHaut();
    }

    private int getYMilieu()
    {
        return (int) (getYHaut() + getSystemeHeight()/2);
    }
   
    private int getSystemeHeight()
    {
        return (int) (getSysteme().getYToutEnBas() - getSysteme().getYToutEnHaut());
    }



    private int getLargeurTrou()
    {
        return (int) (dureeAInserer.getRational().getRealNumber() * Systeme.getNbpixelDureeNoireParDefaut());
    }

    @Override
    public void paintComponent(Graphics g) {
        /**
         * on décalle la partie droite du système (celle qu'on déplace)
         */

        if(dureeAInserer.isSuperieur(Duree.getDureeNulle()))
        {
       
            int x = getXMoment();
            int largeurTrou = getLargeurTrou();
            int y = (int) getYHaut();

/**
* TODO: modifier 1000 en taille de l'écran ou un truc comme ça
*/
            g.copyArea(x, y,
                       (int) (1000 - x),
                        getSystemeHeight(),
                        largeurTrou, 0);


            g.setColor(Color.WHITE);
            /**
             * on efface la fin du système (on le fait plus)
             */
           // g.fillRect((int) getSysteme().getXFin(), getYHaut(),  500, getSystemeHeight());

            /**
             * on efface la partie où il y a le trou
             */
            g.fillRect(getXMoment(), getYHaut(),  getLargeurTrou(), getSystemeHeight());

            /**
             * mais on affiche quand même les lignes du système (ça apparait vide
             * au niveau du trou où il y aura juste les lignes)
             */
            g.setColor(Color.BLACK);
            getSysteme().afficherPorteesLignes(g);


            /**
             * puis on affiche les barres morcelés au début et à la fin du trou
             */
            g.setPenWidth(4.0f);
            g.setColor(new Color(0.0f, 0.6f, 0.0f));
            getSysteme().afficherBarreCompleteMorcele(g, getXMoment());
            getSysteme().afficherBarreCompleteMorcele(g, getXMoment() + getLargeurTrou());

            /**
             * enfin, on affiche un rectangle blanc transparent au niveau du trou
             * pour montrer que c'est "nouveau", "transparent"
             */
            g.setAlpha(0.5f);
            g.setColor(Color.WHITE);
            g.fillRect(getXMoment(), getYHaut(),  getLargeurTrou(), getSystemeHeight());
           
            g.setColor(Color.BLACK);
            g.rotate(1.5, x+getLargeurTrou()/2, getYMilieu());
            g.drawString("zone à ajouter", x+getLargeurTrou()/- g.getFontStringWidth("zone à ajouter")/2, getYMilieu());
        }
        else
            //on supprime une zone
        {
            int x2 = getXMoment();
            int x1 = (int) getSysteme().getXNotes(dureeAInserer.getFinMoment(momentDebut));
            g.setPenWidth(4.0f);
            g.setColor(new Color(0.6f, 0.0f, 0.0f));
            getSysteme().afficherBarreCompleteMorcele(g, x2);
            getSysteme().afficherBarreCompleteMorcele(g, x1);
           
            g.setAlpha(0.5f );
            g.setColor(Color.WHITE);
            g.fillRect(x1, getYHaut(),  x2-x1, getSystemeHeight());
           
            g.setColor(Color.BLACK);
           // g.drawString("zone à supprimer", (x1+x2)/2 - g.getFontStringWidth("zone à supprimer"), getYMilieu());
            g.rotate(1.5, (x1+x2)/2, getYMilieu());
            g.drawString("zone à supprimer", (x1+x2)/- g.getFontStringWidth("zone à supprimer")/2, getYMilieu());
        }


    }

    @Override
    public void paintComponentAvant(Graphics g) {
       
    }

    private void quitter() {
        modeChanger(new PartitionPanelModeEcriture(getController()));
    }

}
TOP

Related Classes of musicwriter.controller.PartitionPanelModeInsertionTemps

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.