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
This commit is contained in:
Paul Davis 2009-10-30 18:14:25 +00:00
parent c83e48e07a
commit e98b3c1ec6
18 changed files with 253 additions and 228 deletions

View file

@ -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>

View file

@ -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 ();
//cerr << "ARDOUR_UI::transport_roll () called session->record_status() = " << session->record_status() << endl;
if (session->get_play_loop()) {
session->request_play_loop (false);
auto_loop_button.set_visual_state (1);
roll_button.set_visual_state (1);
} 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);
if (session->is_auditioning()) {
return;
}
switch (Config->get_slave_source()) {
case None:
case JACK:
break;
default:
/* transport controlled by the master */
return;
}
session->request_transport_speed (1.0f);
bool rolling = session->transport_rolling();
if (session->get_play_loop()) {
session->request_play_loop (false, true);
} else if (session->get_play_range ()) {
session->request_play_range (false, true);
}
if (!rolling) {
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);
}
}
}
@ -1652,26 +1705,61 @@ 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 ();
} else {
transport_stopped ();
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 {
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

View file

@ -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 *);

View file

@ -127,66 +127,6 @@ ARDOUR_UI::display_message (const char *prefix, gint prefix_len, RefPtr<TextBuff
#endif
}
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 ()
{

View file

@ -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);

View file

@ -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);

View file

@ -107,22 +107,6 @@ ARDOUR_UI::toggle_click ()
ActionManager::toggle_config_state ("Transport", "ToggleClick", &RCConfiguration::set_clicking, &RCConfiguration::get_clicking);
}
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 ()
{

View file

@ -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 */

View file

@ -2367,37 +2367,6 @@ Editor::transition_to_rolling (bool fwd)
session->request_transport_speed (fwd ? 1.0f : -1.0f);
}
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 ()
{
@ -2638,7 +2607,6 @@ Editor::play_selected_region ()
}
}
session->request_stop ();
session->request_bounded_roll (start, end);
}

View file

@ -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");

View file

@ -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