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 
24  void bind_adjust(Rubberband* rb) {bind_press(Event::middle, rb);}
27 
29  void bind_adjust(OcHandler* h) {bind_press(Event::middle, h);}
31 
32  void bind_move(OcHandler* h) {bind(0, 0, h);}
33  void bind_press(EventButton eb, OcHandler* h) {bind(1, eb, h);}
34  void bind_drag(EventButton eb, OcHandler* h) {bind(2, eb, h);}
35  void bind_release(EventButton eb, OcHandler* h) {bind(3, eb, h);}
36  void bind(int, EventButton eb, OcHandler* h);
37 
38  void unbind(int, EventButton);
39  void remove_all(EventButton);
40 private:
41  void event(const Event&);
42 private:
43  typedef int State;
45  State ms_;
47  HandlerList* handlers_[unknown];
48 };
49 
50 /*
51  * Handler denoted by an object and member function to call on the object.
52  * Used the FieldEditorAction as a template
53  */
54 
55 #if defined(__STDC__) || defined(__ANSI_CPP__)
56 #define __HandlerCallback(T) T##_HandlerCallback
57 #define HandlerCallback(T) __HandlerCallback(T)
58 #define __HandlerMemberFunction(T) T##_HandlerMemberFunction
59 #define HandlerMemberFunction(T) __HandlerMemberFunction(T)
60 #else
61 #define __HandlerCallback(T) T/**/_HandlerCallback
62 #define HandlerCallback(T) __HandlerCallback(T)
63 #define __HandlerMemberFunction(T) T/**/_HandlerMemberFunction
64 #define HandlerMemberFunction(T) __HandlerMemberFunction(T)
65 #endif
66 
67 #define declareHandlerCallback(T) \
68 typedef bool (T::*HandlerMemberFunction(T))(Event&); \
69 class HandlerCallback(T) : public Handler { \
70 public: \
71  HandlerCallback(T)(T*, HandlerMemberFunction(T)); \
72  virtual ~HandlerCallback(T)(); \
73 \
74  virtual bool event(Event&); \
75 private: \
76  T* obj_; \
77  HandlerMemberFunction(T) func_; \
78 };
79 
80 #define implementHandlerCallback(T) \
81 HandlerCallback(T)::HandlerCallback(T)( \
82  T* obj, HandlerMemberFunction(T) func \
83 ) { \
84  obj_ = obj; \
85  func_ = func; \
86 } \
87 \
88 HandlerCallback(T)::~HandlerCallback(T)() { } \
89 \
90 bool HandlerCallback(T)::event(Event& e) { \
91  return (obj_->*func_)(e); \
92 }
93 
94 #endif
void bind_drag(EventButton eb, OcHandler *h)
Definition: ocpicker.h:34
#define Glyph
Definition: _defines.h:132
void event(const Event &)
virtual ~StandardPicker()
void remove_all(EventButton)
void bind_menu(OcHandler *h)
Definition: ocpicker.h:30
void bind_menu(Rubberband *rb)
Definition: ocpicker.h:25
void bind_press(EventButton eb, Rubberband *)
#define Canvas
Definition: _defines.h:65
void bind_adjust(OcHandler *h)
Definition: ocpicker.h:29
void unbind(int, EventButton)
void bind_move(OcHandler *h)
Definition: ocpicker.h:32
#define left
Definition: rbtqueue.cpp:45
#define Event
Definition: _defines.h:107
void bind_release(EventButton eb, OcHandler *h)
Definition: ocpicker.h:35
#define right
Definition: rbtqueue.cpp:46
void bind_select(OcHandler *h)
Definition: ocpicker.h:28
void bind_adjust(Rubberband *rb)
Definition: ocpicker.h:24
EventButton mb_
Definition: ocpicker.h:46
void bind_press(EventButton eb, OcHandler *h)
Definition: ocpicker.h:33
void bind_select(Rubberband *rb)
Definition: ocpicker.h:23
HandlerList * handlers_[unknown]
Definition: ocpicker.h:47
#define EventButton
Definition: _defines.h:21
void bind(int, EventButton eb, OcHandler *h)
virtual bool pick(Canvas *, Glyph *, int depth, Hit &h)
#define Hit
Definition: _defines.h:147