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(); } }