ardour
mixer_ui.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2000 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 #ifndef __ardour_mixer_ui_h__
21 #define __ardour_mixer_ui_h__
22 
23 #include <list>
24 
25 #include <gtkmm/box.h>
26 #include <gtkmm/scrolledwindow.h>
27 #include <gtkmm/eventbox.h>
28 #include <gtkmm/label.h>
29 #include <gtkmm/button.h>
30 #include <gtkmm/frame.h>
31 #include <gtkmm/paned.h>
32 #include <gtkmm/menu.h>
33 #include <gtkmm/treeview.h>
34 #include <gtkmm/liststore.h>
35 
36 #include "pbd/stateful.h"
37 #include "pbd/signals.h"
38 
39 #include "ardour/ardour.h"
40 #include "ardour/types.h"
41 #include "ardour/session_handle.h"
42 
44 
45 #include "enums.h"
46 #include "mixer_actor.h"
47 
48 namespace ARDOUR {
49  class Route;
50  class RouteGroup;
51 };
52 
53 class MixerStrip;
54 class PluginSelector;
55 class MixerGroupTabs;
56 class MonitorSection;
57 
59 {
60  public:
61  static Mixer_UI* instance();
62  ~Mixer_UI();
63 
65  void track_editor_selection ();
66 
68 
69  void set_strip_width (Width, bool save = false);
70  Width get_strip_width () const { return _strip_width; }
71 
74 
75  XMLNode& get_state (void);
76  int set_state (const XMLNode& );
77 
78  void show_window ();
79  bool hide_window (GdkEventAny *ev);
80  void show_strip (MixerStrip *);
81  void hide_strip (MixerStrip *);
82 
83  void maximise_mixer_space();
84  void restore_mixer_space();
85 
86  void ensure_float (Gtk::Window&);
87 
89 
91  void delete_processors();
92 
93  void select_none ();
94 
95  protected:
97 
98  private:
99  Mixer_UI ();
101 
102  bool _visible;
103 
104  Gtk::HBox global_hpacker;
105  Gtk::VBox global_vpacker;
106  Gtk::ScrolledWindow scroller;
107  Gtk::EventBox scroller_base;
108  Gtk::HBox scroller_hpacker;
110  Gtk::VBox list_vpacker;
112  Gtk::Button group_display_button;
113  Gtk::ScrolledWindow track_display_scroller;
114  Gtk::ScrolledWindow group_display_scroller;
118  Gtk::VPaned rhs_pane1;
119  Gtk::HBox strip_packer;
120  Gtk::HBox out_packer;
121  Gtk::HPaned list_hpane;
122 
124 
125  // for restoring window geometry.
127 
128  void set_window_pos_and_size ();
129  void get_window_pos_and_size ();
130 
131  bool on_key_press_event (GdkEventKey*);
132  bool on_key_release_event (GdkEventKey*);
133  bool on_scroll_event (GdkEventScroll*);
134 
135  void pane_allocation_handler (Gtk::Allocation&, Gtk::Paned*);
136 
137  std::list<MixerStrip *> strips;
138 
139  bool strip_scroller_button_release (GdkEventButton*);
140  void scroll_left ();
141  void scroll_right ();
142  void toggle_midi_input_active (bool flip_others);
143 
145  void remove_strip (MixerStrip *);
146 
148 
149  void hide_all_strips (bool with_select);
150  void unselect_all_strips();
151  void select_all_strips ();
156 
157  void strip_select_op (bool audiotrack, bool select);
158  void select_strip_op (MixerStrip*, bool select);
159 
160  gint start_updating ();
161  gint stop_updating ();
162 
163  void session_going_away ();
164 
166  void fast_update_strips ();
167 
169 
170  void redisplay_track_list ();
172  bool track_display_button_press (GdkEventButton*);
173  void strip_width_changed ();
174 
175  void track_list_delete (const Gtk::TreeModel::Path&);
176  void track_list_reorder (const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter, int* new_order);
177 
178  void initial_track_display ();
179  void show_track_list_menu ();
180 
181  void set_all_strips_visibility (bool yn);
182  void set_all_audio_visibility (int tracks, bool yn);
183  void track_visibility_changed (std::string const & path);
184  void update_track_visibility ();
185 
186  void hide_all_routes ();
187  void show_all_routes ();
188  void show_all_audiobus ();
189  void hide_all_audiobus ();
190  void show_all_audiotracks();
191  void hide_all_audiotracks ();
192 
194 
195  void group_selected (gint row, gint col, GdkEvent *ev);
196  void group_unselected (gint row, gint col, GdkEvent *ev);
198  void new_route_group ();
201  void disable_all_route_groups ();
203  void route_groups_changed ();
204  void route_group_name_edit (const std::string&, const std::string&);
205  void route_group_row_change (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter);
206  void route_group_row_deleted (Gtk::TreeModel::Path const &);
207 
208  Gtk::Menu *track_menu;
209  void track_column_click (gint);
210  void build_track_menu ();
211 
214 
217 
218  /* various treeviews */
219 
220  struct TrackDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
222  add (text);
223  add (visible);
224  add (route);
225  add (strip);
226  }
227  Gtk::TreeModelColumn<bool> visible;
228  Gtk::TreeModelColumn<std::string> text;
229  Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Route> > route;
230  Gtk::TreeModelColumn<MixerStrip*> strip;
231  };
232 
233  struct GroupDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
235  add (visible);
236  add (text);
237  add (group);
238  }
239  Gtk::TreeModelColumn<bool> visible;
240  Gtk::TreeModelColumn<std::string> text;
241  Gtk::TreeModelColumn<ARDOUR::RouteGroup*> group;
242  };
243 
246 
247  Gtk::TreeView track_display;
248  Gtk::TreeView group_display;
249 
250  Glib::RefPtr<Gtk::ListStore> track_model;
251  Glib::RefPtr<Gtk::ListStore> group_model;
252 
253  bool group_display_button_press (GdkEventButton*);
255 
256  bool strip_button_release_event (GdkEventButton*, MixerStrip*);
257 
259 
262  void reset_remote_control_ids ();
263  void reset_order_keys ();
264 
266 
267  void parameter_changed (std::string const &);
269 
270  void setup_track_display ();
271  void new_track_or_bus ();
272 
273  static const int32_t default_width = 478;
274  static const int32_t default_height = 765;
275 
281 
282  void update_title ();
283  MixerStrip* strip_by_x (int x);
284 
285  friend class MixerGroupTabs;
286 
287  void follow_editor_selection ();
289 
291 
294 };
295 
296 #endif /* __ardour_mixer_ui_h__ */
297 
298 
TrackDisplayModelColumns track_columns
Definition: mixer_ui.h:244
PluginSelector * plugin_selector()
Definition: mixer_ui.cc:1843
bool no_track_list_redisplay
Definition: mixer_ui.h:171
bool in_group_row_change
Definition: mixer_ui.h:193
bool _following_editor_selection
Definition: mixer_ui.h:288
void get_window_pos_and_size()
Definition: mixer_ui.cc:1546
bool _maximised
true if we are in fullscreen mode
Definition: mixer_ui.h:293
Gtk::TreeModelColumn< bool > visible
Definition: mixer_ui.h:227
void build_track_menu()
Definition: mixer_ui.cc:1190
Gtk::TreeModelColumn< bool > visible
Definition: mixer_ui.h:239
Gtk::Menu * track_menu
Definition: mixer_ui.h:208
void set_session(ARDOUR::Session *)
Definition: mixer_ui.cc:745
Mixer_UI()
Definition: mixer_ui.cc:87
bool _visible
Definition: mixer_ui.h:102
static Mixer_UI * _instance
Definition: mixer_ui.h:100
void session_going_away()
Definition: mixer_ui.cc:792
Glib::RefPtr< Gtk::ListStore > track_model
Definition: mixer_ui.h:250
void maximise_mixer_space()
Definition: mixer_ui.cc:2003
Gtk::VBox global_vpacker
Definition: mixer_ui.h:105
void hide_strip(MixerStrip *)
Definition: mixer_ui.cc:883
void unselect_all_audiobus_strips()
void scroll_left()
Definition: mixer_ui.cc:1731
Gtk::Button group_display_button
Definition: mixer_ui.h:112
void show_all_audiobus()
Definition: mixer_ui.cc:1012
void route_groups_changed()
Definition: mixer_ui.cc:1299
void delete_processors()
Definition: mixer_ui.cc:422
Gtk::VBox list_vpacker
Definition: mixer_ui.h:110
void set_window_pos_and_size()
Definition: mixer_ui.cc:1539
Gtk::ScrolledWindow scroller
Definition: mixer_ui.h:106
Gtk::Frame group_display_frame
Definition: mixer_ui.h:117
Glib::RefPtr< Gtk::ListStore > group_model
Definition: mixer_ui.h:251
gint stop_updating()
Definition: mixer_ui.cc:907
Width _strip_width
Definition: mixer_ui.h:258
int m_width
Definition: mixer_ui.h:126
void select_all_audiobus_strips()
void strip_width_changed()
Definition: mixer_ui.cc:1120
void ensure_float(Gtk::Window &)
Definition: mixer_ui.cc:270
Gtk::ScrolledWindow group_display_scroller
Definition: mixer_ui.h:114
void strip_property_changed(const PBD::PropertyChange &, MixerStrip *)
Definition: mixer_ui.cc:1209
void route_group_name_edit(const std::string &, const std::string &)
Definition: mixer_ui.cc:1414
void follow_editor_selection()
Definition: mixer_ui.cc:631
bool _route_deletion_in_progress
Definition: mixer_ui.h:280
void track_list_delete(const Gtk::TreeModel::Path &)
Definition: mixer_ui.cc:1041
void unselect_all_audiotrack_strips()
Gtk::EventBox scroller_base
Definition: mixer_ui.h:107
GroupDisplayModelColumns group_columns
Definition: mixer_ui.h:245
void toggle_midi_input_active(bool flip_others)
Definition: mixer_ui.cc:1983
void set_all_audio_visibility(int tracks, bool yn)
Definition: mixer_ui.cc:954
void unselect_strip_in_display(MixerStrip *)
void track_editor_selection()
Definition: mixer_ui.cc:263
void group_selected(gint row, gint col, GdkEvent *ev)
void new_track_or_bus()
Definition: mixer_ui.cc:1907
void route_group_row_deleted(Gtk::TreeModel::Path const &)
Definition: mixer_ui.cc:1462
void track_list_reorder(const Gtk::TreeModel::Path &path, const Gtk::TreeModel::iterator &iter, int *new_order)
Definition: mixer_ui.cc:1034
Gtk::TreeModelColumn< MixerStrip * > strip
Definition: mixer_ui.h:230
XMLNode & get_state(void)
Definition: mixer_ui.cc:1628
MonitorSection * _monitor_section
Definition: mixer_ui.h:212
void disable_all_route_groups()
Definition: mixer_ui.cc:1293
void monitor_section_going_away()
Definition: mixer_ui.cc:1974
Gtk::TreeView track_display
Definition: mixer_ui.h:247
void unselect_all_strips()
void track_name_changed(MixerStrip *)
void group_display_active_clicked()
Gtk::VBox mixer_scroller_vpacker
Definition: mixer_ui.h:109
Gtk::TreeModelColumn< std::string > text
Definition: mixer_ui.h:228
Definition: amp.h:29
void select_all_audiotrack_strips()
int m_root_x
Definition: mixer_ui.h:126
void restore_mixer_space()
Definition: mixer_ui.cc:2015
Gtk::TreeView group_display
Definition: mixer_ui.h:248
bool on_key_release_event(GdkEventKey *)
Definition: mixer_ui.cc:1769
Gtk::Frame track_display_frame
Definition: mixer_ui.h:116
MixerStrip * strip_by_route(boost::shared_ptr< ARDOUR::Route >)
Definition: mixer_ui.cc:660
Gtk::VBox group_display_vbox
Definition: mixer_ui.h:115
int set_state(const XMLNode &)
Definition: mixer_ui.cc:1553
void setup_track_display()
Definition: mixer_ui.cc:1854
void remove_selected_route_group()
Definition: mixer_ui.cc:1341
void set_all_strips_visibility(bool yn)
Definition: mixer_ui.cc:924
void deselect_all_strip_processors()
Definition: mixer_ui.cc:407
Gtk::TreeModelColumn< ARDOUR::RouteGroup * > group
Definition: mixer_ui.h:241
std::list< MixerStrip * > strips
Definition: mixer_ui.h:137
void set_strip_width(Width, bool save=false)
Definition: mixer_ui.cc:1529
Gtk::HBox strip_packer
Definition: mixer_ui.h:119
void group_display_selection_changed()
bool ignore_reorder
Definition: mixer_ui.h:265
void hide_all_strips(bool with_select)
void show_track_list_menu()
Definition: mixer_ui.cc:1169
void route_group_row_change(const Gtk::TreeModel::Path &path, const Gtk::TreeModel::iterator &iter)
Definition: mixer_ui.cc:1432
void parameter_changed(std::string const &)
Definition: mixer_ui.cc:1817
Gtk::ScrolledWindow track_display_scroller
Definition: mixer_ui.h:113
gint start_updating()
Definition: mixer_ui.cc:900
void reset_order_keys()
bool strip_scroller_button_release(GdkEventButton *)
Definition: mixer_ui.cc:1516
void remove_strip(MixerStrip *)
Definition: mixer_ui.cc:431
bool hide_window(GdkEventAny *ev)
Definition: mixer_ui.cc:306
void route_group_property_changed(ARDOUR::RouteGroup *, const PBD::PropertyChange &)
Definition: mixer_ui.cc:1366
void fast_update_strips()
Definition: mixer_ui.cc:914
void reset_remote_control_ids()
Definition: mixer_ui.cc:456
void activate_all_route_groups()
Definition: mixer_ui.cc:1287
Gtk::HBox global_hpacker
Definition: mixer_ui.h:104
void show_window()
Definition: mixer_ui.cc:276
Gtk::HBox scroller_hpacker
Definition: mixer_ui.h:108
void set_route_group_activation(ARDOUR::RouteGroup *, bool)
Definition: mixer_ui.cc:1837
void show_all_audiotracks()
Definition: mixer_ui.cc:1023
void strip_select_op(bool audiotrack, bool select)
void redisplay_track_list()
Definition: mixer_ui.cc:1059
void show_strip(MixerStrip *)
Definition: mixer_ui.cc:866
Gtk::TreeModelColumn< boost::shared_ptr< ARDOUR::Route > > route
Definition: mixer_ui.h:229
void group_unselected(gint row, gint col, GdkEvent *ev)
Gtk::Label group_display_button_label
Definition: mixer_ui.h:111
Gtk::TreeModelColumn< std::string > text
Definition: mixer_ui.h:240
void hide_all_routes()
Definition: mixer_ui.cc:1000
static const int32_t default_height
Definition: mixer_ui.h:274
void track_column_click(gint)
Definition: xml++.h:95
Width
Definition: enums.h:25
MixerGroupTabs * _group_tabs
Definition: mixer_ui.h:123
LIBARDOUR_API PBD::PropertyDescriptor< bool > select
Definition: route_group.cc:48
bool on_scroll_event(GdkEventScroll *)
Definition: mixer_ui.cc:1787
bool group_display_button_press(GdkEventButton *)
Definition: mixer_ui.cc:1231
MixerStrip * strip_by_x(int x)
Definition: mixer_ui.cc:1943
bool on_key_press_event(GdkEventKey *)
Definition: mixer_ui.cc:1749
static const int32_t default_width
Definition: mixer_ui.h:273
PluginSelector * _plugin_selector
Definition: mixer_ui.h:213
int m_root_y
Definition: mixer_ui.h:126
void sync_treeview_from_order_keys()
Definition: mixer_ui.cc:574
void select_all_strips()
bool _in_group_rebuild_or_clear
Definition: mixer_ui.h:279
void initial_track_display()
Definition: mixer_ui.cc:1147
void select_strip_in_display(MixerStrip *)
static Mixer_UI * instance()
Definition: mixer_ui.cc:78
void set_route_targets_for_operation()
Definition: mixer_ui.cc:1960
void update_title()
Definition: mixer_ui.cc:1914
Gtk::HBox out_packer
Definition: mixer_ui.h:120
void show_all_routes()
Definition: mixer_ui.cc:1006
MonitorSection * monitor_section() const
Definition: mixer_ui.h:88
void hide_all_audiotracks()
Definition: mixer_ui.cc:1028
Gtk::HPaned list_hpane
Definition: mixer_ui.h:121
int m_height
Definition: mixer_ui.h:126
void add_route_group(ARDOUR::RouteGroup *)
Definition: mixer_ui.cc:1485
~Mixer_UI()
Definition: mixer_ui.cc:255
bool track_display_button_press(GdkEventButton *)
Definition: mixer_ui.cc:1179
void scroll_right()
Definition: mixer_ui.cc:1740
std::list< boost::shared_ptr< Route > > RouteList
Definition: types.h:532
void update_track_visibility()
Definition: mixer_ui.cc:843
bool strip_button_release_event(GdkEventButton *, MixerStrip *)
Definition: mixer_ui.cc:672
void track_visibility_changed(std::string const &path)
Definition: mixer_ui.cc:822
Width get_strip_width() const
Definition: mixer_ui.h:70
void sync_order_keys_from_treeview()
Definition: mixer_ui.cc:512
void add_strips(ARDOUR::RouteList &)
Definition: mixer_ui.cc:316
void pane_allocation_handler(Gtk::Allocation &, Gtk::Paned *)
Definition: mixer_ui.cc:1673
void hide_all_audiobus()
Definition: mixer_ui.cc:1017
void new_route_group()
Definition: mixer_ui.cc:1333
Gtk::VPaned rhs_pane1
Definition: mixer_ui.h:118
sigc::connection fast_screen_update_connection
Definition: mixer_ui.h:165
void select_none()
Definition: mixer_ui.cc:415
void select_strip_op(MixerStrip *, bool select)