Create the session range location as and when the session first gets some content...
[ardour.git] / gtk2_ardour / startup.cc
index bbfa173b41599b1188ad297d282260a4db2e1b73..b0a0233adb3089e236da56dd1c745ed7d36de420 100644 (file)
@@ -35,20 +35,21 @@ static string poor_mans_glob (string path)
        replace_all (copy, "~", Glib::get_home_dir());
        return copy;
 }
-       
+
 
 ArdourStartup::ArdourStartup ()
-       : applying (false)
+       : _response (RESPONSE_OK)
        , ic_new_session_button (_("Open a new session"))
        , ic_existing_session_button (_("Open an existing session"))
        , monitor_via_hardware_button (_("Use an external mixer or the hardware mixer of your audio interface.\n\
 Ardour will play NO role in monitoring"))
-       , monitor_via_ardour_button (_("Ask Ardour to playback material as it is being recorded"))
+       , monitor_via_ardour_button (string_compose (_("Ask %1 to playback material as it is being recorded"), PROGRAM_NAME))
+        , use_monitor_section_button (_("Use a monitor bus in new sessions (more complex, more control)"))
+        , no_monitor_section_button (_("Just use the master out bus (simpler, less control)"))
        , new_folder_chooser (FILE_CHOOSER_ACTION_SELECT_FOLDER)
        , more_new_session_options_button (_("I'd like more options for this session"))
        , _output_limit_count_adj (1, 0, 100, 1, 10, 0)
        , _input_limit_count_adj (1, 0, 100, 1, 10, 0)
-       , _control_bus_channel_count_adj (2, 0, 100, 1, 10, 0)
        , _master_bus_channel_count_adj (2, 0, 100, 1, 10, 0)
 
 {
@@ -73,7 +74,7 @@ Ardour will play NO role in monitoring"))
        set_resizable (false);
        set_position (WIN_POS_CENTER);
        set_border_width (12);
-       
+
        sys::path icon_file;
 
        if (!find_file_in_search_path (ardour_search_path() + system_data_search_path().add_subdirectory_to_paths("icons"), "ardour_icon_48px.png", icon_file)) {
@@ -100,6 +101,7 @@ Ardour will play NO role in monitoring"))
                setup_new_user_page ();
                setup_first_time_config_page ();
                setup_monitoring_choice_page ();
+               setup_monitor_section_choice_page ();
 
                if (need_audio_setup) {
                        setup_audio_page ();
@@ -178,7 +180,7 @@ ArdourStartup::session_name (bool& should_be_new)
                should_be_new = false;
 
                TreeIter iter = recent_session_display.get_selection()->get_selected();
-               
+
                if (iter) {
                        return (*iter)[recent_session_columns.visible_name];
                }
@@ -191,13 +193,14 @@ Glib::ustring
 ArdourStartup::session_folder ()
 {
        if (ic_new_session_button.get_active()) {
-               return Glib::build_filename (new_folder_chooser.get_current_folder(), new_name_entry.get_text());
+               Glib::ustring legal_session_folder_name = legalize_for_path (new_name_entry.get_text());
+               return Glib::build_filename (new_folder_chooser.get_current_folder(), legal_session_folder_name);
        } else {
                TreeIter iter = recent_session_display.get_selection()->get_selected();
 
                if (iter) {
                        return (*iter)[recent_session_columns.fullpath];
-               } 
+               }
                return "";
        }
 }
@@ -214,7 +217,7 @@ ArdourStartup::setup_audio_page ()
        audio_page_index = append_page (*engine_dialog);
        set_page_type (*engine_dialog, ASSISTANT_PAGE_CONTENT);
        set_page_title (*engine_dialog, _("Audio Setup"));
-       
+
        /* the default parameters should work, so the page is potentially complete */
 
        set_page_complete (*engine_dialog, true);
@@ -225,16 +228,16 @@ ArdourStartup::setup_new_user_page ()
 {
        Label* foomatic = manage (new Label);
 
-       foomatic->set_markup (_("\
-<span size=\"larger\">Ardour is a digital audio workstation. You can use it to\n\
+       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>\
-"));
-       
+"), PROGRAM_NAME));
+
        HBox* hbox = manage (new HBox);
        HBox* vbox = manage (new HBox);
 
@@ -258,18 +261,24 @@ void
 ArdourStartup::default_dir_changed ()
 {
        Config->set_default_session_parent_dir (default_dir_chooser->get_current_folder());
+        config_changed ();
+}
+
+void
+ArdourStartup::config_changed ()
+{
        config_modified = true;
 }
 
 void
 ArdourStartup::setup_first_time_config_page ()
 {
-       default_dir_chooser = manage (new FileChooserButton (_("Default folder for Ardour sessions"), 
+       default_dir_chooser = manage (new FileChooserButton (string_compose (_("Default folder for %1 sessions"), PROGRAM_NAME),
                                                             FILE_CHOOSER_ACTION_SELECT_FOLDER));
        Gtk::Label* txt = manage (new Label);
        HBox* hbox = manage (new HBox);
        VBox* vbox = manage (new VBox);
-       
+
        txt->set_markup (_("\
 Each project that you work on with Ardour has its own folder.\n\
 These can require a lot of disk space if you are recording audio.\n\
@@ -286,7 +295,7 @@ Where would you like new Ardour sessions to be stored by default?\n\n\
        vbox->pack_start (*hbox, false, true);
 
        default_dir_chooser->set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
-       default_dir_chooser->signal_current_folder_changed().connect (mem_fun (*this, &ArdourStartup::default_dir_changed));
+       default_dir_chooser->signal_current_folder_changed().connect (sigc::mem_fun (*this, &ArdourStartup::default_dir_changed));
        default_dir_chooser->show ();
 
        vbox->show_all ();
@@ -306,7 +315,7 @@ ArdourStartup::setup_monitoring_choice_page ()
 {
        mon_vbox.set_spacing (18);
        mon_vbox.set_border_width (24);
-       
+
        HBox* hbox = manage (new HBox);
        VBox* vbox = manage (new VBox);
        RadioButton::Group g (monitor_via_hardware_button.get_group());
@@ -318,7 +327,7 @@ signal as well as record it. This is called \"monitoring\". There are\n\
 different ways to do this depending on the equipment you have and the\n\
 configuration of that equipment. The two most common are presented here.\n\
 Please choose whichever one is right for your setup.\n\n\
-<i>(You can change this preference at any time, via the Options menu)</i>");
+<i>(You can change this preference at any time, via the Preferences dialog)</i>");
        monitor_label.set_alignment (0.0, 0.0);
 
        vbox->set_spacing (6);
@@ -342,6 +351,57 @@ Please choose whichever one is right for your setup.\n\n\
        set_page_complete (mon_vbox, true);
 }
 
+void
+ArdourStartup::setup_monitor_section_choice_page ()
+{
+       mon_sec_vbox.set_spacing (18);
+       mon_sec_vbox.set_border_width (24);
+
+       HBox* hbox = manage (new HBox);
+       VBox* vbox = manage (new VBox);
+       RadioButton::Group g (use_monitor_section_button.get_group());
+       no_monitor_section_button.set_group (g);
+
+        if (Config->get_use_monitor_bus()) {
+                use_monitor_section_button.set_active (true);
+        } else {
+                no_monitor_section_button.set_active (true);
+        }
+
+        use_monitor_section_button.signal_toggled().connect (sigc::mem_fun (*this, &ArdourStartup::config_changed));
+        no_monitor_section_button.signal_toggled().connect (sigc::mem_fun (*this, &ArdourStartup::config_changed));
+        
+       monitor_section_label.set_markup("\
+When connecting speakers to Ardour, would you prefer to use a monitor bus,\n\
+which will offer various kinds of control at the last stage of output\n\
+or would you prefer to just connect directly to the master outs?\n\n\
+Most home studio users will probably want to start <i>without</i> a monitor bus.\n\
+Those with experience of traditional mixing consoles may prefer to use one.\n\
+Please choose whichever one is right for your setup.\n\n\
+<i>(You can change this preference at any time, via the Preferences dialog)</i>");
+       monitor_section_label.set_alignment (0.0, 0.0);
+
+       vbox->set_spacing (6);
+
+       vbox->pack_start (no_monitor_section_button, false, true);
+       vbox->pack_start (use_monitor_section_button, false, true);
+       hbox->pack_start (*vbox, true, true, 8);
+       mon_sec_vbox.pack_start (monitor_section_label, false, false);
+       mon_sec_vbox.pack_start (*hbox, false, false);
+
+       mon_sec_vbox.show_all ();
+
+       monitor_section_page_index = append_page (mon_sec_vbox);
+       set_page_title (mon_sec_vbox, _("Monitor Section"));
+       set_page_header_image (mon_sec_vbox, icon_pixbuf);
+
+       /* user could just click on "Forward" if default
+        * choice is correct.
+        */
+
+       set_page_complete (mon_sec_vbox, true);
+}
+
 void
 ArdourStartup::setup_initial_choice_page ()
 {
@@ -353,12 +413,18 @@ ArdourStartup::setup_initial_choice_page ()
 
        HBox* centering_hbox = manage (new HBox);
        VBox* centering_vbox = manage (new VBox);
-       
+
        centering_vbox->set_spacing (6);
 
        centering_vbox->pack_start (ic_new_session_button, false, true);
        centering_vbox->pack_start (ic_existing_session_button, false, true);
 
+       ic_new_session_button.signal_button_press_event().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_press), false);
+       ic_new_session_button.signal_activate().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_activated), false);
+
+       ic_existing_session_button.signal_button_press_event().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_press), false);
+       ic_existing_session_button.signal_activate().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_activated), false);
+
        centering_hbox->pack_start (*centering_vbox, true, true);
 
        ic_vbox.pack_start (*centering_hbox, true, true);
@@ -376,6 +442,24 @@ ArdourStartup::setup_initial_choice_page ()
        set_page_complete (ic_vbox, true);
 }
 
+bool
+ArdourStartup::initial_button_press (GdkEventButton *event)
+{
+       if (event && event->type == GDK_2BUTTON_PRESS && session_page_index != -1)
+       {
+               set_current_page(session_page_index);
+               return true;
+       } else {
+               return false;
+       }
+}
+
+void
+ArdourStartup::initial_button_activated ()
+{
+       set_current_page(session_page_index);
+}
+
 void
 ArdourStartup::setup_session_page ()
 {
@@ -392,7 +476,7 @@ ArdourStartup::setup_session_page ()
 void
 ArdourStartup::setup_final_page ()
 {
-       final_page.set_text ("Ardour is ready for use");
+       final_page.set_text (string_compose (_("%1 is ready for use"), PROGRAM_NAME));
        final_page.show ();
        final_page_index = append_page (final_page);
        set_page_complete (final_page, true);
@@ -403,24 +487,21 @@ ArdourStartup::setup_final_page ()
 void
 ArdourStartup::on_cancel ()
 {
-       exit (1);
+       _response = RESPONSE_CANCEL;
+       gtk_main_quit ();
 }
 
-void
-ArdourStartup::on_close ()
+bool
+ArdourStartup::on_delete_event (GdkEventAny*)
 {
-       if (!applying) {
-               exit (1);
-       }
+       _response = RESPONSE_CLOSE;
+       gtk_main_quit ();
+       return true;
 }
 
 void
 ArdourStartup::on_apply ()
 {
-       applying = true;
-
-       // XXX do stuff and then ....
-
        if (engine_dialog) {
                engine_dialog->setup_engine ();
        }
@@ -430,16 +511,19 @@ ArdourStartup::on_apply ()
                if (default_dir_chooser) {
                        Config->set_default_session_parent_dir (default_dir_chooser->get_current_folder());
                }
-               
+
                if (monitor_via_hardware_button.get_active()) {
                        Config->set_monitoring_model (ExternalMonitoring);
                } else if (monitor_via_ardour_button.get_active()) {
                        Config->set_monitoring_model (SoftwareMonitoring);
                }
-               
+
+                Config->set_use_monitor_bus (use_monitor_section_button.get_active());
+
                Config->save_state ();
        }
 
+       _response = RESPONSE_OK;
        gtk_main_quit ();
 }
 
@@ -447,7 +531,7 @@ void
 ArdourStartup::on_prepare (Gtk::Widget* page)
 {
        if (page == &session_vbox) {
-               
+
                if (ic_new_session_button.get_active()) {
                        /* new session requested */
                        setup_new_session_page ();
@@ -455,14 +539,14 @@ ArdourStartup::on_prepare (Gtk::Widget* page)
                        /* existing session requested */
                        setup_existing_session_page ();
                }
-       } 
+       }
 }
 
 void
 ArdourStartup::populate_session_templates ()
 {
        vector<TemplateInfo> templates;
-       
+
        find_session_templates (templates);
 
        template_model->clear ();
@@ -471,12 +555,19 @@ ArdourStartup::populate_session_templates ()
                TreeModel::Row row;
 
                row = *(template_model->append ());
-               
+
                row[session_template_columns.name] = (*x).name;
                row[session_template_columns.path] = (*x).path;
        }
 }
 
+static bool
+lost_name_entry_focus (GdkEventFocus* ev)
+{
+        cerr << "lost focus\n";
+        return false;
+}
+                
 void
 ArdourStartup::setup_new_session_page ()
 {
@@ -490,38 +581,38 @@ ArdourStartup::setup_new_session_page ()
                VBox *vbox1 = manage (new VBox);
                HBox* hbox1 = manage (new HBox);
                Label* label1 = manage (new Label);
-               
+
                vbox1->set_spacing (6);
 
                hbox1->set_spacing (6);
                hbox1->pack_start (*label1, false, false);
                hbox1->pack_start (new_name_entry, true, true);
-               
+
                label1->set_text (_("Session name:"));
-               
+
 
                if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
                        new_name_entry.set_text  (Glib::path_get_basename (ARDOUR_COMMAND_LINE::session_name));
                        /* name provided - they can move right along */
                        set_page_complete (session_vbox, true);
                }
-               
-               new_name_entry.signal_changed().connect (mem_fun (*this, &ArdourStartup::new_name_changed));
-               new_name_entry.signal_activate().connect (mem_fun (*this, &ArdourStartup::move_along_now));
-               
+
+               new_name_entry.signal_changed().connect (sigc::mem_fun (*this, &ArdourStartup::new_name_changed));
+               new_name_entry.signal_activate().connect (sigc::mem_fun (*this, &ArdourStartup::move_along_now));
+
                vbox1->pack_start (*hbox1, true, true);
 
                /* --- */
 
                HBox* hbox2 = manage (new HBox);
                Label* label2 = manage (new Label);
-               
+
                hbox2->set_spacing (6);
                hbox2->pack_start (*label2, false, false);
                hbox2->pack_start (new_folder_chooser, true, true);
-               
+
                label2->set_text (_("Create session folder in:"));
-               
+
                if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
                        new_folder_chooser.set_current_folder (poor_mans_glob (Glib::path_get_dirname (ARDOUR_COMMAND_LINE::session_name)));
                } else {
@@ -542,7 +633,7 @@ ArdourStartup::setup_new_session_page ()
                populate_session_templates ();
 
                vbox2->set_spacing (6);
-       
+
                label3->set_markup (_("<b>Options</b>"));
                label3->set_alignment (0.0, 0.0);
 
@@ -564,37 +655,37 @@ ArdourStartup::setup_new_session_page ()
                        hbox4a->set_spacing (6);
                        hbox4a->pack_start (use_template_button, false, false);
                        hbox4a->pack_start (template_chooser, true, true);
-                       
+
                        template_chooser.set_model (template_model);
-                       
+
                        Gtk::CellRendererText* text_renderer = Gtk::manage (new Gtk::CellRendererText);
                        text_renderer->property_editable() = false;
-                       
+
                        template_chooser.pack_start (*text_renderer);
                        template_chooser.add_attribute (text_renderer->property_text(), session_template_columns.name);
                        template_chooser.set_active (0);
-                       
+
                        use_template_button.show();
                        template_chooser.show ();
 
                        vbox3->pack_start (*hbox4a, false, false);
                }
-                       
+
                /* --- */
 
                if (!new_user) {
                        session_template_chooser.set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
-                       
+
                        HBox* hbox4b = manage (new HBox);
                        use_session_as_template_button.set_label (_("Use an existing session as a template:"));
-                       
+
                        hbox4b->set_spacing (6);
                        hbox4b->pack_start (use_session_as_template_button, false, false);
                        hbox4b->pack_start (session_template_chooser, true, true);
-                       
+
                        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);
@@ -604,14 +695,14 @@ ArdourStartup::setup_new_session_page ()
                }
 
                /* --- */
-               
+
                HBox* hbox5 = manage (new HBox);
-       
+
                hbox5->set_spacing (6);
                hbox5->pack_start (more_new_session_options_button, false, false);
-               
+
                more_new_session_options_button.show ();
-               more_new_session_options_button.signal_clicked().connect (mem_fun (*this, &ArdourStartup::more_new_session_options_button_clicked));
+               more_new_session_options_button.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::more_new_session_options_button_clicked));
 
                vbox3->pack_start (*hbox5, false, false);
                hbox3->pack_start (*vbox3, true, true, 8);
@@ -627,6 +718,14 @@ ArdourStartup::setup_new_session_page ()
        set_page_title (session_vbox, _("New Session"));
        set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
 
+       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));
+}
+
+void
+ArdourStartup::new_name_mapped ()
+{
+        cerr << "Grab new name focus\n";
        new_name_entry.grab_focus ();
 }
 
@@ -640,12 +739,12 @@ ArdourStartup::new_name_changed ()
        }
 }
 
-void
+int
 ArdourStartup::redisplay_recent_sessions ()
 {
        std::vector<sys::path> session_directories;
        RecentSessionsSorter cmp;
-       
+
        recent_session_display.set_model (Glib::RefPtr<TreeModel>(0));
        recent_session_model->clear ();
 
@@ -654,16 +753,16 @@ ArdourStartup::redisplay_recent_sessions ()
 
        if (rs.empty()) {
                recent_session_display.set_model (recent_session_model);
-               return;
+               return 0;
        }
        //
        // sort them alphabetically
        sort (rs.begin(), rs.end(), cmp);
-       
+
        for (ARDOUR::RecentSessions::iterator i = rs.begin(); i != rs.end(); ++i) {
                session_directories.push_back ((*i).second);
        }
-       
+
        for (vector<sys::path>::const_iterator i = session_directories.begin(); i != session_directories.end(); ++i)
        {
                std::vector<sys::path> state_file_paths;
@@ -675,7 +774,7 @@ ArdourStartup::redisplay_recent_sessions ()
                vector<string*>* states;
                vector<const gchar*> item;
                string fullpath = (*i).to_string();
-               
+
                /* remove any trailing / */
 
                if (fullpath[fullpath.length()-1] == '/') {
@@ -686,22 +785,22 @@ ArdourStartup::redisplay_recent_sessions ()
                if (!Glib::file_test(fullpath.c_str(), Glib::FILE_TEST_EXISTS)) {
                        /* session doesn't exist */
                        continue;
-               }               
-               
+               }
+
                /* now get available states for this session */
 
                if ((states = Session::possible_states (fullpath)) == 0) {
                        /* no state file? */
                        continue;
                }
-         
+
                std::vector<string> state_file_names(get_file_names_no_extension (state_file_paths));
 
                Gtk::TreeModel::Row row = *(recent_session_model->append());
 
                row[recent_session_columns.visible_name] = Glib::path_get_basename (fullpath);
                row[recent_session_columns.fullpath] = fullpath;
-               
+
                if (state_file_names.size() > 1) {
 
                        // add the children
@@ -719,6 +818,7 @@ ArdourStartup::redisplay_recent_sessions ()
        }
 
        recent_session_display.set_model (recent_session_model);
+       return rs.size();
 }
 
 void
@@ -745,19 +845,23 @@ 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 (mem_fun (*this, &ArdourStartup::recent_session_row_selected));
-               
+
+               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();
-       redisplay_recent_sessions ();
-       recent_session_display.signal_row_activated().connect (mem_fun (*this, &ArdourStartup::recent_row_activated));
+       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);
+       }
 
        session_hbox.pack_start (recent_scroller, true, true);
        set_page_title (session_vbox, _("Select a session"));
@@ -784,11 +888,9 @@ ArdourStartup::setup_more_options_page ()
 
        _output_limit_count.set_adjustment (_output_limit_count_adj);
        _input_limit_count.set_adjustment (_input_limit_count_adj);
-       _control_bus_channel_count.set_adjustment (_control_bus_channel_count_adj);
        _master_bus_channel_count.set_adjustment (_master_bus_channel_count_adj);
-       
+
        chan_count_label_1.set_text (_("channels"));
-       chan_count_label_2.set_text (_("channels"));
        chan_count_label_3.set_text (_("channels"));
        chan_count_label_4.set_text (_("channels"));
 
@@ -796,10 +898,6 @@ ArdourStartup::setup_more_options_page ()
        chan_count_label_1.set_padding(0,0);
        chan_count_label_1.set_line_wrap(false);
 
-       chan_count_label_2.set_alignment(0,0.5);
-       chan_count_label_2.set_padding(0,0);
-       chan_count_label_2.set_line_wrap(false);
-
        chan_count_label_3.set_alignment(0,0.5);
        chan_count_label_3.set_padding(0,0);
        chan_count_label_3.set_line_wrap(false);
@@ -812,20 +910,6 @@ ArdourStartup::setup_more_options_page ()
        input_label.set_markup (_("<b>Inputs</b>"));
        output_label.set_markup (_("<b>Outputs</b>"));
 
-       _create_control_bus.set_label (_("Create monitor bus"));
-       _create_control_bus.set_flags(Gtk::CAN_FOCUS);
-       _create_control_bus.set_relief(Gtk::RELIEF_NORMAL);
-       _create_control_bus.set_mode(true);
-       _create_control_bus.set_active(false);
-       _create_control_bus.set_border_width(0);
-
-       _control_bus_channel_count.set_flags(Gtk::CAN_FOCUS);
-       _control_bus_channel_count.set_update_policy(Gtk::UPDATE_ALWAYS);
-       _control_bus_channel_count.set_numeric(true);
-       _control_bus_channel_count.set_digits(0);
-       _control_bus_channel_count.set_wrap(false);
-       _control_bus_channel_count.set_sensitive(false);
-
        _master_bus_channel_count.set_flags(Gtk::CAN_FOCUS);
        _master_bus_channel_count.set_update_policy(Gtk::UPDATE_ALWAYS);
        _master_bus_channel_count.set_numeric(true);
@@ -841,14 +925,14 @@ ArdourStartup::setup_more_options_page ()
 
        advanced_table.set_row_spacings(0);
        advanced_table.set_col_spacings(0);
-       
+
        _connect_inputs.set_label (_("Automatically connect to physical_inputs"));
        _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_border_width(0);
-       
+
        _limit_input_ports.set_label (_("Use only"));
        _limit_input_ports.set_flags(Gtk::CAN_FOCUS);
        _limit_input_ports.set_relief(Gtk::RELIEF_NORMAL);
@@ -874,15 +958,12 @@ ArdourStartup::setup_more_options_page ()
        bus_frame.set_label_align(0,0.5);
        bus_frame.add(bus_hbox);
        bus_frame.set_label_widget(bus_label);
-       
+
        bus_table.set_row_spacings (0);
        bus_table.set_col_spacings (0);
        bus_table.attach (_create_master_bus, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
        bus_table.attach (_master_bus_channel_count, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
        bus_table.attach (chan_count_label_1, 2, 3, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 0);
-       bus_table.attach (_create_control_bus, 0, 1, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-       bus_table.attach (_control_bus_channel_count, 1, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-       bus_table.attach (chan_count_label_2, 2, 3, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 0);
 
        input_port_limit_hbox.pack_start(_limit_input_ports, Gtk::PACK_SHRINK, 6);
        input_port_limit_hbox.pack_start(_input_limit_count, Gtk::PACK_SHRINK, 0);
@@ -974,18 +1055,17 @@ ArdourStartup::setup_more_options_page ()
 
        /* signals */
 
-       _connect_inputs.signal_clicked().connect (mem_fun (*this, &ArdourStartup::connect_inputs_clicked));
-       _connect_outputs.signal_clicked().connect (mem_fun (*this, &ArdourStartup::connect_outputs_clicked));
-       _limit_input_ports.signal_clicked().connect (mem_fun (*this, &ArdourStartup::limit_inputs_clicked));
-       _limit_output_ports.signal_clicked().connect (mem_fun (*this, &ArdourStartup::limit_outputs_clicked));
-       _create_master_bus.signal_clicked().connect (mem_fun (*this, &ArdourStartup::master_bus_button_clicked));
-       _create_control_bus.signal_clicked().connect (mem_fun (*this, &ArdourStartup::monitor_bus_button_clicked));
+       _connect_inputs.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::connect_inputs_clicked));
+       _connect_outputs.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::connect_outputs_clicked));
+       _limit_input_ports.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::limit_inputs_clicked));
+       _limit_output_ports.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::limit_outputs_clicked));
+       _create_master_bus.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::master_bus_button_clicked));
 
        /* note that more_options_vbox is NOT visible by
         * default. this is entirely by design - this page
         * should be skipped unless explicitly requested.
         */
-       
+
        session_options_page_index = append_page (more_options_vbox);
        set_page_title (more_options_vbox, _("Advanced Session Options"));
        set_page_complete (more_options_vbox, true);
@@ -1003,18 +1083,6 @@ ArdourStartup::master_channel_count() const
        return _master_bus_channel_count.get_value_as_int();
 }
 
-bool
-ArdourStartup::create_control_bus() const
-{
-       return _create_control_bus.get_active();
-}
-
-int
-ArdourStartup::control_channel_count() const
-{
-       return _control_bus_channel_count.get_value_as_int();
-}
-
 bool
 ArdourStartup::connect_inputs() const
 {
@@ -1102,13 +1170,9 @@ ArdourStartup::limit_outputs_clicked ()
 void
 ArdourStartup::master_bus_button_clicked ()
 {
-       _master_bus_channel_count.set_sensitive(_create_master_bus.get_active());
-}
+        bool yn = _create_master_bus.get_active();
 
-void
-ArdourStartup::monitor_bus_button_clicked ()
-{
-       _control_bus_channel_count.set_sensitive(_create_control_bus.get_active());
+       _master_bus_channel_count.set_sensitive(yn);
 }
 
 void
@@ -1126,7 +1190,7 @@ ArdourStartup::move_along_now ()
 }
 
 void
-ArdourStartup::recent_row_activated (const Gtk::TreePath& path, Gtk::TreeViewColumn* col)
+ArdourStartup::recent_row_activated (const Gtk::TreePath&, Gtk::TreeViewColumn*)
 {
        set_page_complete (session_vbox, true);
        move_along_now ();