Fix up physical port bundles.
[ardour.git] / gtk2_ardour / canvas-midi-event.h
1 /*
2     Copyright (C) 2007 Paul Davis 
3     Author: Dave Robillard
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19
20 #ifndef __gtk_ardour_canvas_midi_event_h__
21 #define __gtk_ardour_canvas_midi_event_h__
22
23 #include "simplerect.h"
24 #include <ardour/midi_model.h>
25
26 class Editor;
27 class MidiRegionView;
28
29 namespace Gnome {
30 namespace Canvas {
31
32
33 /** This manages all the event handling for any MIDI event on the canvas.
34  *
35  * This is not actually a canvas item itself to avoid the dreaded diamond,
36  * since various types of canvas items (Note (rect), Hit (diamond), etc)
37  * need to share this functionality but can't share an ancestor.
38  *
39  * Note: Because of this, derived classes need to manually bounce events to
40  * on_event, it won't happen automatically.
41  *
42  * A newer, better canvas should remove the need for all the ugly here.
43  */
44 class CanvasMidiEvent {
45 public:
46         CanvasMidiEvent(MidiRegionView& region, Item* item, const ARDOUR::Note* note=NULL, bool copy_note=false);
47         virtual ~CanvasMidiEvent();
48
49         bool on_event(GdkEvent* ev);
50
51         bool selected() const { return _selected; }
52         void selected(bool yn);
53
54         virtual void set_outline_color(uint32_t c) = 0;
55         virtual void set_fill_color(uint32_t c) = 0;
56         
57         virtual double x1() = 0;
58         virtual double y1() = 0;
59         virtual double x2() = 0;
60         virtual double y2() = 0;
61
62         const Item* item() const { return _item; }
63         Item*       item()       { return _item; }
64
65         const ARDOUR::Note* note() { return _note; }
66
67 protected:
68         enum State { None, Pressed, Dragging };
69
70         MidiRegionView&     _region;
71         Item* const         _item;
72         State               _state;
73         const ARDOUR::Note* _note;
74         bool                _own_note;
75         bool                _selected;
76 };
77
78 } // namespace Gnome
79 } // namespace Canvas
80
81 #endif /* __gtk_ardour_canvas_midi_event_h__ */