summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-10-30 18:14:25 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-10-30 18:14:25 +0000
commite98b3c1ec65f173f357f9b6747d11174e2743cd6 (patch)
tree43e209e88951691811a3371091950952d4ecbaf7 /gtk2_ardour
parentc83e48e07a0b4790512c6251d8ad8f941c881021 (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.in1
-rw-r--r--gtk2_ardour/ardour_ui.cc162
-rw-r--r--gtk2_ardour/ardour_ui.h7
-rw-r--r--gtk2_ardour/ardour_ui2.cc60
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc4
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc4
-rw-r--r--gtk2_ardour/ardour_ui_options.cc16
-rw-r--r--gtk2_ardour/editor.h1
-rw-r--r--gtk2_ardour/editor_ops.cc32
-rw-r--r--gtk2_ardour/engine_dialog.cc3
-rw-r--r--gtk2_ardour/public_editor.h1
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