Fix up confusion with relayering after movement drags in
[ardour.git] / gtk2_ardour / startup.cc
index b556c7319085040ac7231372e979d65bb71234b0..e5cb746a0585eed70445fc5aea84111c14d7ce36 100644 (file)
@@ -102,15 +102,43 @@ Ardour will play NO role in monitoring"))
                throw failed_constructor();
        }
 
-       sys::path been_here_before = user_config_directory();
-       been_here_before /= ".a3"; // XXXX use more specific version so we can catch upgrades
-       new_user = !exists (been_here_before);
+       list<Glib::RefPtr<Gdk::Pixbuf> > window_icons;
+       Glib::RefPtr<Gdk::Pixbuf> icon;
+
+       if ((icon = ::get_icon ("ardour_icon_16px")) != 0) {
+               window_icons.push_back (icon);
+       }
+       if ((icon = ::get_icon ("ardour_icon_22px")) != 0) {
+               window_icons.push_back (icon);
+       }
+       if ((icon = ::get_icon ("ardour_icon_32px")) != 0) {
+               window_icons.push_back (icon);
+       }
+       if ((icon = ::get_icon ("ardour_icon_48px")) != 0) {
+               window_icons.push_back (icon);
+       }
+       if (!window_icons.empty ()) {
+               set_default_icon_list (window_icons);
+       }
+
+       new_user = !exists (been_here_before_path ());
 
        bool need_audio_setup = !EngineControl::engine_running();
 
+        setup_prerelease_page ();
+
        if (new_user) {
-               /* "touch" the file */
-               ofstream fout (been_here_before.to_string().c_str());
+
+               /* Create the config directory so that we have somewhere to put the
+                  been_here_before file.
+               */
+               try {
+                       sys::create_directories (user_config_directory ());
+               }
+               catch (const sys::filesystem_error& ex) {
+                       error << "Could not create user configuration directory" << endmsg;
+               }
+               
                setup_new_user_page ();
                setup_first_time_config_page ();
                setup_monitoring_choice_page ();
@@ -143,6 +171,41 @@ ArdourStartup::~ArdourStartup ()
 {
 }
 
+void
+ArdourStartup::setup_prerelease_page ()
+{
+        VBox* vbox = manage (new VBox);
+        Label* label = manage (new Label);
+        label->set_markup (_("<b>Welcome to this BETA release of Ardour 3.0</b>\n\n\
+There are still several issues and bugs to be worked on,\n\
+as well as general workflow improvements, before this can be considered\n\
+release software. So, a few guidelines:\n\
+\n\
+1) Please do <b>NOT</b> use this software with the expectation that it is stable or reliable\n\
+   though it may be so, depending on your workflow.\n\
+2) Please see http://ardour.org/a3_features for a guide to new features.\n\
+3) <b>Please do NOT use the forums at ardour.org to report issues</b>.\n\
+4) Please <b>DO</b> use the bugtracker at http://tracker.ardour.org/ to report issues\n\
+   making sure to note the product version number as 3.0-beta.\n\
+5) Please <b>DO</b> use the ardour-users mailing list to discuss ideas and pass on comments.\n\
+6) Please <b>DO</b> join us on IRC for real time discussions about ardour3. You\n\
+   can get there directly from Ardour via the Help->Chat menu option.\n\
+\n\
+Full information on all the above can be found on the support page at\n\
+\n\
+                http://ardour.org/support\n\
+"));
+
+        vbox->set_border_width (12);
+        vbox->pack_start (*label, false, false, 12);
+        vbox->show_all ();
+
+        append_page (*vbox);
+        set_page_type (*vbox, ASSISTANT_PAGE_CONTENT);
+        set_page_title (*vbox, _("This is a BETA RELEASE"));
+       set_page_complete (*vbox, true);
+}
+
 void
 ArdourStartup::set_new_only (bool yn)
 {
@@ -269,14 +332,16 @@ ArdourStartup::setup_new_user_page ()
        Label* foomatic = manage (new Label);
 
        foomatic->set_markup (string_compose (_("\
-<span size=\"larger\">%1 is a digital audio workstation. You can use it to\n\
-record, edit and mix multi-track audio. You can produce your\n\
-own CDs, mix video soundtracks, or just experiment with new\n\
-ideas about music and sound.\n\
-\n\
-There are a few things that need to configured before you start\n\
-using the program.</span>\
+<span size=\"larger\">%1 is a digital audio workstation. You can use it to \
+record, edit and mix multi-track audio. You can produce your \
+own CDs, mix video soundtracks, or just experiment with new \
+ideas about music and sound. \
+\n\n\
+There are a few things that need to be configured before you start \
+using the program.</span> \
 "), PROGRAM_NAME));
+       foomatic->set_justify (JUSTIFY_FILL);
+       foomatic->set_line_wrap ();
 
        HBox* hbox = manage (new HBox);
        HBox* vbox = manage (new HBox);
@@ -300,7 +365,7 @@ using the program.</span>\
 void
 ArdourStartup::default_dir_changed ()
 {
-       Config->set_default_session_parent_dir (default_dir_chooser->get_current_folder());
+       Config->set_default_session_parent_dir (default_dir_chooser->get_filename());
        config_changed ();
 }
 
@@ -567,7 +632,7 @@ ArdourStartup::on_apply ()
        if (config_modified) {
 
                if (default_dir_chooser) {
-                       Config->set_default_session_parent_dir (default_dir_chooser->get_current_folder());
+                       Config->set_default_session_parent_dir (default_dir_chooser->get_filename());
                }
 
                if (monitor_via_hardware_button.get_active()) {
@@ -578,6 +643,9 @@ ArdourStartup::on_apply ()
 
                Config->set_use_monitor_bus (use_monitor_section_button.get_active());
 
+               /* "touch" the been-here-before path now that we're about to save Config */
+               ofstream fout (been_here_before_path().to_string().c_str());
+               
                Config->save_state ();
        }
 
@@ -596,6 +664,26 @@ ArdourStartup::on_prepare (Gtk::Widget* page)
                } else {
                        /* existing session requested */
                        setup_existing_session_page ();
+
+               }
+
+               /* HACK HACK HACK ... change the "Apply" button label
+                  to say "Open"
+               */
+
+               Gtk::Widget* tl = session_vbox.get_toplevel();
+               Gtk::Window* win;
+               if ((win = dynamic_cast<Gtk::Window*>(tl)) != 0) {
+                       /* ::get_default_widget() is not wrapped in gtkmm */
+                       Gtk::Widget* def = wrap (gtk_window_get_default_widget (win->gobj()));
+                       Gtk::Button* button;
+                       if ((button = dynamic_cast<Gtk::Button*>(def)) != 0) {
+                               if (more_new_session_options_button.get_active()) {
+                                       button->set_label (_("Forward"));
+                               }else{
+                                       button->set_label (_("Open"));
+                               }
+                       }
                }
        }
 }
@@ -748,9 +836,9 @@ ArdourStartup::setup_new_session_page ()
                        use_session_as_template_button.show ();
                        session_template_chooser.show ();
 
-                       Gtk::FileFilter* template_filter = manage (new (Gtk::FileFilter));
-                       template_filter->add_pattern(X_("*.template"));
-                       session_template_chooser.set_filter (*template_filter);
+                       Gtk::FileFilter* session_filter = manage (new (Gtk::FileFilter));
+                       session_filter->add_pattern (X_("*.ardour"));
+                       session_template_chooser.set_filter (*session_filter);
                        session_template_chooser.set_title (_("Select template"));
 
                        vbox3->pack_start (*hbox4b, false, false);
@@ -780,6 +868,10 @@ ArdourStartup::setup_new_session_page ()
        set_page_title (session_vbox, _("New Session"));
        set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
 
+       if (more_new_session_options_button.get_active()) {
+               set_page_type (session_vbox, ASSISTANT_PAGE_CONTENT);
+       }
+
        new_name_entry.signal_map().connect (sigc::mem_fun (*this, &ArdourStartup::new_name_mapped));
        new_name_entry.signal_focus_out_event().connect (sigc::ptr_fun (lost_name_entry_focus));
 }
@@ -909,19 +1001,19 @@ ArdourStartup::setup_existing_session_page ()
                recent_session_display.append_column (_("Recent Sessions"), recent_session_columns.visible_name);
                recent_session_display.set_headers_visible (false);
                recent_session_display.get_selection()->set_mode (SELECTION_BROWSE);
-               
+
                recent_session_display.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &ArdourStartup::recent_session_row_selected));
-               
+
                recent_scroller.add (recent_session_display);
                recent_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
                recent_scroller.set_shadow_type (Gtk::SHADOW_IN);
-               
+
                recent_session_display.show();
-               
+
                recent_scroller.show();
                int cnt = redisplay_recent_sessions ();
                recent_session_display.signal_row_activated().connect (sigc::mem_fun (*this, &ArdourStartup::recent_row_activated));
-               
+
                if (cnt > 4) {
                        recent_scroller.set_size_request (-1, 300);
                }
@@ -931,19 +1023,19 @@ ArdourStartup::setup_existing_session_page ()
 
                existing_session_chooser.set_title (_("Select session file"));
                existing_session_chooser.signal_file_set().connect (sigc::mem_fun (*this, &ArdourStartup::existing_session_selected));
-               
+
 #ifdef GTKOSX
                existing_session_chooser.add_shortcut_folder ("/Volumes");
 #endif
-               
+
                HBox* hbox = manage (new HBox);
                hbox->set_spacing (4);
                hbox->pack_start (*manage (new Label (_("Browse:"))), PACK_SHRINK);
                hbox->pack_start (existing_session_chooser);
-               session_existing_vbox.pack_start (*hbox);
+               session_existing_vbox.pack_start (*hbox, false, false);
                hbox->show_all ();
        }
-       
+
        session_existing_vbox.show_all ();
        session_hbox.pack_start (session_existing_vbox, true, true);
 
@@ -1013,7 +1105,7 @@ ArdourStartup::setup_more_options_page ()
        _connect_inputs.set_flags(Gtk::CAN_FOCUS);
        _connect_inputs.set_relief(Gtk::RELIEF_NORMAL);
        _connect_inputs.set_mode(true);
-       _connect_inputs.set_active(true);
+       _connect_inputs.set_active(Config->get_input_auto_connect() != ManualConnect);
        _connect_inputs.set_border_width(0);
 
        _limit_input_ports.set_label (_("Use only"));
@@ -1073,7 +1165,7 @@ ArdourStartup::setup_more_options_page ()
        _connect_outputs.set_flags(Gtk::CAN_FOCUS);
        _connect_outputs.set_relief(Gtk::RELIEF_NORMAL);
        _connect_outputs.set_mode(true);
-       _connect_outputs.set_active(true);
+       _connect_outputs.set_active(Config->get_output_auto_connect() != ManualConnect);
        _connect_outputs.set_border_width(0);
        _limit_output_ports.set_label (_("Use only"));
        _limit_output_ports.set_flags(Gtk::CAN_FOCUS);
@@ -1095,7 +1187,7 @@ ArdourStartup::setup_more_options_page ()
        _connect_outputs_to_master.set_flags(Gtk::CAN_FOCUS);
        _connect_outputs_to_master.set_relief(Gtk::RELIEF_NORMAL);
        _connect_outputs_to_master.set_mode(true);
-       _connect_outputs_to_master.set_active(false);
+       _connect_outputs_to_master.set_active(Config->get_output_auto_connect() == AutoConnectMaster);
        _connect_outputs_to_master.set_border_width(0);
 
        _connect_outputs_to_master.set_group (connect_outputs_group);
@@ -1105,7 +1197,7 @@ ArdourStartup::setup_more_options_page ()
        _connect_outputs_to_physical.set_flags(Gtk::CAN_FOCUS);
        _connect_outputs_to_physical.set_relief(Gtk::RELIEF_NORMAL);
        _connect_outputs_to_physical.set_mode(true);
-       _connect_outputs_to_physical.set_active(false);
+       _connect_outputs_to_physical.set_active(Config->get_output_auto_connect() == AutoConnectPhysical);
        _connect_outputs_to_physical.set_border_width(0);
 
        output_conn_vbox.pack_start(_connect_outputs, Gtk::PACK_SHRINK, 0);
@@ -1287,3 +1379,12 @@ ArdourStartup::existing_session_selected ()
        set_page_complete (session_vbox, true);
        move_along_now ();
 }
+
+sys::path
+ArdourStartup::been_here_before_path () const
+{
+       sys::path b = user_config_directory();
+       b /= ".a3"; // XXXX use more specific version so we can catch upgrades
+       return b;
+}
+