summaryrefslogtreecommitdiff
path: root/gtk2_ardour/canvas-flag.h
blob: 0f45667614831f2839d81bd6949e7bc9347948b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#ifndef CANVASFLAG_H_
#define CANVASFLAG_H_

#include <libgnomecanvasmm/group.h>
#include <libgnomecanvasmm/text.h>
#include <libgnomecanvasmm/widget.h>

#include <ardour/midi_model.h>

#include "simplerect.h"
#include "simpleline.h"

class MidiRegionView;

namespace Gnome {
namespace Canvas {

class CanvasFlagRect;
class CanvasFlagText;

class CanvasFlag : public Group
{
public:
	CanvasFlag(
		MidiRegionView&                       region,
		Group&                                parent,
		double                                height,
		guint                                 outline_color_rgba = 0xc0c0c0ff,
		guint                                 fill_color_rgba = 0x07070707,
		double                                x = 0.0,
		double                                y = 0.0
	) 	: Group(parent, x, y)
	, _text(0)
	, _height(height)
	, _outline_color_rgba(outline_color_rgba)
	, _fill_color_rgba(fill_color_rgba)
	, _region(region)
	, _line(0)
	, _rect(0)
	{}
			
	virtual ~CanvasFlag();
	
	virtual bool on_event(GdkEvent* ev);

	void set_text(string& a_text);

protected:
	CanvasFlagText*                         _text;
	double                            _height;
	guint                             _outline_color_rgba;
	guint                             _fill_color_rgba;
	
private:
	void delete_allocated_objects();
	
	MidiRegionView&                   _region;
	SimpleLine*                       _line;
	CanvasFlagRect*                   _rect;
};

class CanvasFlagText: public Text
{
public:
	CanvasFlagText(Group& parent, double x, double y, const Glib::ustring& text) 
		: Text(parent, x, y, text) {
		_parent = dynamic_cast<CanvasFlag*>(&parent);
;
	}
	
	virtual bool on_event(GdkEvent* ev) {
		if(_parent) {
			return _parent->on_event(ev);
		} else {
			return false;
		}
	}

private:
	CanvasFlag* _parent;
};

class CanvasFlagRect: public SimpleRect
{
public:
	CanvasFlagRect(Group& parent, double x1, double y1, double x2, double y2) 
		: SimpleRect(parent, x1, y1, x2, y2) {
		_parent = dynamic_cast<CanvasFlag*>(&parent);
	}
	
	virtual bool on_event(GdkEvent* ev) {
		if(_parent) {
			return _parent->on_event(ev);
		} else {
			return false;
		}
	}

private:
	CanvasFlag* _parent;
};


} // namespace Canvas
} // namespace Gnome

#endif /*CANVASFLAG_H_*/