Make region gain envelope drawing work again.
[ardour.git] / gtk2_ardour / canvas-flag.h
1 #ifndef CANVASFLAG_H_
2 #define CANVASFLAG_H_
3
4 #include <libgnomecanvasmm/group.h>
5 #include <libgnomecanvasmm/text.h>
6 #include <libgnomecanvasmm/widget.h>
7
8 #include <ardour/midi_model.h>
9
10 #include "simplerect.h"
11 #include "simpleline.h"
12
13 class MidiRegionView;
14
15 namespace Gnome {
16 namespace Canvas {
17
18 class CanvasFlagRect;
19 class CanvasFlagText;
20
21 class CanvasFlag : public Group
22 {
23 public:
24         CanvasFlag(
25                 MidiRegionView&                       region,
26                 Group&                                parent,
27                 double                                height,
28                 guint                                 outline_color_rgba = 0xc0c0c0ff,
29                 guint                                 fill_color_rgba = 0x07070707,
30                 double                                x = 0.0,
31                 double                                y = 0.0
32         )       : Group(parent, x, y)
33         , _text(0)
34         , _height(height)
35         , _outline_color_rgba(outline_color_rgba)
36         , _fill_color_rgba(fill_color_rgba)
37         , _region(region)
38         , _line(0)
39         , _rect(0)
40         {}
41                         
42         virtual ~CanvasFlag();
43         
44         virtual bool on_event(GdkEvent* ev);
45
46         void set_text(string& a_text);
47
48 protected:
49         CanvasFlagText*                   _text;
50         double                            _height;
51         guint                             _outline_color_rgba;
52         guint                             _fill_color_rgba;
53         MidiRegionView&                   _region;
54         
55 private:
56         void delete_allocated_objects();
57         
58         SimpleLine*                       _line;
59         CanvasFlagRect*                   _rect;
60 };
61
62 class CanvasFlagText: public Text
63 {
64 public:
65         CanvasFlagText(Group& parent, double x, double y, const Glib::ustring& text) 
66                 : Text(parent, x, y, text) {
67                 _parent = dynamic_cast<CanvasFlag*>(&parent);
68 ;
69         }
70         
71         virtual bool on_event(GdkEvent* ev) {
72                 if(_parent) {
73                         return _parent->on_event(ev);
74                 } else {
75                         return false;
76                 }
77         }
78
79 private:
80         CanvasFlag* _parent;
81 };
82
83 class CanvasFlagRect: public SimpleRect
84 {
85 public:
86         CanvasFlagRect(Group& parent, double x1, double y1, double x2, double y2) 
87                 : SimpleRect(parent, x1, y1, x2, y2) {
88                 _parent = dynamic_cast<CanvasFlag*>(&parent);
89         }
90         
91         virtual bool on_event(GdkEvent* ev) {
92                 if(_parent) {
93                         return _parent->on_event(ev);
94                 } else {
95                         return false;
96                 }
97         }
98
99 private:
100         CanvasFlag* _parent;
101 };
102
103
104 } // namespace Canvas
105 } // namespace Gnome
106
107 #endif /*CANVASFLAG_H_*/