solo_isolate_state_column->set_sizing(TREE_VIEW_COLUMN_FIXED);
solo_isolate_state_column->set_alignment(ALIGN_CENTER);
solo_isolate_state_column->set_expand(false);
- solo_isolate_state_column->set_fixed_width(15);
+ solo_isolate_state_column->set_fixed_width(22);
// Solo safe toggle
CellRendererPixbufMulti* solo_safe_renderer = manage (new CellRendererPixbufMulti ());
old_focus = 0;
}
+ name_editable = 0;
+
/* try to do nothing on focus in (doesn't work, hence selection_count nonsense) */
return true;
}
}
bool
-EditorRoutes::enter_notify (GdkEventCrossing* ev)
+EditorRoutes::enter_notify (GdkEventCrossing*)
{
+ if (name_editable) {
+ return true;
+ }
+
/* arm counter so that ::selection_filter() will deny selecting anything for the
next two attempts to change selection status.
*/
// Get the model row that has been toggled.
Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string));
- TimeAxisView *tv = row[_columns.tv];
- AudioTimeAxisView *atv = dynamic_cast<AudioTimeAxisView*> (tv);
+ TimeAxisView* tv = row[_columns.tv];
+ RouteTimeAxisView *rtv = dynamic_cast<RouteTimeAxisView*> (tv);
- if (atv != 0 && atv->is_audio_track()){
+ if (rtv && rtv->track()) {
boost::shared_ptr<RouteList> rl (new RouteList);
- rl->push_back (atv->route());
- _session->set_record_enabled (rl, !atv->track()->record_enabled(), Session::rt_cleanup);
+ rl->push_back (rtv->route());
+ _session->set_record_enabled (rl, !rtv->track()->record_enabled(), Session::rt_cleanup);
}
}
Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string));
TimeAxisView *tv = row[_columns.tv];
- AudioTimeAxisView *atv = dynamic_cast<AudioTimeAxisView*> (tv);
+ RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv);
- if (atv != 0) {
+ if (rtv != 0) {
boost::shared_ptr<RouteList> rl (new RouteList);
- rl->push_back (atv->route());
- _session->set_solo (rl, !atv->route()->soloed(), Session::rt_cleanup);
+ rl->push_back (rtv->route());
+ if (Config->get_solo_control_is_listen_control()) {
+ _session->set_listen (rl, !rtv->route()->listening_via_monitor(), Session::rt_cleanup);
+ } else {
+ _session->set_solo (rl, !rtv->route()->self_soloed(), Session::rt_cleanup);
+ }
}
}
Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string));
TimeAxisView *tv = row[_columns.tv];
- AudioTimeAxisView *atv = dynamic_cast<AudioTimeAxisView*> (tv);
+ RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv);
- if (atv != 0) {
- atv->route()->set_solo_isolated (!atv->route()->solo_isolated(), this);
+ if (rtv) {
+ rtv->route()->set_solo_isolated (!rtv->route()->solo_isolated(), this);
}
}
Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string));
TimeAxisView *tv = row[_columns.tv];
- AudioTimeAxisView *atv = dynamic_cast<AudioTimeAxisView*> (tv);
+ RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv);
- if (atv != 0) {
- atv->route()->set_solo_safe (!atv->route()->solo_safe(), this);
+ if (rtv) {
+ rtv->route()->set_solo_safe (!rtv->route()->solo_safe(), this);
}
}
n++;
}
+
/* whenever we go idle, update the track view list to reflect the new order.
we can't do this here, because we could mess up something that is traversing
the track order and has caused a redisplay of the list.
*/
Glib::signal_idle().connect (sigc::mem_fun (*_editor, &Editor::sync_track_view_list_and_routes));
+ _editor->reset_controls_layout_height (position);
+ _editor->reset_controls_layout_width ();
_editor->full_canvas_height = position + _editor->canvas_timebars_vsize;
_editor->vertical_adjustment.set_upper (_editor->full_canvas_height);
row[_columns.route] = (*x)->route ();
row[_columns.is_track] = (boost::dynamic_pointer_cast<Track> ((*x)->route()) != 0);
row[_columns.mute_state] = (*x)->route()->muted();
- row[_columns.solo_state] = (*x)->route()->soloed();
+ row[_columns.solo_state] = RouteUI::solo_visual_state ((*x)->route());
row[_columns.solo_isolate_state] = (*x)->route()->solo_isolated();
row[_columns.solo_safe_state] = (*x)->route()->solo_safe();
row[_columns.name_editable] = true;
(*x)->route()->mute_changed.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_mute_display, this), gui_context());
(*x)->route()->solo_changed.connect (*this, MISSING_INVALIDATOR, ui_bind (&EditorRoutes::update_solo_display, this, _1), gui_context());
+ (*x)->route()->listen_changed.connect (*this, MISSING_INVALIDATOR, ui_bind (&EditorRoutes::update_solo_display, this, _1), gui_context());
(*x)->route()->solo_isolated_changed.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_solo_isolate_display, this), gui_context());
(*x)->route()->solo_safe_changed.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_solo_safe_display, this), gui_context());
}
boost::shared_ptr<RouteList> rl (new RouteList);
TreePath path;
- cerr << "our key press\n";
-
switch (ev->keyval) {
case GDK_Tab:
case GDK_ISO_Left_Tab:
if (name_editable) {
name_editable->editing_done ();
name_editable = 0;
- }
+ }
col = _display.get_column (5); // select&focus on name column
break;
case 's':
- if (get_relevant_routes (rl)) {
- _session->set_solo (rl, !rl->front()->soloed(), Session::rt_cleanup);
- }
+ if (Config->get_solo_control_is_listen_control()) {
+ _session->set_listen (rl, !rl->front()->listening_via_monitor(), Session::rt_cleanup);
+ } else {
+ _session->set_solo (rl, !rl->front()->self_soloed(), Session::rt_cleanup);
+ }
return true;
break;
}
bool
-EditorRoutes::selection_filter (Glib::RefPtr<TreeModel> const &, TreeModel::Path const &path , bool selected)
+EditorRoutes::selection_filter (Glib::RefPtr<TreeModel> const &, TreeModel::Path const&, bool /*selected*/)
{
if (selection_countdown) {
if (--selection_countdown == 0) {
EditorRoutes::name_edit_started (CellEditable* ce, const Glib::ustring&)
{
name_editable = ce;
+
+ /* give it a special name */
+
+ Gtk::Entry *e = dynamic_cast<Gtk::Entry*> (ce);
+
+ if (e) {
+ e->set_name (X_("RouteNameEditorEntry"));
+ }
}
void