21 #include "gtk2ardour-config.h"
24 #include <boost/algorithm/string.hpp>
26 #include <gtkmm/liststore.h>
27 #include <gtkmm/stock.h>
28 #include <gtkmm/scale.h>
43 #include "control_protocol/control_protocol.h"
45 #include "canvas/wave_view.h"
74 Table* t = manage (
new Table (2, 3));
78 t->attach (*l, 0, 1, 0, 1, FILL);
79 t->attach (_click_path_entry, 1, 2, 0, 1, FILL);
80 Button* b = manage (
new Button (
_(
"Browse...")));
82 t->attach (*b, 2, 3, 0, 1, FILL);
85 t->attach (*l, 0, 1, 1, 2, FILL);
86 t->attach (_click_emphasis_path_entry, 1, 2, 1, 2, FILL);
87 b = manage (
new Button (
_(
"Browse...")));
89 t->attach (*b, 2, 3, 1, 2, FILL);
91 _box->pack_start (*t,
false,
false);
99 if (p ==
"click-sound") {
100 _click_path_entry.set_text (_rc_config->get_click_sound());
101 }
else if (p ==
"click-emphasis-sound") {
102 _click_emphasis_path_entry.set_text (_rc_config->get_click_emphasis_sound());
108 parameter_changed (
"click-sound");
109 parameter_changed (
"click-emphasis-sound");
121 if (sfdb.
run () == RESPONSE_OK) {
128 _click_path_entry.set_text (path);
129 _rc_config->set_click_sound (path);
134 click_chosen (_click_path_entry.get_text ());
144 if (sfdb.
run () == RESPONSE_OK) {
151 _click_emphasis_path_entry.set_text (path);
152 _rc_config->set_click_emphasis_sound (path);
157 click_emphasis_chosen (_click_emphasis_path_entry.get_text ());
170 _limit_undo_button (
_(
"Limit undo history to")),
171 _save_undo_button (
_(
"Save undo history of"))
173 Table* t =
new Table (2, 3);
176 t->attach (_limit_undo_button, 0, 1, 0, 1, FILL);
177 _limit_undo_spin.set_range (0, 512);
178 _limit_undo_spin.set_increments (1, 10);
179 t->attach (_limit_undo_spin, 1, 2, 0, 1, FILL | EXPAND);
181 t->attach (*l, 2, 3, 0, 1);
183 t->attach (_save_undo_button, 0, 1, 1, 2, FILL);
184 _save_undo_spin.set_range (0, 512);
185 _save_undo_spin.set_increments (1, 10);
186 t->attach (_save_undo_spin, 1, 2, 1, 2, FILL | EXPAND);
188 t->attach (*l, 2, 3, 1, 2);
190 _box->pack_start (*t);
200 if (p ==
"history-depth") {
201 int32_t
const d = _rc_config->get_history_depth();
202 _limit_undo_button.set_active (d != 0);
203 _limit_undo_spin.set_sensitive (d != 0);
204 _limit_undo_spin.set_value (d);
205 }
else if (p ==
"save-history") {
206 bool const x = _rc_config->get_save_history ();
207 _save_undo_button.set_active (x);
208 _save_undo_spin.set_sensitive (x);
209 }
else if (p ==
"save-history-depth") {
210 _save_undo_spin.set_value (_rc_config->get_saved_history_depth());
216 parameter_changed (
"save-history");
217 parameter_changed (
"history-depth");
218 parameter_changed (
"save-history-depth");
223 bool const x = _limit_undo_button.get_active ();
224 _limit_undo_spin.set_sensitive (x);
225 int32_t
const n = x ? 16 : 0;
226 _limit_undo_spin.set_value (n);
227 _rc_config->set_history_depth (n);
232 _rc_config->set_history_depth (_limit_undo_spin.get_value_as_int ());
237 bool const x = _save_undo_button.get_active ();
238 _rc_config->set_save_history (x);
243 _rc_config->set_saved_history_depth (_save_undo_spin.get_value_as_int ());
256 static const struct {
268 {
"Key|Shift", GDK_SHIFT_MASK },
269 {
"Command", GDK_META_MASK },
270 {
"Control", GDK_CONTROL_MASK },
271 {
"Option", GDK_MOD1_MASK },
272 {
"Command-Shift", GDK_META_MASK|GDK_SHIFT_MASK },
273 {
"Command-Option", GDK_MOD1_MASK|GDK_META_MASK },
274 {
"Shift-Option", GDK_SHIFT_MASK|GDK_MOD1_MASK },
275 {
"Shift-Command-Option", GDK_MOD5_MASK|GDK_SHIFT_MASK|GDK_META_MASK },
278 {
"Key|Shift", GDK_SHIFT_MASK },
279 {
"Control", GDK_CONTROL_MASK },
280 {
"Alt (Mod1)", GDK_MOD1_MASK },
281 {
"Control-Shift", GDK_CONTROL_MASK|GDK_SHIFT_MASK },
282 {
"Control-Alt", GDK_CONTROL_MASK|GDK_MOD1_MASK },
283 {
"Shift-Alt", GDK_SHIFT_MASK|GDK_MOD1_MASK },
284 {
"Control-Shift-Alt", GDK_CONTROL_MASK|GDK_SHIFT_MASK|GDK_MOD1_MASK },
285 {
"Mod2", GDK_MOD2_MASK },
286 {
"Mod3", GDK_MOD3_MASK },
287 {
"Mod4", GDK_MOD4_MASK },
288 {
"Mod5", GDK_MOD5_MASK },
298 _delete_button_adjustment (3, 1, 12),
299 _delete_button_spin (_delete_button_adjustment),
300 _edit_button_adjustment (3, 1, 5),
301 _edit_button_spin (_edit_button_adjustment),
302 _insert_note_button_adjustment (3, 1, 5),
303 _insert_note_button_spin (_insert_note_button_adjustment)
308 for (
int i = 0;
modifiers[i].name; ++i) {
315 for (
int x = 0;
modifiers[x].name; ++x) {
322 Table* t = manage (
new Table (4, 4));
326 l->set_name (
"OptionsLabel");
328 t->attach (*l, 0, 1, 0, 1, FILL | EXPAND, FILL);
329 t->attach (_edit_modifier_combo, 1, 2, 0, 1, FILL | EXPAND, FILL);
331 l = manage (
new Label (
_(
"+ button")));
332 l->set_name (
"OptionsLabel");
334 t->attach (*l, 3, 4, 0, 1, FILL | EXPAND, FILL);
335 t->attach (_edit_button_spin, 4, 5, 0, 1, FILL | EXPAND, FILL);
337 _edit_button_spin.set_name (
"OptionsEntry");
338 _edit_button_adjustment.set_value (Keyboard::edit_button());
344 for (
int x = 0;
modifiers[x].name; ++x) {
352 l->set_name (
"OptionsLabel");
354 t->attach (*l, 0, 1, 1, 2, FILL | EXPAND, FILL);
355 t->attach (_delete_modifier_combo, 1, 2, 1, 2, FILL | EXPAND, FILL);
357 l = manage (
new Label (
_(
"+ button")));
358 l->set_name (
"OptionsLabel");
360 t->attach (*l, 3, 4, 1, 2, FILL | EXPAND, FILL);
361 t->attach (_delete_button_spin, 4, 5, 1, 2, FILL | EXPAND, FILL);
363 _delete_button_spin.set_name (
"OptionsEntry");
364 _delete_button_adjustment.set_value (Keyboard::delete_button());
371 for (
int x = 0;
modifiers[x].name; ++x) {
379 l->set_name (
"OptionsLabel");
381 t->attach (*l, 0, 1, 2, 3, FILL | EXPAND, FILL);
382 t->attach (_insert_note_modifier_combo, 1, 2, 2, 3, FILL | EXPAND, FILL);
384 l = manage (
new Label (
_(
"+ button")));
385 l->set_name (
"OptionsLabel");
387 t->attach (*l, 3, 4, 2, 3, FILL | EXPAND, FILL);
388 t->attach (_insert_note_button_spin, 4, 5, 2, 3, FILL | EXPAND, FILL);
390 _insert_note_button_spin.set_name (
"OptionsEntry");
391 _insert_note_button_adjustment.set_value (Keyboard::insert_note_button());
398 for (
int x = 0;
modifiers[x].name; ++x) {
406 l->set_name (
"OptionsLabel");
408 t->attach (*l, 0, 1, 3, 4, FILL | EXPAND, FILL);
409 t->attach (_snap_modifier_combo, 1, 2, 3, 4, FILL | EXPAND, FILL);
413 for (map<string,string>::iterator bf = Keyboard::binding_files.begin(); bf != Keyboard::binding_files.end(); ++bf) {
414 strs.push_back (bf->first);
418 _keyboard_layout_selector.set_active_text (Keyboard::current_binding_name());
422 l->set_name (
"OptionsLabel");
424 t->attach (*l, 0, 1, 4, 5, FILL | EXPAND, FILL);
425 t->attach (_keyboard_layout_selector, 1, 2, 4, 5, FILL | EXPAND, FILL);
427 _box->pack_start (*t,
false,
false);
444 string const txt = _keyboard_layout_selector.get_active_text();
448 for (map<string,string>::iterator i = Keyboard::binding_files.begin(); i != Keyboard::binding_files.end(); ++i) {
449 if (txt == i->first) {
450 if (Keyboard::load_keybindings (i->second)) {
451 Keyboard::save_keybindings ();
459 string const txt = _edit_modifier_combo.get_active_text();
461 for (
int i = 0;
modifiers[i].name; ++i) {
471 string const txt = _delete_modifier_combo.get_active_text();
473 for (
int i = 0;
modifiers[i].name; ++i) {
483 string const txt = _insert_note_modifier_combo.get_active_text();
485 for (
int i = 0;
modifiers[i].name; ++i) {
495 string const txt = _snap_modifier_combo.get_active_text();
497 for (
int i = 0;
modifiers[i].name; ++i) {
507 Keyboard::set_delete_button (_delete_button_spin.get_value_as_int());
512 Keyboard::set_edit_button (_edit_button_spin.get_value_as_int());
517 Keyboard::set_insert_note_button (_insert_note_button_spin.get_value_as_int());
539 _dpi_adjustment (100, 50, 250, 1, 5),
540 _dpi_slider (_dpi_adjustment)
542 _dpi_adjustment.set_value (_ui_config->get_font_scale() / 1024.);
544 Label* l = manage (
new Label (
_(
"GUI and Font scaling:")));
545 l->set_name (
"OptionsLabel");
547 const Glib::ustring dflt =
_(
"Default");
548 const Glib::ustring empty =
X_(
"");
550 _dpi_slider.set_name(
"FontScaleSlider");
551 _dpi_slider.set_update_policy (UPDATE_DISCONTINUOUS);
552 _dpi_slider.set_draw_value(
false);
553 _dpi_slider.add_mark(50, Gtk::POS_TOP, empty);
554 _dpi_slider.add_mark(60, Gtk::POS_TOP, empty);
555 _dpi_slider.add_mark(70, Gtk::POS_TOP, empty);
556 _dpi_slider.add_mark(80, Gtk::POS_TOP, empty);
557 _dpi_slider.add_mark(90, Gtk::POS_TOP, empty);
558 _dpi_slider.add_mark(100, Gtk::POS_TOP, dflt);
559 _dpi_slider.add_mark(125, Gtk::POS_TOP, empty);
560 _dpi_slider.add_mark(150, Gtk::POS_TOP, empty);
561 _dpi_slider.add_mark(175, Gtk::POS_TOP, empty);
562 _dpi_slider.add_mark(200, Gtk::POS_TOP, empty);
563 _dpi_slider.add_mark(225, Gtk::POS_TOP, empty);
564 _dpi_slider.add_mark(250, Gtk::POS_TOP, empty);
566 HBox* h = manage (
new HBox);
568 h->pack_start (*l,
false,
false);
569 h->pack_start (_dpi_slider,
true,
true);
571 _box->pack_start (*h,
false,
false);
573 set_note (
_(
"Adjusting the scale require an application restart to re-layout."));
580 if (p ==
"font-scale") {
581 _dpi_adjustment.set_value (_ui_config->get_font_scale() / 1024.);
587 parameter_changed (
"font-scale");
594 _ui_config->set_font_scale ((
long) floor (_dpi_adjustment.get_value() * 1024.));
609 , _clip_level_adjustment (-.5, -50.0, 0.0, 0.1, 1.0)
610 , _clip_level_slider (_clip_level_adjustment)
612 _clip_level_adjustment.set_value (_ui_config->get_waveform_clip_level ());
614 Label* l = manage (
new Label (
_(
"Waveform Clip Level (dBFS):")));
615 l->set_name (
"OptionsLabel");
617 _clip_level_slider.set_update_policy (UPDATE_DISCONTINUOUS);
618 HBox* h = manage (
new HBox);
620 h->pack_start (*l,
false,
false);
621 h->pack_start (_clip_level_slider,
true,
true);
623 _box->pack_start (*h,
false,
false);
630 if (p ==
"waveform-clip-level") {
631 _clip_level_adjustment.set_value (_ui_config->get_waveform_clip_level());
637 parameter_changed (
"waveform-clip-level");
644 _ui_config->set_waveform_clip_level (_clip_level_adjustment.get_value());
646 ArdourCanvas::WaveView::set_clip_level (_clip_level_adjustment.get_value());
659 , _playback_adjustment (5, 1, 60, 1, 4)
660 , _capture_adjustment (5, 1, 60, 1, 4)
661 , _playback_slider (_playback_adjustment)
662 , _capture_slider (_capture_adjustment)
664 _playback_adjustment.set_value (_rc_config->get_audio_playback_buffer_seconds());
666 Label* l = manage (
new Label (
_(
"Playback (seconds of buffering):")));
667 l->set_name (
"OptionsLabel");
669 _playback_slider.set_update_policy (UPDATE_DISCONTINUOUS);
670 HBox* h = manage (
new HBox);
672 h->pack_start (*l,
false,
false);
673 h->pack_start (_playback_slider,
true,
true);
675 _box->pack_start (*h,
false,
false);
677 _capture_adjustment.set_value (_rc_config->get_audio_capture_buffer_seconds());
679 l = manage (
new Label (
_(
"Recording (seconds of buffering):")));
680 l->set_name (
"OptionsLabel");
682 _capture_slider.set_update_policy (UPDATE_DISCONTINUOUS);
683 h = manage (
new HBox);
685 h->pack_start (*l,
false,
false);
686 h->pack_start (_capture_slider,
true,
true);
688 _box->pack_start (*h,
false,
false);
696 if (p ==
"playback-buffer-seconds") {
697 _playback_adjustment.set_value (_rc_config->get_audio_playback_buffer_seconds());
698 }
else if (p ==
"capture-buffer-seconds") {
699 _capture_adjustment.set_value (_rc_config->get_audio_capture_buffer_seconds());
705 parameter_changed (
"playback-buffer-seconds");
706 parameter_changed (
"capture-buffer-seconds");
713 _rc_config->set_audio_playback_buffer_seconds ((
long) _playback_adjustment.get_value());
718 _rc_config->set_audio_capture_buffer_seconds ((
long) _capture_adjustment.get_value());
733 , _ignore_view_change (0)
735 _store = ListStore::create (_model);
736 _view.set_model (_store);
737 _view.append_column (
_(
"Control Surface Protocol"), _model.name);
738 _view.get_column(0)->set_resizable (
true);
739 _view.get_column(0)->set_expand (
true);
740 _view.append_column_editable (
_(
"Enabled"), _model.enabled);
741 _view.append_column_editable (
_(
"Feedback"), _model.feedback);
743 _box->pack_start (_view,
false,
false);
745 Label* label = manage (
new Label);
746 label->set_markup (
string_compose (
X_(
"<i>%1</i>"),
_(
"Double-click on a name to edit settings for an enabled protocol")));
748 _box->pack_start (*label,
false,
false);
771 if (!(*i)->mandatory) {
772 TreeModel::Row r = *_store->append ();
773 r[_model.name] = (*i)->name;
774 r[_model.enabled] = ((*i)->protocol || (*i)->requested);
775 r[_model.feedback] = ((*i)->protocol && (*i)->protocol->get_feedback ());
776 r[_model.protocol_info] = *i;
785 TreeModel::Children rows = _store->children();
787 for (TreeModel::Children::iterator x = rows.begin(); x != rows.end(); ++x) {
788 string n = ((*x)[_model.name]);
790 if ((*x)[_model.protocol_info] == cpi) {
791 _ignore_view_change++;
793 _ignore_view_change--;
799 void view_changed (TreeModel::Path
const &, TreeModel::iterator
const & i)
801 TreeModel::Row r = *i;
803 if (_ignore_view_change) {
812 bool const was_enabled = (cpi->
protocol != 0);
813 bool const is_enabled = r[_model.enabled];
816 if (was_enabled != is_enabled) {
819 ControlProtocolManager::instance().activate (*cpi);
821 ControlProtocolManager::instance().deactivate (*cpi);
825 bool const was_feedback = (cpi->
protocol && cpi->
protocol->get_feedback ());
826 bool const is_feedback = r[_model.feedback];
828 if (was_feedback != is_feedback && cpi->
protocol) {
829 cpi->
protocol->set_feedback (is_feedback);
835 if (ev->type != GDK_2BUTTON_PRESS) {
843 row = *(_view.get_selection()->get_selected());
844 if (!row[_model.enabled]) {
847 cpi = row[_model.protocol_info];
851 Box* box = (Box*) cpi->
protocol->get_gui ();
855 if (box->get_parent()) {
856 static_cast<ArdourWindow*
>(box->get_parent())->present();
859 string title = row[_model.name];
866 win->set_title (
"Control Protocol Options");
903 , _show_video_export_info_button (
_(
"Show Video Export Info before export"))
904 , _show_video_server_dialog_button (
_(
"Show Video Server Startup Dialog"))
905 , _video_advanced_setup_button (
_(
"Advanced Setup (remote video server)"))
907 Table* t = manage (
new Table (2, 6));
910 t->attach (_video_advanced_setup_button, 0, 2, 0, 1);
913 _(
"<b>When enabled</b> you can speficify a custom video-server URL and docroot. - Do not enable this option unless you know what you are doing."));
915 Label* l = manage (
new Label (
_(
"Video Server URL:")));
916 l->set_alignment (0, 0.5);
917 t->attach (*l, 0, 1, 1, 2, FILL);
918 t->attach (_video_server_url_entry, 1, 2, 1, 2, FILL);
920 _(
"Base URL of the video-server including http prefix. This is usually 'http://hostname.example.org:1554/' and defaults to 'http://localhost:1554/' when the video-server is running locally"));
922 l = manage (
new Label (
_(
"Video Folder:")));
923 l->set_alignment (0, 0.5);
924 t->attach (*l, 0, 1, 2, 3, FILL);
925 t->attach (_video_server_docroot_entry, 1, 2, 2, 3);
927 _(
"Local path to the video-server document-root. Only files below this directory will be accessible by the video-server. If the server run on a remote host, it should point to a network mounted folder of the server's docroot or be left empty if it is unvailable. It is used for the local video-monitor and file-browsing when opening/adding a video file."));
931 t->attach (_show_video_export_info_button, 0, 2, 4, 5);
934 _(
"<b>When enabled</b> an information window with details is displayed before the video-export dialog."));
936 t->attach (_show_video_server_dialog_button, 0, 2, 5, 6);
939 _(
"<b>When enabled</b> the video server is never launched automatically without confirmation"));
946 _box->pack_start (*t,
true,
true);
951 _rc_config->set_video_server_url (_video_server_url_entry.get_text());
956 _rc_config->set_video_server_docroot (_video_server_docroot_entry.get_text());
961 bool const x = _show_video_export_info_button.get_active ();
962 _rc_config->set_show_video_export_info (x);
967 bool const x = _show_video_server_dialog_button.get_active ();
968 _rc_config->set_show_video_server_dialog (x);
973 bool const x = _video_advanced_setup_button.get_active ();
974 _rc_config->set_video_advanced_setup(x);
979 if (p ==
"video-server-url") {
980 _video_server_url_entry.set_text (_rc_config->get_video_server_url());
981 }
else if (p ==
"video-server-docroot") {
982 _video_server_docroot_entry.set_text (_rc_config->get_video_server_docroot());
983 }
else if (p ==
"show-video-export-info") {
984 bool const x = _rc_config->get_show_video_export_info();
985 _show_video_export_info_button.set_active (x);
986 }
else if (p ==
"show-video-server-dialog") {
987 bool const x = _rc_config->get_show_video_server_dialog();
988 _show_video_server_dialog_button.set_active (x);
989 }
else if (p ==
"video-advanced-setup") {
990 bool const x = _rc_config->get_video_advanced_setup();
991 _video_advanced_setup_button.set_active(x);
992 _video_server_docroot_entry.set_sensitive(x);
993 _video_server_url_entry.set_sensitive(x);
999 parameter_changed (
"video-server-url");
1000 parameter_changed (
"video-server-docroot");
1001 parameter_changed (
"video-monitor-setup-dialog");
1002 parameter_changed (
"show-video-export-info");
1003 parameter_changed (
"show-video-server-dialog");
1004 parameter_changed (
"video-advanced-setup");
1022 , _display_plugin_scan_progress (
_(
"Always Display Plugin Scan Progress"))
1023 , _discover_vst_on_start (
_(
"Scan for [new] VST Plugins on Application Start"))
1024 , _discover_au_on_start (
_(
"Scan for AudioUnit Plugins on Application Start"))
1025 , _timeout_adjustment (0, 0, 3000, 50, 50)
1026 , _timeout_slider (_timeout_adjustment)
1029 std::stringstream ss;
1030 Table* t = manage (
new Table (2, 6));
1031 t->set_spacings (4);
1035 ss <<
"<b>" <<
_(
"General") <<
"</b>";
1037 l->set_use_markup (
true);
1038 t->attach (*manage (
new Label (
"")), 0, 3, n, n+1, FILL | EXPAND); ++n;
1039 t->attach (*l, 0, 2, n, n+1, FILL | EXPAND); ++n;
1041 b = manage (
new Button (
_(
"Scan for Plugins")));
1043 t->attach (*b, 0, 2, n, n+1, FILL); ++n;
1045 t->attach (_display_plugin_scan_progress, 0, 2, n, n+1); ++n;
1048 _(
"<b>When enabled</b> a popup window showing plugin scan progress is displayed for indexing (cache load) and discovery (detect new plugins)"));
1050 #if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT)
1051 _timeout_slider.set_digits (0);
1055 _(
"Specify the default timeout for plugin instantiation in 1/10 seconds. Plugins that require more time to load will be blacklisted. A value of 0 disables the timeout."));
1058 HBox* h = manage (
new HBox);
1060 h->pack_start (*l,
false,
false);
1061 h->pack_start (_timeout_slider,
true,
true);
1062 t->attach (*h, 0, 2, n, n+1); ++n;
1065 ss <<
"<b>" <<
_(
"VST") <<
"</b>";
1067 l->set_use_markup (
true);
1068 t->attach (*manage (
new Label (
"")), 0, 3, n, n+1, FILL | EXPAND); ++n;
1069 t->attach (*l, 0, 2, n, n+1, FILL | EXPAND); ++n;
1071 b = manage (
new Button (
_(
"Clear VST Cache")));
1073 t->attach (*b, 0, 1, n, n+1, FILL);
1075 b = manage (
new Button (
_(
"Clear VST Blacklist")));
1077 t->attach (*b, 1, 2, n, n+1, FILL);
1080 t->attach (_discover_vst_on_start, 0, 2, n, n+1); ++n;
1083 _(
"<b>When enabled</b> new VST plugins are searched, tested and added to the cache index on application start. When disabled new plugins will only be available after triggering a 'Scan' manually"));
1085 #ifdef LXVST_SUPPORT
1087 b = manage (
new Button (
_(
"Edit")));
1089 t->attach (*b, 1, 2, n, n+1, FILL); ++n;
1092 #ifdef WINDOWS_VST_SUPPORT
1094 b = manage (
new Button (
_(
"Edit")));
1096 t->attach (*b, 1, 2, n, n+1, FILL); ++n;
1100 #ifdef AUDIOUNIT_SUPPORT
1102 ss <<
"<b>" <<
_(
"Audio Unit") <<
"</b>";
1104 l->set_use_markup (
true);
1105 t->attach (*manage (
new Label (
"")), 0, 3, n, n+1, FILL | EXPAND); ++n;
1106 t->attach (*l, 0, 2, n, n+1, FILL | EXPAND); ++n;
1108 t->attach (_discover_au_on_start, 0, 2, n, n+1); ++n;
1111 _(
"<b>When enabled</b> Audio Unit Plugins are discovered on application start. When disabled AU plugins will only be available after triggering a 'Scan' manually. The first successful scan will enable AU auto-scan, Any crash during plugin discovery will disable it."));
1114 b = manage (
new Button (
_(
"Clear AU Cache")));
1116 t->attach (*b, 0, 1, n, n+1, FILL);
1118 b = manage (
new Button (
_(
"Clear AU Blacklist")));
1120 t->attach (*b, 1, 2, n, n+1, FILL);
1124 _box->pack_start (*t,
true,
true);
1128 if (p ==
"show-plugin-scan-window") {
1129 bool const x = _ui_config->get_show_plugin_scan_window();
1130 _display_plugin_scan_progress.set_active (x);
1132 else if (p ==
"discover-vst-on-start") {
1133 bool const x = _rc_config->get_discover_vst_on_start();
1134 _discover_vst_on_start.set_active (x);
1136 else if (p ==
"vst-scan-timeout") {
1137 int const x = _rc_config->get_vst_scan_timeout();
1138 _timeout_adjustment.set_value (x);
1140 else if (p ==
"discover-audio-units") {
1141 bool const x = _rc_config->get_discover_audio_units();
1142 _discover_au_on_start.set_active (x);
1147 parameter_changed (
"show-plugin-scan-window");
1148 parameter_changed (
"discover-vst-on-start");
1149 parameter_changed (
"vst-scan-timeout");
1150 parameter_changed (
"discover-audio-units");
1163 bool const x = _display_plugin_scan_progress.get_active();
1164 _ui_config->set_show_plugin_scan_window(x);
1168 bool const x = _discover_vst_on_start.get_active();
1169 _rc_config->set_discover_vst_on_start(x);
1173 bool const x = _discover_au_on_start.get_active();
1174 _rc_config->set_discover_audio_units(x);
1178 int x = floor(_timeout_adjustment.get_value());
1179 _rc_config->set_vst_scan_timeout(x);
1183 PluginManager::instance().clear_vst_cache();
1187 PluginManager::instance().clear_vst_blacklist();
1191 PluginManager::instance().clear_au_cache();
1195 PluginManager::instance().clear_au_blacklist();
1201 _(
"Set Windows VST Search Path"),
1202 _rc_config->get_plugin_path_vst(),
1203 PluginManager::instance().get_default_windows_vst_path()
1205 ResponseType r = (ResponseType) pd->run ();
1207 if (r == RESPONSE_ACCEPT) {
1216 _(
"Set Linux VST Search Path"),
1217 _rc_config->get_plugin_path_lxvst(),
1218 PluginManager::instance().get_default_lxvst_path()
1220 ResponseType r = (ResponseType) pd->run ();
1222 if (r == RESPONSE_ACCEPT) {
1229 PluginManager::instance().refresh();
1252 :
Option (g->get_state_name(), name)
1254 , _visibility_group (g)
1259 _visibility_group->VisibilityChanged.connect_same_thread (
1267 _visibility_group->set_state (_get ());
1272 _heading.add_to_page (p);
1273 add_widget_to_page (p, _visibility_group->list_view ());
1276 Gtk::Widget&
tip_widget() {
return *_visibility_group->list_view (); }
1284 _set (_visibility_group->get_state_value ());
1290 sigc::slot<bool, std::string>
_set;
1300 , _mixer_strip_visibility (
"mixer-element-visibility")
1313 _(
"Signal processing uses"),
1314 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_processor_usage),
1315 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_processor_usage)
1318 procs->
add (-1,
_(
"all but one processor"));
1319 procs->
add (0,
_(
"all available processors"));
1321 for (uint32_t i = 1; i <= hwcpus; ++i) {
1325 procs->
set_note (
string_compose (
_(
"This setting will only take effect when %1 is restarted."), PROGRAM_NAME));
1336 "verify-remove-last-capture",
1337 _(
"Verify removal of last capture"),
1338 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_verify_remove_last_capture),
1339 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_verify_remove_last_capture)
1344 "periodic-safety-backups",
1345 _(
"Make periodic backups of the session file"),
1346 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_periodic_safety_backups),
1347 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_periodic_safety_backups)
1354 "only-copy-imported-files",
1355 _(
"Always copy imported files"),
1356 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_only_copy_imported_files),
1357 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_only_copy_imported_files)
1361 X_(
"default-session-parent-dir"),
1362 _(
"Default folder for new sessions:"),
1363 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_default_session_parent_dir),
1364 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_default_session_parent_dir)
1369 "max-recent-sessions",
1370 _(
"Maximum number of recent sessions"),
1371 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_max_recent_sessions),
1372 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_max_recent_sessions),
1383 _(
"Click gain level"),
1384 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_click_gain),
1385 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_click_gain)
1392 "automation-thinning-factor",
1393 _(
"Thinning factor (larger value => less data)"),
1394 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_automation_thinning_factor),
1395 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_automation_thinning_factor),
1401 "automation-interval-msecs",
1402 _(
"Automation sampling interval (milliseconds)"),
1403 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_automation_interval_msecs),
1404 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_automation_interval_msecs),
1413 "latched-record-enable",
1414 _(
"Keep record-enable engaged on stop"),
1415 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_latched_record_enable),
1416 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_latched_record_enable)
1423 _(
"Play loop is a transport mode"),
1424 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_loop_is_mode),
1425 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_loop_is_mode)
1428 (
_(
"<b>When enabled</b> the loop button does not start playback but forces playback to always play the loop\n\n"
1429 "<b>When disabled</b> the loop button starts playing the loop, but stop then cancels loop playback")));
1433 "stop-recording-on-xrun",
1434 _(
"Stop recording when an xrun occurs"),
1435 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_stop_recording_on_xrun),
1436 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_stop_recording_on_xrun)
1439 string_compose (
_(
"<b>When enabled</b> %1 will stop recording if an over- or underrun is detected by the audio engine"),
1444 "create-xrun-marker",
1445 _(
"Create markers where xruns occur"),
1446 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_create_xrun_marker),
1447 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_create_xrun_marker)
1453 "stop-at-session-end",
1454 _(
"Stop at the end of the session"),
1455 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_stop_at_session_end),
1456 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_stop_at_session_end)
1459 string_compose (
_(
"<b>When enabled</b> if %1 is <b>not recording</b>, it will stop the transport "
1460 "when it reaches the current session end marker\n\n"
1461 "<b>When disabled</b> %1 will continue to roll past the session end marker at all times"),
1467 _(
"Do seamless looping (not possible when slaved to MTC, LTC etc)"),
1468 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_seamless_loop),
1469 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_seamless_loop)
1472 string_compose (
_(
"<b>When enabled</b> this will loop by reading ahead and wrapping around at the loop point, "
1473 "preventing any need to do a transport locate at the end of the loop\n\n"
1474 "<b>When disabled</b> looping is done by locating back to the start of the loop when %1 reaches the end "
1475 "which will often cause a small click or delay"), PROGRAM_NAME));
1479 "disable-disarm-during-roll",
1480 _(
"Disable per-track record disarm while rolling"),
1481 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_disable_disarm_during_roll),
1482 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_disable_disarm_during_roll)
1489 _(
"12dB gain reduction during fast-forward and fast-rewind"),
1490 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_quieten_at_speed),
1491 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_quieten_at_speed)
1494 "that occurs when fast-forwarding or rewinding through some kinds of audio"));
1501 _(
"External timecode source"),
1502 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_sync_source),
1503 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_sync_source)
1509 "timecode-sync-frame-rate",
1510 _(
"Match session video frame rate to external timecode"),
1511 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_timecode_sync_frame_rate),
1512 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_timecode_sync_frame_rate)
1516 string_compose (
_(
"This option controls the value of the video frame rate <i>while chasing</i> an external timecode source.\n\n"
1517 "<b>When enabled</b> the session video frame rate will be changed to match that of the selected external timecode source.\n\n"
1518 "<b>When disabled</b> the session video frame rate will not be changed to match that of the selected external timecode source."
1519 "Instead the frame rate indication in the main clock will flash red and %1 will convert between the external "
1520 "timecode standard and the session standard."), PROGRAM_NAME));
1525 "timecode-source-is-synced",
1526 _(
"Sync-lock timecode to clock (disable drift compensation)"),
1527 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_timecode_source_is_synced),
1528 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_timecode_source_is_synced)
1532 string_compose (
_(
"<b>When enabled</b> %1 will never varispeed when slaved to external timecode. "
1533 "Sync Lock indicates that the selected external timecode source shares clock-sync "
1534 "(Black & Burst, Wordclock, etc) with the audio interface. "
1535 "This option disables drift compensation. The transport speed is fixed at 1.0. "
1536 "Vari-speed LTC will be ignored and cause drift."
1538 "<b>When disabled</b> %1 will compensate for potential drift, regardless if the "
1539 "timecode sources shares clock sync."
1546 "timecode-source-2997",
1547 _(
"Lock to 29.9700 fps instead of 30000/1001"),
1548 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_timecode_source_2997),
1549 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_timecode_source_2997)
1553 _(
"<b>When enabled</b> the external timecode source is assumed to use 29.97 fps instead of 30000/1001.\n"
1554 "SMPTE 12M-1999 specifies 29.97df as 30000/1001. The spec further mentions that "
1555 "drop-frame timecode has an accumulated error of -86ms over a 24-hour period.\n"
1556 "Drop-frame timecode would compensate exactly for a NTSC color frame rate of 30 * 0.9990 (ie 29.970000). "
1557 "That is not the actual rate. However, some vendors use that rate - despite it being against the specs - "
1558 "because the variant of using exactly 29.97 fps has zero timecode drift.\n"
1567 _(
"LTC incoming port"),
1568 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_ltc_source_port),
1569 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_ltc_source_port)
1572 vector<string> physical_inputs;
1573 physical_inputs.push_back (
_(
"None"));
1574 AudioEngine::instance()->get_physical_inputs (DataType::AUDIO, physical_inputs);
1587 _(
"Enable LTC generator"),
1588 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_send_ltc),
1589 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_send_ltc)
1593 "ltc-send-continuously",
1594 _(
"Send LTC while stopped"),
1595 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_ltc_send_continuously),
1596 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_ltc_send_continuously)
1600 string_compose (
_(
"<b>When enabled</b> %1 will continue to send LTC information even when the transport (playhead) is not moving"), PROGRAM_NAME));
1610 _(
"Specify the Peak Volume of the generated LTC signal in dbFS. A good value is 0dBu ^= -18dbFS in an EBU calibrated system"));
1621 "draggable-playhead",
1622 _(
"Allow dragging of playhead"),
1629 "automation-follows-regions",
1630 _(
"Move relevant automation when audio regions are moved"),
1631 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_automation_follows_regions),
1632 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_automation_follows_regions)
1637 "show-track-meters",
1638 _(
"Show meters on tracks in the editor"),
1639 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_show_track_meters),
1640 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_show_track_meters)
1645 "show-editor-meter",
1646 _(
"Display master-meter in the toolbar"),
1647 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_show_editor_meter),
1648 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_show_editor_meter)
1652 "default-fade-shape",
1653 _(
"Default fade shape"),
1655 &RCConfiguration::get_default_fade_shape),
1657 &RCConfiguration::set_default_fade_shape)
1661 _(
"Linear (for highly correlated material)"));
1671 "use-overlap-equivalency",
1672 _(
"Regions in active edit groups are edited together"),
1673 _(
"whenever they overlap in time"),
1674 _(
"only if they have identical length, position and origin"),
1675 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_use_overlap_equivalency),
1676 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_use_overlap_equivalency)
1683 _(
"Layering model"),
1684 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_layer_model),
1685 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_layer_model)
1694 "rubberbanding-snaps-to-grid",
1695 _(
"Make rubberband selection rectangle snap to the grid"),
1696 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_rubberbanding_snaps_to_grid),
1697 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_rubberbanding_snaps_to_grid)
1703 _(
"Show waveforms in regions"),
1704 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_show_waveforms),
1705 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_show_waveforms)
1710 "show-region-gain-envelopes",
1711 _(
"Show gain envelopes in audio regions"),
1713 _(
"only in region gain mode"),
1714 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_show_region_gain),
1715 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_show_region_gain)
1720 _(
"Waveform scale"),
1721 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_waveform_scale),
1722 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_waveform_scale)
1732 _(
"Waveform shape"),
1733 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_waveform_shape),
1734 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_waveform_shape)
1746 "show-waveforms-while-recording",
1747 _(
"Show waveforms for audio while it is being recorded"),
1748 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_show_waveforms_while_recording),
1749 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_show_waveforms_while_recording)
1755 _(
"Show zoom toolbar"),
1756 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_show_zoom_tools),
1757 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_show_zoom_tools)
1762 "update-editor-during-summary-drag",
1763 _(
"Update editor window during drags of the summary"),
1764 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_update_editor_during_summary_drag),
1765 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_update_editor_during_summary_drag)
1770 _(
"Name new markers"),
1771 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_name_new_markers),
1772 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_name_new_markers)
1777 "\n\nYou can always rename markers by right-clicking on them"));
1781 "autoscroll-editor",
1782 _(
"Auto-scroll editor window when dragging near its edges"),
1783 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_autoscroll_editor),
1784 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_autoscroll_editor)
1788 "region-selection-after-split",
1789 _(
"After splitting selected regions, select"),
1790 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_region_selection_after_split),
1791 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_region_selection_after_split));
1816 _(
"Record monitoring handled by"),
1817 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_monitoring_model),
1818 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_monitoring_model)
1821 if (AudioEngine::instance()->port_engine().can_monitor_input()) {
1825 string prog (PROGRAM_NAME);
1826 boost::algorithm::to_lower (prog);
1834 "tape-machine-mode",
1835 _(
"Tape machine mode"),
1836 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_tape_machine_mode),
1837 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_tape_machine_mode)
1844 "auto-connect-standard-busses",
1845 _(
"Auto-connect master/monitor busses"),
1846 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_auto_connect_standard_busses),
1847 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_auto_connect_standard_busses)
1851 "input-auto-connect",
1852 _(
"Connect track inputs"),
1853 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_input_auto_connect),
1854 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_input_auto_connect)
1863 "output-auto-connect",
1864 _(
"Connect track and bus outputs"),
1865 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_output_auto_connect),
1866 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_output_auto_connect)
1879 "denormal-protection",
1880 _(
"Use DC bias to protect against denormals"),
1881 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_denormal_protection),
1882 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_denormal_protection)
1887 _(
"Processor handling"),
1888 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_denormal_model),
1889 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_denormal_model)
1928 "plugins-stop-with-transport",
1929 _(
"Silence plugins when the transport is stopped"),
1930 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_plugins_stop_with_transport),
1931 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_plugins_stop_with_transport)
1936 "new-plugins-active",
1937 _(
"Make new plugins active"),
1938 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_new_plugins_active),
1939 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_new_plugins_active)
1946 "auto-analyse-audio",
1947 _(
"Enable automatic analysis of audio"),
1948 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_auto_analyse_audio),
1949 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_auto_analyse_audio)
1954 "replicate-missing-region-channels",
1955 _(
"Replicate missing region channels"),
1956 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_replicate_missing_region_channels),
1957 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_replicate_missing_region_channels)
1967 _(
"Solo-in-place mute cut (dB)"),
1968 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_solo_mute_gain),
1969 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_solo_mute_gain)
1973 "solo-control-is-listen-control",
1974 _(
"Solo controls are Listen controls"),
1975 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_solo_control_is_listen_control),
1976 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_solo_control_is_listen_control)
1983 _(
"Listen Position"),
1984 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_listen_position),
1985 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_listen_position)
1995 _(
"PFL signals come from"),
1996 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_pfl_position),
1997 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_pfl_position)
2007 _(
"AFL signals come from"),
2008 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_afl_position),
2009 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_afl_position)
2022 _(
"Exclusive solo"),
2023 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_exclusive_solo),
2024 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_exclusive_solo)
2030 _(
"Show solo muting"),
2031 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_show_solo_mutes),
2032 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_show_solo_mutes)
2037 "solo-mute-override",
2038 _(
"Soloing overrides muting"),
2039 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_solo_mute_override),
2040 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_solo_mute_override)
2047 "mute-affects-pre-fader",
2048 _(
"Mute affects pre-fader sends"),
2049 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_mute_affects_pre_fader),
2050 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_mute_affects_pre_fader)
2055 "mute-affects-post-fader",
2056 _(
"Mute affects post-fader sends"),
2057 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_mute_affects_post_fader),
2058 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_mute_affects_post_fader)
2063 "mute-affects-control-outs",
2064 _(
"Mute affects control outputs"),
2065 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_mute_affects_control_outs),
2066 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_mute_affects_control_outs)
2071 "mute-affects-main-outs",
2072 _(
"Mute affects main outputs"),
2073 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_mute_affects_main_outs),
2074 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_mute_affects_main_outs)
2081 "link-send-and-route-panner",
2082 _(
"Link panners of Aux and External Sends with main panner by default"),
2083 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_link_send_and_route_panner),
2084 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_link_send_and_route_panner)
2090 _(
"MIDI read-ahead time (seconds)"),
2091 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_midi_readahead),
2092 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_midi_readahead),
2100 _(
"Send MIDI Clock"),
2101 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_send_midi_clock),
2102 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_send_midi_clock)
2108 _(
"Send MIDI Time Code"),
2109 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_send_mtc),
2110 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_send_mtc)
2115 "mtc-qf-speed-tolerance",
2116 _(
"Percentage either side of normal transport speed to transmit MTC"),
2117 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_mtc_qf_speed_tolerance),
2118 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_mtc_qf_speed_tolerance),
2125 _(
"Obey MIDI Machine Control commands"),
2126 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_mmc_control),
2127 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_mmc_control)
2133 _(
"Send MIDI Machine Control commands"),
2134 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_send_mmc),
2135 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_send_mmc)
2141 _(
"Send MIDI control feedback"),
2142 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_midi_feedback),
2143 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_midi_feedback)
2148 "mmc-receive-device-id",
2149 _(
"Inbound MMC device ID"),
2150 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_mmc_receive_device_id),
2151 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_mmc_receive_device_id),
2157 "mmc-send-device-id",
2158 _(
"Outbound MMC device ID"),
2159 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_mmc_send_device_id),
2160 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_mmc_send_device_id),
2166 "initial-program-change",
2167 _(
"Initial program change"),
2168 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_initial_program_change),
2169 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_initial_program_change),
2175 "display-first-midi-bank-as-zero",
2176 _(
"Display first MIDI bank/program as 0"),
2177 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_first_midi_bank_is_zero),
2178 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_first_midi_bank_is_zero)
2183 "never-display-periodic-midi",
2184 _(
"Never display periodic MIDI messages (MTC, MIDI Clock)"),
2185 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_never_display_periodic_midi),
2186 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_never_display_periodic_midi)
2192 _(
"Sound MIDI notes as they are selected"),
2193 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_sound_midi_notes),
2194 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_sound_midi_notes)
2200 "midi-audition-synth-uri",
2201 _(
"Midi Audition Synth (LV2)"),
2202 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_midi_audition_synth_uri),
2203 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_midi_audition_synth_uri)
2206 audition_synth->
add(
X_(
""),
_(
"None"));
2212 for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
2213 if (manager.
get_status (*i) == PluginManager::Hidden)
continue;
2214 if (!(*i)->is_instrument())
continue;
2216 audition_synth->
add((*i)->unique_id, (*i)->name);
2225 #ifdef PLATFORM_WINDOWS
2228 getenv (
"ARDOUR_BUNDLED")
2234 "enable-translation",
2236 " <i>(requires a restart of %1 to take effect)</i>\n"
2237 " <i>(if available for your language preferences)</i>"), PROGRAM_NAME),
2252 _(
"Control surface remote ID"),
2253 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_remote_model),
2254 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_remote_model)
2265 #if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT || defined AUDIOUNIT_SUPPORT)
2275 _(
"Graphically indicate mouse pointer hovering over various widgets"),
2276 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_widget_prelight),
2277 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_widget_prelight)
2280 #ifdef TOOLTIPS_GOT_FIXED
2284 _(
"Show tooltips if mouse hovers over a control"),
2285 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_use_tooltips),
2286 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_use_tooltips)
2292 "show-name-highlight",
2293 _(
"Use name highlight bars in region displays (requires a restart)"),
2294 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_show_name_highlight),
2295 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_show_name_highlight)
2305 "super-rapid-clock-update",
2306 _(
"update transport clock display at FPS instead of every 100ms"),
2307 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_super_rapid_clock_update),
2308 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_super_rapid_clock_update)
2313 Gtk::Adjustment *lts = manage (
new Gtk::Adjustment(0, 0, 1000, 1, 10));
2315 _(
"Lock timeout (seconds)"),
2317 sigc::mem_fun (*
ARDOUR_UI::config(), &UIConfiguration::get_lock_gui_after_seconds),
2318 sigc::mem_fun (*
ARDOUR_UI::config(), &UIConfiguration::set_lock_gui_after_seconds)
2320 slts->
scale().set_digits (0);
2323 _(
"Lock GUI after this many idle seconds (zero to never lock)"));
2337 S_(
"Preferences|GUI"),
2341 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_mixer_strip_visibility),
2342 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_mixer_strip_visibility)
2348 "default-narrow_ms",
2349 _(
"Use narrow strips in the mixer by default"),
2350 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_default_narrow_ms),
2351 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_default_narrow_ms)
2358 _(
"Peak hold time"),
2359 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_meter_hold),
2360 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_meter_hold)
2373 sigc::mem_fun (*
_rc_config, &RCConfiguration::get_meter_falloff),
2374 sigc::mem_fun (*
_rc_config, &RCConfiguration::set_meter_falloff)
2390 "meter-line-up-level",
2391 _(
"Meter line-up level; 0dBu"),
2392 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_meter_line_up_level),
2393 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_meter_line_up_level)
2406 "meter-line-up-din",
2407 _(
"IEC1/DIN Meter line-up level; 0dBu"),
2408 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_meter_line_up_din),
2409 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_meter_line_up_din)
2422 "meter-vu-standard",
2423 _(
"VU Meter standard"),
2424 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_meter_vu_standard),
2425 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_meter_vu_standard)
2435 Gtk::Adjustment *mpk = manage (
new Gtk::Adjustment(0, -10, 0, .1, .1));
2437 _(
"Peak threshold [dBFS]"),
2439 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_meter_peak),
2440 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_meter_peak)
2445 _(
"Specify the audio signal level in dbFS at and above which the meter-peak indicator will flash red."));
2452 _(
"LED meter style"),
2453 sigc::mem_fun (*
_ui_config, &UIConfiguration::get_meter_style_led),
2454 sigc::mem_fun (*
_ui_config, &UIConfiguration::set_meter_style_led)
2468 if (p ==
"use-monitor-bus") {
2469 bool const s =
Config->get_use_monitor_bus ();
2472 Config->set_solo_control_is_listen_control (
false);
2476 }
else if (p ==
"sync-source") {
2481 switch(
Config->get_sync_source()) {
2494 }
else if (p ==
"send-ltc") {
2495 bool const s =
Config->get_send_ltc ();
2512 for (vector<SyncSource>::iterator i = sync_opts.begin(); i != sync_opts.end(); ++i) {
2516 if (sync_opts.empty()) {
2519 if (std::find(sync_opts.begin(), sync_opts.end(),
_rc_config->get_sync_source()) == sync_opts.end()) {
2520 _rc_config->set_sync_source(sync_opts.front());
CheckButton _display_plugin_scan_progress
void set_note(std::string const &)
void show_video_export_info_toggled()
void parameter_changed(std::string const &)
void edit_button_changed()
#define METER_FALLOFF_FAST
PluginOptions(RCConfiguration *c, UIConfiguration *uic)
Adjustment _capture_adjustment
ControlSurfacesModelColumns _model
void click_emphasis_changed()
void set_state_from_config()
ClipLevelOptions(UIConfiguration *c)
void set_popdown_strings(const std::vector< std::string > &strings)
void discover_vst_on_start_toggled()
RCConfiguration * _rc_config
void click_browse_clicked()
PBD::Signal1< void, ControlProtocolInfo * > ProtocolStatusChange
void set_state_from_config()
void display_plugin_scan_progress_toggled()
void set_sensitive(bool yn)
void add_page(std::string const &, Gtk::Widget &page_widget)
std::string get_filename()
void parameter_changed(string const &p)
void parameter_changed(std::string const &)
BoolOption * _sync_framerate
ComboStringOption * _ltc_port
void insert_note_modifier_chosen()
void edit_vst_path_clicked()
Gtk::Adjustment * _ltc_volume_adjustment
SpinButton _save_undo_spin
ControlProtocol * protocol
bool has_flush_to_zero() const
LIBARDOUR_API const char * sync_source_to_string(ARDOUR::SyncSource src, bool sh=false)
void snap_modifier_chosen()
void parameter_changed(string const &p)
void click_emphasis_browse_clicked()
void set_state_from_config()
void edit_lxvst_path_clicked()
LIBARDOUR_API bool translations_are_enabled()
std::list< ControlProtocolInfo * > control_protocol_info
Adjustment _clip_level_adjustment
void video_advanced_setup_toggled()
VisibilityGroup _mixer_strip_visibility
BoolOption * _sync_genlock
void edit_modifier_chosen()
RCConfiguration * _rc_config
CheckButton _limit_undo_button
SessionConfiguration config
Glib::RefPtr< ListStore > _store
LIBGTKMM2EXT_API void set_popdown_strings(Gtk::ComboBoxText &, const std::vector< std::string > &)
void click_chosen(string const &path)
PBD::ScopedConnection _visibility_group_connection
OptionEditorHeading _heading
ARDOUR::PluginInfoList & lv2_plugin_info()
RCConfiguration * _rc_config
Adjustment _delete_button_adjustment
BoolOption * _sync_source_2997
void set_state_from_config()
#define METER_FALLOFF_MODERATE
void set_sensitive(bool yn)
virtual void parameter_changed(std::string const &)
VideoTimelineOptions(RCConfiguration *c)
ComboOption< ARDOUR::ListenPosition > * _listen_position
SpinButton _edit_button_spin
FontScalingOptions(UIConfiguration *uic)
Entry _video_server_url_entry
std::string get_serialized_paths()
Entry _click_emphasis_path_entry
void clear_au_blacklist_clicked()
VisibilityOption(string name, VisibilityGroup *g, sigc::slot< string > get, sigc::slot< bool, string > set)
VisibilityGroup * _visibility_group
void edit_clicked(GdkEventButton *ev)
we leave monitoring to the audio hardware
void delete_button_changed()
LIBARDOUR_API RCConfiguration * Config
CheckButton _discover_au_on_start
void set_state_from_config()
Adjustment _timeout_adjustment
#define METER_FALLOFF_OFF
uint32_t _ignore_view_change
SpinButton _delete_button_spin
void set_state_from_config()
UIConfiguration * _ui_config
void view_changed(TreeModel::Path const &, TreeModel::iterator const &i)
CheckButton _save_undo_button
Gtk::Widget & tip_widget()
void parameter_changed(string const &p)
#define METER_FALLOFF_FASTEST
void add_option(std::string const &, OptionEditorComponent *)
void parameter_changed(string const &)
Adjustment _insert_note_button_adjustment
void clear_au_cache_clicked()
void click_emphasis_chosen(string const &path)
HScale _clip_level_slider
ComboBoxText _insert_note_modifier_combo
void add_to_page(OptionEditorPage *p)
LIBGTKMM2EXT_API Gtk::Label * left_aligned_label(std::string const &)
ComboBoxText _delete_modifier_combo
void set_state_from_config()
void show_video_server_dialog_toggled()
TreeModelColumn< bool > feedback
static const struct @24 modifiers[]
UIConfiguration * _ui_config
void clip_level_changed()
void add(T e, std::string const &o)
uint32_t hardware_concurrency()
#define METER_FALLOFF_SLOW
ComboBoxText _snap_modifier_combo
void parameter_changed(string const &p)
void clear_vst_cache_clicked()
void set_tip(Gtk::Widget &w, const gchar *tip)
#define METER_FALLOFF_SLOWISH
ComboOption< ARDOUR::SyncSource > * _sync_source
void insert_note_button_changed()
Adjustment _dpi_adjustment
ComboBoxText _keyboard_layout_selector
void populate_sync_options()
Adjustment _playback_adjustment
#define METER_FALLOFF_FASTER
LIBARDOUR_API std::vector< SyncSource > get_available_sync_options()
RCConfiguration * _rc_config
#define METER_FALLOFF_SLOWEST
void server_docroot_changed()
Gtk::Widget & tip_widget()
Entry _video_server_docroot_entry
void server_url_changed()
CheckButton _show_video_export_info_button
void limit_undo_changed()
SpinButton _limit_undo_spin
void discover_au_on_start_toggled()
void set_sensitive(bool yn)
LIBARDOUR_API bool set_translations_enabled(bool)
UIConfiguration * _ui_config
ControlSurfacesModelColumns()
TreeModelColumn< ControlProtocolInfo * > protocol_info
static UIConfiguration * config()
void add(Gtk::Widget *, std::string const &, std::string const &, bool visible=false, boost::function< boost::optional< bool >()>=0)
UIConfiguration * _ui_config
CheckButton _video_advanced_setup_button
void set_state_from_config()
void clear_vst_blacklist_clicked()
void set_state_from_config()
void ltc_generator_volume_changed()
UndoOptions(RCConfiguration *c)
SpinButton _insert_note_button_spin
TreeModelColumn< bool > enabled
RCConfiguration * _rc_config
CheckButton _show_video_server_dialog_button
PBD::ScopedConnection protocol_status_connection
ComboBoxText _edit_modifier_combo
void set_state_from_config()
Adjustment _edit_button_adjustment
void delete_modifier_chosen()
Gtk::Widget & tip_widget()
ARDOUR::RCConfiguration * _rc_config
std::list< PluginInfoPtr > PluginInfoList
ControlSurfacesOptions(Gtk::Window &parent)
TreeModelColumn< string > name
void parameter_changed(string const &p)
sigc::slot< bool, std::string > _set
#define MISSING_INVALIDATOR
void parameter_changed(string const &p)
void protocol_status_changed(ControlProtocolInfo *cpi)
HSliderOption * _ltc_volume_slider
ClickOptions(RCConfiguration *c, Gtk::Window *p)
#define METER_FALLOFF_MEDIUM
BufferingOptions(RCConfiguration *c)
ARDOUR::Session * _session
bool has_denormals_are_zero() const
Editing of options which are obtained from and written back to one of the .rc files.
BoolOption * _ltc_send_continuously
std::string string_compose(const std::string &fmt, const T1 &o1)
void limit_undo_toggled()
void parameter_changed(string const &p)
PluginStatusType get_status(const PluginInfoPtr &)
BoolOption * _solo_control_is_listen_control
Gtk::Widget & tip_widget()
CheckButton _discover_vst_on_start
sigc::slot< std::string > _get