ardour
group_tabs.h
Go to the documentation of this file.
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 "editor_component.h"
22 #include "gtkmm2ext/cairo_widget.h"
23 
24 namespace ARDOUR {
25  class Session;
26  class RouteGroup;
27 }
28 
29 class Editor;
30 
39 {
40 public:
41  GroupTabs ();
42  virtual ~GroupTabs ();
43 
45 
49  Gtk::Menu* get_menu (ARDOUR::RouteGroup* g);
50 
52 
53  static void set_group_color (ARDOUR::RouteGroup *, uint32_t);
54  static std::string group_gui_id (ARDOUR::RouteGroup *);
55  static uint32_t group_color (ARDOUR::RouteGroup *);
56 
57 protected:
58 
59  struct Tab {
60  Tab () : group (0) {}
61 
62  double from;
63  double to;
64  uint32_t color;
66  };
67 
68 private:
70 
74  virtual std::list<Tab> compute_tabs () const = 0;
75 
80  virtual void draw_tab (cairo_t* cr, Tab const & t) const = 0;
81 
86  virtual double primary_coordinate (double, double) const = 0;
87 
88  virtual ARDOUR::RouteList routes_for_tab (Tab const * t) const = 0;
89 
91  virtual double extent () const = 0;
92 
93  virtual void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *) {}
94  virtual PBD::PropertyList default_properties () const;
95  virtual ARDOUR::RouteList selected_routes () const = 0;
96  virtual void sync_order_keys () = 0;
97 
98  void new_from_selection ();
99  void new_from_rec_enabled ();
100  void new_from_soloed ();
102  void collect (ARDOUR::RouteGroup *);
103  void set_activation (ARDOUR::RouteGroup *, bool);
107  void activate_all ();
108  void disable_all ();
110 
111  void render (cairo_t *, cairo_rectangle_t*);
112  void on_size_request (Gtk::Requisition *);
113  bool on_button_press_event (GdkEventButton *);
114  bool on_motion_notify_event (GdkEventMotion *);
115  bool on_button_release_event (GdkEventButton *);
116 
117  Tab * click_to_tab (double, std::list<Tab>::iterator *, std::list<Tab>::iterator *);
118 
122 
123  Gtk::Menu* _menu;
124  std::list<Tab> _tabs;
126 
129  bool _drag_moved;
130  double _drag_fixed;
131  double _drag_moving;
132  double _drag_offset;
133  double _drag_min;
134  double _drag_max;
135  double _drag_first;
136 
138  static std::list<Gdk::Color> _used_colors;
139 };
bool _drag_moved
true if there has been movement during any current drag
Definition: group_tabs.h:129
std::list< Tab > _tabs
current list of tabs
Definition: group_tabs.h:124
void new_from_rec_enabled()
Definition: group_tabs.cc:359
double _drag_moving
the position of the moving end of the tab being dragged
Definition: group_tabs.h:131
double _drag_offset
offset from the mouse to the end of the tab being dragged
Definition: group_tabs.h:132
Tab * _dragging
tab being dragged, or 0
Definition: group_tabs.h:125
bool _dragging_new_tab
true if we're dragging a new tab
Definition: group_tabs.h:128
void route_removed_from_route_group(ARDOUR::RouteGroup *, boost::weak_ptr< ARDOUR::Route >)
Definition: group_tabs.cc:675
static void set_group_color(ARDOUR::RouteGroup *, uint32_t)
Definition: group_tabs.cc:562
void route_added_to_route_group(ARDOUR::RouteGroup *, boost::weak_ptr< ARDOUR::Route >)
Definition: group_tabs.cc:660
void remove_group(ARDOUR::RouteGroup *)
Definition: group_tabs.cc:555
void disable_all()
Definition: group_tabs.cc:541
virtual ARDOUR::RouteList selected_routes() const =0
double _drag_max
maximum position for drag
Definition: group_tabs.h:134
void subgroup(ARDOUR::RouteGroup *, bool, ARDOUR::Placement)
Definition: group_tabs.cc:462
void collect(ARDOUR::RouteGroup *)
Definition: group_tabs.cc:489
void new_from_soloed()
Definition: group_tabs.cc:379
virtual void add_menu_items(Gtk::Menu *, ARDOUR::RouteGroup *)
Definition: group_tabs.h:93
void route_group_property_changed(ARDOUR::RouteGroup *)
Definition: group_tabs.cc:647
void set_session(ARDOUR::Session *)
Definition: group_tabs.cc:58
Gtk::Menu * get_menu(ARDOUR::RouteGroup *g)
Definition: group_tabs.cc:304
double _drag_fixed
the position of the fixed end of the tab being dragged
Definition: group_tabs.h:130
void new_from_selection()
Definition: group_tabs.cc:348
bool on_button_release_event(GdkEventButton *)
Definition: group_tabs.cc:189
static void emit_gui_changed_for_members(ARDOUR::RouteGroup *)
Definition: group_tabs.cc:690
virtual ~GroupTabs()
Definition: group_tabs.cc:52
Tab * click_to_tab(double, std::list< Tab >::iterator *, std::list< Tab >::iterator *)
Definition: group_tabs.cc:274
double _drag_min
minimum position for drag
Definition: group_tabs.h:133
uint32_t color
color
Definition: group_tabs.h:64
Definition: amp.h:29
ARDOUR::RouteGroup * create_and_add_group() const
Definition: group_tabs.cc:437
virtual void draw_tab(cairo_t *cr, Tab const &t) const =0
virtual PBD::PropertyList default_properties() const
Definition: group_tabs.cc:399
virtual void sync_order_keys()=0
void un_subgroup(ARDOUR::RouteGroup *)
Definition: group_tabs.cc:468
virtual double extent() const =0
void set_activation(ARDOUR::RouteGroup *, bool)
Definition: group_tabs.cc:549
virtual ARDOUR::RouteList routes_for_tab(Tab const *t) const =0
void render(cairo_t *, cairo_rectangle_t *)
Definition: group_tabs.cc:244
bool on_button_press_event(GdkEventButton *)
Definition: group_tabs.cc:90
static uint32_t group_color(ARDOUR::RouteGroup *)
Definition: group_tabs.cc:616
Gtk::Menu * _menu
Definition: group_tabs.h:123
void on_size_request(Gtk::Requisition *)
Definition: group_tabs.cc:82
double _drag_first
first mouse pointer position during drag
Definition: group_tabs.h:135
Definition: editor.h:134
virtual std::list< Tab > compute_tabs() const =0
ARDOUR::RouteGroup * group
route group
Definition: group_tabs.h:65
bool on_motion_notify_event(GdkEventMotion *)
Definition: group_tabs.cc:159
void edit_group(ARDOUR::RouteGroup *)
Definition: group_tabs.cc:455
static std::string group_gui_id(ARDOUR::RouteGroup *)
Definition: group_tabs.cc:604
static std::list< Gdk::Color > _used_colors
Definition: group_tabs.h:138
std::list< boost::shared_ptr< Route > > RouteList
Definition: types.h:532
Placement
Definition: types.h:375
void activate_all()
Definition: group_tabs.cc:533
virtual double primary_coordinate(double, double) const =0
void run_new_group_dialog(ARDOUR::RouteList const &)
Definition: group_tabs.cc:419
ARDOUR::RouteList _initial_dragging_routes
Definition: group_tabs.h:127