Updated config.guess file
[ardour.git] / gtk2_ardour / ardour_ui.cc
index 6b8df23aa8bf7937c2ff422ce3bf199053451c07..1887f046b8ad26ea3c7de2d6f756bcc606737c80 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <pbd/error.h>
 #include <pbd/compose.h>
-#include <pbd/basename.h>
 #include <pbd/pathscanner.h>
 #include <pbd/failed_constructor.h>
 #include <gtkmm2ext/gtk_ui.h>
@@ -51,8 +50,8 @@
 #include <ardour/audioengine.h>
 #include <ardour/playlist.h>
 #include <ardour/utils.h>
-#include <ardour/diskstream.h>
-#include <ardour/filesource.h>
+#include <ardour/audio_diskstream.h>
+#include <ardour/audiofilesource.h>
 #include <ardour/recent_sessions.h>
 #include <ardour/session_diskstream.h>
 #include <ardour/port.h>
@@ -77,6 +76,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtkmm2ext;
 using namespace Gtk;
 using namespace sigc;
@@ -147,9 +147,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
        
        color_manager->load (color_file);
 
-       m_new_session_dialog = 0;
-       m_new_session_dialog_ref = NewSessionDialogFactory::create();
-       m_new_session_dialog_ref->get_widget_derived (NewSessionDialogFactory::top_level_widget_name(), m_new_session_dialog);
+       m_new_session_dialog = new NewSessionDialog();
        editor = 0;
        mixer = 0;
        session = 0;
@@ -187,10 +185,9 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
        gettimeofday (&last_peak_grab, 0);
        gettimeofday (&last_shuttle_request, 0);
 
-       ARDOUR::DiskStream::CannotRecordNoInput.connect (mem_fun(*this, &ARDOUR_UI::cannot_record_no_input));
-       ARDOUR::DiskStream::DeleteSources.connect (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread));
-       ARDOUR::DiskStream::DiskOverrun.connect (mem_fun(*this, &ARDOUR_UI::disk_overrun_handler));
-       ARDOUR::DiskStream::DiskUnderrun.connect (mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
+       ARDOUR::AudioDiskstream::DeleteSources.connect (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread));
+       ARDOUR::AudioDiskstream::DiskOverrun.connect (mem_fun(*this, &ARDOUR_UI::disk_overrun_handler));
+       ARDOUR::AudioDiskstream::DiskUnderrun.connect (mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
 
        /* handle pending state with a dialog */
 
@@ -199,22 +196,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
        /* have to wait for AudioEngine and Configuration before proceeding */
 }
 
-void
-ARDOUR_UI::cannot_record_no_input (DiskStream* ds)
-{
-       ENSURE_GUI_THREAD (bind (mem_fun(*this, &ARDOUR_UI::cannot_record_no_input), ds));
-       
-       string msg = string_compose (_("\
-You cannot record-enable\n\
-track %1\n\
-because it has no input connections.\n\
-You would be wasting space recording silence."),
-                             ds->name());
-
-       MessageDialog message (*editor, msg);
-       message.run ();
-}
-
 void
 ARDOUR_UI::set_engine (AudioEngine& e)
 {
@@ -229,22 +210,6 @@ ARDOUR_UI::set_engine (AudioEngine& e)
 
        keyboard = new Keyboard;
 
-       string meter_path;
-
-       meter_path = ARDOUR::find_data_file("v_meter_strip.xpm", "pixmaps");
-       if (meter_path.empty()) {
-               error << _("no vertical meter strip image found") << endmsg;
-               exit (1);
-       }
-       FastMeter::set_vertical_xpm (meter_path);
-
-       meter_path = ARDOUR::find_data_file("h_meter_strip.xpm", "pixmaps");
-       if (meter_path.empty()) {
-               error << _("no horizontal meter strip image found") << endmsg;
-               exit (1);
-       }
-       FastMeter::set_horizontal_xpm (meter_path);
-
        if (setup_windows ()) {
                throw failed_constructor ();
        }
@@ -277,10 +242,10 @@ ARDOUR_UI::set_engine (AudioEngine& e)
 
        /* this being a GUI and all, we want peakfiles */
 
-       FileSource::set_build_peakfiles (true);
-       FileSource::set_build_missing_peakfiles (true);
+       AudioFileSource::set_build_peakfiles (true);
+       AudioFileSource::set_build_missing_peakfiles (true);
 
-       if (Source::start_peak_thread ()) {
+       if (AudioSource::start_peak_thread ()) {
                throw failed_constructor();
        }
 
@@ -317,7 +282,7 @@ ARDOUR_UI::~ARDOUR_UI ()
                delete add_route_dialog;
        }
 
-       Source::stop_peak_thread ();
+       AudioSource::stop_peak_thread ();
 }
 
 gint
@@ -374,15 +339,15 @@ ARDOUR_UI::save_ardour_state ()
        Config->add_extra_xml (*node);
        Config->save_state();
 
-       XMLNode& enode (static_cast<Stateful*>(editor)->get_state());
-       XMLNode& mnode (mixer->get_state());
+       XMLNode* enode = new XMLNode (static_cast<Stateful*>(editor)->get_state());
+       XMLNode* mnode = new XMLNode (mixer->get_state());
 
        if (session) {
-               session->add_instant_xml(enode, session->path());
-               session->add_instant_xml(mnode, session->path());
+               session->add_instant_xml(*enode, session->path());
+               session->add_instant_xml(*mnode, session->path());
        } else {
-               Config->add_instant_xml(enode, get_user_ardour_path());
-               Config->add_instant_xml(mnode, get_user_ardour_path());
+               Config->add_instant_xml(*enode, get_user_ardour_path());
+               Config->add_instant_xml(*mnode, get_user_ardour_path());
        }
 
        /* keybindings */
@@ -428,7 +393,7 @@ If you still wish to quit, please use the\n\n\
                        break;
                }
        }
-
+       Config->save_state();
        quit ();
 }
 
@@ -436,15 +401,20 @@ int
 ARDOUR_UI::ask_about_saving_session (const string & what)
 {
        ArdourDialog window (_("ardour: save session?"));
+       Gtk::HBox dhbox;  // the hbox for the image and text
        Gtk::Label  prompt_label;
+       Gtk::Image* dimage = manage (new Gtk::Image(Stock::DIALOG_WARNING,  Gtk::ICON_SIZE_DIALOG));
+
        string msg;
 
-       msg = string_compose(_("Save and %1"), what);
-       window.add_button (msg, RESPONSE_ACCEPT);
-       msg = string_compose(_("Just %1"), what);
-       window.add_button (msg, RESPONSE_APPLY);
        msg = string_compose(_("Don't %1"), what);
        window.add_button (msg, RESPONSE_REJECT);
+       msg = string_compose(_("Just %1"), what);
+       window.add_button (msg, RESPONSE_APPLY);
+       msg = string_compose(_("Save and %1"), what);
+       window.add_button (msg, RESPONSE_ACCEPT);
+
+       window.set_default_response (RESPONSE_ACCEPT);
 
        Gtk::Button noquit_button (msg);
        noquit_button.set_name ("EditorGTKButton");
@@ -457,18 +427,24 @@ ARDOUR_UI::ask_about_saving_session (const string & what)
        } else {
                type = _("snapshot");
        }
-       prompt = string_compose(_("The %1\n\"%2\"\nhas not been saved.\n\nAny changes made this time\nwill be lost unless you save it.\n\nWhat do you want to do?"), 
+       prompt = string_compose(_("The %1\"%2\"\nhas not been saved.\n\nAny changes made this time\nwill be lost unless you save it.\n\nWhat do you want to do?"), 
                         type, session->snap_name());
        
        prompt_label.set_text (prompt);
-       prompt_label.set_alignment (0.5, 0.5);
        prompt_label.set_name (X_("PrompterLabel"));
-       
-       window.get_vbox()->pack_start (prompt_label);
+       prompt_label.set_alignment(ALIGN_LEFT, ALIGN_TOP);
+
+       dimage->set_alignment(ALIGN_CENTER, ALIGN_TOP)
+;
+       dhbox.set_homogeneous (false);
+       dhbox.pack_start (*dimage, false, false, 5);
+       dhbox.pack_start (prompt_label, true, false, 5);
+       window.get_vbox()->pack_start (dhbox);
 
        window.set_name (_("Prompter"));
        window.set_position (Gtk::WIN_POS_MOUSE);
        window.set_modal (true);
+       window.set_resizable (false);
        window.show_all ();
 
        save_the_session = 0;
@@ -567,7 +543,7 @@ ARDOUR_UI::update_buffer_load ()
 }
 
 void
-ARDOUR_UI::count_recenabled_diskstreams (DiskStream& ds)
+ARDOUR_UI::count_recenabled_diskstreams (AudioDiskstream& ds)
 {
        if (ds.record_enabled()) {
                rec_enabled_diskstreams++;
@@ -595,7 +571,7 @@ ARDOUR_UI::update_disk_space()
                if (session->actively_recording()){
                        
                        rec_enabled_diskstreams = 0;
-                       session->foreach_diskstream (this, &ARDOUR_UI::count_recenabled_diskstreams);
+                       session->foreach_audio_diskstream (this, &ARDOUR_UI::count_recenabled_diskstreams);
                        
                        if (rec_enabled_diskstreams) {
                                frames /= rec_enabled_diskstreams;
@@ -725,7 +701,7 @@ ARDOUR_UI::redisplay_recent_sessions ()
 
                TreeModel::Row row = *(recent_session_model->append());
 
-               row[recent_session_columns.visible_name] = PBD::basename (fullpath);
+               row[recent_session_columns.visible_name] = Glib::path_get_basename (fullpath);
                row[recent_session_columns.fullpath] = fullpath;
 
                if (states->size() > 1) {
@@ -832,9 +808,11 @@ ARDOUR_UI::filter_ardour_session_dirs (const FileFilter::Info& info)
                return false;
        }
 
+        // XXX Portability
+        
        string session_file = info.filename;
        session_file += '/';
-       session_file += PBD::basename (info.filename);
+       session_file += Glib::path_get_basename (info.filename);
        session_file += ".ardour";
        
        if (stat (session_file.c_str(), &statbuf) != 0) {
@@ -940,7 +918,7 @@ restart JACK with more ports."));
 }
 
 void
-ARDOUR_UI::diskstream_added (DiskStream* ds)
+ARDOUR_UI::diskstream_added (AudioDiskstream* ds)
 {
 }
 
@@ -1181,31 +1159,21 @@ ARDOUR_UI::transport_forward (int option)
 }
 
 void
-ARDOUR_UI::toggle_monitor_enable (guint32 dstream)
+ARDOUR_UI::toggle_record_enable (uint32_t dstream)
 {
        if (session == 0) {
                return;
        }
 
-       DiskStream *ds;
-
-       if ((ds = session->diskstream_by_id (dstream)) != 0) {
-               Port *port = ds->io()->input (0);
-               port->request_monitor_input (!port->monitoring_input());
-       }
-}
-
-void
-ARDOUR_UI::toggle_record_enable (guint32 dstream)
-{
-       if (session == 0) {
-               return;
-       }
+       Route* r;
+       
+       if ((r = session->route_by_remote_id (dstream)) != 0) {
 
-       DiskStream *ds;
+               AudioTrack* at;
 
-       if ((ds = session->diskstream_by_id (dstream)) != 0) {
-               ds->set_record_enabled (!ds->record_enabled(), this);
+               if ((at = dynamic_cast<AudioTrack*>(r)) != 0) {
+                       at->disk_stream().set_record_enabled (!at->disk_stream().record_enabled(), this);
+               }
        }
 }
 
@@ -1407,63 +1375,6 @@ ARDOUR_UI::stop_blinking ()
        }
 }
 
-
-void
-ARDOUR_UI::add_diskstream_to_menu (DiskStream& dstream)
-{
-       using namespace Gtk;
-       using namespace Menu_Helpers;
-
-       if (dstream.hidden()) {
-               return;
-       }
-
-       MenuList& items = diskstream_menu->items();
-       items.push_back (MenuElem (dstream.name(), bind (mem_fun(*this, &ARDOUR_UI::diskstream_selected), (gint32) dstream.id())));
-}
-       
-void
-ARDOUR_UI::diskstream_selected (gint32 id)
-{
-       selected_dstream = id;
-       Main::quit ();
-}
-
-gint32
-ARDOUR_UI::select_diskstream (GdkEventButton *ev)
-{
-       using namespace Gtk;
-       using namespace Menu_Helpers;
-
-       if (session == 0) {
-               return -1;
-       }
-
-       diskstream_menu = new Menu();
-       diskstream_menu->set_name ("ArdourContextMenu");
-       using namespace Gtk;
-       using namespace Menu_Helpers;
-
-       MenuList& items = diskstream_menu->items();
-       items.push_back (MenuElem (_("No Stream"), (bind (mem_fun(*this, &ARDOUR_UI::diskstream_selected), -1))));
-
-       session->foreach_diskstream (this, &ARDOUR_UI::add_diskstream_to_menu);
-
-       if (ev) {
-               diskstream_menu->popup (ev->button, ev->time);
-       } else {
-               diskstream_menu->popup (0, 0);
-       }
-
-       selected_dstream = -1;
-
-       Main::run ();
-
-       delete diskstream_menu;
-
-       return selected_dstream;
-}
-
 void
 ARDOUR_UI::name_io_setup (AudioEngine& engine, 
                          string& buf,
@@ -1523,6 +1434,7 @@ ARDOUR_UI::snapshot_session ()
 
        prompter.set_name ("Prompter");
        prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
+       prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
        prompter.set_prompt (_("Name of New Snapshot"));
        prompter.set_initial_text (now);
        
@@ -1591,7 +1503,7 @@ ARDOUR_UI::secondary_clock_value_changed ()
 }
 
 void
-ARDOUR_UI::rec_enable_button_blink (bool onoff, DiskStream *dstream, Widget *w)
+ARDOUR_UI::rec_enable_button_blink (bool onoff, AudioDiskstream *dstream, Widget *w)
 {
        if (session && dstream && dstream->record_enabled()) {
 
@@ -1672,7 +1584,8 @@ ARDOUR_UI::save_template ()
        prompter.set_prompt (_("Name for mix template:"));
        prompter.set_initial_text(session->name() + _("-template"));
        prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
-       
+       prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
+
        switch (prompter.run()) {
        case RESPONSE_ACCEPT:
                prompter.get_result (name);
@@ -1690,26 +1603,53 @@ ARDOUR_UI::save_template ()
 void
 ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
 {
-       m_new_session_dialog->show_all();
-       m_new_session_dialog->set_transient_for(*editor);
+       m_new_session_dialog->show();
+       m_new_session_dialog->set_modal(true);
        m_new_session_dialog->set_name(predetermined_path);
+       m_new_session_dialog->reset_recent();
 
        int response = Gtk::RESPONSE_CANCEL;
 
        do {
                response = m_new_session_dialog->run ();
-       
-               if(response == Gtk::RESPONSE_OK) {
+               if(response == Gtk::RESPONSE_CANCEL || response == Gtk::RESPONSE_DELETE_EVENT) {
+                 quit();
+                 return;
+
+               } else if (response == Gtk::RESPONSE_NONE) {
+                 /* Clear was pressed */
+                 m_new_session_dialog->reset();
+
+               } else if (response == Gtk::RESPONSE_YES) {
+                 /* YES  == OPEN, but there's no enum for that */
+                 std::string session_name = m_new_session_dialog->session_name();
+                 std::string session_path = m_new_session_dialog->session_folder();
+                 load_session (session_path, session_name);
+
+
+               } else if (response == Gtk::RESPONSE_OK) {
+                 if (m_new_session_dialog->get_current_page() == 1) {
+
+                   /* XXX this is a bit of a hack.. 
+                      i really want the new sesion dialog to return RESPONSE_YES
+                      if we're on page 1 (the load page)
+                      Unfortunately i can't see how atm.. 
+                   */
+                       std::string session_name = m_new_session_dialog->session_name();
+                       std::string session_path = m_new_session_dialog->session_folder();
+                       load_session (session_path, session_name);
+
+                 } else {
 
                        _session_is_new = true;
                        
                        std::string session_name = m_new_session_dialog->session_name();
                        std::string session_path = m_new_session_dialog->session_folder();
                        
-                       /*
-                         XXX This is needed because session constructor wants a 
-                         non-existant path. hopefully this will be fixed at some point.
-                       */
+
+                         //XXX This is needed because session constructor wants a 
+                         //non-existant path. hopefully this will be fixed at some point.
+                       
                        session_path = Glib::build_filename(session_path, session_name);
                        
                        std::string template_name = m_new_session_dialog->session_template_name();
@@ -1765,11 +1705,21 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
                                               nphysin,
                                               nphysout, 
                                               engine->frame_rate() * 60 * 5);
-                       }               
+                       }
+                 }     
                }
+               
+       } while (response == Gtk::RESPONSE_NONE);
+       m_new_session_dialog->hide();
+       show();
 
-       } while(response == Gtk::RESPONSE_HELP);
-       m_new_session_dialog->hide_all();
+}
+
+void
+ARDOUR_UI::close_session()
+{
+  unload_session();
+  new_session ();
 }
 
 int
@@ -1822,6 +1772,8 @@ ARDOUR_UI::make_session_clean ()
                session->set_clean ();
        }
 
+       show ();
+
        return FALSE;
 }
 
@@ -1912,7 +1864,7 @@ ARDOUR_UI::display_cleanup_results (Session::cleanup_report& rep, const gchar* l
        if (removed == 0) {
                MessageDialog msgd (*editor,
                                    _("No audio files were ready for cleanup"), 
-                                   false,
+                                   true,
                                    Gtk::MESSAGE_INFO,
                                    (Gtk::ButtonsType)(Gtk::BUTTONS_CLOSE)  );
                msgd.set_secondary_text (_("If this seems suprising, \n\
@@ -1924,7 +1876,7 @@ require some unused files to continue to exist."));
                return;
        } 
 
-       ArdourDialog results (_("ardour: cleanup"), true, true);
+       ArdourDialog results (_("ardour: cleanup"), true, false);
        
        struct CleanupResultsModelColumns : public Gtk::TreeModel::ColumnRecord {
            CleanupResultsModelColumns() { 
@@ -1947,11 +1899,16 @@ require some unused files to continue to exist."));
        results_display.set_name ("CleanupResultsList");
        results_display.set_headers_visible (true);
        results_display.set_headers_clickable (false);
+       results_display.set_reorderable (false);
 
        Gtk::ScrolledWindow list_scroller;
        Gtk::Label txt;
        Gtk::VBox dvbox;
-       Gtk::HBox dhbox;
+       Gtk::HBox dhbox;  // the hbox for the image and text
+       Gtk::HBox ddhbox; // the hbox we eventually pack into the dialog's vbox
+       Gtk::Image* dimage = manage (new Gtk::Image(Stock::DIALOG_INFO,  Gtk::ICON_SIZE_DIALOG));
+
+       dimage->set_alignment(ALIGN_LEFT, ALIGN_TOP);
 
        if (rep.space < 1048576.0f) {
                if (removed > 1) {
@@ -1967,7 +1924,8 @@ require some unused files to continue to exist."));
                }
        }
 
-       dvbox.pack_start (txt, true, false, 5);
+       dhbox.pack_start (*dimage, true, false, 5);
+       dhbox.pack_start (txt, true, false, 5);
 
        for (vector<string>::iterator i = rep.paths.begin(); i != rep.paths.end(); ++i) {
                TreeModel::Row row = *(results_model->append());
@@ -1979,13 +1937,16 @@ require some unused files to continue to exist."));
        list_scroller.set_size_request (-1, 150);
        list_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
 
-       dvbox.pack_start (list_scroller, true, false);
-       dhbox.pack_start (dvbox, true, false, 5);
-       results.get_vbox()->pack_start (dhbox, true, false);
+       dvbox.pack_start (dhbox, true, false, 5);
+       dvbox.pack_start (list_scroller, true, false, 5);
+       ddhbox.pack_start (dvbox, true, false, 5);
+
+       results.get_vbox()->pack_start (ddhbox, true, false, 5);
        results.add_button (Stock::CLOSE, RESPONSE_CLOSE);
        results.set_default_response (RESPONSE_CLOSE);
-       results.set_position (Gtk::WIN_POS_CENTER);
+       results.set_position (Gtk::WIN_POS_MOUSE);
        results.show_all_children ();
+       results.set_resizable (false);
 
        results.run ();
 
@@ -2001,7 +1962,7 @@ ARDOUR_UI::cleanup ()
 
 
        MessageDialog  checker (_("Are you sure you want to cleanup?"),
-                               false,
+                               true,
                                Gtk::MESSAGE_QUESTION,
                                (Gtk::ButtonsType)(Gtk::BUTTONS_NONE));
 
@@ -2016,7 +1977,7 @@ After cleanup, unused audio files will be moved to a \
 
        checker.set_name (_("CleanupDialog"));
        checker.set_wmclass (_("ardour_cleanup"), "Ardour");
-       checker.set_position (Gtk::WIN_POS_CENTER);
+       checker.set_position (Gtk::WIN_POS_MOUSE);
 
        switch (checker.run()) {
        case RESPONSE_ACCEPT:
@@ -2037,8 +1998,10 @@ After cleanup, unused audio files will be moved to a \
                                 _("cleaned files"),
                                 _("\
 The following %1 %2 not in use and \n\
-have been moved to %3. \n\n\
-Flushing the wastebasket will release an additional\n\
+have been moved to:\n\
+%3. \n\n\
+Flushing the wastebasket will \n\
+release an additional\n\
 %4 %5bytes of disk space.\n"
                                         ));
 }
@@ -2060,8 +2023,8 @@ ARDOUR_UI::flush_trash ()
        display_cleanup_results (rep, 
                                 _("deleted file"),
                                 _("The following %1 %2 deleted from\n\
-%3,releasing \n\
-%4 %5bytes of disk space"));
+%3,\n\
+releasing %4 %5bytes of disk space"));
 }
 
 void
@@ -2187,11 +2150,11 @@ ARDOUR_UI::halt_on_xrun_message ()
 }
 
 void 
-ARDOUR_UI::delete_sources_in_the_right_thread (list<ARDOUR::Source*>* deletion_list)
+ARDOUR_UI::delete_sources_in_the_right_thread (list<ARDOUR::AudioFileSource*>* deletion_list)
 {
        ENSURE_GUI_THREAD (bind (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread), deletion_list));
 
-       for (list<Source*>::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) {
+       for (list<AudioFileSource*>::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) {
                delete *i;
        }
 
@@ -2348,6 +2311,12 @@ ARDOUR_UI::set_native_file_header_format (HeaderFormat hf)
        case RF64:
                act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatRF64"));
                break;
+       case CAF:
+               act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatCAF"));
+               break;
+       case AIFF:
+               act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatAIFF"));
+               break;
        }
 
        if (act) {
@@ -2422,6 +2391,12 @@ ARDOUR_UI::use_config ()
        case RF64:
                act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatRF64"));
                break;
+       case CAF:
+               act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatCAF"));
+               break;
+       case AIFF:
+               act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatAIFF"));
+               break;
        }
 
        if (act) {