diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-10-30 18:14:25 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-10-30 18:14:25 +0000 |
commit | e98b3c1ec65f173f357f9b6747d11174e2743cd6 (patch) | |
tree | 43e209e88951691811a3371091950952d4ecbaf7 /gtk2_ardour | |
parent | c83e48e07a0b4790512c6251d8ad8f941c881021 (diff) |
make 3.0 catch up with transport and other changes in 2.X (hand applied, not merged)
git-svn-id: svn://localhost/ardour2/branches/3.0@5989 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour.menus.in | 1 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 162 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 7 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui2.cc | 60 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_dialogs.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_ed.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_options.cc | 16 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 32 | ||||
-rw-r--r-- | gtk2_ardour/engine_dialog.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/public_editor.h | 1 |
11 files changed, 132 insertions, 159 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index afbbf196f9..bd2c4dda62 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -43,6 +43,7 @@ <menu action="PlayMenu"> <menuitem action='play-selected-regions'/> <menuitem action='play-edit-range'/> + <menuitem action='PlaySelection'/> <menuitem action='play-from-edit-point-and-return'/> <menuitem action='Loop'/> </menu> diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 30a9d59312..8dc5680a1e 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1462,10 +1462,6 @@ ARDOUR_UI::transport_stop () return; } - if (session->get_play_loop ()) { - session->request_play_loop (false); - } - session->request_stop (); } @@ -1517,35 +1513,91 @@ ARDOUR_UI::transport_record (bool roll) //cerr << "ARDOUR_UI::transport_record () called roll = " << roll << " session->record_status() = " << session->record_status() << endl; } -void +void ARDOUR_UI::transport_roll () { - bool rolling; - if (!session) { return; } - rolling = session->transport_rolling (); + if (session->is_auditioning()) { + return; + } + + switch (Config->get_slave_source()) { + case None: + case JACK: + break; + default: + /* transport controlled by the master */ + return; + } - //cerr << "ARDOUR_UI::transport_roll () called session->record_status() = " << session->record_status() << endl; + bool rolling = session->transport_rolling(); if (session->get_play_loop()) { - session->request_play_loop (false); - auto_loop_button.set_visual_state (1); - roll_button.set_visual_state (1); + session->request_play_loop (false, true); } else if (session->get_play_range ()) { - session->request_play_range (false); - play_selection_button.set_visual_state (0); - } else if (rolling) { - session->request_locate (session->last_transport_start(), true); + session->request_play_range (false, true); + } + + if (!rolling) { + session->request_transport_speed (1.0f); } - session->request_transport_speed (1.0f); + map_transport_state (); } void -ARDOUR_UI::transport_loop() +ARDOUR_UI::toggle_roll (bool with_abort) +{ + + if (!session) { + return; + } + + if (session->is_auditioning()) { + session->cancel_audition (); + return; + } + + switch (Config->get_slave_source()) { + case None: + case JACK: + break; + default: + /* transport controlled by the master */ + return; + } + + bool rolling = session->transport_rolling(); + bool affect_transport = true; + + if (rolling) { + /* drop out of loop/range playback but leave transport rolling */ + if (session->get_play_loop()) { + affect_transport = false; + session->request_play_loop (false, true); + } else if (session->get_play_range ()) { + affect_transport = false; + session->request_play_range (false, true); + } + } + + if (affect_transport) { + + if (rolling) { + session->request_stop (with_abort); + } else { + session->request_transport_speed (1.0f); + } + } + + map_transport_state (); +} + +void +ARDOUR_UI::toggle_session_auto_loop () { if (session) { if (session->get_play_loop()) { @@ -1554,10 +1606,14 @@ ARDOUR_UI::transport_loop() if (looploc) { session->request_locate (looploc->start(), true); } + } else { + session->request_play_loop (false); + } + } else { + Location * looploc = session->locations()->auto_loop_location(); + if (looploc) { + session->request_play_loop (true); } - } - else { - session->request_play_loop (true); } } } @@ -1569,10 +1625,6 @@ ARDOUR_UI::transport_play_selection () return; } - if (!session->get_play_range()) { - session->request_stop (); - } - editor->play_selection (); } @@ -1627,6 +1679,7 @@ ARDOUR_UI::transport_forward (int option) /* speed up */ session->request_transport_speed (current_transport_speed * 1.5f); } + } } @@ -1653,25 +1706,60 @@ ARDOUR_UI::toggle_record_enable (uint32_t dstream) } void -ARDOUR_UI::queue_transport_change () -{ - Gtkmm2ext::UI::instance()->call_slot (mem_fun(*this, &ARDOUR_UI::map_transport_state)); -} - -void ARDOUR_UI::map_transport_state () { + ENSURE_GUI_THREAD(mem_fun (*this, &ARDOUR_UI::map_transport_state)); + + if (!session) { + auto_loop_button.set_visual_state (0); + play_selection_button.set_visual_state (0); + roll_button.set_visual_state (0); + stop_button.set_visual_state (1); + return; + } + float sp = session->transport_speed(); if (sp == 1.0f) { - transport_rolling (); - } else if (sp < 0.0f) { - transport_rewinding (); - } else if (sp > 0.0f) { - transport_forwarding (); + shuttle_fract = SHUTTLE_FRACT_SPEED1; /* speed = 1.0, believe it or not */ + shuttle_box.queue_draw (); + } else if (sp == 0.0f) { + shuttle_fract = 0; + shuttle_box.queue_draw (); + update_disk_space (); + } + + if (sp != 0.0) { + + if (session->get_play_range()) { + + play_selection_button.set_visual_state (1); + roll_button.set_visual_state (0); + auto_loop_button.set_visual_state (0); + + } else if (session->get_play_loop ()) { + + auto_loop_button.set_visual_state (1); + play_selection_button.set_visual_state (0); + roll_button.set_visual_state (0); + + } else { + + roll_button.set_visual_state (1); + play_selection_button.set_visual_state (0); + auto_loop_button.set_visual_state (0); + } + + stop_button.set_visual_state (0); + } else { - transport_stopped (); + + stop_button.set_visual_state (1); + roll_button.set_visual_state (0); + play_selection_button.set_visual_state (0); + auto_loop_button.set_visual_state (0); } + } void diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 7253f58031..0ec3069217 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -282,7 +282,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI void update_autosave(); sigc::connection _autosave_connection; - void queue_transport_change (); void map_transport_state (); int32_t do_engine_start (); @@ -548,11 +547,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI void transport_forward (int option); void transport_rewind (int option); void transport_loop (); - - void transport_rolling (); - void transport_rewinding (); - void transport_forwarding (); - void transport_stopped (); + void toggle_roll (bool with_abort); bool _session_is_new; void connect_to_session (ARDOUR::Session *); diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index 57c3df4cdf..e2f4db7e5a 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -128,66 +128,6 @@ ARDOUR_UI::display_message (const char *prefix, gint prefix_len, RefPtr<TextBuff } void -ARDOUR_UI::transport_stopped () -{ - stop_button.set_visual_state (1); - - roll_button.set_visual_state (0); - play_selection_button.set_visual_state (0); - auto_loop_button.set_visual_state (0); - - shuttle_fract = 0; - shuttle_box.queue_draw (); - - update_disk_space (); -} - -void -ARDOUR_UI::transport_rolling () -{ - stop_button.set_visual_state (0); - if (session->get_play_range()) { - play_selection_button.set_visual_state (1); - roll_button.set_visual_state (0); - auto_loop_button.set_visual_state (0); - - } else if (session->get_play_loop ()) { - auto_loop_button.set_visual_state (1); - play_selection_button.set_visual_state (0); - roll_button.set_visual_state (0); - - } else { - - roll_button.set_visual_state (1); - play_selection_button.set_visual_state (0); - auto_loop_button.set_visual_state (0); - } - - /* reset shuttle controller */ - - shuttle_fract = SHUTTLE_FRACT_SPEED1; /* speed = 1.0, believe it or not */ - shuttle_box.queue_draw (); -} - -void -ARDOUR_UI::transport_rewinding () -{ - stop_button.set_visual_state (0); - roll_button.set_visual_state (1); - play_selection_button.set_visual_state (0); - auto_loop_button.set_visual_state (0); -} - -void -ARDOUR_UI::transport_forwarding () -{ - stop_button.set_visual_state (0); - roll_button.set_visual_state (1); - play_selection_button.set_visual_state (0); - auto_loop_button.set_visual_state (0); -} - -void ARDOUR_UI::setup_transport () { transport_tearoff = manage (new TearOff (transport_tearoff_hbox)); diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 486c60dbe4..cfb3d6574e 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -111,7 +111,7 @@ ARDOUR_UI::connect_to_session (Session *s) do any GUI work, just queue it for handling by the GUI thread. */ - session->TransportStateChange.connect (mem_fun(*this, &ARDOUR_UI::queue_transport_change)); + session->TransportStateChange.connect (mem_fun(*this, &ARDOUR_UI::map_transport_state)); /* alert the user to these things happening */ @@ -149,7 +149,7 @@ ARDOUR_UI::connect_to_session (Session *s) start_clocking (); start_blinking (); - transport_stopped (); + map_transport_state (); second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_second), 1000); point_one_second_connection = Glib::signal_timeout().connect (mem_fun(*this, &ARDOUR_UI::every_point_one_seconds), 100); diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index c1ffb11dc3..21a4fb5c44 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -251,10 +251,10 @@ ARDOUR_UI::install_actions () ActionManager::session_sensitive_actions.push_back (act); ActionManager::transport_sensitive_actions.push_back (act); - ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), bind (mem_fun (*editor, &PublicEditor::toggle_playback), false)); + ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), bind (mem_fun (*this, &ARDOUR_UI::toggle_roll), false)); ActionManager::session_sensitive_actions.push_back (act); ActionManager::transport_sensitive_actions.push_back (act); - ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("Stop and Forget Capture"), bind (mem_fun(*editor, &PublicEditor::toggle_playback), true)); + ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("Stop and Forget Capture"), bind (mem_fun(*this, &ARDOUR_UI::toggle_roll), true)); ActionManager::session_sensitive_actions.push_back (act); ActionManager::transport_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index 9370315a8f..663bb8eaff 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -108,22 +108,6 @@ ARDOUR_UI::toggle_click () } void -ARDOUR_UI::toggle_session_auto_loop () -{ - if (session) { - if (session->get_play_loop()) { - if (session->transport_rolling()) { - transport_roll(); - } else { - session->request_play_loop (false); - } - } else { - session->request_play_loop (true); - } - } -} - -void ARDOUR_UI::unset_dual_punch () { Glib::RefPtr<Action> action = ActionManager::get_action ("Transport", "TogglePunch"); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 609a0ef6ed..8376b8cedf 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -229,7 +229,6 @@ class Editor : public PublicEditor void separate_region_from_punch (); void separate_region_from_loop (); void separate_regions_using_location (ARDOUR::Location&); - void toggle_playback (bool with_abort); void transition_to_rolling (bool forward); /* undo related */ diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 9de3d0138f..8c6da6c1de 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -2368,37 +2368,6 @@ Editor::transition_to_rolling (bool fwd) } void -Editor::toggle_playback (bool with_abort) -{ - if (!session) { - return; - } - - switch (Config->get_slave_source()) { - case None: - case JACK: - break; - default: - /* transport controlled by the master */ - return; - } - - if (session->is_auditioning()) { - session->cancel_audition (); - return; - } - - if (session->transport_rolling()) { - session->request_stop (with_abort); - if (session->get_play_loop()) { - session->request_play_loop (false); - } - } else { - session->request_transport_speed (1.0f); - } -} - -void Editor::play_from_start () { session->request_locate (session->current_start_frame(), true); @@ -2638,7 +2607,6 @@ Editor::play_selected_region () } } - session->request_stop (); session->request_bounded_roll (start, end); } diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index 3dbc5b5eea..05d953aeab 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -1180,8 +1180,7 @@ EngineControl::set_state (const XMLNode& root) clist = root.children(); for (citer = clist.begin(); citer != clist.end(); ++citer) { - if ( prop && (prop->value() == "FFADO" )) - continue; + child = *citer; prop = child->property ("val"); diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 035d05c1af..3540af927f 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -186,7 +186,6 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway virtual void new_region_from_selection () = 0; virtual void separate_region_from_selection () = 0; - virtual void toggle_playback (bool with_abort) = 0; virtual void transition_to_rolling (bool fwd) = 0; virtual nframes64_t unit_to_frame (double unit) const = 0; // XXX remove me when libardour goes nframes64_t |