diff options
author | Carl Hetherington <carl@carlh.net> | 2009-06-21 22:17:17 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-06-21 22:17:17 +0000 |
commit | 49928d3fa3d96942deffe70c5845175986b1ce44 (patch) | |
tree | 7f7a73099b470b20bba25ec3ef9f48cde5b99fef /gtk2_ardour/group_tabs.h | |
parent | 955d731fa6933e6769986687a781d16f7889da67 (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.h | 28 |
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; }; |