changes to help strp silence
[ardour.git] / gtk2_ardour / ardour_ui.cc
index f97d892c4ceee1744c28ad8b466285e7f71c2499..b6486827e476ee9e509a6cffd7d9dde1af2c793a 100644 (file)
@@ -197,6 +197,8 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
        engine = 0;
        _session_is_new = false;
        big_clock_window = 0;
+       big_clock_height = 0;
+       big_clock_resize_in_progress = false;
        session_selector_window = 0;
        last_key_press_time = 0;
        _will_create_new_session_automatically = false;
@@ -234,20 +236,20 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
 
        last_shuttle_request = last_peak_grab = 0; //  get_microseconds();
 
-       ARDOUR::Diskstream::DiskOverrun.connect (sigc::mem_fun(*this, &ARDOUR_UI::disk_overrun_handler));
-       ARDOUR::Diskstream::DiskUnderrun.connect (sigc::mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
+       ARDOUR::Diskstream::DiskOverrun.connect (forever_connections, boost::bind (&ARDOUR_UI::disk_overrun_handler, this), gui_context());
+       ARDOUR::Diskstream::DiskUnderrun.connect (forever_connections, boost::bind (&ARDOUR_UI::disk_underrun_handler, this), gui_context());
 
        /* handle dialog requests */
 
-       ARDOUR::Session::Dialog.connect (sigc::mem_fun(*this, &ARDOUR_UI::session_dialog));
+       ARDOUR::Session::Dialog.connect (forever_connections, ui_bind (&ARDOUR_UI::session_dialog, this, _1), gui_context());
 
-       /* handle pending state with a dialog */
+       /* handle pending state with a dialog (PROBLEM: needs to return a value and thus cannot be x-thread) */
 
-       ARDOUR::Session::AskAboutPendingState.connect (sigc::mem_fun(*this, &ARDOUR_UI::pending_state_dialog));
+       ARDOUR::Session::AskAboutPendingState.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::pending_state_dialog, this));
 
-       /* handle sr mismatch with a dialog */
+       /* handle sr mismatch with a dialog (PROBLEM: needs to return a value and thus cannot be x-thread) */
 
-       ARDOUR::Session::AskAboutSampleRateMismatch.connect (sigc::mem_fun(*this, &ARDOUR_UI::sr_mismatch_dialog));
+       ARDOUR::Session::AskAboutSampleRateMismatch.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::sr_mismatch_dialog, this, _1, _2));
 
        /* lets get this party started */
 
@@ -272,7 +274,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
 
        /* we like keyboards */
 
-       keyboard = new ArdourKeyboard;
+       keyboard = new ArdourKeyboard(*this);
 
        XMLNode* node = ARDOUR_UI::instance()->keyboard_settings();
        if (node) {
@@ -329,10 +331,10 @@ ARDOUR_UI::create_engine ()
                return -1;
        }
 
-       engine->Stopped.connect (sigc::mem_fun(*this, &ARDOUR_UI::engine_stopped));
-       engine->Running.connect (sigc::mem_fun(*this, &ARDOUR_UI::engine_running));
-       engine->Halted.connect (sigc::mem_fun(*this, &ARDOUR_UI::engine_halted));
-       engine->SampleRateChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::update_sample_rate));
+       engine->Stopped.connect (forever_connections, boost::bind (&ARDOUR_UI::engine_stopped, this), gui_context());
+       engine->Running.connect (forever_connections, boost::bind (&ARDOUR_UI::engine_running, this), gui_context());
+       engine->Halted.connect (forever_connections, boost::bind (&ARDOUR_UI::engine_halted, this), gui_context());
+       engine->SampleRateChanged.connect (forever_connections, ui_bind (&ARDOUR_UI::update_sample_rate, this, _1), gui_context());
 
        post_engine ();
 
@@ -407,7 +409,7 @@ ARDOUR_UI::post_engine ()
        update_cpu_load ();
        update_sample_rate (engine->frame_rate());
 
-       Config->ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed));
+       Config->ParameterChanged.connect (forever_connections, ui_bind (&ARDOUR_UI::parameter_changed, this, _1), gui_context());
        boost::function<void (string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1));
        Config->map_parameters (pc);
 
@@ -898,7 +900,7 @@ ARDOUR_UI::every_point_zero_one_seconds ()
 }
 
 void
-ARDOUR_UI::update_sample_rate (nframes_t ignored)
+ARDOUR_UI::update_sample_rate (nframes_t)
 {
        char buf[32];
 
@@ -1414,7 +1416,6 @@ ARDOUR_UI::transport_goto_zero ()
        if (_session) {
                _session->request_locate (0);
 
-
                /* force displayed area in editor to start no matter
                   what "follow playhead" setting is.
                */
@@ -1558,9 +1559,14 @@ ARDOUR_UI::transport_roll ()
 
        if (_session->get_play_loop()) {
                _session->request_play_loop (false, true);
-       } else if (_session->get_play_range ()) {
-               _session->request_play_range (false, true);
-       } 
+       } else if (_session->get_play_range () && !join_play_range_button.get_active()) {
+               /* stop playing a range if we currently are */
+               _session->request_play_range (0, true);
+       }
+
+       if (join_play_range_button.get_active()) {
+               _session->request_play_range (&editor->get_selection().time, true);
+       }
 
        if (!rolling) {
                _session->request_transport_speed (1.0f);
@@ -1619,6 +1625,10 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
                if (rolling) {
                        _session->request_stop (with_abort, true);
                } else {
+                       if (join_play_range_button.get_active()) {
+                               _session->request_play_range (&editor->get_selection().time, true);
+                       }
+                       
                        _session->request_transport_speed (1.0f);
                }
        }
@@ -1761,12 +1771,14 @@ ARDOUR_UI::map_transport_state ()
 
        if (sp != 0.0) {
 
+               /* we're rolling */
+
                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);
@@ -1780,6 +1792,12 @@ ARDOUR_UI::map_transport_state ()
                        auto_loop_button.set_visual_state (0);
                }
 
+               if (join_play_range_button.get_active()) {
+                       /* light up both roll and play-selection if they are joined */
+                       roll_button.set_visual_state (1);
+                       play_selection_button.set_visual_state (1);
+               }
+
                stop_button.set_visual_state (0);
 
        } else {
@@ -3128,7 +3146,6 @@ ARDOUR_UI::push_buffer_stats (uint32_t capture, uint32_t playback)
 void
 ARDOUR_UI::write_buffer_stats ()
 {
-
        std::ofstream fout;
        struct tm tm;
        char buf[64];
@@ -3400,7 +3417,7 @@ ARDOUR_UI::store_clock_modes ()
 
 
 ARDOUR_UI::TransportControllable::TransportControllable (std::string name, ARDOUR_UI& u, ToggleType tp)
-       : Controllable (name,  string() /* missing URI */), ui (u), type(tp)
+       : Controllable (name), ui (u), type(tp)
 {
 
 }