diff --git a/gtk2_ardour/icons/preference_general_preferences_dropdown.png b/gtk2_ardour/icons/preference_general_preferences_dropdown.png new file mode 100644 index 0000000000..006a677209 Binary files /dev/null and b/gtk2_ardour/icons/preference_general_preferences_dropdown.png differ diff --git a/gtk2_ardour/icons/preference_general_preferences_dropdown_active.png b/gtk2_ardour/icons/preference_general_preferences_dropdown_active.png new file mode 100644 index 0000000000..b28303f04d Binary files /dev/null and b/gtk2_ardour/icons/preference_general_preferences_dropdown_active.png differ diff --git a/gtk2_ardour/tracks_control_panel.cc b/gtk2_ardour/tracks_control_panel.cc index 382da766ac..967cf9181b 100644 --- a/gtk2_ardour/tracks_control_panel.cc +++ b/gtk2_ardour/tracks_control_panel.cc @@ -61,16 +61,25 @@ TracksControlPanel::TracksControlPanel () , _obey_mmc_commands_button (get_waves_button ("obey_mmc_commands_button")) , _send_mmc_commands_button (get_waves_button ("send_mmc_commands_button")) , _send_mmc_feedback_button (get_waves_button ("send_mmc_feedback_button")) + , _dc_bias_against_denormals_button (get_waves_button ("dc_bias_against_denormals_button")) + , _copy_imported_files_button (get_waves_button ("copy_imported_files_button")) , _inbound_mmc_device_spinbutton (get_spin_button ("inbound_mmc_device_spinbutton")) , _outbound_mmc_device_spinbutton (get_spin_button ("outbound_mmc_device_spinbutton")) + , _limit_undo_history_spinbutton (get_spin_button ("limit_undo_history_spinbutton")) + , _save_undo_history_spinbutton (get_spin_button ("save_undo_history_spinbutton")) , _file_type_dropdown (get_waves_dropdown ("file_type_dropdown")) , _bit_depth_dropdown (get_waves_dropdown ("bit_depth_dropdown")) , _frame_rate_dropdown (get_waves_dropdown ("frame_rate_dropdown")) - , _browse_button(get_waves_button("browse_default_folder")) - , _auto_lock_timer_dropdown(get_waves_dropdown("auto_lock_timer_dropdown")) - , _auto_save_timer_dropdown(get_waves_dropdown("auto_save_timer_dropdown")) - , _pre_record_buffer_dropdown(get_waves_dropdown("pre_record_buffer_dropdown")) - , _waveform_shape_dropdown(get_waves_dropdown ("waveform_shape_dropdown")) + , _browse_button (get_waves_button("browse_default_folder")) + , _auto_lock_timer_dropdown (get_waves_dropdown("auto_lock_timer_dropdown")) + , _auto_save_timer_dropdown (get_waves_dropdown("auto_save_timer_dropdown")) + , _pre_record_buffer_dropdown (get_waves_dropdown("pre_record_buffer_dropdown")) + , _waveform_shape_dropdown (get_waves_dropdown ("waveform_shape_dropdown")) + , _peak_hold_time_dropdown (get_waves_dropdown ("peak_hold_time_dropdown")) + , _dpm_fall_off_dropdown (get_waves_dropdown ("dpm_fall_off_dropdown")) + , _recording_seconds_dropdown (get_waves_dropdown ("recording_seconds_dropdown")) + , _playback_seconds_dropdown (get_waves_dropdown ("playback_seconds_dropdown")) + , _have_control (false) , _ignore_changes (0) { diff --git a/gtk2_ardour/tracks_control_panel.h b/gtk2_ardour/tracks_control_panel.h index 15f08ff450..3f1c5c84cd 100644 --- a/gtk2_ardour/tracks_control_panel.h +++ b/gtk2_ardour/tracks_control_panel.h @@ -74,8 +74,12 @@ class TracksControlPanel : public WavesDialog, public PBD::ScopedConnectionList WavesButton& _obey_mmc_commands_button; WavesButton& _send_mmc_commands_button; WavesButton& _send_mmc_feedback_button; + WavesButton& _dc_bias_against_denormals_button; + WavesButton& _copy_imported_files_button; Gtk::SpinButton& _inbound_mmc_device_spinbutton; Gtk::SpinButton& _outbound_mmc_device_spinbutton; + Gtk::SpinButton& _limit_undo_history_spinbutton; + Gtk::SpinButton& _save_undo_history_spinbutton; WavesDropdown& _engine_dropdown; WavesDropdown& _device_dropdown; WavesDropdown& _sample_rate_dropdown; @@ -87,6 +91,11 @@ class TracksControlPanel : public WavesDialog, public PBD::ScopedConnectionList WavesDropdown& _auto_save_timer_dropdown; WavesDropdown& _pre_record_buffer_dropdown; WavesDropdown& _waveform_shape_dropdown; + WavesDropdown& _peak_hold_time_dropdown; + WavesDropdown& _dpm_fall_off_dropdown; + WavesDropdown& _recording_seconds_dropdown; + WavesDropdown& _playback_seconds_dropdown; + Gtk::Label& _latency_label; Gtk::Label& _default_open_path; diff --git a/gtk2_ardour/tracks_control_panel.logic.cc b/gtk2_ardour/tracks_control_panel.logic.cc index 8c79862bf8..edd1d5482b 100644 --- a/gtk2_ardour/tracks_control_panel.logic.cc +++ b/gtk2_ardour/tracks_control_panel.logic.cc @@ -902,18 +902,101 @@ void TracksControlPanel::display_general_preferences () dbg_msg ("TracksControlPanel::display_general_preferences ():\nUnexpected WaveFormShape !"); break; } + + float peak_hold_time = Config->get_meter_hold (); + int selected_item = 0; + if (peak_hold_time <= (MeterHoldOff + 0.1)) { + selected_item = 0; + } else if (peak_hold_time <= (MeterHoldShort + 0.1)) { + selected_item = 1; + } else if (peak_hold_time <= (MeterHoldMedium + 0.1)) { + selected_item = 2; + } else if (peak_hold_time <= (MeterHoldLong + 0.1)) { + selected_item = 3; + } + _peak_hold_time_dropdown.set_selected_item (selected_item); + + float meter_falloff = Config->get_meter_falloff (); + selected_item = 0; + + if (meter_falloff <= (METER_FALLOFF_OFF + 0.1)) { + selected_item = 0; + } else if (meter_falloff <= (METER_FALLOFF_SLOWEST + 0.1)) { + selected_item = 1; + } else if (meter_falloff <= (METER_FALLOFF_SLOW + 0.1)) { + selected_item = 2; + } else if (meter_falloff <= (METER_FALLOFF_SLOWISH + 0.1)) { + selected_item = 3; + } else if (meter_falloff <= (METER_FALLOFF_MODERATE + 0.1)) { + selected_item = 4; + } else if (meter_falloff <= (METER_FALLOFF_MEDIUM + 0.1)) { + selected_item = 5; + } else if (meter_falloff <= (METER_FALLOFF_FAST + 0.1)) { + selected_item = 6; + } else if (meter_falloff <= (METER_FALLOFF_FASTER + 0.1)) { + selected_item = 7; + } else if (meter_falloff <= (METER_FALLOFF_FASTEST + 0.1)) { + selected_item = 8; + } + _dpm_fall_off_dropdown.set_selected_item (selected_item); + + + long period = Config->get_audio_capture_buffer_seconds (); + selected_item = 0; + + if (period <= 0.1) { + selected_item = 0; + } else if ((period <= 5.1)) { + selected_item = 1; + } else if ((period <= 10.1)) { + selected_item = 2; + } else if ((period <= 15.1)) { + selected_item = 3; + } else if ((period <= 30.1)) { + selected_item = 4; + } else if ((period <= 45.1)) { + selected_item = 5; + } else if ((period <= 60.1)) { + selected_item = 6; + } + _recording_seconds_dropdown.set_selected_item (selected_item); + + period = Config->get_audio_playback_buffer_seconds (); + selected_item = 0; + + if (period <= 0.1) { + selected_item = 0; + } else if ((period <= 5.1)) { + selected_item = 1; + } else if ((period <= 10.1)) { + selected_item = 2; + } else if ((period <= 15.1)) { + selected_item = 3; + } else if ((period <= 30.1)) { + selected_item = 4; + } else if ((period <= 45.1)) { + selected_item = 5; + } else if ((period <= 60.1)) { + selected_item = 6; + } + _playback_seconds_dropdown.set_selected_item (selected_item); + _obey_mmc_commands_button.set_active_state (Config->get_mmc_control () ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off); _send_mmc_commands_button.set_active_state (Config->get_send_mmc () ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off); _send_mmc_feedback_button.set_active_state (Config->get_midi_feedback () ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off); _inbound_mmc_device_spinbutton.set_value (Config->get_mmc_receive_device_id ()); _outbound_mmc_device_spinbutton.set_value (Config->get_mmc_send_device_id ()); + _limit_undo_history_spinbutton.set_value (Config->get_history_depth ()); + _save_undo_history_spinbutton.set_value (Config->get_saved_history_depth ()); + _copy_imported_files_button.set_active_state (Config->get_only_copy_imported_files () ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off); + _dc_bias_against_denormals_button.set_active_state (Config->get_denormal_protection () ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off); } void TracksControlPanel::save_general_preferences () { - int item = _waveform_shape_dropdown.get_selected_item (); - switch (item) { + int selected_item = _waveform_shape_dropdown.get_selected_item (); + switch (selected_item) { case 0: Config->set_waveform_shape (Traditional); break; @@ -925,11 +1008,70 @@ void TracksControlPanel::save_general_preferences () break; } + selected_item = _peak_hold_time_dropdown.get_selected_item (); + switch (selected_item) { + case 0: + Config->set_meter_hold (MeterHoldOff); + break; + case 1: + Config->set_meter_hold (MeterHoldShort); + break; + case 2: + Config->set_meter_hold (MeterHoldMedium); + break; + case 3: + Config->set_meter_hold (MeterHoldLong); + break; + default: + dbg_msg ("TracksControlPanel::general_preferences ():\nUnexpected peak hold time!"); + break; + } + + selected_item = _dpm_fall_off_dropdown.get_selected_item (); + switch (selected_item) { + case 0: + Config->set_meter_falloff (METER_FALLOFF_OFF); + break; + case 1: + Config->set_meter_falloff (METER_FALLOFF_SLOWEST); + break; + case 2: + Config->set_meter_falloff (METER_FALLOFF_SLOW); + break; + case 3: + Config->set_meter_falloff (METER_FALLOFF_SLOWISH); + break; + case 4: + Config->set_meter_falloff (METER_FALLOFF_MODERATE); + break; + case 5: + Config->set_meter_falloff (METER_FALLOFF_MEDIUM); + break; + case 6: + Config->set_meter_falloff (METER_FALLOFF_FAST); + break; + case 7: + Config->set_meter_falloff (METER_FALLOFF_FASTER); + break; + case 8: + Config->set_meter_falloff (METER_FALLOFF_FASTEST); + break; + default: + dbg_msg ("TracksControlPanel::general_preferences ():\nUnexpected meter fall off time!"); + break; + } + Config->set_mmc_control (_obey_mmc_commands_button.active_state () == Gtkmm2ext::ExplicitActive); Config->set_send_mmc (_send_mmc_commands_button.active_state () == Gtkmm2ext::ExplicitActive); Config->set_midi_feedback (_send_mmc_feedback_button.active_state () == Gtkmm2ext::ExplicitActive); + Config->set_only_copy_imported_files (_copy_imported_files_button.active_state () == Gtkmm2ext::ExplicitActive); + Config->set_denormal_protection (_dc_bias_against_denormals_button.active_state () == Gtkmm2ext::ExplicitActive); + Config->set_mmc_receive_device_id (_inbound_mmc_device_spinbutton.get_value ()); Config->set_mmc_send_device_id (_outbound_mmc_device_spinbutton.get_value ()); + Config->set_history_depth (_limit_undo_history_spinbutton.get_value ()); + Config->set_saved_history_depth (_save_undo_history_spinbutton.get_value ()); + Config->set_save_history (_save_undo_history_spinbutton.get_value () > 0); } @@ -1458,12 +1600,20 @@ TracksControlPanel::on_parameter_changed (const std::string& parameter_name) } else if (parameter_name == "default-session-parent-dir") { _default_open_path.set_text(Config->get_default_session_parent_dir()); } else if ((parameter_name == "meter-hold") || + (parameter_name == "meter-falloff") || (parameter_name == "waveform-shape") || (parameter_name == "mmc-control") || (parameter_name == "send-mmc") || (parameter_name == "midi-feedback") || (parameter_name == "mmc-receive-device-id") || - (parameter_name == "mmc-send-device-id")){ + (parameter_name == "mmc-send-device-id") || + (parameter_name == "playback-buffer-seconds") || + (parameter_name == "capture-buffer-seconds") || + (parameter_name == "only-copy-imported-files") || + (parameter_name == "denormal-protection") || + (parameter_name == "history-depth") || + (parameter_name == "save-history") || + (parameter_name == "save-history-depth")){ // This is not that correct. // We should update UI when the panel is being shown. // We should not react immediately. diff --git a/gtk2_ardour/ui/tracks_preferences.xml b/gtk2_ardour/ui/tracks_preferences.xml index d3ac2aac2a..0e065a3393 100644 --- a/gtk2_ardour/ui/tracks_preferences.xml +++ b/gtk2_ardour/ui/tracks_preferences.xml @@ -12,17 +12,24 @@ fgdisabled ="#959595"/>