diff --git a/shukan/ShukanController.java b/shukan/ShukanController.java index 7ad2f7b25971399fa6b810090b130c7f6229c5e6..772bc3421324cba5d1a99a3ee74dc89c3a3ca798 100644 --- a/shukan/ShukanController.java +++ b/shukan/ShukanController.java @@ -2,6 +2,7 @@ package shukan; import javax.swing.*; import java.awt.*; import java.awt.event.*; +import java.util.Stack; /** @@ -17,6 +18,7 @@ public class ShukanController private ShukanViewBar bar; /** Controlled application data. */ private ShukanData data; + private Stack<Integer> actionStack; /** Constructs a event handler. * @param canvas display area. @@ -25,6 +27,7 @@ public class ShukanController this.canvas = canvas; this.bar = bar; this.data = data; + this.actionStack = new Stack<>(); } @@ -55,6 +58,13 @@ public class ShukanController { switch (e.getKeyCode ()) { + case KeyEvent.VK_Z : + if (pressed && e.isControlDown ()) + { + int lastAction = actionStack.pop(); + revertAction(lastAction); + } + break; case KeyEvent.VK_Q : case KeyEvent.VK_ESCAPE : if (! pressed) @@ -92,7 +102,34 @@ public class ShukanController } } - +private void revertAction(int action) +{ + switch (action) + { + case 0: + canvas.deleteActivity(); + canvas.repaint(); + break; + case 1: + System.out.println("revert delete activity"); + break; + case 2: + data.followRight(); + canvas.repaint(); + break; + case 3: + data.followLeft(); + canvas.repaint(); + break; + case 4: + data.exchangeExtremes (); + canvas.repaint (); + break; + case 5: + data.toggleCursus(false); + canvas.repaint(); + } +} /** Invoked when a key has been typed. * Implementation from KeyListener. @@ -201,37 +238,47 @@ public class ShukanController * @param e detected action event * */ public void actionPerformed(ActionEvent e){ - if (e.getSource()== bar.buttons[0]) + 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[1]) { + int lastAction = actionStack.pop(); + revertAction(lastAction); + } else if (e.getSource()==bar.buttons[2]) { canvas.newActivity(); canvas.repaint(); + actionStack.push(0); + } + else if (e.getSource()==bar.buttons[3]) + { + canvas.deleteActivity(); + actionStack.push(1); } - else if (e.getSource()==bar.buttons[3]) canvas.deleteActivity(); - else if (e.getSource()==bar.buttons[4]) {if (data.followLeft ()) canvas.repaint ();} + else if (e.getSource()==bar.buttons[4]) {if (data.followLeft ()) {canvas.repaint (); actionStack.push(2);}} - else if (e.getSource()==bar.buttons[5]) {if (data.followRight ()) canvas.repaint ();} + else if (e.getSource()==bar.buttons[5]) {if (data.followRight ()) {canvas.repaint (); actionStack.push(3);}} else if (e.getSource()== bar.buttons[6]) { data.exchangeExtremes (); canvas.repaint (); + actionStack.push(4); } else if (e.getSource()== bar.buttons[7]) { data.toggleCursus(false); canvas.repaint(); + actionStack.push(5); } //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);