/[gzz]/gzz/gzz/modules/pp/EventHandling.java
ViewVC logotype

Diff of /gzz/gzz/modules/pp/EventHandling.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by mudyc, Thu Dec 19 16:06:20 2002 UTC revision 1.2 by mudyc, Fri Dec 20 18:23:57 2002 UTC
# Line 2  Line 2 
2    
3  package gzz.modules.pp;  package gzz.modules.pp;
4    
5    import gzz.view.AbstractViewContext;
6  import gzz.vob.VobScene;  import gzz.vob.VobScene;
7  import gzz.util.Pair;  import gzz.util.Pair;
8    
# Line 13  import java.util.*; Line 14  import java.util.*;
14   * STATE: PROTOTYPE   * STATE: PROTOTYPE
15   */   */
16  public class EventHandling {  public class EventHandling {
17      public void pa(String s) { System.out.println(s); }      public boolean dbg = false;
18        private void pa(String s) { System.out.println(s); }
19            
20      // Singleton      // Singleton
21          static private EventHandling instance;          static private EventHandling instance;
# Line 33  public class EventHandling { Line 35  public class EventHandling {
35      private Map callers = new TreeMap();      private Map callers = new TreeMap();
36      private Map ev_handlers = new TreeMap();      private Map ev_handlers = new TreeMap();
37    
   
   
38      private final int MASK  = 10000000;      private final int MASK  = 10000000;
39      private final int CLICK = 20000000;      private final int CLICK = 20000000;
40      private final int DRAG  = 30000000;      private final int DRAG  = 30000000;
41    
42    
43      // give cs.      // give cs.
44        public void onClick(int cs, String key) { onClick(cs, key, null); }
45      public void onClick(int cs, String key, Object[] obs) {      public void onClick(int cs, String key, Object[] obs) {
46          callers.put(""+(cs + CLICK), new Pair(key, obs) );          callers.put(""+(cs + CLICK), new Pair(key, obs) );
47      }      }
48    
49        public void onDrag(int cs, String key) { onDrag(cs, key, null); }
50      public void onDrag(int cs, String key, Object[] obs) {      public void onDrag(int cs, String key, Object[] obs) {
51          callers.put(""+(cs + DRAG), new Pair(key, obs) );          callers.put(""+(cs + DRAG), new Pair(key, obs) );
52      }      }
53    
54        // give object
55      public void assign(String key, Object obs) {      public void assign(String key, Object obs) {
56          ev_handlers.put(key, obs);          ev_handlers.put(key, obs);
57      }      }
58    
59        /** If someone wants to pass new time the event call
60         */
61        public void passEvent(String key, MouseEvent ev, Object[] obs) {
62            Object ev_h = ev_handlers.get(key);
63            if (ev_h instanceof EventMouseObj)
64                ((EventMouseObj)ev_h).event(ev, press_state, obs);
65        }
66    
67    
68        /** Used to clean callers at the beginning of render.
69         */
70        public void cleanCallers() {
71            callers = new TreeMap();
72        }
73    
74    
75    
76            
77      private int last_cs = -10;      private String last_key = null;
78        private boolean just_pressed = false;
79        private boolean dragging = false;
80        private MousePressState press_state = null;
81        public EventMouseObj when_pressed = null;
82        
83    
84      public void handleEvent(VobScene vs, MouseEvent ev) {      public void handleEvent(VobScene vs, MouseEvent ev) {
85    
86          int cs = vs.getCSAt(0, ev.getX(), ev.getY(), null);          int cs = vs.getCSAt(0, ev.getX(), ev.getY(), null);
87          pa("cs: " + cs);          if (dbg) pa("cs: " + cs);
88    
89          switch(ev.getID()) {          switch(ev.getID()) {
         case MouseEvent.MOUSE_CLICKED: {  
             cs += CLICK;  
             pa("mouse click");  
             break;  
         }  
90          case MouseEvent.MOUSE_PRESSED: {          case MouseEvent.MOUSE_PRESSED: {
91              pa("mouse pressed");              press_state = new MousePressState(ev.getX(), ev.getY(),
92                                                  ev.getModifiers());
93                if (when_pressed != null)
94                    when_pressed.event(ev, press_state, null);
95    
96                dragging = false;
97                just_pressed = true;
98                if (dbg) pa("mouse pressed");
99              break;              break;
100          }          }
101          case MouseEvent.MOUSE_EXITED: {          case MouseEvent.MOUSE_CLICKED: {
102              pa("mouse exited");              dragging = false;
103              last_cs = -1;              just_pressed = false;
104                cs += CLICK;
105                if (dbg) pa("mouse click");
106              break;              break;
107          }          }
108          case MouseEvent.MOUSE_DRAGGED: {          case MouseEvent.MOUSE_DRAGGED: {
109                dragging = true;
110              cs += DRAG;              cs += DRAG;
111              pa("mouse dragged");              if (dbg) pa("mouse dragged");
112              break;              break;
113          }          }
114                /*
115                  case MouseEvent.MOUSE_EXITED: {
116                    if (dbg) pa("mouse exited");
117                    break;
118                  }
119                */
120          };          };
121    
         pa("cs: " + cs);  
122          Object pair = callers.get(""+cs);          Object pair = callers.get(""+cs);
123          if (pair == null) return;          if (pair == null) return;
124          if (!(pair instanceof Pair)) { throw new Error("NOT PAIR!"); }          if (!(pair instanceof Pair)) { throw new Error("NOT PAIR!"); }
125    
126          String key = (String)((Pair)pair).first;          String key = (String)((Pair)pair).first;
127            if (just_pressed && dragging) {
128                last_key = key;
129                just_pressed = false;
130            }
131    
132          Object ev_h = ev_handlers.get(key);          if (dbg) pa("key: " + key);
133          pa("foo: "+ev_h);  
134          if (ev_h instanceof EventObj)          // event hanlder
135              ((EventObj)ev_h).event(ev, ( (Object[]) ((Pair)pair).second));          Object ev_h;
136            if (dragging) ev_h = ev_handlers.get(last_key);
137            else ev_h = ev_handlers.get(key);
138    
139            if (ev_h instanceof EventMouseObj)
140                ((EventMouseObj)ev_h).event(ev, press_state,
141                                                 ((Object[]) ((Pair)pair).second));
142      }      }
143    
144    
145      public interface EventObj {      public interface EventMouseObj {
146          public void event(MouseEvent ev, Object[] obs);          public void event(MouseEvent ev, MousePressState p_state, Object[] obs);
147      }      }
148    
149        public class MousePressState {
150            private int x, y, buttons;
151    
152            public MousePressState(int x, int y, int b) {
153                this.x=x; this.y=y; this.buttons=b;
154            }
155            public int getX() { return x; }
156            public int getY() { return y; }
157            public int getButtons() { return buttons; }
158        }
159  }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26