NEURON
rubband.h
Go to the documentation of this file.
1 #ifndef rubberband_h
2 #define rubberband_h
3 
4 #include <InterViews/handler.h>
5 #include <InterViews/event.h>
6 #include <InterViews/transformer.h>
7 
8 #undef Rubberband
9 #undef RubberLine
10 #undef RubberRect
11 
12 class RubberAction;
13 class Rubberband;
14 class Color;
15 class Brush;
16 class Canvas;
17 class Printer;
18 
19 //called on rubberband release event
20 class RubberAction : public Resource {
21 protected:
22  RubberAction();
23  virtual ~RubberAction();
24 public:
25  virtual void execute(Rubberband*);
26  virtual void help();
27 };
28 
29 class OcHandler : public Handler {
30 public:
31  OcHandler();
32  virtual ~OcHandler();
33  virtual void help();
34 };
35 
36 class Rubberband : public OcHandler {
37 public:
39  virtual ~Rubberband();
40  virtual bool event(Event&);
41  Coord x_begin()const, y_begin()const, x()const, y()const; //canvas coords
42  static const Color* color();
43  static const Brush* brush();
44  void canvas(Canvas*);
45  Canvas* canvas()const {return canvas_;}
46  const Transformer& transformer()const {return t_;}
47  const Event& event()const {return *e_;}
48  virtual void help();
49  virtual void snapshot(Printer*);
50  static Rubberband* current() {return current_;}
51 protected:
52  //subclasses manipulate the rubberband glyph
53  virtual void draw(Coord x, Coord y);
54  virtual void undraw(Coord x, Coord y);
55 
56  virtual void press(Event&);
57  virtual void drag(Event&);
58  virtual void release(Event&);
59 
60  void rubber_on(Canvas*);
61  void rubber_off(Canvas*);
62 private:
67  Coord x_begin_, y_begin_, x_, y_;
68  static const Color* xor_color_;
69  static const Brush* brush_;
71 };
72 
73 class RubberRect : public Rubberband {
74 public:
76  virtual ~RubberRect();
77 
78  virtual void draw(Coord, Coord);
79 
80  virtual void get_rect(Coord& x1, Coord& y1, Coord& x2, Coord& y2) const;
81  virtual void get_rect_canvas(Coord& x1, Coord& y1, Coord& x2, Coord& y2) const;
82  virtual void help();
83 };
84 
85 class RubberLine : public Rubberband {
86 public:
88  virtual ~RubberLine();
89 
90  virtual void draw(Coord, Coord);
91 
92  virtual void get_line(Coord& x1, Coord& y1, Coord& x2, Coord& y2) const;
93  virtual void get_line_canvas(Coord& x1, Coord& y1, Coord& x2, Coord& y2) const;
94  virtual void help();
95 };
96 
97 inline Coord Rubberband::x() const { return x_; }
98 inline Coord Rubberband::y() const { return y_; }
99 inline Coord Rubberband::x_begin() const { return x_begin_; }
100 inline Coord Rubberband::y_begin() const { return y_begin_; }
101 
102 /*
103  * RubberAction denoted by an object and member function to call on the object.
104  * Used the FieldEditorAction as a template
105  */
106 
107 #if defined(__STDC__) || defined(__ANSI_CPP__) || defined(WIN32) || MAC
108 #define __RubberCallback(T) T##_RubberCallback
109 #define RubberCallback(T) __RubberCallback(T)
110 #define __RubberMemberFunction(T) T##_RubberMemberFunction
111 #define RubberMemberFunction(T) __RubberMemberFunction(T)
112 #else
113 #define __RubberCallback(T) T/**/_RubberCallback
114 #define RubberCallback(T) __RubberCallback(T)
115 #define __RubberMemberFunction(T) T/**/_RubberMemberFunction
116 #define RubberMemberFunction(T) __RubberMemberFunction(T)
117 #endif
118 
119 #define declareRubberCallback(T) \
120 typedef void (T::*RubberMemberFunction(T))(Rubberband*); \
121 class RubberCallback(T) : public RubberAction { \
122 public: \
123  RubberCallback(T)(T*, RubberMemberFunction(T)); \
124  virtual ~RubberCallback(T)(); \
125 \
126  virtual void execute(Rubberband*); \
127 private: \
128  T* obj_; \
129  RubberMemberFunction(T) func_; \
130 };
131 
132 #define implementRubberCallback(T) \
133 RubberCallback(T)::RubberCallback(T)( \
134  T* obj, RubberMemberFunction(T) func \
135 ) { \
136  obj_ = obj; \
137  func_ = func; \
138 } \
139 \
140 RubberCallback(T)::~RubberCallback(T)() { } \
141 \
142 void RubberCallback(T)::execute(Rubberband* rb) { \
143  (obj_->*func_)(rb); \
144 }
145 
146 #endif
Transformer t_
Definition: rubband.h:64
#define Rubberband
Definition: _defines.h:244
#define Coord
Definition: _defines.h:19
#define Brush
Definition: _defines.h:59
#define Color
Definition: _defines.h:74
#define RubberRect
Definition: _defines.h:240
#define Handler
Definition: _defines.h:146
virtual ~RubberAction()
Coord x_begin() const
Definition: rubband.h:99
Canvas * canvas() const
Definition: rubband.h:45
#define color
Definition: rbtqueue.cpp:50
#define Printer
Definition: _defines.h:211
Coord y_begin_
Definition: rubband.h:67
static const Color * xor_color_
Definition: rubband.h:68
static Rubberband * current()
Definition: rubband.h:50
Canvas * canvas_
Definition: rubband.h:63
virtual void drag(const Event &e)
Definition: ocinput.h:21
static N_Vector x_
virtual void press(const Event &e)
Definition: ocinput.h:20
#define Canvas
Definition: _defines.h:65
Coord x() const
Definition: rubband.h:97
Coord y() const
Definition: rubband.h:98
const Event & event() const
Definition: rubband.h:47
static N_Vector y_
#define Event
Definition: _defines.h:107
virtual void release(const Event &e)
Definition: ocinput.h:22
Event * e_
Definition: rubband.h:65
RubberAction * ra_
Definition: rubband.h:66
static Rubberband * current_
Definition: rubband.h:70
#define Transformer
Definition: _defines.h:316
static const Brush * brush_
Definition: rubband.h:69
#define RubberLine
Definition: _defines.h:237
virtual void execute(Rubberband *)
virtual void help()
const Transformer & transformer() const
Definition: rubband.h:46
Coord y_begin() const
Definition: rubband.h:100
return NULL
Definition: cabcode.cpp:461