30 #include "ardour/debug.h"
71 , _ignore_reorder (false)
72 , _no_redisplay (false)
73 , _adding_routes (false)
74 , _route_deletion_in_progress (false)
75 , _redisplay_on_resume (false)
76 , _redisplay_active (0)
77 , _queue_tv_update (0)
80 , selection_countdown (0)
83 static const int column_width = 22;
86 _scroller.set_policy (POLICY_NEVER, POLICY_AUTOMATIC);
100 TreeViewColumn* rec_state_column = manage (
new TreeViewColumn(
"R", *rec_col_renderer));
103 rec_state_column->add_attribute(rec_col_renderer->property_visible(),
_columns.
is_track);
105 rec_state_column->set_sizing(TREE_VIEW_COLUMN_FIXED);
106 rec_state_column->set_alignment(ALIGN_CENTER);
107 rec_state_column->set_expand(
false);
108 rec_state_column->set_fixed_width(column_width);
117 TreeViewColumn* input_active_column = manage (
new TreeViewColumn (
"I", *input_active_col_renderer));
120 input_active_column->add_attribute (input_active_col_renderer->property_visible(),
_columns.
is_midi);
122 input_active_column->set_sizing(TREE_VIEW_COLUMN_FIXED);
123 input_active_column->set_alignment(ALIGN_CENTER);
124 input_active_column->set_expand(
false);
125 input_active_column->set_fixed_width(column_width);
135 TreeViewColumn* mute_state_column = manage (
new TreeViewColumn(
"M", *mute_col_renderer));
138 mute_state_column->set_sizing(TREE_VIEW_COLUMN_FIXED);
139 mute_state_column->set_alignment(ALIGN_CENTER);
140 mute_state_column->set_expand(
false);
141 mute_state_column->set_fixed_width(15);
151 TreeViewColumn* solo_state_column = manage (
new TreeViewColumn(
"S", *solo_col_renderer));
155 solo_state_column->set_sizing(TREE_VIEW_COLUMN_FIXED);
156 solo_state_column->set_alignment(ALIGN_CENTER);
157 solo_state_column->set_expand(
false);
158 solo_state_column->set_fixed_width(column_width);
167 TreeViewColumn* solo_isolate_state_column = manage (
new TreeViewColumn(
"SI", *solo_iso_renderer));
170 solo_isolate_state_column->add_attribute(solo_iso_renderer->property_visible(),
_columns.
solo_visible);
171 solo_isolate_state_column->set_sizing(TREE_VIEW_COLUMN_FIXED);
172 solo_isolate_state_column->set_alignment(ALIGN_CENTER);
173 solo_isolate_state_column->set_expand(
false);
174 solo_isolate_state_column->set_fixed_width(column_width);
183 TreeViewColumn* solo_safe_state_column = manage (
new TreeViewColumn(
_(
"SS"), *solo_safe_renderer));
185 solo_safe_state_column->add_attribute(solo_safe_renderer->property_visible(),
_columns.
solo_visible);
186 solo_safe_state_column->set_sizing(TREE_VIEW_COLUMN_FIXED);
187 solo_safe_state_column->set_alignment(ALIGN_CENTER);
188 solo_safe_state_column->set_expand(
false);
189 solo_safe_state_column->set_fixed_width(column_width);
195 _display.append_column (*input_active_column);
196 _display.append_column (*rec_state_column);
197 _display.append_column (*mute_state_column);
198 _display.append_column (*solo_state_column);
199 _display.append_column (*solo_isolate_state_column);
200 _display.append_column (*solo_safe_state_column);
207 { 0,
_(
"Name"),
_(
"Track/Bus Name") },
208 { 1,
S_(
"Visible|V"),
_(
"Track/Bus visible ?") },
209 { 2,
S_(
"Active|A"),
_(
"Track/Bus active ?") },
210 { 3,
S_(
"MidiInput|I"),
_(
"MIDI input enabled") },
211 { 4,
S_(
"Rec|R"),
_(
"Record enabled") },
212 { 5,
S_(
"Mute|M"),
_(
"Muted") },
213 { 6,
S_(
"Solo|S"),
_(
"Soloed") },
214 { 7,
S_(
"SoloIso|SI"),
_(
"Solo Isolated") },
215 { 8,
S_(
"SoloLock|SS"),
_(
"Solo Safe (Locked)") },
219 for (
int i = 0; ci[i].
index >= 0; ++i) {
220 col =
_display.get_column (ci[i].index);
221 l = manage (
new Label (ci[i].label));
223 col->set_widget (*l);
227 _display.set_headers_visible (
true);
228 _display.get_selection()->set_mode (SELECTION_SINGLE);
234 _display.set_size_request (100, -1);
237 CellRendererText* name_cell =
dynamic_cast<CellRendererText*
> (
_display.get_column_cell_renderer (
_name_column));
244 assert (name_column);
247 name_column->set_sizing(TREE_VIEW_COLUMN_FIXED);
248 name_column->set_expand(
true);
249 name_column->set_min_width(50);
251 name_cell->property_editable() =
true;
255 CellRendererToggle* visible_cell =
dynamic_cast<CellRendererToggle*
> (
_display.get_column_cell_renderer (
_visible_column));
257 visible_cell->property_activatable() =
true;
258 visible_cell->property_radio() =
false;
262 visible_col->set_expand(
false);
263 visible_col->set_sizing(TREE_VIEW_COLUMN_FIXED);
264 visible_col->set_fixed_width(30);
265 visible_col->set_alignment(ALIGN_CENTER);
267 CellRendererToggle* active_cell =
dynamic_cast<CellRendererToggle*
> (
_display.get_column_cell_renderer (
_active_column));
269 active_cell->property_activatable() =
true;
270 active_cell->property_radio() =
false;
274 active_col->set_expand (
false);
275 active_col->set_sizing (TREE_VIEW_COLUMN_FIXED);
276 active_col->set_fixed_width (30);
277 active_col->set_alignment (ALIGN_CENTER);
299 Window* win =
dynamic_cast<Window*
> (
_scroller.get_toplevel ());
336 Keyboard::magic_widget_grab_focus ();
350 Keyboard::magic_widget_drop_focus ();
357 SessionHandlePtr::set_session (s);
378 Gtk::TreeModel::Row row = *
_model->get_iter (Gtk::TreeModel::Path (path_string));
397 Gtk::TreeModel::Row row = *
_model->get_iter (Gtk::TreeModel::Path (path_string));
402 if (rtv && rtv->
track()) {
404 rl->push_back (rtv->
route());
413 Gtk::TreeModel::Row row = *
_model->get_iter (Gtk::TreeModel::Path (path_string));
420 rl->push_back (rtv->
route());
429 Gtk::TreeModel::Row row = *
_model->get_iter (Gtk::TreeModel::Path (path_string));
436 rl->push_back (rtv->
route());
437 if (
Config->get_solo_control_is_listen_control()) {
449 Gtk::TreeModel::Row row = *
_model->get_iter (Gtk::TreeModel::Path (path_string));
463 Gtk::TreeModel::Row row = *
_model->get_iter (Gtk::TreeModel::Path (path_string));
476 using namespace Menu_Helpers;
481 MenuList& items =
_menu->items();
482 _menu->set_name (
"ArdourContextMenu");
502 _menu->popup (1, gtk_get_current_event_time());
508 TreeModel::Children rows =
_model->children();
509 TreeModel::Children::iterator i;
517 for (n = 0, position = 0, i = rows.begin(); i != rows.end(); ++i) {
623 if ((iter =
_model->get_iter (path))) {
642 Gtk::TreeModel::Row row = *
_model->get_iter (path);
652 bool from_scratch = (
_model->children().size() == 0);
653 Gtk::TreeModel::Children::iterator insert_iter =
_model->children().end();
655 for (Gtk::TreeModel::Children::iterator it =
_model->children().begin(); it !=
_model->children().end(); ++it) {
658 if (r->
order_key() == (routes.front()->route()->order_key() + routes.size())) {
666 _display.set_model (Glib::RefPtr<ListStore>());
668 for (list<RouteTimeAxisView*>::iterator x = routes.begin(); x != routes.end(); ++x) {
672 TreeModel::Row row = *(
_model->insert (insert_iter));
701 if ((*x)->is_track()) {
706 if ((*x)->is_midi_track()) {
744 if (what ==
"track_height") {
751 if (what ==
"visible_tracks") {
761 TreeModel::Children rows =
_model->children();
762 TreeModel::Children::iterator ri;
764 for (ri = rows.begin(); ri != rows.end(); ++ri) {
792 TreeModel::Children rows =
_model->children();
793 TreeModel::Children::iterator i;
795 for (i = rows.begin(); i != rows.end(); ++i) {
815 TreeModel::Children rows =
_model->children();
816 TreeModel::Children::iterator i;
820 for (i = rows.begin(); i != rows.end(); ++i) {
834 TreeModel::Children rows =
_model->children();
835 TreeModel::Children::iterator i;
837 for (i = rows.begin(); i != rows.end(); ++i) {
850 TreeModel::Children rows =
_model->children();
851 TreeModel::Children::iterator i;
854 for (i = rows.begin(); i != rows.end(); ++i) {
871 TreeModel::Children rows =
_model->children();
880 TreeModel::Children::iterator ri;
881 bool rid_change =
false;
883 uint32_t invisible_key = UINT32_MAX;
885 for (ri = rows.begin(); ri != rows.end(); ++ri) {
889 if (rid == Route::MasterBusRemoteControlID) {
893 if (rid == Route::MonitorBusRemoteControlID) {
902 uint32_t new_rid = (visible ? rid : invisible_key--);
930 TreeModel::Children rows =
_model->children();
939 TreeModel::Children::iterator ri;
940 bool changed =
false;
941 bool rid_change =
false;
944 uint32_t invisible_key = UINT32_MAX;
946 for (ri = rows.begin(); ri != rows.end(); ++ri) {
953 if (order != old_key) {
961 uint32_t new_rid = (visible ? rid : invisible_key--);
1006 vector<int> neworder;
1007 TreeModel::Children rows =
_model->children();
1008 uint32_t old_order = 0;
1009 bool changed =
false;
1017 for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri, ++old_order) {
1024 sort (sorted_routes.begin(), sorted_routes.end(), cmp);
1025 neworder.assign (sorted_routes.size(), 0);
1029 for (OrderKeySortedRoutes::iterator sr = sorted_routes.begin(); sr != sorted_routes.end(); ++sr, ++n) {
1031 neworder[n] = sr->old_display_order;
1033 if (sr->old_display_order != n) {
1038 sr->route->name(), sr->old_display_order, n));
1043 _model->reorder (neworder);
1052 TreeModel::Children rows =
_model->children();
1053 TreeModel::Children::iterator i;
1057 for (i = rows.begin(); i != rows.end(); ++i) {
1059 TreeModel::Row row = (*i);
1073 TreeModel::Children rows =
_model->children();
1074 TreeModel::Children::iterator i;
1078 for (i = rows.begin(); i != rows.end(); ++i) {
1080 TreeModel::Row row = (*i);
1100 TreeModel::Children rows =
_model->children();
1101 TreeModel::Children::iterator i;
1105 for (i = rows.begin(); i != rows.end(); ++i) {
1107 TreeModel::Row row = (*i);
1117 if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
1136 else if ((mtv = dynamic_cast<MidiTimeAxisView*>(tv)) != 0) {
1205 TreeViewColumn *col;
1209 switch (ev->keyval) {
1211 case GDK_ISO_Left_Tab:
1221 if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
1239 if (
Config->get_solo_control_is_listen_control()) {
1240 _session->
set_listen (rl, !rl->front()->listening_via_monitor(), Session::rt_cleanup);
1266 RefPtr<TreeSelection> selection =
_display.get_selection();
1270 if (selection->count_selected_rows() != 0) {
1274 RefPtr<TreeModel> tm = RefPtr<TreeModel>::cast_dynamic (
_model);
1275 iter = selection->get_selected (tm);
1284 _display.convert_widget_to_bin_window_coords (x, y, bx, by);
1286 if (
_display.get_path_at_pos (bx, by, path)) {
1287 iter =
_model->get_iter (path);
1296 rl->push_back (rtv->
route());
1301 return !rl->empty();
1307 if (Keyboard::is_context_menu_event (ev)) {
1312 TreeModel::Path path;
1313 TreeViewColumn *tvc;
1317 if (!
_display.get_path_at_pos ((
int) ev->x, (
int) ev->y, path, tvc, cell_x, cell_y)) {
1319 _display.get_selection()->unselect_all ();
1326 if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
1328 Gtk::TreeModel::Row row = *
_model->get_iter (path);
1344 if (
_display.get_selection()->count_selected_rows() > 0) {
1347 TreeView::Selection::ListHandle_Path rows =
_display.get_selection()->get_selected_rows ();
1352 for (TreeView::Selection::ListHandle_Path::iterator i = rows.begin(); i != rows.end(); ++i) {
1354 if ((iter =
_model->get_iter (*i))) {
1357 selected.push_back (tv);
1419 const SelectionData& data,
1420 guint
info, guint time)
1422 if (data.get_target() ==
"GTK_TREE_MODEL_ROW") {
1427 context->drag_finish (
true,
false, time);
1437 typedef std::pair<TimeAxisView*,boost::shared_ptr<Route> > ViewRoute;
1438 std::list<ViewRoute> view_routes;
1439 std::vector<int> neworder;
1440 TreeModel::Children rows =
_model->children();
1441 TreeModel::Children::iterator ri;
1443 for (ri = rows.begin(); ri != rows.end(); ++ri) {
1447 view_routes.push_back (ViewRoute (tv, route));
1450 list<ViewRoute>::iterator trailing;
1451 list<ViewRoute>::iterator leading;
1455 trailing = view_routes.begin();
1456 leading = view_routes.begin();
1460 while (leading != view_routes.end()) {
1462 view_routes.insert (trailing, ViewRoute (leading->first, leading->second));
1463 leading = view_routes.erase (leading);
1477 trailing = view_routes.end();
1478 leading = view_routes.end();
1480 --leading;
if (leading == view_routes.begin()) {
return; }
1487 list<ViewRoute>::iterator tmp;
1496 view_routes.insert (tmp, ViewRoute (leading->first, leading->second));
1507 if (leading == view_routes.begin()) {
1515 view_routes.erase (leading);
1524 if (leading == view_routes.begin()) {
1533 for (leading = view_routes.begin(); leading != view_routes.end(); ++leading) {
1534 uint32_t order = leading->second->
order_key ();
1535 neworder.push_back (order);
1540 for (vector<int>::iterator i = neworder.begin(); i != neworder.end(); ++i) {
1545 for (vector<int>::iterator i = neworder.begin(); i != neworder.end(); ++i) {
1546 if (*i >= (
int) neworder.size()) {
1547 cerr <<
"Trying to move something to " << *i <<
" of " << neworder.size() << endl;
1549 assert (*i < (
int) neworder.size ());
1553 _model->reorder (neworder);
1559 TreeModel::Children rows =
_model->children();
1560 TreeModel::Children::iterator i;
1562 for (i = rows.begin(); i != rows.end(); ++i) {
1565 if (boost::dynamic_pointer_cast<Track> (route)) {
1587 TreeModel::Children rows =
_model->children();
1588 TreeModel::Children::iterator i;
1590 for (i = rows.begin(); i != rows.end(); ++i) {
1597 if (boost::dynamic_pointer_cast<Track> (route)) {
1655 list<TimeAxisView*> v;
1656 for (TreeModel::Children::iterator i =
_model->children().begin(); i !=
_model->children().end(); ++i) {
1666 _display.set_model (Glib::RefPtr<Gtk::TreeStore> (0));
1678 Gtk::Entry *e =
dynamic_cast<Gtk::Entry*
> (ce);
1681 e->set_name (
X_(
"RouteNameEditorEntry"));
1690 TreeIter iter =
_model->get_iter (path);
1698 if (route && route->
name() != new_text) {
1714 set<TimeAxisView*> show;
1715 for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
1724 TreeModel::Children rows =
_model->children ();
1725 for (TreeModel::Children::iterator i = rows.begin(); i != rows.end(); ++i) {
void set_order_key(uint32_t)
void show_all_audiotracks()
virtual guint32 show_at(double y, int &nth, Gtk::VBox *parent)
volatile gint _queue_tv_update
void sync_order_keys_from_treeview()
void commit_reversible_selection_op()
void row_deleted(Gtk::TreeModel::Path const &)
void set_listen(boost::shared_ptr< RouteList >, bool, SessionEvent::RTeventCallback after=rt_cleanup, bool group_override=false)
boost::shared_ptr< ARDOUR::MidiTrack > midi_track() const
void update_active_display()
void update_rec_display()
void on_tv_solo_safe_toggled(std::string const &)
void set_solo(boost::shared_ptr< RouteList >, bool, SessionEvent::RTeventCallback after=rt_cleanup, bool group_override=false)
bool is_midi_track() const
bool selection_filter(Glib::RefPtr< Gtk::TreeModel > const &, Gtk::TreeModel::Path const &, bool)
bool key_press(GdkEventKey *ev)
bool is_audio_track() const
void display_drag_data_received(Glib::RefPtr< Gdk::DragContext > const &, gint, gint, Gtk::SelectionData const &, guint, guint)
void update_solo_isolate_display()
uint32_t selection_countdown
void on_tv_solo_enable_toggled(std::string const &)
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r)
static ARDOUR_UI * instance()
LIBARDOUR_API PBD::PropertyDescriptor< std::string > name
bool button_press(GdkEventButton *)
void handle_gui_changes(std::string const &, void *)
void hide_all_miditracks()
PBD::Signal0< void > SoloChanged
Gtk::TreeModelColumn< bool > active
bool idle_update_mute_rec_solo_etc()
Gtk::TreeModelColumn< bool > is_track
void set_record_enabled(boost::shared_ptr< RouteList >, bool, SessionEvent::RTeventCallback after=rt_cleanup, bool group_override=false)
Gtk::Adjustment vertical_adjustment
void set(std::list< Selectable * > const &)
Gtk::TreeModelColumn< bool > name_editable
LIBARDOUR_API uint64_t OrderKeys
void move_selected_tracks(bool)
void on_tv_mute_enable_toggled(std::string const &)
void set_solo_isolated(bool yn, void *src)
bool set_name(const std::string &str)
void set_pixbuf(uint32_t state, Glib::RefPtr< Gdk::Pixbuf > pixbuf)
void set_solo_safe(bool yn, void *src)
bool enter_notify(GdkEventCrossing *)
void active_changed(std::string const &)
RecordState record_status() const
void set_session(ARDOUR::Session *)
void hide_track_in_display(TimeAxisView &)
void hide_all_audiotracks()
#define ENSURE_GUI_THREAD(obj, method,...)
void sync_treeview_from_order_keys()
virtual bool set_marked_for_display(bool)
Gtk::TreeModelColumn< uint32_t > solo_state
PBD::Signal1< void, bool > StepEditStatusChange
Gtk::TreeModelColumn< uint32_t > mute_state
double _full_canvas_height
full height of the canvas
void update_mute_display()
void set_all_tracks_visibility(bool)
void name_edit_started(Gtk::CellEditable *, const Glib::ustring &)
LIBGTKMM2EXT_API uint64_t Keyboard
virtual bool record_enabled() const
static Gtkmm2ext::ActiveState solo_isolate_active_state(boost::shared_ptr< ARDOUR::Route >)
uint32_t order_key() const
PBD::Signal0< void > InputActiveChanged
LIBARDOUR_API RCConfiguration * Config
Gtk::TreeModelColumn< TimeAxisView * > tv
Gtkmm2ext::DnDTreeView< boost::shared_ptr< ARDOUR::Route > > _display
bool listening_via_monitor() const
void visible_changed(std::string const &)
void set_input_active(bool)
void on_tv_solo_isolate_toggled(std::string const &)
void name_edit(std::string const &, std::string const &)
void begin_reversible_selection_op(std::string cmd_name)
void routes_added(std::list< RouteTimeAxisView * > routes)
void on_drag_data_received(const Glib::RefPtr< Gdk::DragContext > &context, int x, int y, const Gtk::SelectionData &selection_data, guint info, guint time)
void show_tracks_with_regions_at_playhead()
framepos_t transport_frame() const
bool focus_in(GdkEventFocus *)
boost::shared_ptr< ARDOUR::Track > track() const
Gtk::TreeModelColumn< bool > is_midi
void update_solo_display(bool)
static Gtkmm2ext::ActiveState mute_active_state(ARDOUR::Session *, boost::shared_ptr< ARDOUR::Route >)
void show_all_miditracks()
void show_track_in_display(TimeAxisView &)
bool deletion_in_progress() const
void add_object_drag(int column, std::string type_name)
void route_removed(TimeAxisView *)
boost::shared_ptr< RouteList > get_routes() const
#define DEBUG_TRACE(bits, str)
static Gtkmm2ext::ActiveState solo_active_state(boost::shared_ptr< ARDOUR::Route >)
bool record_enabled() const
Gtk::ScrolledWindow _scroller
void solo_changed_so_update_mute()
static Gtkmm2ext::ActiveState solo_safe_active_state(boost::shared_ptr< ARDOUR::Route >)
void set_all_audio_midi_visibility(int, bool)
void notify_remote_id_change()
volatile gint _redisplay_active
LIBPBD_API Transmitter info
LIBARDOUR_API PBD::PropertyDescriptor< bool > active
PBD::Signal0< void > RecordStateChanged
void reset_controls_layout_width()
Gtk::TreeModelColumn< std::string > text
void set_tip(Gtk::Widget &w, const gchar *tip)
Gtk::TreeModelColumn< boost::shared_ptr< ARDOUR::Route > > route
void update_input_active_display()
LIBGTKMM2EXT_API void treeview_select_next(Gtk::TreeView &view, Glib::RefPtr< Gtk::TreeModel > model, Gtk::TreeViewColumn *col)
double _visible_canvas_height
height of the visible area of the track canvas
bool selected(TimeAxisView *)
void add_routes(ARDOUR::RouteList &)
std::vector< RoutePlusOrderKey > OrderKeySortedRoutes
Gtk::VBox edit_controls_vbox
Gtk::TreeModelColumn< bool > is_input_active
void set_active(bool yn, void *)
SignalChanged & signal_changed()
void on_input_active_changed(std::string const &)
bool get_relevant_routes(boost::shared_ptr< ARDOUR::RouteList > rl)
bool focus_out(GdkEventFocus *)
void ensure_time_axis_view_is_visible(TimeAxisView const &tav, bool at_top)
PBD::Signal0< void > BatchUpdateStart
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > position
void route_property_changed(const PBD::PropertyChange &, boost::weak_ptr< ARDOUR::Route >)
bool leave_notify(GdkEventCrossing *)
Gtk::CellEditable * name_editable
bool input_active() const
Gtk::TreeModelColumn< uint32_t > solo_safe_state
PBD::Signal0< void > RecordEnableChanged
std::list< TimeAxisView * > views() const
Selection & get_selection() const
void reset_remote_control_ids()
Gtk::TreeModelColumn< uint32_t > rec_state
void update_solo_safe_display()
bool contains(PropertyDescriptor< T > p) const
RouteTimeAxisView * axis_view_from_route(boost::shared_ptr< ARDOUR::Route >) const
Gtk::TreeModelColumn< uint32_t > solo_isolate_state
void reset_controls_layout_height(int32_t height)
Glib::PropertyProxy< uint32_t > property_state()
void on_tv_rec_enable_changed(std::string const &)
uint32_t remote_control_id() const
bool _route_deletion_in_progress
void set_remote_control_id_explicit(uint32_t order_key)
Glib::RefPtr< Gtk::ListStore > _model
bool marked_for_display() const
bool _redisplay_on_resume
Glib::RefPtr< Gdk::Pixbuf > get_icon(const char *cname)
#define MISSING_INVALIDATOR
std::list< boost::shared_ptr< Route > > RouteList
boost::shared_ptr< RouteList > get_routes_with_regions_at(framepos_t const) const
PBD::Signal0< void > BatchUpdateEnd
void hide_all_tracks(bool)
bool solo_isolated() const
ARDOUR::Session * _session
boost::shared_ptr< ARDOUR::Route > route() const
bool sync_track_view_list_and_routes()
LIBGTKMM2EXT_API void treeview_select_previous(Gtk::TreeView &view, Glib::RefPtr< Gtk::TreeModel > model, Gtk::TreeViewColumn *col)
std::string string_compose(const std::string &fmt, const T1 &o1)
void set_mute(boost::shared_ptr< RouteList >, bool, SessionEvent::RTeventCallback after=rt_cleanup, bool group_override=false)
bool step_editing() const
Gtk::TreeModelColumn< bool > solo_visible
Gtk::TreeModelColumn< bool > visible
void reordered(Gtk::TreeModel::Path const &, Gtk::TreeModel::iterator const &, int *)