X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_mixer.cc;h=d1dd8be7faa711d3893f1bcc29b538cbac1207f0;hb=aa60114843f4990ef93ba83974501495ddda358b;hp=77d73de588ceac69075d2cb22522e8d35edca096;hpb=54a80321064aa543023cd0b224ba9d433520983f;p=ardour.git diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc index 77d73de588..d1dd8be7fa 100644 --- a/gtk2_ardour/editor_mixer.cc +++ b/gtk2_ardour/editor_mixer.cc @@ -26,13 +26,18 @@ #include "ardour_ui.h" #include "selection.h" #include "audio_time_axis.h" +#include "actions.h" #include "i18n.h" void Editor::editor_mixer_button_toggled () { - show_editor_mixer (editor_mixer_button.get_active()); + Glib::RefPtr act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + show_editor_mixer (tact->get_active()); + } } void @@ -44,15 +49,18 @@ Editor::cms_deleted () void Editor::show_editor_mixer (bool yn) { + show_editor_mixer_when_tracks_arrive = false; + if (yn) { if (current_mixer_strip == 0) { if (selection->tracks.empty()) { - if (track_views.empty()) { + if (track_views.empty()) { + show_editor_mixer_when_tracks_arrive = true; return; - } + } for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { AudioTimeAxisView* atv; @@ -69,6 +77,9 @@ Editor::show_editor_mixer (bool yn) } } else { + + sort_track_selection (); + for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { AudioTimeAxisView* atv; @@ -90,21 +101,21 @@ Editor::show_editor_mixer (bool yn) } if (current_mixer_strip->get_parent() == 0) { - current_mixer_strip->set_embedded (true); current_mixer_strip->Hiding.connect (mem_fun(*this, &Editor::current_mixer_strip_hidden)); current_mixer_strip->GoingAway.connect (mem_fun(*this, &Editor::current_mixer_strip_removed)); current_mixer_strip->set_width (editor_mixer_strip_width); - current_mixer_strip->show_all (); - global_hpacker.pack_start (*current_mixer_strip, false, false); - global_hpacker.reorder_child (*current_mixer_strip, 0); + global_hpacker.pack_start (*current_mixer_strip, Gtk::PACK_SHRINK ); + global_hpacker.reorder_child (*current_mixer_strip, 0); + + current_mixer_strip->show_all (); } } else { if (current_mixer_strip) { - editor_mixer_strip_width = current_mixer_strip->get_width (); + editor_mixer_strip_width = current_mixer_strip->get_width (); if (current_mixer_strip->get_parent() != 0) { global_hpacker.remove (*current_mixer_strip); } @@ -126,14 +137,13 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) /* might be nothing to do */ - if (¤t_mixer_strip->route() == &at->route()) { + if (current_mixer_strip->route() == at->route()) { return; } if (current_mixer_strip->get_parent()) { show = true; } - delete current_mixer_strip; current_mixer_strip = 0; } @@ -153,15 +163,20 @@ Editor::update_current_screen () { if (session && engine.running()) { - jack_nframes_t frame; + nframes_t frame; frame = session->audible_frame(); + if (_dragging_playhead) { + goto almost_done; + } + /* only update if the playhead is on screen or we are following it */ if (_follow_playhead) { - playhead_cursor->canvas_item.show(); + playhead_cursor->canvas_item.show(); + if (frame != last_update_frame) { if (frame < leftmost_frame || frame > leftmost_frame + current_page_frames()) { @@ -178,6 +193,31 @@ Editor::update_current_screen () } playhead_cursor->set_position (frame); + +#undef CONTINUOUS_SCROLL +#ifdef CONTINUOUS_SCROLL + + /* don't do continuous scroll till the new position is in the rightmost quarter of the + editor canvas + */ + +#if 0 + if (frame > leftmost_frame + (3 * current_page_frames() / 4)) { + + if (frame > playhead_cursor->current_frame) { + nframes_t delta = frame - playhead_cursor->current_frame; + horizontal_adjustment.set_value (horizontal_adjustment.get_value() + (delta/frames_per_unit)); + } else { + nframes_t delta = playhead_cursor->current_frame - frame; + horizontal_adjustment.set_value (horizontal_adjustment.get_value() - (delta/frames_per_unit)); + } + } +#else + horizontal_adjustment.set_value (frame / frames_per_unit); +#endif + +#endif // CONTINUOUS_SCROLL + } } else { @@ -191,6 +231,7 @@ Editor::update_current_screen () } } + almost_done: last_update_frame = frame; if (current_mixer_strip) { @@ -200,14 +241,6 @@ Editor::update_current_screen () } } -void -Editor::update_slower () -{ - if (current_mixer_strip) { - current_mixer_strip->update (); - } -} - void Editor::current_mixer_strip_removed () { @@ -225,13 +258,18 @@ Editor::current_mixer_strip_hidden () AudioTimeAxisView* tmp; if ((tmp = dynamic_cast(*i)) != 0) { - if (&(tmp->route()) == &(current_mixer_strip->route())) { + if (tmp->route() == current_mixer_strip->route()) { (*i)->set_selected (false); break; } } } - global_hpacker.remove (*current_mixer_strip); + + Glib::RefPtr act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + tact->set_active (false); + } } void @@ -254,7 +292,7 @@ Editor::session_going_away () latest_regionview = 0; last_update_frame = 0; drag_info.item = 0; - last_audition_region = 0; + last_canvas_frame = 0; /* hide all tracks */ @@ -262,14 +300,22 @@ Editor::session_going_away () /* rip everything out of the list displays */ - region_list_clear (); // no clear() method in gtkmm 1.2 - route_display_model.clear (); - named_selection_model.clear (); - group_model.clear (); + region_list_display.set_model (Glib::RefPtr(0)); + route_list_display.set_model (Glib::RefPtr(0)); + named_selection_display.set_model (Glib::RefPtr(0)); + edit_group_display.set_model (Glib::RefPtr(0)); + + region_list_model->clear (); + route_display_model->clear (); + named_selection_model->clear (); + group_model->clear (); + + region_list_display.set_model (region_list_model); + route_list_display.set_model (route_display_model); + named_selection_display.set_model (named_selection_model); + edit_group_display.set_model (group_model); edit_cursor_clock.set_session (0); - selection_start_clock.set_session (0); - selection_end_clock.set_session (0); zoom_range_clock.set_session (0); nudge_clock.set_session (0); @@ -288,14 +334,6 @@ Editor::session_going_away () current_bbt_points = 0; } - if (embed_audio_item) { - embed_audio_item->set_sensitive (false); - } - - if (import_audio_item) { - import_audio_item->set_sensitive (false); - } - /* mixer strip will be deleted all by itself when its route is deleted. */