X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_ui.cc;h=4219005d967ca06af111dc8a265ded51bc1e9c49;hb=5dc4abef7951c1a1b85fb6b9dbb194d73b8c4c2b;hp=a691b5915fa0611ee4e7295617f4c2eee26d18a7;hpb=c1be7a630a55ae0b9e32335448d7a77173fbfec4;p=ardour.git diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index a691b5915f..4219005d96 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -33,7 +33,6 @@ #include #include -#include #include #include #include @@ -51,12 +50,13 @@ #include #include #include -#include -#include +#include +#include #include #include #include #include +#include #include "actions.h" #include "ardour_ui.h" @@ -77,6 +77,7 @@ #include "i18n.h" using namespace ARDOUR; +using namespace PBD; using namespace Gtkmm2ext; using namespace Gtk; using namespace sigc; @@ -116,13 +117,13 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile) shuttle_units_button (_("% ")), - punch_in_button (_("punch\nin")), - punch_out_button (_("punch\nout")), - auto_return_button (_("auto\nreturn")), - auto_play_button (_("auto\nplay")), - auto_input_button (_("auto\ninput")), - click_button (_("click")), - auditioning_alert_button (_("AUDITIONING")), + punch_in_button (_("Punch In")), + punch_out_button (_("Punch Out")), + auto_return_button (_("Auto Return")), + auto_play_button (_("Autuo Play")), + auto_input_button (_("Auto Input")), + click_button (_("Click")), + auditioning_alert_button (_("AUDITION")), solo_alert_button (_("SOLO")), shown_flag (false) @@ -147,9 +148,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 +186,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 +197,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 +211,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 +243,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 +283,7 @@ ARDOUR_UI::~ARDOUR_UI () delete add_route_dialog; } - Source::stop_peak_thread (); + AudioSource::stop_peak_thread (); } gint @@ -428,7 +394,7 @@ If you still wish to quit, please use the\n\n\ break; } } - + Config->save_state(); quit (); } @@ -436,15 +402,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 +428,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; @@ -531,11 +508,11 @@ ARDOUR_UI::update_sample_rate (jack_nframes_t ignored) jack_nframes_t rate = engine->frame_rate(); if (fmod (rate, 1000.0) != 0.0) { - snprintf (buf, sizeof (buf), _("SR: %.1f kHz / %4.1f msecs"), + snprintf (buf, sizeof (buf), _("%.1f kHz / %4.1f msecs"), (float) rate/1000.0f, (engine->frames_per_cycle() / (float) rate) * 1000.0f); } else { - snprintf (buf, sizeof (buf), _("SR: %u kHz / %4.1f msecs"), + snprintf (buf, sizeof (buf), _("%u kHz / %4.1f msecs"), rate/1000, (engine->frames_per_cycle() / (float) rate) * 1000.0f); } @@ -548,7 +525,7 @@ void ARDOUR_UI::update_cpu_load () { char buf[32]; - snprintf (buf, sizeof (buf), _("DSP Load: %.1f%%"), engine->get_cpu_load()); + snprintf (buf, sizeof (buf), _("DSP: %.1f%%"), engine->get_cpu_load()); cpu_load_label.set_text (buf); } @@ -567,7 +544,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++; @@ -585,7 +562,7 @@ ARDOUR_UI::update_disk_space() char buf[64]; if (frames == max_frames) { - strcpy (buf, _("space: 24hrs+")); + strcpy (buf, _("Disk: 24hrs+")); } else { int hrs; int mins; @@ -595,7 +572,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; @@ -615,7 +592,7 @@ ARDOUR_UI::update_disk_space() frames -= mins * fr * 60; secs = frames / fr; - snprintf (buf, sizeof(buf), _("space: %02dh:%02dm:%02ds"), hrs, mins, secs); + snprintf (buf, sizeof(buf), _("Space: %02dh:%02dm:%02ds"), hrs, mins, secs); } disk_space_label.set_text (buf); @@ -725,7 +702,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) { @@ -759,7 +736,7 @@ ARDOUR_UI::build_session_selector () session_selector_window->add_button (Stock::CANCEL, RESPONSE_CANCEL); session_selector_window->add_button (Stock::OPEN, RESPONSE_ACCEPT); - + session_selector_window->set_default_response (RESPONSE_ACCEPT); recent_session_model = TreeStore::create (recent_session_columns); recent_session_display.set_model (recent_session_model); recent_session_display.append_column (_("Recent Sessions"), recent_session_columns.visible_name); @@ -832,9 +809,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) { @@ -890,11 +869,51 @@ ARDOUR_UI::open_session () void -ARDOUR_UI::session_add_midi_track () +ARDOUR_UI::session_add_midi_route (bool disk) { - cerr << _("Patience is a virtue.\n"); + Route* route; + + if (session == 0) { + warning << _("You cannot add a track without a session already loaded.") << endmsg; + return; + } + + try { + if (disk) { + if ((route = session->new_midi_track ()) == 0) { + error << _("could not create new MIDI track") << endmsg; + } + } else { + if ((route = session->new_midi_route ()) == 0) { + error << _("could not create new MIDI bus") << endmsg; + } + } +#if 0 +#if CONTROLOUTS + if (need_control_room_outs) { + pan_t pans[2]; + + pans[0] = 0.5; + pans[1] = 0.5; + + route->set_stereo_control_outs (control_lr_channels); + route->control_outs()->set_stereo_pan (pans, this); + } +#endif /* CONTROLOUTS */ +#endif + } + + catch (...) { + MessageDialog msg (*editor, + _("There are insufficient JACK ports available\n\ +to create a new track or bus.\n\ +You should save Ardour, exit and\n\ +restart JACK with more ports.")); + msg.run (); + } } + void ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode) { @@ -940,7 +959,7 @@ restart JACK with more ports.")); } void -ARDOUR_UI::diskstream_added (DiskStream* ds) +ARDOUR_UI::diskstream_added (Diskstream* ds) { } @@ -1187,11 +1206,14 @@ ARDOUR_UI::toggle_monitor_enable (guint32 dstream) return; } - DiskStream *ds; + Diskstream *ds; if ((ds = session->diskstream_by_id (dstream)) != 0) { - Port *port = ds->io()->input (0); - port->request_monitor_input (!port->monitoring_input()); + AudioDiskstream *ads = dynamic_cast(ds); + if (ads) { + Port *port = ds->io()->input (0); + port->request_monitor_input (!port->monitoring_input()); + } } } @@ -1202,7 +1224,7 @@ ARDOUR_UI::toggle_record_enable (guint32 dstream) return; } - DiskStream *ds; + Diskstream *ds; if ((ds = session->diskstream_by_id (dstream)) != 0) { ds->set_record_enabled (!ds->record_enabled(), this); @@ -1409,7 +1431,7 @@ ARDOUR_UI::stop_blinking () void -ARDOUR_UI::add_diskstream_to_menu (DiskStream& dstream) +ARDOUR_UI::add_diskstream_to_menu (AudioDiskstream& dstream) { using namespace Gtk; using namespace Menu_Helpers; @@ -1447,7 +1469,7 @@ ARDOUR_UI::select_diskstream (GdkEventButton *ev) 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); + session->foreach_audio_diskstream (this, &ARDOUR_UI::add_diskstream_to_menu); if (ev) { diskstream_menu->popup (ev->button, ev->time); @@ -1519,10 +1541,12 @@ ARDOUR_UI::snapshot_session () time (&n); now = ctime (&n); - now = now.substr (0, now.length() - 1); + now = now.substr (20, 4) + now.substr (3, 16) + " (" + now.substr (0, 3) + ")"; prompter.set_name ("Prompter"); - prompter.set_prompt (_("Name for snapshot")); + 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); switch (prompter.run()) { @@ -1590,7 +1614,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()) { @@ -1670,7 +1694,9 @@ ARDOUR_UI::save_template () prompter.set_name (X_("Prompter")); 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); @@ -1688,26 +1714,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(); @@ -1763,11 +1816,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 @@ -1820,6 +1883,8 @@ ARDOUR_UI::make_session_clean () session->set_clean (); } + show (); + return FALSE; } @@ -1910,7 +1975,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\ @@ -1922,7 +1987,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() { @@ -1945,11 +2010,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) { @@ -1965,7 +2035,8 @@ require some unused files to continue to exist.")); } } - dvbox.pack_start (txt, true, false, 10); + dhbox.pack_start (*dimage, true, false, 5); + dhbox.pack_start (txt, true, false, 5); for (vector::iterator i = rep.paths.begin(); i != rep.paths.end(); ++i) { TreeModel::Row row = *(results_model->append()); @@ -1977,12 +2048,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, 10); - 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_position (Gtk::WIN_POS_CENTER); + results.set_default_response (RESPONSE_CLOSE); + results.set_position (Gtk::WIN_POS_MOUSE); results.show_all_children (); + results.set_resizable (false); results.run (); @@ -1998,7 +2073,7 @@ ARDOUR_UI::cleanup () MessageDialog checker (_("Are you sure you want to cleanup?"), - false, + true, Gtk::MESSAGE_QUESTION, (Gtk::ButtonsType)(Gtk::BUTTONS_NONE)); @@ -2009,10 +2084,11 @@ After cleanup, unused audio files will be moved to a \ checker.add_button (Stock::CANCEL, RESPONSE_CANCEL); checker.add_button (_("Clean Up"), RESPONSE_ACCEPT); + checker.set_default_response (RESPONSE_CANCEL); 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: @@ -2033,9 +2109,11 @@ 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\ -Flushing the wastebasket will release an additional\n\ -%4 %5bytes of disk space by deleting these files." +have been moved to:\n\ +%3. \n\n\ +Flushing the wastebasket will \n\ +release an additional\n\ +%4 %5bytes of disk space.\n" )); } @@ -2055,9 +2133,9 @@ ARDOUR_UI::flush_trash () display_cleanup_results (rep, _("deleted file"), - _("The following %1 %2 \n\ -deleted from %3, releasing \n\ -%4 %5bytes of disk space")); + _("The following %1 %2 deleted from\n\ +%3,\n\ +releasing %4 %5bytes of disk space")); } void @@ -2111,7 +2189,11 @@ ARDOUR_UI::add_route () /* XXX do something with name template */ while (count) { - if (track) { + if (track && add_route_dialog->midi()) { + session_add_midi_track(); + } else if (add_route_dialog->midi()) { + session_add_midi_bus(); + } else if (track) { session_add_audio_track (input_chan, output_chan, add_route_dialog->mode()); } else { session_add_audio_bus (input_chan, output_chan); @@ -2183,11 +2265,11 @@ ARDOUR_UI::halt_on_xrun_message () } void -ARDOUR_UI::delete_sources_in_the_right_thread (list* deletion_list) +ARDOUR_UI::delete_sources_in_the_right_thread (list* deletion_list) { ENSURE_GUI_THREAD (bind (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread), deletion_list)); - for (list::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) { + for (list::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) { delete *i; } @@ -2344,6 +2426,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) { @@ -2418,6 +2506,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) {