Skip to content
Snippets Groups Projects
ShukanController.java 6.01 KiB
package shukan;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


/** Shukan controller
  */
public class ShukanController
           implements KeyListener, MouseListener, ActionListener//, MouseMotionListener
{
  /** Controlled display area. */
  private ShukanView canvas;
  /** Controlled display bar */
  private ShukanViewBar bar;
  /** Controlled application data. */
  private ShukanData data;
  /** Controlled display student bar*/
  ShukanStudent student;

   /** Constructs a event handler.
    * @param canvas display area.
    */
    public ShukanController(ShukanView canvas, ShukanViewBar bar, ShukanData data, ShukanStudent student) {
      this.canvas = canvas;
      this.bar = bar;
      this.data = data;
      this.student = student;
    }


  /** Invoked when a key has been pressed.
    * Implementation from KeyListener.
    * @param e detected key event.
    */
  public void keyPressed (KeyEvent e)
  {
    processKeyEvent (e, true);
  }

  /** Invoked when a key has been released.
    * Implementation from KeyListener.
    * @param e detected key event.
    */
  public void keyReleased (KeyEvent e)
  {
    processKeyEvent (e, false);
  }

  /** Invoked when a key has been pressed or released.
    * Local implementation from KeyListener.
    * @param e detected key event.
    * @param pressed pressed or released key status.
    */
  private void processKeyEvent (KeyEvent e, boolean pressed)
  {
    switch (e.getKeyCode ())
    {
      case KeyEvent.VK_Q :
      case KeyEvent.VK_ESCAPE :
        if (! pressed)
        {
          canvas.saveData ();
          //data.check ();
          System.exit (0);
        }
        break;
      case KeyEvent.VK_E :   // edit
        if (! pressed) new ShukanTex (data);
        break;
      case KeyEvent.VK_LEFT :
      case KeyEvent.VK_KP_LEFT :
        if (pressed)
        {
          data.toggleLoad (-1);
          canvas.repaint ();
        }
        break;
      case KeyEvent.VK_RIGHT :
      case KeyEvent.VK_KP_RIGHT :
        if (pressed)
        {
          data.toggleLoad (1);
          canvas.repaint ();
        }
      case KeyEvent.VK_X :
        if (pressed && e.isControlDown ())
        {
          data.exchangeExtremes ();
          canvas.repaint ();
        }
        break;
    }
  }

  

  /** Invoked when a key has been typed.
    * Implementation from KeyListener.
    * @param e detected key event.
    */
  public void keyTyped (KeyEvent e)
  {
    switch (e.getKeyChar ())
    {
      case 'l' :
        if (data.followLeft ()) canvas.repaint ();
        break;
      case 'm' :
        if (data.followRight ()) canvas.repaint ();
        break;
      case 'L' :
        if (data.left ()) canvas.repaint ();
        break;
      case 'M' :
        if (data.right ()) canvas.repaint ();
        break;
      case 'o' :
        if (data.left ()) canvas.repaint ();
        break;
      case 'p' :
        if (data.right ()) canvas.repaint ();
        break;
    }
  }

  /** Invoked when the mouse button has been clicked (pressed and released)
    * on a component.
    * Implementation from MouseListener.
    * @param e detected mouse event.
    */
  public void mouseClicked (MouseEvent e)
  {
    if (e.getButton () == MouseEvent.BUTTON1)
    {
      if (e.isShiftDown ())
      {
        if (canvas.select (e.getX (), e.getY (), true))
          canvas.repaint ();
      }
      else
      {
        if (canvas.select (e.getX (), e.getY (), false))
        canvas.repaint ();
      }
    }

    // Manage the double click to open a new window
    if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
      canvas.SpecWeekModuleWindow();
    }

    if (e.getButton () == MouseEvent.BUTTON3)
    {
      if (e.isShiftDown ())
      {
        if (canvas.selectActivity (e.getX (), e.getY (), true))
          canvas.repaint ();
      }
      else
      {
        if (canvas.selectActivity (e.getX (), e.getY (), false))
        canvas.repaint ();
      }
    }
  }

  /** Invoked when the mouse enters a component.
    * Implementation from MouseListener.
    * @param e detected mouse event.
    */
  public void mouseEntered (MouseEvent e)
  {
  }

  /** Invoked when the mouse exits a component.
    * Implementation from MouseListener.
    * @param e detected mouse event.
    */
  public void mouseExited (MouseEvent e)
  {
  }

  /** Invoked when a mouse button has been pressed on a component.
    * Implementation from MouseListener.
    * @param e detected mouse event.
    */
  public void mousePressed (MouseEvent e)
  {
  }

  /** Invoked when a mouse button has been released on a component.
    * Implementation from MouseListener.
    * @param e detected mouse event.
    */
  public void mouseReleased (MouseEvent e)
  {
  }

  /** Invoked when a button has been clicked
   * Implementation from actionListener
   * @param e detected action event
   * */
  public void actionPerformed(ActionEvent e){
    if (e.getSource()== bar.buttons[0])
      canvas.saveData ();
    else if (e.getSource()== bar.buttons[1])
      System.out.println("back");
    else if (e.getSource()==bar.buttons[2])
      System.out.println("plus");
    else if (e.getSource()==bar.buttons[3])
      System.out.println("delete");
    else if (e.getSource()==bar.buttons[4]) {if (data.followLeft ()) canvas.repaint ();}

    else if (e.getSource()==bar.buttons[5]) {if (data.followRight ()) canvas.repaint ();}

    else if (e.getSource()== bar.buttons[6])
    {
      data.toggleCursus(false);
      student.changeStudentHeight(95);
      canvas.repaint();
    }
    else if (e.getSource() == bar.buttons[7])
    {
      data.toggleCursus(true);
      canvas.repaint();
    }
      //if (data.followRight ()) canvas.repaint ();
    else if (e.getSource()==bar.buttons[8])
      new ShukanTex (data);
    else if (e.getSource()==bar.buttons[9]){
    
      EventQueue.invokeLater(() -> {
        ShukanParameters myParameters = new ShukanParameters("Changer de thème", canvas);
        myParameters.setSize(300, 300);
        myParameters.setVisible(true);
      });
    }
    canvas.requestFocusInWindow();
  }
}