summaryrefslogtreecommitdiff
path: root/gtk2_ardour/group_tabs.h
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-06-21 22:17:17 +0000
committerCarl Hetherington <carl@carlh.net>2009-06-21 22:17:17 +0000
commit49928d3fa3d96942deffe70c5845175986b1ce44 (patch)
tree7f7a73099b470b20bba25ec3ef9f48cde5b99fef /gtk2_ardour/group_tabs.h
parent955d731fa6933e6769986687a781d16f7889da67 (diff)
Refactor group tabs code a bit. Allow dragging of group tabs to alter group membership.
git-svn-id: svn://localhost/ardour2/branches/3.0@5237 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/group_tabs.h')
-rw-r--r--gtk2_ardour/group_tabs.h28
1 files changed, 25 insertions, 3 deletions
diff --git a/gtk2_ardour/group_tabs.h b/gtk2_ardour/group_tabs.h
index b83f7f2a06..a4ab3304f6 100644
--- a/gtk2_ardour/group_tabs.h
+++ b/gtk2_ardour/group_tabs.h
@@ -34,16 +34,38 @@ public:
void set_session (ARDOUR::Session *);
+protected:
+
+ struct Tab {
+ double from;
+ double to;
+ Gdk::Color colour;
+ ARDOUR::RouteGroup* group;
+ };
+
private:
- virtual ARDOUR::RouteGroup* click_to_route_group (GdkEventButton* ev) = 0;
- virtual void render (cairo_t *) = 0;
-
+ virtual std::list<Tab> compute_tabs () const = 0;
+ virtual void draw_tab (cairo_t *, Tab const &) const = 0;
+ virtual double primary_coordinate (double, double) const = 0;
+ virtual void reflect_tabs (std::list<Tab> const &) = 0;
+ virtual double extent () const = 0;
+
+ void render (cairo_t *);
void on_size_request (Gtk::Requisition *);
bool on_button_press_event (GdkEventButton *);
+ bool on_motion_notify_event (GdkEventMotion *);
+ bool on_button_release_event (GdkEventButton *);
+ Tab * click_to_tab (double, Tab**, Tab**);
void edit_group (ARDOUR::RouteGroup *);
void remove_group (ARDOUR::RouteGroup *);
ARDOUR::Session* _session;
Gtk::Menu* _menu;
+ std::list<Tab> _tabs;
+ Tab* _dragging;
+ bool _drag_moved;
+ bool _drag_from;
+ double _drag_last;
+ double _drag_limit;
};