X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_mixer.cc;h=12b5ff3f305b7c2a1e02d2fb9993e2d7a635c5f9;hb=6ee23029a338951705c589be6c61ab52099758b6;hp=618d59455ef87e89803a63c30481407c604ecd0c;hpb=762b02bc9586b06665564b8170bb9b274c39df94;p=ardour.git diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc index 618d59455e..12b5ff3f30 100644 --- a/gtk2_ardour/editor_mixer.cc +++ b/gtk2_ardour/editor_mixer.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2003-2004 Paul Davis + Copyright (C) 2003-2004 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,23 +17,34 @@ */ +#ifdef WAF_BUILD +#include "gtk2ardour-config.h" +#endif + #include #include #include -#include +#include "pbd/enumwriter.h" -#include +#include "ardour/rc_configuration.h" +#include "actions.h" +#include "ardour_ui.h" +#include "audio_time_axis.h" +#include "automation_time_axis.h" #include "editor.h" +#include "editor_route_groups.h" +#include "editor_regions.h" +#include "gui_thread.h" +#include "midi_time_axis.h" #include "mixer_strip.h" -#include "ardour_ui.h" +#include "mixer_ui.h" #include "selection.h" -#include "audio_time_axis.h" -#include "actions.h" #include "i18n.h" +using namespace std; using namespace Gtkmm2ext; using namespace PBD; @@ -57,12 +68,6 @@ Editor::editor_list_button_toggled () } } -void -Editor::cms_deleted () -{ - current_mixer_strip = 0; -} - void Editor::show_editor_mixer (bool yn) { @@ -70,7 +75,7 @@ Editor::show_editor_mixer (bool yn) show_editor_mixer_when_tracks_arrive = false; - if (!session) { + if (!_session) { show_editor_mixer_when_tracks_arrive = yn; return; } @@ -78,15 +83,15 @@ Editor::show_editor_mixer (bool yn) if (yn) { 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) { RouteTimeAxisView* atv; - + if ((atv = dynamic_cast (*i)) != 0) { r = atv->route(); break; @@ -94,12 +99,11 @@ Editor::show_editor_mixer (bool yn) } } else { + sort_track_selection (selection->tracks); - sort_track_selection (); - for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { RouteTimeAxisView* atv; - + if ((atv = dynamic_cast (*i)) != 0) { r = atv->route(); break; @@ -108,26 +112,18 @@ Editor::show_editor_mixer (bool yn) } if (r) { - bool created; - if (current_mixer_strip == 0) { create_editor_mixer (); - created = true; - } else { - created = false; } current_mixer_strip->set_route (r); - - if (created) { - current_mixer_strip->set_width (editor_mixer_strip_width, (void*) this); - } + current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this); } - + if (current_mixer_strip->get_parent() == 0) { global_hpacker.pack_start (*current_mixer_strip, Gtk::PACK_SHRINK ); global_hpacker.reorder_child (*current_mixer_strip, 0); - current_mixer_strip->show_all (); + current_mixer_strip->show (); } } else { @@ -155,42 +151,30 @@ Editor::ensure_all_elements_drawn () } #endif -void -Editor::show_editor_list (bool yn) -{ - if (yn) { - the_notebook.show(); - } else { - the_notebook.hide(); - } -} - void Editor::create_editor_mixer () { current_mixer_strip = new MixerStrip (*ARDOUR_UI::instance()->the_mixer(), - *session, + _session, false); - 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->Hiding.connect (sigc::mem_fun(*this, &Editor::current_mixer_strip_hidden)); + current_mixer_strip->WidthChanged.connect (sigc::mem_fun (*this, &Editor::mixer_strip_width_changed)); + #ifdef GTKOSX - current_mixer_strip->WidthChanged.connect (mem_fun(*this, &Editor::ensure_all_elements_drawn)); + current_mixer_strip->WidthChanged.connect (sigc::mem_fun(*this, &Editor::ensure_all_elements_drawn)); #endif current_mixer_strip->set_embedded (true); -} +} void Editor::set_selected_mixer_strip (TimeAxisView& view) { - RouteTimeAxisView* at; - bool show = false; - bool created; - - if (!session || (at = dynamic_cast(&view)) == 0) { + if (!_session) { return; } Glib::RefPtr act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); + if (act) { Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); if (!tact || !tact->get_active()) { @@ -201,136 +185,50 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) if (current_mixer_strip == 0) { create_editor_mixer (); - created = true; - } else { - created = false; } - /* might be nothing to do */ - - if (current_mixer_strip->route() == at->route()) { - return; - } - - if (current_mixer_strip->get_parent()) { - show = true; - } - current_mixer_strip->set_route (at->route()); + // if this is an automation track, then we shold the mixer strip should + // show the parent - if (created) { - current_mixer_strip->set_width (editor_mixer_strip_width, (void*) this); - } + boost::shared_ptr route; + AutomationTimeAxisView* atv; - if (show) { - show_editor_mixer (true); - } -} + if ((atv = dynamic_cast(&view)) != 0) { -double current = 0.0; + AudioTimeAxisView *parent = dynamic_cast(view.get_parent()); -void -Editor::update_current_screen () -{ - if (session && session->engine().running()) { - - nframes64_t const frame = session->audible_frame(); - - if (_dragging_playhead) { - goto almost_done; + if (parent) { + route = parent->route (); } - /* only update if the playhead is on screen or we are following it */ - - if (_follow_playhead && session->requested_return_frame() < 0) { - - //playhead_cursor->canvas_item.show(); - - if (frame != last_update_frame) { - - -#undef CONTINUOUS_SCROLL -#ifndef CONTINUOUS_SCROLL - if (frame < leftmost_frame || frame > leftmost_frame + current_page_frames()) { - - if (session->transport_speed() < 0) { - if (frame > (current_page_frames()/2)) { - center_screen (frame-(current_page_frames()/2)); - } else { - center_screen (current_page_frames()/2); - } - } else { - center_screen (frame+(current_page_frames()/2)); - } - } - - playhead_cursor->set_position (frame); - -#else // CONTINUOUS_SCROLL - - /* don't do continuous scroll till the new position is in the rightmost quarter of the - editor canvas - */ - - if (session->transport_speed()) { - double target = ((double)frame - (double)current_page_frames()/2.0) / frames_per_unit; - if (target <= 0.0) target = 0.0; - if ( fabs(target - current) < current_page_frames()/frames_per_unit ) { - target = (target * 0.15) + (current * 0.85); - } else { - /* relax */ - } - //printf("frame: %d, cpf: %d, fpu: %6.6f, current: %6.6f, target : %6.6f\n", frame, current_page_frames(), frames_per_unit, current, target ); - current = target; - horizontal_adjustment.set_value ( current ); - } - - playhead_cursor->set_position (frame); - -#endif // CONTINUOUS_SCROLL + } else { - } + AudioTimeAxisView* at = dynamic_cast (&view); + if (at) { + route = at->route(); } else { - - if (frame != last_update_frame) { - playhead_cursor->set_position (frame); + MidiTimeAxisView* mt = dynamic_cast (&view); + if (mt) { + route = mt->route(); } } + } - almost_done: - last_update_frame = frame; - if (current_mixer_strip) { - current_mixer_strip->fast_update (); - } - + if (current_mixer_strip->route() == route) { + return; } -} -void -Editor::current_mixer_strip_removed () -{ - if (current_mixer_strip) { - /* it is being deleted elsewhere */ - current_mixer_strip = 0; + if (route) { + current_mixer_strip->set_route (route); + current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this); } } void Editor::current_mixer_strip_hidden () { - for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { - - RouteTimeAxisView* tmp; - - if ((tmp = dynamic_cast(*i)) != 0) { - if (tmp->route() == current_mixer_strip->route()) { - (*i)->set_selected (false); - break; - } - } - } - Glib::RefPtr act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); if (act) { Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); @@ -339,87 +237,51 @@ Editor::current_mixer_strip_hidden () } void -Editor::session_going_away () +Editor::maybe_add_mixer_strip_width (XMLNode& node) { - _have_idled = false; - - for (vector::iterator i = session_connections.begin(); i != session_connections.end(); ++i) { - (*i).disconnect (); + if (current_mixer_strip) { + node.add_property ("mixer-width", enum_2_string (editor_mixer_strip_width)); } +} - stop_scrolling (); - selection->clear (); - cut_buffer->clear (); - - clicked_regionview = 0; - clicked_axisview = 0; - clicked_routeview = 0; - clicked_crossfadeview = 0; - entered_regionview = 0; - entered_track = 0; - last_update_frame = 0; - drag_info.item = 0; - - playhead_cursor->canvas_item.hide (); - - /* hide all tracks */ - - hide_all_tracks (false); - - /* rip everything out of the list displays */ - - 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_point_clock_connection_a.disconnect(); - edit_point_clock_connection_b.disconnect(); - - edit_point_clock.set_session (0); - zoom_range_clock.set_session (0); - nudge_clock.set_session (0); - - editor_list_button.set_active(false); - editor_list_button.set_sensitive(false); - - /* clear tempo/meter rulers */ - remove_metric_marks (); - hide_measures (); - clear_marker_display (); +void +Editor::mixer_strip_width_changed () +{ +#ifdef GTKOSX + ensure_all_elements_drawn (); +#endif - delete current_bbt_points; - current_bbt_points = 0; + editor_mixer_strip_width = current_mixer_strip->get_width_enum (); +} - /* mixer strip will be deleted all by itself - when its route is deleted. - */ +void +Editor::track_mixer_selection () +{ + Mixer_UI::instance()->selection().RoutesChanged.connect (sigc::mem_fun (*this, &Editor::follow_mixer_selection)); +} - current_mixer_strip = 0; +void +Editor::follow_mixer_selection () +{ + if (!ARDOUR::Config->get_link_editor_and_mixer_selection() || _following_mixer_selection) { + return; + } - WindowTitle title(Glib::get_application_name()); - title += _("Editor"); + _following_mixer_selection = true; + selection->block_tracks_changed (true); - set_title (title.get_string()); + RouteUISelection& s (Mixer_UI::instance()->selection().routes); - session = 0; -} + selection->clear_tracks (); -void -Editor::maybe_add_mixer_strip_width (XMLNode& node) -{ - if (current_mixer_strip) { - node.add_property ("mixer-width", enum_2_string (current_mixer_strip->get_width())); + for (RouteUISelection::iterator i = s.begin(); i != s.end(); ++i) { + TimeAxisView* tav = get_route_view_by_route_id ((*i)->route()->id()); + if (tav) { + selection->add (tav); + } } -} + _following_mixer_selection = false; + selection->block_tracks_changed (false); + selection->TracksChanged (); /* EMIT SIGNAL */ +}