1 package org.woehlke.computer.kurzweil.mandelbrot.model.state;
2
3 import static org.woehlke.computer.kurzweil.mandelbrot.model.state.ApplicationState.*;
4 import static org.woehlke.computer.kurzweil.mandelbrot.model.state.ApplicationState.JULIA_SET_ZOOM;
5
6
7
8
9
10
11
12
13
14
15 public class ApplicationStateMachine {
16
17 private volatile ApplicationState applicationState;
18
19 public ApplicationStateMachine() {
20 this.applicationState = ApplicationState.MANDELBROT;
21 }
22
23 public void click(){
24 ApplicationState nextApplicationState = null;
25 switch (applicationState){
26 case MANDELBROT:
27 nextApplicationState = JULIA_SET;
28 break;
29 case JULIA_SET:
30 nextApplicationState = MANDELBROT;
31 break;
32 case MANDELBROT_ZOOM:
33 nextApplicationState = MANDELBROT_ZOOM;
34 break;
35 case JULIA_SET_ZOOM:
36 nextApplicationState = JULIA_SET_ZOOM;
37 break;
38 }
39 this.setApplicationState(nextApplicationState);
40 }
41
42 public void setModeSwitch() {
43 ApplicationState nextApplicationState = this.applicationState;
44 switch (applicationState){
45 case MANDELBROT:
46 case JULIA_SET:
47 break;
48 case MANDELBROT_ZOOM:
49 nextApplicationState = MANDELBROT;
50 break;
51 case JULIA_SET_ZOOM:
52 nextApplicationState = JULIA_SET;
53 break;
54 }
55 this.setApplicationState(nextApplicationState);
56 }
57
58 public void setModeZoom() {
59 ApplicationState nextApplicationState = this.applicationState;
60 switch (applicationState){
61 case MANDELBROT:
62 nextApplicationState = MANDELBROT_ZOOM;
63 break;
64 case JULIA_SET:
65 nextApplicationState = JULIA_SET_ZOOM;
66 break;
67 case MANDELBROT_ZOOM:
68 case JULIA_SET_ZOOM:
69 break;
70 }
71 this.setApplicationState(nextApplicationState);
72 }
73
74 public ApplicationState getApplicationState() {
75 return applicationState;
76 }
77
78 public void setApplicationState(ApplicationState applicationState) {
79 this.applicationState = applicationState;
80 }
81
82 }