NEURON
ocpicker.h
Go to the documentation of this file.
1 #ifndef ocpicker_h
2 #define ocpicker_h
3 
4 #include <InterViews/input.h>
5 #include <InterViews/event.h>
6 #include <InterViews/handler.h>
7 #include "rubband.h"
8 
9 class HandlerList;
10 class Canvas;
11 class Allocation;
12 class Hit;
13 
14 /* steer to the right method in response to a mouse action */
15 
17  public:
19  virtual ~StandardPicker();
20 
21  virtual bool pick(Canvas*, Glyph*, int depth, Hit& h);
22 
23  void bind_select(Rubberband* rb) {
25  }
26  void bind_adjust(Rubberband* rb) {
27  bind_press(Event::middle, rb);
28  }
29  void bind_menu(Rubberband* rb) {
31  }
33 
36  }
38  bind_press(Event::middle, h);
39  }
40  void bind_menu(OcHandler* h) {
42  }
43 
44  void bind_move(OcHandler* h) {
45  bind(0, 0, h);
46  }
48  bind(1, eb, h);
49  }
51  bind(2, eb, h);
52  }
54  bind(3, eb, h);
55  }
56  void bind(int, EventButton eb, OcHandler* h);
57 
58  void unbind(int, EventButton);
60 
61  private:
62  void event(const Event&);
63 
64  private:
65  typedef int State;
69  HandlerList* handlers_[unknown];
70 };
71 
72 /*
73  * Handler denoted by an object and member function to call on the object.
74  * Used the FieldEditorAction as a template
75  */
76 
77 #if defined(__STDC__) || defined(__ANSI_CPP__)
78 #define __HandlerCallback(T) T##_HandlerCallback
79 #define HandlerCallback(T) __HandlerCallback(T)
80 #define __HandlerMemberFunction(T) T##_HandlerMemberFunction
81 #define HandlerMemberFunction(T) __HandlerMemberFunction(T)
82 #else
83 #define __HandlerCallback(T) T /**/ _HandlerCallback
84 #define HandlerCallback(T) __HandlerCallback(T)
85 #define __HandlerMemberFunction(T) T /**/ _HandlerMemberFunction
86 #define HandlerMemberFunction(T) __HandlerMemberFunction(T)
87 #endif
88 
89 #define declareHandlerCallback(T) \
90  typedef bool (T::*HandlerMemberFunction(T))(Event&); \
91  class HandlerCallback(T) \
92  : public Handler { \
93  public: \
94  HandlerCallback(T)(T*, HandlerMemberFunction(T)); \
95  virtual ~HandlerCallback(T)(); \
96  \
97  virtual bool event(Event&); \
98  \
99  private: \
100  T* obj_; \
101  HandlerMemberFunction(T) func_; \
102  };
103 
104 #define implementHandlerCallback(T) \
105  HandlerCallback(T)::HandlerCallback(T)(T * obj, HandlerMemberFunction(T) func) { \
106  obj_ = obj; \
107  func_ = func; \
108  } \
109  \
110  HandlerCallback(T)::~HandlerCallback(T)() {} \
111  \
112  bool HandlerCallback(T)::event(Event& e) { \
113  return (obj_->*func_)(e); \
114  }
115 
116 #endif
#define Canvas
Definition: _defines.h:65
#define Hit
Definition: _defines.h:147
#define Event
Definition: _defines.h:107
#define EventButton
Definition: _defines.h:21
#define Glyph
Definition: _defines.h:132
void bind_press(EventButton eb, Rubberband *)
void bind_release(EventButton eb, OcHandler *h)
Definition: ocpicker.h:53
virtual bool pick(Canvas *, Glyph *, int depth, Hit &h)
void bind_drag(EventButton eb, OcHandler *h)
Definition: ocpicker.h:50
void remove_all(EventButton)
void bind_menu(OcHandler *h)
Definition: ocpicker.h:40
void bind_move(OcHandler *h)
Definition: ocpicker.h:44
HandlerList * handlers_[unknown]
Definition: ocpicker.h:69
void bind_adjust(OcHandler *h)
Definition: ocpicker.h:37
void bind_select(OcHandler *h)
Definition: ocpicker.h:34
void event(const Event &)
void bind_press(EventButton eb, OcHandler *h)
Definition: ocpicker.h:47
void bind_menu(Rubberband *rb)
Definition: ocpicker.h:29
virtual ~StandardPicker()
void bind_select(Rubberband *rb)
Definition: ocpicker.h:23
EventButton mb_
Definition: ocpicker.h:68
void bind_adjust(Rubberband *rb)
Definition: ocpicker.h:26
void unbind(int, EventButton)
void bind(int, EventButton eb, OcHandler *h)
#define left
Definition: rbtqueue.cpp:45
#define right
Definition: rbtqueue.cpp:46