Use the same menu for the editor route group list and the editor group tabs.
[ardour.git] / gtk2_ardour / group_tabs.h
1 /*
2     Copyright (C) 2009 Paul Davis 
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #include <gtkmm/menu.h>
21 #include "cairo_widget.h"
22
23 namespace ARDOUR {
24         class Session;
25         class RouteGroup;
26 }
27
28 class Editor;
29
30 class GroupTabs : public CairoWidget
31 {
32 public:
33         GroupTabs ();
34
35         void set_session (ARDOUR::Session *);
36
37 protected:
38
39         struct Tab {
40                 double from;
41                 double to;
42                 Gdk::Color colour;
43                 ARDOUR::RouteGroup* group;
44                 double first_ui_size;
45                 double last_ui_size;
46         };
47
48         ARDOUR::Session* _session;
49
50 private:
51         virtual std::list<Tab> compute_tabs () const = 0;
52         virtual void draw_tab (cairo_t *, Tab const &) const = 0;
53         virtual double primary_coordinate (double, double) const = 0;
54         virtual void reflect_tabs (std::list<Tab> const &) = 0;
55         virtual double extent () const = 0;
56         virtual Gtk::Menu* get_menu (ARDOUR::RouteGroup *) = 0;
57
58         void render (cairo_t *);
59         void on_size_request (Gtk::Requisition *);
60         bool on_button_press_event (GdkEventButton *);
61         bool on_motion_notify_event (GdkEventMotion *);
62         bool on_button_release_event (GdkEventButton *);
63
64         Tab * click_to_tab (double, Tab**, Tab**);
65
66         std::list<Tab> _tabs;
67         Tab* _dragging;
68         bool _drag_moved;
69         bool _drag_from;
70         double _drag_last;
71         double _drag_limit;
72 };