make "New Session" open NSD on the right page
[ardour.git] / gtk2_ardour / ardour_ui.cc
index 7e24cb4cc488ec2a708419664344153907cae61d..74234bb12aef06cb554e70826d65e829ffc7a1d3 100644 (file)
@@ -50,6 +50,7 @@
 #include <midi++/mmc.h>
 
 #include <ardour/ardour.h>
+#include <ardour/profile.h>
 #include <ardour/session_route.h>
 #include <ardour/port.h>
 #include <ardour/audioengine.h>
@@ -88,7 +89,6 @@ ARDOUR_UI *ARDOUR_UI::theArdourUI = 0;
 
 sigc::signal<void,bool> ARDOUR_UI::Blink;
 sigc::signal<void>      ARDOUR_UI::RapidScreenUpdate;
-sigc::signal<void>      ARDOUR_UI::MidRapidScreenUpdate;
 sigc::signal<void>      ARDOUR_UI::SuperRapidScreenUpdate;
 sigc::signal<void,nframes_t> ARDOUR_UI::Clock;
 
@@ -187,7 +187,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
        keybindings_path = ARDOUR::find_config_file ("ardour.bindings");
 
        can_save_keybindings = false;
-       Glib::signal_idle().connect (mem_fun (*this, &ARDOUR_UI::first_idle));
 
        last_configure_time.tv_sec = 0;
        last_configure_time.tv_usec = 0;
@@ -429,6 +428,39 @@ ARDOUR_UI::save_ardour_state ()
        save_keybindings ();
 }
 
+gint
+ARDOUR_UI::autosave_session ()
+{
+        if (!Config->get_periodic_safety_backups())
+                return 1;
+        
+        if (session) {
+                session->maybe_write_autosave();
+        }
+
+        return 1;
+}
+
+void
+ARDOUR_UI::update_autosave ()
+{
+        ENSURE_GUI_THREAD (mem_fun (*this, &ARDOUR_UI::update_autosave));
+        
+        if (session->dirty()) {
+                if (_autosave_connection.connected()) {
+                        _autosave_connection.disconnect();
+                }
+
+                _autosave_connection = Glib::signal_timeout().connect (mem_fun (*this, &ARDOUR_UI::autosave_session),
+                                                                   Config->get_periodic_safety_backup_interval() * 1000);
+
+        } else {
+                if (_autosave_connection.connected()) {
+                        _autosave_connection.disconnect();
+                }               
+        }
+}
+
 void
 ARDOUR_UI::startup ()
 {
@@ -620,13 +652,6 @@ ARDOUR_UI::every_point_one_seconds ()
        return TRUE;
 }
 
-gint
-ARDOUR_UI::every_point_oh_five_seconds ()
-{
-       MidRapidScreenUpdate(); /* EMIT_SIGNAL */
-       return true;
-}
-
 gint
 ARDOUR_UI::every_point_zero_one_seconds ()
 {
@@ -650,11 +675,11 @@ ARDOUR_UI::update_sample_rate (nframes_t ignored)
                nframes_t rate = engine->frame_rate();
                
                if (fmod (rate, 1000.0) != 0.0) {
-                       snprintf (buf, sizeof (buf), _("%.1f kHz / %4.1f msecs"), 
+                       snprintf (buf, sizeof (buf), _("%.1f kHz / %4.1f ms"), 
                                  (float) rate/1000.0f,
                                  (engine->frames_per_cycle() / (float) rate) * 1000.0f);
                } else {
-                       snprintf (buf, sizeof (buf), _("%u kHz / %4.1f msecs"), 
+                       snprintf (buf, sizeof (buf), _("%u kHz / %4.1f ms"), 
                                  rate/1000,
                                  (engine->frames_per_cycle() / (float) rate) * 1000.0f);
                }
@@ -667,7 +692,7 @@ void
 ARDOUR_UI::update_cpu_load ()
 {
        char buf[32];
-       snprintf (buf, sizeof (buf), _("DSP: %.1f%%"), engine->get_cpu_load());
+       snprintf (buf, sizeof (buf), _("DSP: %5.1f%%"), engine->get_cpu_load());
        cpu_load_label.set_text (buf);
 }
 
@@ -1545,6 +1570,8 @@ ARDOUR_UI::name_io_setup (AudioEngine& engine,
        }
 }
 
+/** Ask the user for the name of a new shapshot and then take it.
+ */
 void
 ARDOUR_UI::snapshot_session ()
 {
@@ -1736,6 +1763,7 @@ ARDOUR_UI::new_session (std::string predetermined_path)
        new_session_dialog->set_name (predetermined_path);
        new_session_dialog->reset_recent();
        new_session_dialog->show();
+       new_session_dialog->set_current_page (0);
 
        do {
                response = new_session_dialog->run ();
@@ -2379,7 +2407,7 @@ ARDOUR_UI::disk_overrun_handler ()
 
        if (!have_disk_speed_dialog_displayed) {
                have_disk_speed_dialog_displayed = true;
-               MessageDialog* msg = new MessageDialog (*editor, X_("diskrate dialog"), _("\
+               MessageDialog* msg = new MessageDialog (*editor, _("\
 The disk system on your computer\n\
 was not able to keep up with Ardour.\n\
 \n\
@@ -2591,6 +2619,9 @@ ARDOUR_UI::save_keybindings ()
 bool
 ARDOUR_UI::first_idle ()
 {
+       if (session) {
+               session->allow_auto_play (true);
+       }
        can_save_keybindings = true;
        return false;
 }
@@ -2714,3 +2745,11 @@ ARDOUR_UI::TransportControllable::set_id (const string& str)
 {
        _id = str;
 }
+
+void
+ARDOUR_UI::setup_profile ()
+{
+       if (gdk_screen_width() < 1200) {
+               Profile->set_small_screen ();
+       }
+}