2011-04-05 20:32:12 -04:00
/*
Copyright ( C ) 2001 - 2011 Paul Davis
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
2010-11-13 00:14:48 -05:00
# ifdef WAF_BUILD
# include "gtk2ardour-config.h"
# endif
2009-05-13 20:15:38 -04:00
# include <gtkmm/liststore.h>
# include <gtkmm/stock.h>
# include <gtkmm/scale.h>
# include <gtkmm2ext/utils.h>
2009-06-23 19:16:01 -04:00
# include <gtkmm2ext/slider_controller.h>
2012-10-10 19:28:07 -04:00
# include <gtkmm2ext/gtk_ui.h>
2010-05-05 11:47:51 -04:00
2009-05-13 20:15:38 -04:00
# include "pbd/fpu.h"
2010-06-24 10:13:45 -04:00
# include "pbd/cpus.h"
2010-05-05 11:47:51 -04:00
2009-05-13 20:15:38 -04:00
# include "midi++/manager.h"
2010-05-05 11:47:51 -04:00
# include "ardour/audioengine.h"
2009-06-23 19:16:01 -04:00
# include "ardour/dB.h"
2009-05-13 20:15:38 -04:00
# include "ardour/rc_configuration.h"
2009-05-16 10:50:10 -04:00
# include "ardour/control_protocol_manager.h"
# include "control_protocol/control_protocol.h"
2009-12-21 13:23:07 -05:00
2011-11-18 19:56:35 -05:00
# include "ardour_window.h"
# include "ardour_dialog.h"
2009-12-21 13:23:07 -05:00
# include "gui_thread.h"
2010-01-06 16:56:23 -05:00
# include "midi_tracer.h"
2009-05-13 20:15:38 -04:00
# include "rc_option_editor.h"
# include "utils.h"
# include "midi_port_dialog.h"
# include "sfdb_ui.h"
# include "keyboard.h"
# include "i18n.h"
using namespace std ;
using namespace Gtk ;
using namespace Gtkmm2ext ;
using namespace PBD ;
using namespace ARDOUR ;
class ClickOptions : public OptionEditorBox
{
public :
2011-11-18 19:56:35 -05:00
ClickOptions ( RCConfiguration * c , Gtk : : Window * p )
2009-05-13 20:15:38 -04:00
: _rc_config ( c ) ,
_parent ( p )
{
Table * t = manage ( new Table ( 2 , 3 ) ) ;
t - > set_spacings ( 4 ) ;
2012-06-04 21:03:36 -04:00
Label * l = manage ( left_aligned_label ( _ ( " Click audio file: " ) ) ) ;
2009-05-13 20:15:38 -04:00
t - > attach ( * l , 0 , 1 , 0 , 1 , FILL ) ;
t - > attach ( _click_path_entry , 1 , 2 , 0 , 1 , FILL ) ;
Button * b = manage ( new Button ( _ ( " Browse... " ) ) ) ;
2009-12-11 18:29:48 -05:00
b - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & ClickOptions : : click_browse_clicked ) ) ;
2009-05-13 20:15:38 -04:00
t - > attach ( * b , 2 , 3 , 0 , 1 , FILL ) ;
2012-06-04 21:03:36 -04:00
l = manage ( left_aligned_label ( _ ( " Click emphasis audio file: " ) ) ) ;
2009-05-13 20:15:38 -04:00
t - > attach ( * l , 0 , 1 , 1 , 2 , FILL ) ;
t - > attach ( _click_emphasis_path_entry , 1 , 2 , 1 , 2 , FILL ) ;
b = manage ( new Button ( _ ( " Browse... " ) ) ) ;
2009-12-11 18:29:48 -05:00
b - > signal_clicked ( ) . connect ( sigc : : mem_fun ( * this , & ClickOptions : : click_emphasis_browse_clicked ) ) ;
2009-05-13 20:15:38 -04:00
t - > attach ( * b , 2 , 3 , 1 , 2 , FILL ) ;
2012-01-27 17:47:16 -05:00
2009-05-13 20:15:38 -04:00
_box - > pack_start ( * t , false , false ) ;
2011-09-18 15:49:45 -04:00
_click_path_entry . signal_activate ( ) . connect ( sigc : : mem_fun ( * this , & ClickOptions : : click_changed ) ) ;
_click_emphasis_path_entry . signal_activate ( ) . connect ( sigc : : mem_fun ( * this , & ClickOptions : : click_emphasis_changed ) ) ;
2009-05-13 20:15:38 -04:00
}
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
void parameter_changed ( string const & p )
{
if ( p = = " click-sound " ) {
_click_path_entry . set_text ( _rc_config - > get_click_sound ( ) ) ;
} else if ( p = = " click-emphasis-sound " ) {
_click_emphasis_path_entry . set_text ( _rc_config - > get_click_emphasis_sound ( ) ) ;
}
}
void set_state_from_config ( )
{
parameter_changed ( " click-sound " ) ;
parameter_changed ( " click-emphasis-sound " ) ;
}
2009-10-14 12:10:01 -04:00
private :
2009-05-13 20:15:38 -04:00
void click_browse_clicked ( )
{
2012-12-23 15:34:43 -05:00
SoundFileChooser sfdb ( _ ( " Choose Click " ) ) ;
2009-05-13 20:15:38 -04:00
if ( sfdb . run ( ) = = RESPONSE_OK ) {
click_chosen ( sfdb . get_filename ( ) ) ;
}
}
void click_chosen ( string const & path )
{
_click_path_entry . set_text ( path ) ;
_rc_config - > set_click_sound ( path ) ;
}
2011-09-18 15:49:45 -04:00
void click_changed ( )
{
click_chosen ( _click_path_entry . get_text ( ) ) ;
}
2009-05-13 20:15:38 -04:00
void click_emphasis_browse_clicked ( )
{
2012-12-23 15:34:43 -05:00
SoundFileChooser sfdb ( _ ( " Choose Click Emphasis " ) ) ;
2009-05-13 20:15:38 -04:00
sfdb . show_all ( ) ;
sfdb . present ( ) ;
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
if ( sfdb . run ( ) = = RESPONSE_OK ) {
click_emphasis_chosen ( sfdb . get_filename ( ) ) ;
}
}
void click_emphasis_chosen ( string const & path )
{
_click_emphasis_path_entry . set_text ( path ) ;
_rc_config - > set_click_emphasis_sound ( path ) ;
}
2011-09-18 15:49:45 -04:00
void click_emphasis_changed ( )
{
click_emphasis_chosen ( _click_emphasis_path_entry . get_text ( ) ) ;
}
2009-05-13 20:15:38 -04:00
RCConfiguration * _rc_config ;
2011-11-18 19:56:35 -05:00
Gtk : : Window * _parent ;
2009-05-13 20:15:38 -04:00
Entry _click_path_entry ;
Entry _click_emphasis_path_entry ;
} ;
class UndoOptions : public OptionEditorBox
{
public :
UndoOptions ( RCConfiguration * c ) :
_rc_config ( c ) ,
_limit_undo_button ( _ ( " Limit undo history to " ) ) ,
_save_undo_button ( _ ( " Save undo history of " ) )
{
Table * t = new Table ( 2 , 3 ) ;
t - > set_spacings ( 4 ) ;
t - > attach ( _limit_undo_button , 0 , 1 , 0 , 1 , FILL ) ;
_limit_undo_spin . set_range ( 0 , 512 ) ;
_limit_undo_spin . set_increments ( 1 , 10 ) ;
t - > attach ( _limit_undo_spin , 1 , 2 , 0 , 1 , FILL | EXPAND ) ;
2012-06-04 21:03:36 -04:00
Label * l = manage ( left_aligned_label ( _ ( " commands " ) ) ) ;
2009-05-13 20:15:38 -04:00
t - > attach ( * l , 2 , 3 , 0 , 1 ) ;
t - > attach ( _save_undo_button , 0 , 1 , 1 , 2 , FILL ) ;
_save_undo_spin . set_range ( 0 , 512 ) ;
_save_undo_spin . set_increments ( 1 , 10 ) ;
t - > attach ( _save_undo_spin , 1 , 2 , 1 , 2 , FILL | EXPAND ) ;
2012-06-04 21:03:36 -04:00
l = manage ( left_aligned_label ( _ ( " commands " ) ) ) ;
2009-05-13 20:15:38 -04:00
t - > attach ( * l , 2 , 3 , 1 , 2 ) ;
_box - > pack_start ( * t ) ;
2009-12-11 18:29:48 -05:00
_limit_undo_button . signal_toggled ( ) . connect ( sigc : : mem_fun ( * this , & UndoOptions : : limit_undo_toggled ) ) ;
_limit_undo_spin . signal_value_changed ( ) . connect ( sigc : : mem_fun ( * this , & UndoOptions : : limit_undo_changed ) ) ;
_save_undo_button . signal_toggled ( ) . connect ( sigc : : mem_fun ( * this , & UndoOptions : : save_undo_toggled ) ) ;
_save_undo_spin . signal_value_changed ( ) . connect ( sigc : : mem_fun ( * this , & UndoOptions : : save_undo_changed ) ) ;
2009-05-13 20:15:38 -04:00
}
void parameter_changed ( string const & p )
{
if ( p = = " history-depth " ) {
int32_t const d = _rc_config - > get_history_depth ( ) ;
_limit_undo_button . set_active ( d ! = 0 ) ;
_limit_undo_spin . set_sensitive ( d ! = 0 ) ;
_limit_undo_spin . set_value ( d ) ;
} else if ( p = = " save-history " ) {
bool const x = _rc_config - > get_save_history ( ) ;
_save_undo_button . set_active ( x ) ;
_save_undo_spin . set_sensitive ( x ) ;
} else if ( p = = " save-history-depth " ) {
_save_undo_spin . set_value ( _rc_config - > get_saved_history_depth ( ) ) ;
}
}
void set_state_from_config ( )
{
parameter_changed ( " save-history " ) ;
parameter_changed ( " history-depth " ) ;
parameter_changed ( " save-history-depth " ) ;
}
void limit_undo_toggled ( )
{
bool const x = _limit_undo_button . get_active ( ) ;
_limit_undo_spin . set_sensitive ( x ) ;
int32_t const n = x ? 16 : 0 ;
_limit_undo_spin . set_value ( n ) ;
_rc_config - > set_history_depth ( n ) ;
}
void limit_undo_changed ( )
{
_rc_config - > set_history_depth ( _limit_undo_spin . get_value_as_int ( ) ) ;
}
void save_undo_toggled ( )
{
bool const x = _save_undo_button . get_active ( ) ;
_rc_config - > set_save_history ( x ) ;
}
void save_undo_changed ( )
{
_rc_config - > set_saved_history_depth ( _save_undo_spin . get_value_as_int ( ) ) ;
}
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
private :
RCConfiguration * _rc_config ;
CheckButton _limit_undo_button ;
SpinButton _limit_undo_spin ;
CheckButton _save_undo_button ;
SpinButton _save_undo_spin ;
} ;
static const struct {
const char * name ;
guint modifier ;
} modifiers [ ] = {
2009-10-31 15:04:51 -04:00
{ " Unmodified " , 0 } ,
2009-05-13 20:15:38 -04:00
# ifdef GTKOSX
/* Command = Meta
Option / Alt = Mod1
*/
2011-11-28 14:46:30 -05:00
{ " Key|Shift " , GDK_SHIFT_MASK } ,
2009-05-13 20:15:38 -04:00
{ " Command " , GDK_META_MASK } ,
{ " Control " , GDK_CONTROL_MASK } ,
{ " Option " , GDK_MOD1_MASK } ,
2010-05-05 11:47:51 -04:00
{ " Command-Shift " , GDK_META_MASK | GDK_SHIFT_MASK } ,
{ " Command-Option " , GDK_MOD1_MASK | GDK_META_MASK } ,
{ " Shift-Option " , GDK_SHIFT_MASK | GDK_MOD1_MASK } ,
{ " Shift-Command-Option " , GDK_MOD5_MASK | GDK_SHIFT_MASK | GDK_META_MASK } ,
2009-05-13 20:15:38 -04:00
# else
2011-11-28 14:46:30 -05:00
{ " Key|Shift " , GDK_SHIFT_MASK } ,
2009-05-13 20:15:38 -04:00
{ " Control " , GDK_CONTROL_MASK } ,
{ " Alt (Mod1) " , GDK_MOD1_MASK } ,
{ " Control-Shift " , GDK_CONTROL_MASK | GDK_SHIFT_MASK } ,
{ " Control-Alt " , GDK_CONTROL_MASK | GDK_MOD1_MASK } ,
{ " Shift-Alt " , GDK_SHIFT_MASK | GDK_MOD1_MASK } ,
{ " Control-Shift-Alt " , GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK } ,
{ " Mod2 " , GDK_MOD2_MASK } ,
{ " Mod3 " , GDK_MOD3_MASK } ,
{ " Mod4 " , GDK_MOD4_MASK } ,
{ " Mod5 " , GDK_MOD5_MASK } ,
# endif
{ 0 , 0 }
} ;
class KeyboardOptions : public OptionEditorBox
{
public :
KeyboardOptions ( ) :
2009-10-31 15:04:51 -04:00
_delete_button_adjustment ( 3 , 1 , 12 ) ,
2009-05-13 20:15:38 -04:00
_delete_button_spin ( _delete_button_adjustment ) ,
_edit_button_adjustment ( 3 , 1 , 5 ) ,
2010-12-29 11:34:51 -05:00
_edit_button_spin ( _edit_button_adjustment ) ,
_insert_note_button_adjustment ( 3 , 1 , 5 ) ,
_insert_note_button_spin ( _insert_note_button_adjustment )
2009-05-13 20:15:38 -04:00
{
/* internationalize and prepare for use with combos */
vector < string > dumb ;
for ( int i = 0 ; modifiers [ i ] . name ; + + i ) {
2011-12-06 22:16:26 -05:00
dumb . push_back ( S_ ( modifiers [ i ] . name ) ) ;
2009-05-13 20:15:38 -04:00
}
set_popdown_strings ( _edit_modifier_combo , dumb ) ;
2009-12-11 18:29:48 -05:00
_edit_modifier_combo . signal_changed ( ) . connect ( sigc : : mem_fun ( * this , & KeyboardOptions : : edit_modifier_chosen ) ) ;
2009-05-13 20:15:38 -04:00
for ( int x = 0 ; modifiers [ x ] . name ; + + x ) {
if ( modifiers [ x ] . modifier = = Keyboard : : edit_modifier ( ) ) {
2011-12-06 21:43:20 -05:00
_edit_modifier_combo . set_active_text ( S_ ( modifiers [ x ] . name ) ) ;
2009-05-13 20:15:38 -04:00
break ;
}
}
Table * t = manage ( new Table ( 4 , 4 ) ) ;
t - > set_spacings ( 4 ) ;
2012-06-04 21:03:36 -04:00
Label * l = manage ( left_aligned_label ( _ ( " Edit using: " ) ) ) ;
2009-05-13 20:15:38 -04:00
l - > set_name ( " OptionsLabel " ) ;
t - > attach ( * l , 0 , 1 , 0 , 1 , FILL | EXPAND , FILL ) ;
t - > attach ( _edit_modifier_combo , 1 , 2 , 0 , 1 , FILL | EXPAND , FILL ) ;
l = manage ( new Label ( _ ( " + button " ) ) ) ;
l - > set_name ( " OptionsLabel " ) ;
t - > attach ( * l , 3 , 4 , 0 , 1 , FILL | EXPAND , FILL ) ;
t - > attach ( _edit_button_spin , 4 , 5 , 0 , 1 , FILL | EXPAND , FILL ) ;
_edit_button_spin . set_name ( " OptionsEntry " ) ;
_edit_button_adjustment . set_value ( Keyboard : : edit_button ( ) ) ;
2009-12-11 18:29:48 -05:00
_edit_button_adjustment . signal_value_changed ( ) . connect ( sigc : : mem_fun ( * this , & KeyboardOptions : : edit_button_changed ) ) ;
2009-05-13 20:15:38 -04:00
set_popdown_strings ( _delete_modifier_combo , dumb ) ;
2009-12-11 18:29:48 -05:00
_delete_modifier_combo . signal_changed ( ) . connect ( sigc : : mem_fun ( * this , & KeyboardOptions : : delete_modifier_chosen ) ) ;
2009-05-13 20:15:38 -04:00
for ( int x = 0 ; modifiers [ x ] . name ; + + x ) {
if ( modifiers [ x ] . modifier = = Keyboard : : delete_modifier ( ) ) {
2011-12-06 22:16:26 -05:00
_delete_modifier_combo . set_active_text ( S_ ( modifiers [ x ] . name ) ) ;
2009-05-13 20:15:38 -04:00
break ;
}
}
2012-06-04 21:03:36 -04:00
l = manage ( left_aligned_label ( _ ( " Delete using: " ) ) ) ;
2009-05-13 20:15:38 -04:00
l - > set_name ( " OptionsLabel " ) ;
t - > attach ( * l , 0 , 1 , 1 , 2 , FILL | EXPAND , FILL ) ;
t - > attach ( _delete_modifier_combo , 1 , 2 , 1 , 2 , FILL | EXPAND , FILL ) ;
l = manage ( new Label ( _ ( " + button " ) ) ) ;
l - > set_name ( " OptionsLabel " ) ;
t - > attach ( * l , 3 , 4 , 1 , 2 , FILL | EXPAND , FILL ) ;
t - > attach ( _delete_button_spin , 4 , 5 , 1 , 2 , FILL | EXPAND , FILL ) ;
_delete_button_spin . set_name ( " OptionsEntry " ) ;
_delete_button_adjustment . set_value ( Keyboard : : delete_button ( ) ) ;
2009-12-11 18:29:48 -05:00
_delete_button_adjustment . signal_value_changed ( ) . connect ( sigc : : mem_fun ( * this , & KeyboardOptions : : delete_button_changed ) ) ;
2009-05-13 20:15:38 -04:00
2011-06-01 13:00:29 -04:00
2010-12-29 11:34:51 -05:00
set_popdown_strings ( _insert_note_modifier_combo , dumb ) ;
_insert_note_modifier_combo . signal_changed ( ) . connect ( sigc : : mem_fun ( * this , & KeyboardOptions : : insert_note_modifier_chosen ) ) ;
for ( int x = 0 ; modifiers [ x ] . name ; + + x ) {
if ( modifiers [ x ] . modifier = = Keyboard : : insert_note_modifier ( ) ) {
2011-12-06 22:16:26 -05:00
_insert_note_modifier_combo . set_active_text ( S_ ( modifiers [ x ] . name ) ) ;
2010-12-29 11:34:51 -05:00
break ;
}
}
2011-06-01 13:00:29 -04:00
2012-06-04 21:03:36 -04:00
l = manage ( left_aligned_label ( _ ( " Insert note using: " ) ) ) ;
2010-12-29 11:34:51 -05:00
l - > set_name ( " OptionsLabel " ) ;
t - > attach ( * l , 0 , 1 , 2 , 3 , FILL | EXPAND , FILL ) ;
t - > attach ( _insert_note_modifier_combo , 1 , 2 , 2 , 3 , FILL | EXPAND , FILL ) ;
l = manage ( new Label ( _ ( " + button " ) ) ) ;
l - > set_name ( " OptionsLabel " ) ;
t - > attach ( * l , 3 , 4 , 2 , 3 , FILL | EXPAND , FILL ) ;
t - > attach ( _insert_note_button_spin , 4 , 5 , 2 , 3 , FILL | EXPAND , FILL ) ;
_insert_note_button_spin . set_name ( " OptionsEntry " ) ;
_insert_note_button_adjustment . set_value ( Keyboard : : insert_note_button ( ) ) ;
_insert_note_button_adjustment . signal_value_changed ( ) . connect ( sigc : : mem_fun ( * this , & KeyboardOptions : : insert_note_button_changed ) ) ;
2011-06-01 13:00:29 -04:00
2009-05-13 20:15:38 -04:00
set_popdown_strings ( _snap_modifier_combo , dumb ) ;
2009-12-11 18:29:48 -05:00
_snap_modifier_combo . signal_changed ( ) . connect ( sigc : : mem_fun ( * this , & KeyboardOptions : : snap_modifier_chosen ) ) ;
2009-05-13 20:15:38 -04:00
for ( int x = 0 ; modifiers [ x ] . name ; + + x ) {
if ( modifiers [ x ] . modifier = = ( guint ) Keyboard : : snap_modifier ( ) ) {
2011-12-06 22:16:26 -05:00
_snap_modifier_combo . set_active_text ( S_ ( modifiers [ x ] . name ) ) ;
2009-05-13 20:15:38 -04:00
break ;
}
}
2013-01-02 19:52:23 -05:00
l = manage ( left_aligned_label ( _ ( " Ignore snap using: " ) ) ) ;
2009-05-13 20:15:38 -04:00
l - > set_name ( " OptionsLabel " ) ;
2010-12-29 11:34:51 -05:00
t - > attach ( * l , 0 , 1 , 3 , 4 , FILL | EXPAND , FILL ) ;
t - > attach ( _snap_modifier_combo , 1 , 2 , 3 , 4 , FILL | EXPAND , FILL ) ;
2009-05-13 20:15:38 -04:00
vector < string > strs ;
for ( map < string , string > : : iterator bf = Keyboard : : binding_files . begin ( ) ; bf ! = Keyboard : : binding_files . end ( ) ; + + bf ) {
strs . push_back ( bf - > first ) ;
}
set_popdown_strings ( _keyboard_layout_selector , strs ) ;
_keyboard_layout_selector . set_active_text ( Keyboard : : current_binding_name ( ) ) ;
2009-12-11 18:29:48 -05:00
_keyboard_layout_selector . signal_changed ( ) . connect ( sigc : : mem_fun ( * this , & KeyboardOptions : : bindings_changed ) ) ;
2009-05-13 20:15:38 -04:00
2012-06-04 21:03:36 -04:00
l = manage ( left_aligned_label ( _ ( " Keyboard layout: " ) ) ) ;
2009-05-13 20:15:38 -04:00
l - > set_name ( " OptionsLabel " ) ;
2010-12-29 11:34:51 -05:00
t - > attach ( * l , 0 , 1 , 4 , 5 , FILL | EXPAND , FILL ) ;
t - > attach ( _keyboard_layout_selector , 1 , 2 , 4 , 5 , FILL | EXPAND , FILL ) ;
2009-05-13 20:15:38 -04:00
_box - > pack_start ( * t , false , false ) ;
}
2009-07-21 11:55:17 -04:00
void parameter_changed ( string const & )
2009-05-13 20:15:38 -04:00
{
/* XXX: these aren't really config options... */
}
void set_state_from_config ( )
{
/* XXX: these aren't really config options... */
}
private :
void bindings_changed ( )
{
string const txt = _keyboard_layout_selector . get_active_text ( ) ;
/* XXX: config...? for all this keyboard stuff */
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
for ( map < string , string > : : iterator i = Keyboard : : binding_files . begin ( ) ; i ! = Keyboard : : binding_files . end ( ) ; + + i ) {
if ( txt = = i - > first ) {
if ( Keyboard : : load_keybindings ( i - > second ) ) {
Keyboard : : save_keybindings ( ) ;
}
}
}
}
void edit_modifier_chosen ( )
{
string const txt = _edit_modifier_combo . get_active_text ( ) ;
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
for ( int i = 0 ; modifiers [ i ] . name ; + + i ) {
if ( txt = = _ ( modifiers [ i ] . name ) ) {
Keyboard : : set_edit_modifier ( modifiers [ i ] . modifier ) ;
break ;
}
}
}
void delete_modifier_chosen ( )
{
string const txt = _delete_modifier_combo . get_active_text ( ) ;
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
for ( int i = 0 ; modifiers [ i ] . name ; + + i ) {
if ( txt = = _ ( modifiers [ i ] . name ) ) {
Keyboard : : set_delete_modifier ( modifiers [ i ] . modifier ) ;
break ;
}
}
}
2009-10-14 12:10:01 -04:00
2010-12-29 11:34:51 -05:00
void insert_note_modifier_chosen ( )
{
string const txt = _insert_note_modifier_combo . get_active_text ( ) ;
for ( int i = 0 ; modifiers [ i ] . name ; + + i ) {
if ( txt = = _ ( modifiers [ i ] . name ) ) {
Keyboard : : set_insert_note_modifier ( modifiers [ i ] . modifier ) ;
break ;
}
}
}
2009-05-13 20:15:38 -04:00
void snap_modifier_chosen ( )
{
string const txt = _snap_modifier_combo . get_active_text ( ) ;
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
for ( int i = 0 ; modifiers [ i ] . name ; + + i ) {
if ( txt = = _ ( modifiers [ i ] . name ) ) {
Keyboard : : set_snap_modifier ( modifiers [ i ] . modifier ) ;
break ;
}
}
}
void delete_button_changed ( )
{
Keyboard : : set_delete_button ( _delete_button_spin . get_value_as_int ( ) ) ;
}
void edit_button_changed ( )
{
Keyboard : : set_edit_button ( _edit_button_spin . get_value_as_int ( ) ) ;
}
2009-10-14 12:10:01 -04:00
2010-12-29 11:34:51 -05:00
void insert_note_button_changed ( )
{
Keyboard : : set_insert_note_button ( _insert_note_button_spin . get_value_as_int ( ) ) ;
}
2009-05-13 20:15:38 -04:00
ComboBoxText _keyboard_layout_selector ;
ComboBoxText _edit_modifier_combo ;
ComboBoxText _delete_modifier_combo ;
2010-12-29 11:34:51 -05:00
ComboBoxText _insert_note_modifier_combo ;
2009-05-13 20:15:38 -04:00
ComboBoxText _snap_modifier_combo ;
Adjustment _delete_button_adjustment ;
SpinButton _delete_button_spin ;
Adjustment _edit_button_adjustment ;
SpinButton _edit_button_spin ;
2010-12-29 11:34:51 -05:00
Adjustment _insert_note_button_adjustment ;
SpinButton _insert_note_button_spin ;
2009-05-13 20:15:38 -04:00
} ;
class FontScalingOptions : public OptionEditorBox
{
public :
FontScalingOptions ( RCConfiguration * c ) :
_rc_config ( c ) ,
_dpi_adjustment ( 50 , 50 , 250 , 1 , 10 ) ,
_dpi_slider ( _dpi_adjustment )
{
2012-12-14 09:22:16 -05:00
_dpi_adjustment . set_value ( floor ( _rc_config - > get_font_scale ( ) / 1024 ) ) ;
2009-05-13 20:15:38 -04:00
Label * l = manage ( new Label ( _ ( " Font scaling: " ) ) ) ;
l - > set_name ( " OptionsLabel " ) ;
_dpi_slider . set_update_policy ( UPDATE_DISCONTINUOUS ) ;
HBox * h = manage ( new HBox ) ;
h - > set_spacing ( 4 ) ;
h - > pack_start ( * l , false , false ) ;
h - > pack_start ( _dpi_slider , true , true ) ;
_box - > pack_start ( * h , false , false ) ;
2009-12-11 18:29:48 -05:00
_dpi_adjustment . signal_value_changed ( ) . connect ( sigc : : mem_fun ( * this , & FontScalingOptions : : dpi_changed ) ) ;
2009-05-13 20:15:38 -04:00
}
void parameter_changed ( string const & p )
{
if ( p = = " font-scale " ) {
2012-12-14 09:22:16 -05:00
_dpi_adjustment . set_value ( floor ( _rc_config - > get_font_scale ( ) / 1024 ) ) ;
2009-05-13 20:15:38 -04:00
}
}
void set_state_from_config ( )
{
parameter_changed ( " font-scale " ) ;
}
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
private :
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
void dpi_changed ( )
{
_rc_config - > set_font_scale ( ( long ) floor ( _dpi_adjustment . get_value ( ) * 1024 ) ) ;
/* XXX: should be triggered from the parameter changed signal */
reset_dpi ( ) ;
}
RCConfiguration * _rc_config ;
Adjustment _dpi_adjustment ;
HScale _dpi_slider ;
} ;
2010-06-09 11:02:18 -04:00
class BufferingOptions : public OptionEditorBox
{
public :
2011-06-01 13:00:29 -04:00
BufferingOptions ( RCConfiguration * c )
2010-06-09 11:02:18 -04:00
: _rc_config ( c )
, _playback_adjustment ( 5 , 1 , 60 , 1 , 4 )
, _capture_adjustment ( 5 , 1 , 60 , 1 , 4 )
, _playback_slider ( _playback_adjustment )
, _capture_slider ( _capture_adjustment )
{
_playback_adjustment . set_value ( _rc_config - > get_audio_playback_buffer_seconds ( ) ) ;
Label * l = manage ( new Label ( _ ( " Playback (seconds of buffering): " ) ) ) ;
l - > set_name ( " OptionsLabel " ) ;
_playback_slider . set_update_policy ( UPDATE_DISCONTINUOUS ) ;
HBox * h = manage ( new HBox ) ;
h - > set_spacing ( 4 ) ;
h - > pack_start ( * l , false , false ) ;
h - > pack_start ( _playback_slider , true , true ) ;
_box - > pack_start ( * h , false , false ) ;
2011-06-01 13:00:29 -04:00
2010-06-09 11:02:18 -04:00
_capture_adjustment . set_value ( _rc_config - > get_audio_capture_buffer_seconds ( ) ) ;
l = manage ( new Label ( _ ( " Recording (seconds of buffering): " ) ) ) ;
l - > set_name ( " OptionsLabel " ) ;
_capture_slider . set_update_policy ( UPDATE_DISCONTINUOUS ) ;
h = manage ( new HBox ) ;
h - > set_spacing ( 4 ) ;
h - > pack_start ( * l , false , false ) ;
h - > pack_start ( _capture_slider , true , true ) ;
_box - > pack_start ( * h , false , false ) ;
2011-06-01 13:00:29 -04:00
2010-06-09 11:02:18 -04:00
_capture_adjustment . signal_value_changed ( ) . connect ( sigc : : mem_fun ( * this , & BufferingOptions : : capture_changed ) ) ;
_playback_adjustment . signal_value_changed ( ) . connect ( sigc : : mem_fun ( * this , & BufferingOptions : : playback_changed ) ) ;
}
void parameter_changed ( string const & p )
{
if ( p = = " playback-buffer-seconds " ) {
_playback_adjustment . set_value ( _rc_config - > get_audio_playback_buffer_seconds ( ) ) ;
} else if ( p = = " capture-buffer-seconds " ) {
_capture_adjustment . set_value ( _rc_config - > get_audio_capture_buffer_seconds ( ) ) ;
}
}
void set_state_from_config ( )
{
parameter_changed ( " playback-buffer-seconds " ) ;
parameter_changed ( " capture-buffer-seconds " ) ;
}
private :
void playback_changed ( )
{
_rc_config - > set_audio_playback_buffer_seconds ( ( long ) _playback_adjustment . get_value ( ) ) ;
}
void capture_changed ( )
{
_rc_config - > set_audio_capture_buffer_seconds ( ( long ) _capture_adjustment . get_value ( ) ) ;
}
RCConfiguration * _rc_config ;
Adjustment _playback_adjustment ;
Adjustment _capture_adjustment ;
HScale _playback_slider ;
HScale _capture_slider ;
} ;
2009-05-16 10:50:10 -04:00
class ControlSurfacesOptions : public OptionEditorBox
{
public :
2011-11-18 19:56:35 -05:00
ControlSurfacesOptions ( Gtk : : Window & parent )
2009-12-29 16:31:14 -05:00
: _parent ( parent )
2009-05-16 10:50:10 -04:00
{
_store = ListStore : : create ( _model ) ;
_view . set_model ( _store ) ;
2013-06-06 08:31:46 -04:00
_view . append_column ( _ ( " Control Surface Protocol " ) , _model . name ) ;
2009-05-16 10:50:10 -04:00
_view . get_column ( 0 ) - > set_resizable ( true ) ;
_view . get_column ( 0 ) - > set_expand ( true ) ;
_view . append_column_editable ( _ ( " Enabled " ) , _model . enabled ) ;
_view . append_column_editable ( _ ( " Feedback " ) , _model . feedback ) ;
_box - > pack_start ( _view , false , false ) ;
2010-01-03 21:04:05 -05:00
Label * label = manage ( new Label ) ;
label - > set_markup ( string_compose ( X_ ( " <i>%1</i> " ) , _ ( " Double-click on a name to edit settings for an enabled protocol " ) ) ) ;
2009-12-29 16:31:14 -05:00
_box - > pack_start ( * label , false , false ) ;
label - > show ( ) ;
2011-06-01 13:00:29 -04:00
2012-10-17 18:01:02 -04:00
ControlProtocolManager & m = ControlProtocolManager : : instance ( ) ;
m . ProtocolStatusChange . connect ( protocol_status_connection , MISSING_INVALIDATOR ,
boost : : bind ( & ControlSurfacesOptions : : protocol_status_changed , this , _1 ) , gui_context ( ) ) ;
_store - > signal_row_changed ( ) . connect ( sigc : : mem_fun ( * this , & ControlSurfacesOptions : : view_changed ) ) ;
2009-12-29 16:31:14 -05:00
_view . signal_button_press_event ( ) . connect_notify ( sigc : : mem_fun ( * this , & ControlSurfacesOptions : : edit_clicked ) ) ;
2009-05-16 10:50:10 -04:00
}
void parameter_changed ( std : : string const & )
{
}
void set_state_from_config ( )
{
_store - > clear ( ) ;
2009-10-14 12:10:01 -04:00
2009-05-16 10:50:10 -04:00
ControlProtocolManager & m = ControlProtocolManager : : instance ( ) ;
for ( list < ControlProtocolInfo * > : : iterator i = m . control_protocol_info . begin ( ) ; i ! = m . control_protocol_info . end ( ) ; + + i ) {
if ( ! ( * i ) - > mandatory ) {
TreeModel : : Row r = * _store - > append ( ) ;
r [ _model . name ] = ( * i ) - > name ;
r [ _model . enabled ] = ( ( * i ) - > protocol | | ( * i ) - > requested ) ;
r [ _model . feedback ] = ( ( * i ) - > protocol & & ( * i ) - > protocol - > get_feedback ( ) ) ;
r [ _model . protocol_info ] = * i ;
}
}
}
private :
2012-10-17 18:01:02 -04:00
void protocol_status_changed ( ControlProtocolInfo * cpi ) {
/* find the row */
TreeModel : : Children rows = _store - > children ( ) ;
for ( TreeModel : : Children : : iterator x = rows . begin ( ) ; x ! = rows . end ( ) ; + + x ) {
if ( ( * x ) [ _model . protocol_info ] = = cpi ) {
( * x ) [ _model . enabled ] = ( cpi - > protocol | | cpi - > requested ) ;
break ;
}
}
}
void view_changed ( TreeModel : : Path const & , TreeModel : : iterator const & i )
2009-05-16 10:50:10 -04:00
{
TreeModel : : Row r = * i ;
ControlProtocolInfo * cpi = r [ _model . protocol_info ] ;
if ( ! cpi ) {
return ;
}
bool const was_enabled = ( cpi - > protocol ! = 0 ) ;
bool const is_enabled = r [ _model . enabled ] ;
if ( was_enabled ! = is_enabled ) {
if ( ! was_enabled ) {
ControlProtocolManager : : instance ( ) . instantiate ( * cpi ) ;
} else {
2012-05-12 10:25:45 -04:00
Gtk : : Window * win = r [ _model . editor ] ;
if ( win ) {
win - > hide ( ) ;
}
2009-05-16 10:50:10 -04:00
ControlProtocolManager : : instance ( ) . teardown ( * cpi ) ;
2012-05-12 10:25:45 -04:00
if ( win ) {
delete win ;
}
r [ _model . editor ] = 0 ;
2012-05-08 12:25:13 -04:00
cpi - > requested = false ;
2009-05-16 10:50:10 -04:00
}
}
bool const was_feedback = ( cpi - > protocol & & cpi - > protocol - > get_feedback ( ) ) ;
bool const is_feedback = r [ _model . feedback ] ;
if ( was_feedback ! = is_feedback & & cpi - > protocol ) {
cpi - > protocol - > set_feedback ( is_feedback ) ;
}
}
2009-12-29 16:31:14 -05:00
void edit_clicked ( GdkEventButton * ev )
{
if ( ev - > type ! = GDK_2BUTTON_PRESS ) {
return ;
}
std : : string name ;
ControlProtocolInfo * cpi ;
TreeModel : : Row row ;
2011-06-01 13:00:29 -04:00
2009-12-29 16:31:14 -05:00
row = * ( _view . get_selection ( ) - > get_selected ( ) ) ;
Window * win = row [ _model . editor ] ;
if ( win & & ! win - > is_visible ( ) ) {
2011-06-01 13:00:29 -04:00
win - > present ( ) ;
2009-12-29 16:31:14 -05:00
} else {
cpi = row [ _model . protocol_info ] ;
2011-06-01 13:00:29 -04:00
2009-12-29 16:31:14 -05:00
if ( cpi & & cpi - > protocol & & cpi - > protocol - > has_editor ( ) ) {
Box * box = ( Box * ) cpi - > protocol - > get_gui ( ) ;
if ( box ) {
string title = row [ _model . name ] ;
2011-11-18 19:56:35 -05:00
ArdourWindow * win = new ArdourWindow ( _parent , title ) ;
2012-03-18 21:34:28 -04:00
win - > set_title ( " Control Protocol Options " ) ;
2011-11-18 19:56:35 -05:00
win - > add ( * box ) ;
2009-12-29 16:31:14 -05:00
box - > show ( ) ;
win - > present ( ) ;
row [ _model . editor ] = win ;
}
}
}
}
2009-05-16 10:50:10 -04:00
class ControlSurfacesModelColumns : public TreeModelColumnRecord
{
public :
2009-10-14 12:10:01 -04:00
2009-05-16 10:50:10 -04:00
ControlSurfacesModelColumns ( )
{
add ( name ) ;
add ( enabled ) ;
add ( feedback ) ;
add ( protocol_info ) ;
2009-12-29 16:31:14 -05:00
add ( editor ) ;
2009-05-16 10:50:10 -04:00
}
TreeModelColumn < string > name ;
TreeModelColumn < bool > enabled ;
TreeModelColumn < bool > feedback ;
TreeModelColumn < ControlProtocolInfo * > protocol_info ;
2009-12-29 16:31:14 -05:00
TreeModelColumn < Gtk : : Window * > editor ;
2009-05-16 10:50:10 -04:00
} ;
Glib : : RefPtr < ListStore > _store ;
ControlSurfacesModelColumns _model ;
TreeView _view ;
2009-12-29 16:31:14 -05:00
Gtk : : Window & _parent ;
2012-10-17 18:01:02 -04:00
PBD : : ScopedConnection protocol_status_connection ;
2009-05-16 10:50:10 -04:00
} ;
2013-03-12 17:00:09 -04:00
class VideoTimelineOptions : public OptionEditorBox
{
public :
VideoTimelineOptions ( RCConfiguration * c )
: _rc_config ( c )
, _show_video_export_info_button ( _ ( " Show Video Export Info before export " ) )
, _show_video_server_dialog_button ( _ ( " Show Video Server Startup Dialog " ) )
2013-03-28 08:20:47 -04:00
, _video_advanced_setup_button ( _ ( " Advanced Setup (remote video server) " ) )
2013-03-12 17:00:09 -04:00
{
2013-04-02 11:57:09 -04:00
Table * t = manage ( new Table ( 2 , 6 ) ) ;
2013-03-12 17:00:09 -04:00
t - > set_spacings ( 4 ) ;
2013-03-28 08:20:47 -04:00
t - > attach ( _video_advanced_setup_button , 0 , 2 , 0 , 1 ) ;
_video_advanced_setup_button . signal_toggled ( ) . connect ( sigc : : mem_fun ( * this , & VideoTimelineOptions : : video_advanced_setup_toggled ) ) ;
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( _video_advanced_setup_button ,
_ ( " <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. " ) ) ;
2013-03-12 17:00:09 -04:00
Label * l = manage ( new Label ( _ ( " Video Server URL: " ) ) ) ;
l - > set_alignment ( 0 , 0.5 ) ;
2013-03-28 08:20:47 -04:00
t - > attach ( * l , 0 , 1 , 1 , 2 , FILL ) ;
t - > attach ( _video_server_url_entry , 1 , 2 , 1 , 2 , FILL ) ;
2013-03-12 17:00:09 -04:00
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( _video_server_url_entry ,
2013-07-17 09:12:13 -04:00
_ ( " 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 " ) ) ;
2013-03-12 17:00:09 -04:00
2013-03-28 08:20:47 -04:00
l = manage ( new Label ( _ ( " Video Folder: " ) ) ) ;
2013-03-12 17:00:09 -04:00
l - > set_alignment ( 0 , 0.5 ) ;
2013-03-28 08:20:47 -04:00
t - > attach ( * l , 0 , 1 , 2 , 3 , FILL ) ;
t - > attach ( _video_server_docroot_entry , 1 , 2 , 2 , 3 ) ;
2013-03-12 17:00:09 -04:00
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( _video_server_docroot_entry ,
2013-03-28 08:20:47 -04:00
_ ( " 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. " ) ) ;
2013-03-12 17:00:09 -04:00
2013-03-28 08:20:47 -04:00
/* small vspace y=3..4 */
2013-04-02 11:57:09 -04:00
t - > attach ( _show_video_export_info_button , 0 , 2 , 4 , 5 ) ;
2013-03-12 17:00:09 -04:00
_show_video_export_info_button . signal_toggled ( ) . connect ( sigc : : mem_fun ( * this , & VideoTimelineOptions : : show_video_export_info_toggled ) ) ;
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( _show_video_export_info_button ,
_ ( " <b>When enabled</b> an information window with details is displayed before the video-export dialog. " ) ) ;
2013-04-02 11:57:09 -04:00
t - > attach ( _show_video_server_dialog_button , 0 , 2 , 5 , 6 ) ;
2013-03-12 17:00:09 -04:00
_show_video_server_dialog_button . signal_toggled ( ) . connect ( sigc : : mem_fun ( * this , & VideoTimelineOptions : : show_video_server_dialog_toggled ) ) ;
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( _show_video_server_dialog_button ,
_ ( " <b>When enabled</b> the video server is never launched automatically without confirmation " ) ) ;
_video_server_url_entry . signal_changed ( ) . connect ( sigc : : mem_fun ( * this , & VideoTimelineOptions : : server_url_changed ) ) ;
_video_server_url_entry . signal_activate ( ) . connect ( sigc : : mem_fun ( * this , & VideoTimelineOptions : : server_url_changed ) ) ;
_video_server_docroot_entry . signal_changed ( ) . connect ( sigc : : mem_fun ( * this , & VideoTimelineOptions : : server_docroot_changed ) ) ;
_video_server_docroot_entry . signal_activate ( ) . connect ( sigc : : mem_fun ( * this , & VideoTimelineOptions : : server_docroot_changed ) ) ;
_box - > pack_start ( * t , true , true ) ;
}
void server_url_changed ( )
{
_rc_config - > set_video_server_url ( _video_server_url_entry . get_text ( ) ) ;
}
void server_docroot_changed ( )
{
_rc_config - > set_video_server_docroot ( _video_server_docroot_entry . get_text ( ) ) ;
}
void show_video_export_info_toggled ( )
{
bool const x = _show_video_export_info_button . get_active ( ) ;
_rc_config - > set_show_video_export_info ( x ) ;
}
void show_video_server_dialog_toggled ( )
{
bool const x = _show_video_server_dialog_button . get_active ( ) ;
_rc_config - > set_show_video_server_dialog ( x ) ;
}
2013-03-28 08:20:47 -04:00
void video_advanced_setup_toggled ( )
{
bool const x = _video_advanced_setup_button . get_active ( ) ;
_rc_config - > set_video_advanced_setup ( x ) ;
}
2013-03-12 17:00:09 -04:00
void parameter_changed ( string const & p )
{
if ( p = = " video-server-url " ) {
_video_server_url_entry . set_text ( _rc_config - > get_video_server_url ( ) ) ;
} else if ( p = = " video-server-docroot " ) {
_video_server_docroot_entry . set_text ( _rc_config - > get_video_server_docroot ( ) ) ;
} else if ( p = = " show-video-export-info " ) {
bool const x = _rc_config - > get_show_video_export_info ( ) ;
_show_video_export_info_button . set_active ( x ) ;
2013-03-28 08:20:47 -04:00
} else if ( p = = " show-video-server-dialog " ) {
bool const x = _rc_config - > get_show_video_server_dialog ( ) ;
_show_video_server_dialog_button . set_active ( x ) ;
} else if ( p = = " video-advanced-setup " ) {
bool const x = _rc_config - > get_video_advanced_setup ( ) ;
_video_advanced_setup_button . set_active ( x ) ;
_video_server_docroot_entry . set_sensitive ( x ) ;
_video_server_url_entry . set_sensitive ( x ) ;
2013-03-12 17:00:09 -04:00
}
}
void set_state_from_config ( )
{
parameter_changed ( " video-server-url " ) ;
parameter_changed ( " video-server-docroot " ) ;
parameter_changed ( " video-monitor-setup-dialog " ) ;
parameter_changed ( " show-video-export-info " ) ;
2013-03-28 08:20:47 -04:00
parameter_changed ( " show-video-server-dialog " ) ;
parameter_changed ( " video-advanced-setup " ) ;
2013-03-12 17:00:09 -04:00
}
private :
RCConfiguration * _rc_config ;
Entry _video_server_url_entry ;
Entry _video_server_docroot_entry ;
CheckButton _show_video_export_info_button ;
CheckButton _show_video_server_dialog_button ;
2013-03-28 08:20:47 -04:00
CheckButton _video_advanced_setup_button ;
2013-03-12 17:00:09 -04:00
} ;
2011-10-29 16:08:48 -04:00
/** A class which allows control of visibility of some editor components usign
* a VisibilityGroup . The caller should pass in a ` dummy ' VisibilityGroup
* which has the correct members , but with null widget pointers . This
* class allows the user to set visibility of the members , the details
* of which are stored in a configuration variable which can be watched
* by parts of the editor that actually contain the widgets whose visibility
* is being controlled .
*/
class VisibilityOption : public Option
{
public :
/** @param name User-visible name for this group.
* @ param g ` Dummy ' VisibilityGroup ( as described above ) .
* @ param get Method to get the value of the appropriate configuration variable .
* @ param set Method to set the value of the appropriate configuration variable .
*/
VisibilityOption ( string name , VisibilityGroup * g , sigc : : slot < string > get , sigc : : slot < bool , string > set )
: Option ( g - > get_state_name ( ) , name )
, _heading ( name )
, _visibility_group ( g )
, _get ( get )
, _set ( set )
{
/* Watch for changes made by the user to our members */
_visibility_group - > VisibilityChanged . connect_same_thread (
_visibility_group_connection , sigc : : bind ( & VisibilityOption : : changed , this )
) ;
}
void set_state_from_config ( )
{
/* Set our state from the current configuration */
_visibility_group - > set_state ( _get ( ) ) ;
}
void add_to_page ( OptionEditorPage * p )
{
_heading . add_to_page ( p ) ;
add_widget_to_page ( p , _visibility_group - > list_view ( ) ) ;
}
2012-10-10 19:28:07 -04:00
Gtk : : Widget & tip_widget ( ) { return * _visibility_group - > list_view ( ) ; }
2011-10-29 16:08:48 -04:00
private :
void changed ( )
{
/* The user has changed something, so reflect this change
in the RCConfiguration .
*/
_set ( _visibility_group - > get_state_value ( ) ) ;
}
OptionEditorHeading _heading ;
VisibilityGroup * _visibility_group ;
sigc : : slot < std : : string > _get ;
sigc : : slot < bool , std : : string > _set ;
PBD : : ScopedConnection _visibility_group_connection ;
} ;
2009-05-16 10:50:10 -04:00
2013-03-12 17:00:09 -04:00
2009-05-13 20:15:38 -04:00
RCOptionEditor : : RCOptionEditor ( )
2010-03-14 22:31:27 -04:00
: OptionEditor ( Config , string_compose ( _ ( " %1 Preferences " ) , PROGRAM_NAME ) )
, _rc_config ( Config )
2011-10-29 16:08:48 -04:00
, _mixer_strip_visibility ( " mixer-strip-visibility " )
2009-05-13 20:15:38 -04:00
{
/* MISC */
2010-06-24 10:13:45 -04:00
uint32_t hwcpus = hardware_concurrency ( ) ;
2012-11-27 09:47:59 -05:00
BoolOption * bo ;
2013-01-24 08:17:07 -05:00
BoolComboOption * bco ;
2010-06-24 10:13:45 -04:00
if ( hwcpus > 1 ) {
add_option ( _ ( " Misc " ) , new OptionEditorHeading ( _ ( " DSP CPU Utilization " ) ) ) ;
2011-06-01 13:00:29 -04:00
2010-11-13 00:14:48 -05:00
ComboOption < int32_t > * procs = new ComboOption < int32_t > (
2010-06-24 10:13:45 -04:00
" processor-usage " ,
2010-07-14 20:25:21 -04:00
_ ( " Signal processing uses " ) ,
2010-06-24 10:13:45 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_processor_usage ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_processor_usage )
) ;
2011-06-01 13:00:29 -04:00
2010-07-14 20:25:21 -04:00
procs - > add ( - 1 , _ ( " all but one processor " ) ) ;
procs - > add ( 0 , _ ( " all available processors " ) ) ;
2011-06-01 13:00:29 -04:00
2011-02-05 11:40:33 -05:00
for ( uint32_t i = 1 ; i < = hwcpus ; + + i ) {
procs - > add ( i , string_compose ( _ ( " %1 processors " ) , i ) ) ;
2010-06-24 10:13:45 -04:00
}
2011-06-01 13:00:29 -04:00
2012-02-29 15:18:18 -05:00
procs - > set_note ( string_compose ( _ ( " This setting will only take effect when %1 is restarted. " ) , PROGRAM_NAME ) ) ;
2012-01-22 07:28:49 -05:00
2010-06-24 10:13:45 -04:00
add_option ( _ ( " Misc " ) , procs ) ;
}
2011-11-28 14:46:30 -05:00
add_option ( _ ( " Misc " ) , new OptionEditorHeading ( S_ ( " Options|Undo " ) ) ) ;
2009-10-14 12:10:01 -04:00
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Misc " ) , new UndoOptions ( _rc_config ) ) ;
2009-05-13 20:15:38 -04:00
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Misc " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" verify-remove-last-capture " ,
_ ( " Verify removal of last capture " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_verify_remove_last_capture ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_verify_remove_last_capture )
2009-05-13 20:15:38 -04:00
) ) ;
2009-10-14 12:10:01 -04:00
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Misc " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" periodic-safety-backups " ,
_ ( " Make periodic backups of the session file " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_periodic_safety_backups ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_periodic_safety_backups )
2009-05-13 20:15:38 -04:00
) ) ;
2012-04-05 08:09:23 -04:00
add_option ( _ ( " Misc " ) , new OptionEditorHeading ( _ ( " Session Management " ) ) ) ;
2009-05-13 20:15:38 -04:00
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Misc " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" only-copy-imported-files " ,
_ ( " Always copy imported files " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_only_copy_imported_files ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_only_copy_imported_files )
2009-05-13 20:15:38 -04:00
) ) ;
2011-11-04 11:05:49 -04:00
add_option ( _ ( " Misc " ) , new DirectoryOption (
X_ ( " default-session-parent-dir " ) ,
_ ( " Default folder for new sessions: " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_default_session_parent_dir ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_default_session_parent_dir )
) ) ;
2012-03-10 06:37:01 -05:00
add_option ( _ ( " Misc " ) ,
new SpinOption < uint32_t > (
" max-recent-sessions " ,
_ ( " Maximum number of recent sessions " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_max_recent_sessions ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_max_recent_sessions ) ,
0 , 1000 , 1 , 20
) ) ;
2010-05-19 21:30:35 -04:00
add_option ( _ ( " Misc " ) , new OptionEditorHeading ( _ ( " Click " ) ) ) ;
2011-06-01 13:00:29 -04:00
2010-05-19 21:30:35 -04:00
add_option ( _ ( " Misc " ) , new ClickOptions ( _rc_config , this ) ) ;
2012-01-27 17:47:16 -05:00
add_option ( _ ( " Misc " ) ,
new FaderOption (
" click-gain " ,
2012-06-06 07:24:00 -04:00
_ ( " Click gain level " ) ,
2012-01-27 17:47:16 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_click_gain ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_click_gain )
) ) ;
2012-04-05 08:09:23 -04:00
add_option ( _ ( " Misc " ) , new OptionEditorHeading ( _ ( " Automation " ) ) ) ;
add_option ( _ ( " Misc " ) ,
new SpinOption < double > (
" automation-thinning-factor " ,
_ ( " Thinning factor (larger value => less data) " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_automation_thinning_factor ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_automation_thinning_factor ) ,
0 , 1000 , 1 , 20
) ) ;
2012-11-19 16:31:44 -05:00
add_option ( _ ( " Misc " ) ,
new SpinOption < double > (
" automation-interval-msecs " ,
_ ( " Automation sampling interval (milliseconds) " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_automation_interval_msecs ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_automation_interval_msecs ) ,
1 , 1000 , 1 , 20
) ) ;
2009-05-13 20:15:38 -04:00
/* TRANSPORT */
2012-10-11 11:50:54 -04:00
BoolOption * tsf ;
tsf = new BoolOption (
2009-05-13 20:15:38 -04:00
" latched-record-enable " ,
_ ( " Keep record-enable engaged on stop " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_latched_record_enable ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_latched_record_enable )
2012-10-11 11:50:54 -04:00
) ;
// Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _(""));
add_option ( _ ( " Transport " ) , tsf ) ;
2009-05-13 20:15:38 -04:00
2012-10-11 11:50:54 -04:00
tsf = new BoolOption (
2009-05-13 20:15:38 -04:00
" stop-recording-on-xrun " ,
_ ( " Stop recording when an xrun occurs " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_stop_recording_on_xrun ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_stop_recording_on_xrun )
2012-10-11 11:50:54 -04:00
) ;
2013-02-05 13:18:35 -05:00
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( tsf - > tip_widget ( ) ,
string_compose ( _ ( " <b>When enabled</b> %1 will stop recording if an over- or underrun is detected by the audio engine " ) ,
PROGRAM_NAME ) ) ;
2012-10-11 11:50:54 -04:00
add_option ( _ ( " Transport " ) , tsf ) ;
2009-05-13 20:15:38 -04:00
2012-10-11 11:50:54 -04:00
tsf = new BoolOption (
2009-05-13 20:15:38 -04:00
" create-xrun-marker " ,
_ ( " Create markers where xruns occur " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_create_xrun_marker ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_create_xrun_marker )
2012-10-11 11:50:54 -04:00
) ;
// Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _(""));
add_option ( _ ( " Transport " ) , tsf ) ;
2009-05-13 20:15:38 -04:00
2012-10-11 11:50:54 -04:00
tsf = new BoolOption (
2009-05-13 20:15:38 -04:00
" stop-at-session-end " ,
_ ( " Stop at the end of the session " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_stop_at_session_end ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_stop_at_session_end )
2012-10-11 11:50:54 -04:00
) ;
2013-02-05 13:18:35 -05:00
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( tsf - > tip_widget ( ) ,
string_compose ( _ ( " <b>When enabled</b> if %1 is <b>not recording</b>, it will stop the transport "
" when it reaches the current session end marker \n \n "
" <b>When disabled</b> %1 will continue to roll past the session end marker at all times " ) ,
PROGRAM_NAME ) ) ;
2012-10-11 11:50:54 -04:00
add_option ( _ ( " Transport " ) , tsf ) ;
2009-05-13 20:15:38 -04:00
2012-10-11 11:50:54 -04:00
tsf = new BoolOption (
2010-08-24 18:06:37 -04:00
" seamless-loop " ,
_ ( " Do seamless looping (not possible when slaved to MTC, JACK etc) " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_seamless_loop ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_seamless_loop )
2012-10-11 11:50:54 -04:00
) ;
2013-02-05 13:18:35 -05:00
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( tsf - > tip_widget ( ) ,
string_compose ( _ ( " <b>When enabled</b> this will loop by reading ahead and wrapping around at the loop point, "
" preventing any need to do a transport locate at the end of the loop \n \n "
" <b>When disabled</b> looping is done by locating back to the start of the loop when %1 reaches the end "
" which will often cause a small click or delay " ) , PROGRAM_NAME ) ) ;
2012-10-11 11:50:54 -04:00
add_option ( _ ( " Transport " ) , tsf ) ;
2010-08-24 18:06:37 -04:00
2012-10-11 11:50:54 -04:00
tsf = new BoolOption (
2009-06-14 09:44:26 -04:00
" disable-disarm-during-roll " ,
2009-12-07 18:51:46 -05:00
_ ( " Disable per-track record disarm while rolling " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_disable_disarm_during_roll ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_disable_disarm_during_roll )
2012-10-11 11:50:54 -04:00
) ;
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( tsf - > tip_widget ( ) , _ ( " <b>When enabled</b> this will prevent you from accidentally stopping specific tracks recording during a take " ) ) ;
add_option ( _ ( " Transport " ) , tsf ) ;
2009-06-14 09:44:26 -04:00
2012-10-11 11:50:54 -04:00
tsf = new BoolOption (
2010-04-25 11:30:14 -04:00
" quieten_at_speed " ,
2010-04-25 20:39:49 -04:00
_ ( " 12dB gain reduction during fast-forward and fast-rewind " ) ,
2010-04-25 11:30:14 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_quieten_at_speed ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_quieten_at_speed )
2012-10-11 11:50:54 -04:00
) ;
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( tsf - > tip_widget ( ) , _ ( " This will reduce the unpleasant increase in perceived volume "
" that occurs when fast-forwarding or rewinding through some kinds of audio " ) ) ;
add_option ( _ ( " Transport " ) , tsf ) ;
2010-04-25 11:30:14 -04:00
2012-10-10 18:46:21 -04:00
add_option ( _ ( " Transport " ) , new OptionEditorHeading ( S_ ( " Sync/Slave " ) ) ) ;
2012-10-11 11:50:54 -04:00
_sync_source = new ComboOption < SyncSource > (
" sync-source " ,
_ ( " External timecode source " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_sync_source ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_sync_source )
) ;
populate_sync_options ( ) ;
add_option ( _ ( " Transport " ) , _sync_source ) ;
_sync_framerate = new BoolOption (
2012-10-10 18:46:21 -04:00
" timecode-sync-frame-rate " ,
2012-10-11 11:50:54 -04:00
_ ( " Match session video frame rate to external timecode " ) ,
2012-10-10 18:46:21 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_timecode_sync_frame_rate ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_timecode_sync_frame_rate )
) ;
2012-10-10 23:10:18 -04:00
Gtkmm2ext : : UI : : instance ( ) - > set_tip
2012-10-11 11:50:54 -04:00
( _sync_framerate - > tip_widget ( ) ,
2013-02-05 13:18:35 -05:00
string_compose ( _ ( " This option controls the value of the video frame rate <i>while chasing</i> an external timecode source. \n \n "
" <b>When enabled</b> the session video frame rate will be changed to match that of the selected external timecode source. \n \n "
" <b>When disabled</b> the session video frame rate will not be changed to match that of the selected external timecode source. "
" Instead the frame rate indication in the main clock will flash red and %1 will convert between the external "
" timecode standard and the session standard. " ) , PROGRAM_NAME ) ) ;
2012-10-10 23:10:18 -04:00
2012-10-11 11:50:54 -04:00
add_option ( _ ( " Transport " ) , _sync_framerate ) ;
2012-10-10 18:46:21 -04:00
2012-10-11 11:50:54 -04:00
_sync_genlock = new BoolOption (
2012-10-10 19:28:07 -04:00
" timecode-source-is-synced " ,
2012-10-10 23:10:18 -04:00
_ ( " External timecode is sync locked " ) ,
2012-10-10 19:28:07 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_timecode_source_is_synced ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_timecode_source_is_synced )
) ;
2012-10-10 23:10:18 -04:00
Gtkmm2ext : : UI : : instance ( ) - > set_tip
2012-10-11 11:50:54 -04:00
( _sync_genlock - > tip_widget ( ) ,
2012-11-09 02:48:01 -05:00
_ ( " <b>When enabled</b> indicates that the selected external timecode source shares sync (Black & Burst, Wordclock, etc) with the audio interface. " ) ) ;
2012-10-10 23:10:18 -04:00
2012-10-15 11:57:35 -04:00
2012-10-11 11:50:54 -04:00
add_option ( _ ( " Transport " ) , _sync_genlock ) ;
2012-10-10 23:10:18 -04:00
2012-11-07 18:02:11 -05:00
_sync_source_2997 = new BoolOption (
" timecode-source-2997 " ,
_ ( " Lock to 29.9700 fps instead of 30000/1001 " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_timecode_source_2997 ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_timecode_source_2997 )
) ;
Gtkmm2ext : : UI : : instance ( ) - > set_tip
2012-11-09 02:48:01 -05:00
( _sync_source_2997 - > tip_widget ( ) ,
_ ( " <b>When enabled</b> the external timecode source is assumed to use 29.97 fps instead of 30000/1001. \n "
" SMPTE 12M-1999 specifies 29.97df as 30000/1001. The spec further mentions that "
" drop-frame timecode has an accumulated error of -86ms over a 24-hour period. \n "
" Drop-frame timecode would compensate exactly for a NTSC color frame rate of 30 * 0.9990 (ie 29.970000). "
2013-01-07 14:15:02 -05:00
" That is not the actual rate. However, some vendors use that rate - despite it being against the specs - "
2012-11-09 02:48:01 -05:00
" because the variant of using exactly 29.97 fps has zero timecode drift. \n "
) ) ;
2012-11-07 18:02:11 -05:00
add_option ( _ ( " Transport " ) , _sync_source_2997 ) ;
2012-11-17 20:25:31 -05:00
add_option ( _ ( " Transport " ) , new OptionEditorHeading ( S_ ( " LTC Reader " ) ) ) ;
2012-10-15 11:57:35 -04:00
_ltc_port = new ComboStringOption (
" ltc-source-port " ,
_ ( " LTC incoming port " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_ltc_source_port ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_ltc_source_port )
) ;
vector < string > physical_inputs ;
physical_inputs . push_back ( _ ( " None " ) ) ;
AudioEngine : : instance ( ) - > get_physical_inputs ( DataType : : AUDIO , physical_inputs ) ;
_ltc_port - > set_popdown_strings ( physical_inputs ) ;
add_option ( _ ( " Transport " ) , _ltc_port ) ;
2012-10-21 10:07:10 -04:00
// TODO; rather disable this button than not compile it..
2012-10-25 23:11:07 -04:00
add_option ( _ ( " Transport " ) , new OptionEditorHeading ( S_ ( " LTC Generator " ) ) ) ;
2012-10-21 10:07:10 -04:00
add_option ( _ ( " Transport " ) ,
new BoolOption (
" send-ltc " ,
2012-10-23 19:32:36 -04:00
_ ( " Enable LTC generator " ) ,
2012-10-21 10:07:10 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_send_ltc ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_send_ltc )
) ) ;
2012-10-23 19:32:36 -04:00
_ltc_send_continuously = new BoolOption (
" ltc-send-continuously " ,
_ ( " send LTC while stopped " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_ltc_send_continuously ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_ltc_send_continuously )
) ;
Gtkmm2ext : : UI : : instance ( ) - > set_tip
( _ltc_send_continuously - > tip_widget ( ) ,
2013-02-05 13:18:35 -05:00
string_compose ( _ ( " <b>When enabled</b> %1 will continue to send LTC information even when the transport (playhead) is not moving " ) , PROGRAM_NAME ) ) ;
2012-10-23 19:32:36 -04:00
add_option ( _ ( " Transport " ) , _ltc_send_continuously ) ;
2013-01-24 08:17:07 -05:00
_ltc_volume_adjustment = new Gtk : : Adjustment ( - 18 , - 50 , 0 , .5 , 5 ) ;
2012-10-23 19:32:36 -04:00
_ltc_volume_adjustment - > set_value ( 20 * log10 ( _rc_config - > get_ltc_output_volume ( ) ) ) ;
_ltc_volume_adjustment - > signal_value_changed ( ) . connect ( sigc : : mem_fun ( * this , & RCOptionEditor : : ltc_generator_volume_changed ) ) ;
2013-01-05 05:19:45 -05:00
_ltc_volume_slider = new HSliderOption ( " ltcvol " , _ ( " LTC generator level " ) , * _ltc_volume_adjustment ) ;
2012-10-23 19:32:36 -04:00
Gtkmm2ext : : UI : : instance ( ) - > set_tip
( _ltc_volume_slider - > tip_widget ( ) ,
2012-10-23 20:51:15 -04:00
_ ( " Specify the Peak Volume of the generated LTC signal in dbFS. A good value is 0dBu ^= -18dbFS in an EBU calibrated system " ) ) ;
2012-10-23 19:32:36 -04:00
add_option ( _ ( " Transport " ) , _ltc_volume_slider ) ;
2012-11-12 11:49:11 -05:00
parameter_changed ( " send-ltc " ) ;
2012-10-21 10:07:10 -04:00
2012-10-11 11:50:54 -04:00
parameter_changed ( " sync-source " ) ;
2012-10-10 23:10:18 -04:00
2009-05-13 20:15:38 -04:00
/* EDITOR */
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Editor " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" link-region-and-track-selection " ,
_ ( " Link selection of regions and tracks " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_link_region_and_track_selection ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_link_region_and_track_selection )
2009-05-13 20:15:38 -04:00
) ) ;
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Editor " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" automation-follows-regions " ,
2010-08-11 20:38:01 -04:00
_ ( " Move relevant automation when audio regions are moved " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_automation_follows_regions ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_automation_follows_regions )
2009-05-13 20:15:38 -04:00
) ) ;
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Editor " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" show-track-meters " ,
_ ( " Show meters on tracks in the editor " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_show_track_meters ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_show_track_meters )
2009-05-13 20:15:38 -04:00
) ) ;
2013-08-03 18:06:29 -04:00
add_option ( _ ( " Editor " ) ,
new BoolOption (
" show-editor-meter " ,
_ ( " Display master-meter in the toolbar " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_show_editor_meter ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_show_editor_meter )
) ) ;
2013-01-24 08:17:07 -05:00
bco = new BoolComboOption (
2009-05-13 20:15:38 -04:00
" use-overlap-equivalency " ,
2013-01-24 08:17:07 -05:00
_ ( " Regions in active edit groups are edited together " ) ,
_ ( " whenever they overlap in time " ) ,
_ ( " only if they have identical length, position and origin " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_use_overlap_equivalency ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_use_overlap_equivalency )
2012-11-27 09:47:59 -05:00
) ;
2013-01-24 08:17:07 -05:00
add_option ( _ ( " Editor " ) , bco ) ;
2009-05-13 20:15:38 -04:00
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Editor " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" rubberbanding-snaps-to-grid " ,
_ ( " Make rubberband selection rectangle snap to the grid " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_rubberbanding_snaps_to_grid ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_rubberbanding_snaps_to_grid )
2009-05-13 20:15:38 -04:00
) ) ;
2009-06-10 17:58:25 -04:00
add_option ( _ ( " Editor " ) ,
new BoolOption (
" show-waveforms " ,
_ ( " Show waveforms in regions " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_show_waveforms ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_show_waveforms )
2009-06-10 17:58:25 -04:00
) ) ;
2012-02-15 09:03:19 -05:00
add_option ( _ ( " Editor " ) ,
2012-06-19 18:05:04 -04:00
new BoolComboOption (
2012-02-15 09:03:19 -05:00
" show-region-gain-envelopes " ,
_ ( " Show gain envelopes in audio regions " ) ,
2012-06-19 18:05:04 -04:00
_ ( " in all modes " ) ,
_ ( " only in region gain mode " ) ,
2012-02-15 09:03:19 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_show_region_gain ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_show_region_gain )
) ) ;
2009-06-10 17:58:25 -04:00
ComboOption < WaveformScale > * wfs = new ComboOption < WaveformScale > (
" waveform-scale " ,
_ ( " Waveform scale " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_waveform_scale ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_waveform_scale )
2009-06-10 17:58:25 -04:00
) ;
wfs - > add ( Linear , _ ( " linear " ) ) ;
wfs - > add ( Logarithmic , _ ( " logarithmic " ) ) ;
add_option ( _ ( " Editor " ) , wfs ) ;
2009-10-14 12:10:01 -04:00
2009-06-10 17:58:25 -04:00
ComboOption < WaveformShape > * wfsh = new ComboOption < WaveformShape > (
" waveform-shape " ,
_ ( " Waveform shape " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_waveform_shape ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_waveform_shape )
2009-06-10 17:58:25 -04:00
) ;
wfsh - > add ( Traditional , _ ( " traditional " ) ) ;
wfsh - > add ( Rectified , _ ( " rectified " ) ) ;
add_option ( _ ( " Editor " ) , wfsh ) ;
2010-04-18 21:40:42 -04:00
add_option ( _ ( " Editor " ) ,
new BoolOption (
" show-waveforms-while-recording " ,
_ ( " Show waveforms for audio while it is being recorded " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_show_waveforms_while_recording ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_show_waveforms_while_recording )
) ) ;
2011-01-02 22:11:31 -05:00
add_option ( _ ( " Editor " ) ,
new BoolOption (
" show-zoom-tools " ,
_ ( " Show zoom toolbar " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_show_zoom_tools ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_show_zoom_tools )
) ) ;
2011-11-01 08:19:11 -04:00
add_option ( _ ( " Editor " ) ,
new BoolOption (
" update-editor-during-summary-drag " ,
_ ( " Update editor window during drags of the summary " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_update_editor_during_summary_drag ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_update_editor_during_summary_drag )
) ) ;
2011-11-03 18:00:49 -04:00
add_option ( _ ( " Editor " ) ,
new BoolOption (
" sync-all-route-ordering " ,
_ ( " Synchronise editor and mixer track order " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_sync_all_route_ordering ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_sync_all_route_ordering )
) ) ;
2011-11-15 14:33:09 -05:00
add_option ( _ ( " Editor " ) ,
new BoolOption (
" link-editor-and-mixer-selection " ,
_ ( " Synchronise editor and mixer selection " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_link_editor_and_mixer_selection ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_link_editor_and_mixer_selection )
) ) ;
2012-11-27 09:47:59 -05:00
bo = new BoolOption (
2011-11-03 18:00:49 -04:00
" name-new-markers " ,
_ ( " Name new markers " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_name_new_markers ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_name_new_markers )
2012-11-27 09:47:59 -05:00
) ;
add_option ( _ ( " Editor " ) , bo ) ;
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( bo - > tip_widget ( ) , _ ( " If enabled, popup a dialog when a new marker is created to allow its name to be set as it is created. "
" \n \n You can always rename markers by right-clicking on them " ) ) ;
2011-11-03 18:00:49 -04:00
2012-06-17 08:38:59 -04:00
add_option ( _ ( " Editor " ) ,
new BoolOption (
" autoscroll-editor " ,
_ ( " Auto-scroll editor window when dragging near its edges " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_autoscroll_editor ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_autoscroll_editor )
) ) ;
2009-05-13 20:15:38 -04:00
/* AUDIO */
2010-06-09 11:02:18 -04:00
add_option ( _ ( " Audio " ) , new OptionEditorHeading ( _ ( " Buffering " ) ) ) ;
add_option ( _ ( " Audio " ) , new BufferingOptions ( _rc_config ) ) ;
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) , new OptionEditorHeading ( _ ( " Monitoring " ) ) ) ;
2009-05-13 20:15:38 -04:00
ComboOption < MonitorModel > * mm = new ComboOption < MonitorModel > (
" monitoring-model " ,
2010-12-10 10:43:01 -05:00
_ ( " Record monitoring handled by " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_monitoring_model ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_monitoring_model )
2009-05-13 20:15:38 -04:00
) ;
2010-05-05 11:47:51 -04:00
# ifndef __APPLE__
/* no JACK monitoring on CoreAudio */
if ( AudioEngine : : instance ( ) - > can_request_hardware_monitoring ( ) ) {
mm - > add ( HardwareMonitoring , _ ( " JACK " ) ) ;
}
# endif
2009-05-13 20:15:38 -04:00
mm - > add ( SoftwareMonitoring , _ ( " ardour " ) ) ;
mm - > add ( ExternalMonitoring , _ ( " audio hardware " ) ) ;
2011-11-02 09:03:15 -04:00
add_option ( _ ( " Audio " ) , mm ) ;
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" tape-machine-mode " ,
_ ( " Tape machine mode " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_tape_machine_mode ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_tape_machine_mode )
2009-05-13 20:15:38 -04:00
) ) ;
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) , new OptionEditorHeading ( _ ( " Connection of tracks and busses " ) ) ) ;
2009-05-13 20:15:38 -04:00
2009-06-16 10:58:33 -04:00
add_option ( _ ( " Audio " ) ,
new BoolOption (
" auto-connect-standard-busses " ,
_ ( " Auto-connect master/monitor busses " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_auto_connect_standard_busses ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_auto_connect_standard_busses )
2009-06-16 10:58:33 -04:00
) ) ;
2009-05-13 20:15:38 -04:00
ComboOption < AutoConnectOption > * iac = new ComboOption < AutoConnectOption > (
" input-auto-connect " ,
2010-07-19 19:26:25 -04:00
_ ( " Connect track inputs " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_input_auto_connect ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_input_auto_connect )
2009-05-13 20:15:38 -04:00
) ;
iac - > add ( AutoConnectPhysical , _ ( " automatically to physical inputs " ) ) ;
iac - > add ( ManualConnect , _ ( " manually " ) ) ;
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) , iac ) ;
2009-05-13 20:15:38 -04:00
ComboOption < AutoConnectOption > * oac = new ComboOption < AutoConnectOption > (
" output-auto-connect " ,
_ ( " Connect track and bus outputs " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_output_auto_connect ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_output_auto_connect )
2009-05-13 20:15:38 -04:00
) ;
oac - > add ( AutoConnectPhysical , _ ( " automatically to physical outputs " ) ) ;
2010-07-20 18:58:50 -04:00
oac - > add ( AutoConnectMaster , _ ( " automatically to master bus " ) ) ;
2009-05-13 20:15:38 -04:00
oac - > add ( ManualConnect , _ ( " manually " ) ) ;
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) , oac ) ;
2009-05-13 20:15:38 -04:00
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) , new OptionEditorHeading ( _ ( " Denormals " ) ) ) ;
2009-05-13 20:15:38 -04:00
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" denormal-protection " ,
_ ( " Use DC bias to protect against denormals " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_denormal_protection ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_denormal_protection )
2009-05-13 20:15:38 -04:00
) ) ;
ComboOption < DenormalModel > * dm = new ComboOption < DenormalModel > (
" denormal-model " ,
_ ( " Processor handling " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_denormal_model ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_denormal_model )
2009-05-13 20:15:38 -04:00
) ;
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
dm - > add ( DenormalNone , _ ( " no processor handling " ) ) ;
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
FPU fpu ;
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
if ( fpu . has_flush_to_zero ( ) ) {
dm - > add ( DenormalFTZ , _ ( " use FlushToZero " ) ) ;
}
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
if ( fpu . has_denormals_are_zero ( ) ) {
dm - > add ( DenormalDAZ , _ ( " use DenormalsAreZero " ) ) ;
}
2009-10-14 12:10:01 -04:00
2009-05-13 20:15:38 -04:00
if ( fpu . has_flush_to_zero ( ) & & fpu . has_denormals_are_zero ( ) ) {
2011-11-08 10:37:08 -05:00
dm - > add ( DenormalFTZDAZ , _ ( " use FlushToZero and DenormalsAreZero " ) ) ;
2009-05-13 20:15:38 -04:00
}
2009-10-14 12:10:01 -04:00
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) , dm ) ;
2009-05-13 20:15:38 -04:00
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) , new OptionEditorHeading ( _ ( " Plugins " ) ) ) ;
2009-05-13 20:15:38 -04:00
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" plugins-stop-with-transport " ,
2012-03-19 07:17:09 -04:00
_ ( " Silence plugins when the transport is stopped " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_plugins_stop_with_transport ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_plugins_stop_with_transport )
2009-05-13 20:15:38 -04:00
) ) ;
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" new-plugins-active " ,
_ ( " Make new plugins active " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_new_plugins_active ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_new_plugins_active )
2009-05-13 20:15:38 -04:00
) ) ;
2009-05-15 17:36:37 -04:00
add_option ( _ ( " Audio " ) ,
2009-05-13 20:15:38 -04:00
new BoolOption (
" auto-analyse-audio " ,
_ ( " Enable automatic analysis of audio " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_auto_analyse_audio ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_auto_analyse_audio )
2009-05-13 20:15:38 -04:00
) ) ;
2010-08-17 11:39:50 -04:00
add_option ( _ ( " Audio " ) ,
new BoolOption (
" replicate-missing-region-channels " ,
2010-09-09 10:40:59 -04:00
_ ( " Replicate missing region channels " ) ,
2010-08-17 11:39:50 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_replicate_missing_region_channels ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_replicate_missing_region_channels )
) ) ;
2009-05-13 20:15:38 -04:00
2010-05-19 21:30:35 -04:00
/* SOLO AND MUTE */
add_option ( _ ( " Solo / mute " ) ,
new FaderOption (
" solo-mute-gain " ,
2011-06-20 21:36:20 -04:00
_ ( " Solo-in-place mute cut (dB) " ) ,
2010-05-19 21:30:35 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_solo_mute_gain ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_solo_mute_gain )
) ) ;
2011-01-04 15:52:30 -05:00
_solo_control_is_listen_control = new BoolOption (
" solo-control-is-listen-control " ,
_ ( " Solo controls are Listen controls " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_solo_control_is_listen_control ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_solo_control_is_listen_control )
) ;
add_option ( _ ( " Solo / mute " ) , _solo_control_is_listen_control ) ;
_listen_position = new ComboOption < ListenPosition > (
2010-05-19 21:30:35 -04:00
" listen-position " ,
_ ( " Listen Position " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_listen_position ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_listen_position )
) ;
2011-10-29 15:40:19 -04:00
_listen_position - > add ( AfterFaderListen , _ ( " after-fader (AFL) " ) ) ;
_listen_position - > add ( PreFaderListen , _ ( " pre-fader (PFL) " ) ) ;
2011-01-04 15:52:30 -05:00
add_option ( _ ( " Solo / mute " ) , _listen_position ) ;
2010-05-19 21:30:35 -04:00
2011-10-29 15:40:19 -04:00
ComboOption < PFLPosition > * pp = new ComboOption < PFLPosition > (
" pfl-position " ,
_ ( " PFL signals come from " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_pfl_position ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_pfl_position )
) ;
pp - > add ( PFLFromBeforeProcessors , _ ( " before pre-fader processors " ) ) ;
pp - > add ( PFLFromAfterProcessors , _ ( " pre-fader but after pre-fader processors " ) ) ;
add_option ( _ ( " Solo / mute " ) , pp ) ;
ComboOption < AFLPosition > * pa = new ComboOption < AFLPosition > (
" afl-position " ,
_ ( " AFL signals come from " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_afl_position ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_afl_position )
) ;
2011-10-29 16:34:42 -04:00
pa - > add ( AFLFromBeforeProcessors , _ ( " immediately post-fader " ) ) ;
pa - > add ( AFLFromAfterProcessors , _ ( " after post-fader processors (before pan) " ) ) ;
2011-10-29 15:40:19 -04:00
add_option ( _ ( " Solo / mute " ) , pa ) ;
2011-01-04 15:52:30 -05:00
parameter_changed ( " use-monitor-bus " ) ;
2010-05-19 21:30:35 -04:00
add_option ( _ ( " Solo / mute " ) ,
new BoolOption (
" exclusive-solo " ,
_ ( " Exclusive solo " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_exclusive_solo ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_exclusive_solo )
) ) ;
add_option ( _ ( " Solo / mute " ) ,
new BoolOption (
" show-solo-mutes " ,
_ ( " Show solo muting " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_show_solo_mutes ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_show_solo_mutes )
) ) ;
add_option ( _ ( " Solo / mute " ) ,
new BoolOption (
" solo-mute-override " ,
_ ( " Soloing overrides muting " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_solo_mute_override ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_solo_mute_override )
) ) ;
add_option ( _ ( " Solo / mute " ) , new OptionEditorHeading ( _ ( " Default track / bus muting options " ) ) ) ;
2011-06-01 13:00:29 -04:00
2010-05-19 21:30:35 -04:00
add_option ( _ ( " Solo / mute " ) ,
new BoolOption (
" mute-affects-pre-fader " ,
_ ( " Mute affects pre-fader sends " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_mute_affects_pre_fader ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_mute_affects_pre_fader )
) ) ;
add_option ( _ ( " Solo / mute " ) ,
new BoolOption (
" mute-affects-post-fader " ,
_ ( " Mute affects post-fader sends " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_mute_affects_post_fader ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_mute_affects_post_fader )
) ) ;
2011-06-01 13:00:29 -04:00
2010-05-19 21:30:35 -04:00
add_option ( _ ( " Solo / mute " ) ,
new BoolOption (
" mute-affects-control-outs " ,
_ ( " Mute affects control outputs " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_mute_affects_control_outs ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_mute_affects_control_outs )
) ) ;
2011-06-01 13:00:29 -04:00
2010-05-19 21:30:35 -04:00
add_option ( _ ( " Solo / mute " ) ,
new BoolOption (
" mute-affects-main-outs " ,
_ ( " Mute affects main outputs " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_mute_affects_main_outs ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_mute_affects_main_outs )
) ) ;
2011-08-03 07:15:01 -04:00
add_option ( _ ( " MIDI " ) ,
2010-07-08 20:56:52 -04:00
new BoolOption (
" send-midi-clock " ,
_ ( " Send MIDI Clock " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_send_midi_clock ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_send_midi_clock )
) ) ;
2011-08-03 07:15:01 -04:00
add_option ( _ ( " MIDI " ) ,
2010-01-27 13:50:43 -05:00
new BoolOption (
" send-mtc " ,
_ ( " Send MIDI Time Code " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_send_mtc ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_send_mtc )
) ) ;
2011-08-03 07:15:01 -04:00
add_option ( _ ( " MIDI " ) ,
2011-01-03 18:55:00 -05:00
new SpinOption < int > (
" mtc-qf-speed-tolerance " ,
_ ( " Percentage either side of normal transport speed to transmit MTC " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_mtc_qf_speed_tolerance ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_mtc_qf_speed_tolerance ) ,
0 , 20 , 1 , 5
) ) ;
2011-08-03 07:15:01 -04:00
add_option ( _ ( " MIDI " ) ,
2009-11-27 19:48:09 -05:00
new BoolOption (
" mmc-control " ,
_ ( " Obey MIDI Machine Control commands " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_mmc_control ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_mmc_control )
2009-11-27 19:48:09 -05:00
) ) ;
2011-08-03 07:15:01 -04:00
add_option ( _ ( " MIDI " ) ,
2009-11-27 19:48:09 -05:00
new BoolOption (
" send-mmc " ,
_ ( " Send MIDI Machine Control commands " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_send_mmc ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_send_mmc )
2009-11-27 19:48:09 -05:00
) ) ;
2011-08-03 07:15:01 -04:00
add_option ( _ ( " MIDI " ) ,
2009-11-27 19:48:09 -05:00
new BoolOption (
" midi-feedback " ,
_ ( " Send MIDI control feedback " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_midi_feedback ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_midi_feedback )
2009-11-27 19:48:09 -05:00
) ) ;
2011-08-03 07:15:01 -04:00
add_option ( _ ( " MIDI " ) ,
2009-05-13 20:15:38 -04:00
new SpinOption < uint8_t > (
" mmc-receive-device-id " ,
_ ( " Inbound MMC device ID " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_mmc_receive_device_id ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_mmc_receive_device_id ) ,
2009-05-13 20:15:38 -04:00
0 , 128 , 1 , 10
) ) ;
2011-08-03 07:15:01 -04:00
add_option ( _ ( " MIDI " ) ,
2009-05-13 20:15:38 -04:00
new SpinOption < uint8_t > (
" mmc-send-device-id " ,
_ ( " Outbound MMC device ID " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_mmc_send_device_id ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_mmc_send_device_id ) ,
2009-05-13 20:15:38 -04:00
0 , 128 , 1 , 10
) ) ;
2011-08-03 07:15:01 -04:00
add_option ( _ ( " MIDI " ) ,
2009-05-13 20:15:38 -04:00
new SpinOption < int32_t > (
" initial-program-change " ,
_ ( " Initial program change " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_initial_program_change ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_initial_program_change ) ,
2009-05-13 20:15:38 -04:00
- 1 , 65536 , 1 , 10
) ) ;
2011-08-03 07:15:01 -04:00
add_option ( _ ( " MIDI " ) ,
new BoolOption (
" diplay-first-midi-bank-as-zero " ,
_ ( " Display first MIDI bank/program as 0 " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_first_midi_bank_is_zero ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_first_midi_bank_is_zero )
) ) ;
2011-12-02 14:35:18 -05:00
add_option ( _ ( " MIDI " ) ,
new BoolOption (
" never-display-periodic-midi " ,
_ ( " Never display periodic MIDI messages (MTC, MIDI Clock) " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_never_display_periodic_midi ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_never_display_periodic_midi )
) ) ;
2011-12-07 09:23:32 -05:00
add_option ( _ ( " MIDI " ) ,
new BoolOption (
" sound-midi-notes " ,
_ ( " Sound MIDI notes as they are selected " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_sound_midi_notes ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_sound_midi_notes )
) ) ;
2011-11-03 18:00:49 -04:00
/* USER INTERACTION */
2009-05-16 10:50:10 -04:00
2013-01-23 13:44:16 -05:00
if ( getenv ( " ARDOUR_BUNDLED " ) ) {
add_option ( _ ( " User interaction " ) ,
new BoolOption (
" enable-translation " ,
string_compose ( _ ( " Use translations of %1 messages \n "
" <i>(requires a restart of %1 to take effect)</i> \n "
" <i>(if available for your language preferences)</i> " ) , PROGRAM_NAME ) ,
sigc : : ptr_fun ( ARDOUR : : translations_are_enabled ) ,
sigc : : ptr_fun ( ARDOUR : : set_translations_enabled ) ) ) ;
}
2011-11-03 18:00:49 -04:00
add_option ( _ ( " User interaction " ) , new OptionEditorHeading ( _ ( " Keyboard " ) ) ) ;
add_option ( _ ( " User interaction " ) , new KeyboardOptions ) ;
2013-06-06 08:31:46 -04:00
/* Control Surfaces */
2011-11-03 18:00:49 -04:00
2013-06-06 08:31:46 -04:00
add_option ( _ ( " Control Surfaces " ) , new ControlSurfacesOptions ( * this ) ) ;
2009-05-16 10:50:10 -04:00
ComboOption < RemoteModel > * rm = new ComboOption < RemoteModel > (
" remote-model " ,
_ ( " Control surface remote ID " ) ,
2009-12-11 18:29:48 -05:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_remote_model ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_remote_model )
2009-05-16 10:50:10 -04:00
) ;
rm - > add ( UserOrdered , _ ( " assigned by user " ) ) ;
rm - > add ( MixerOrdered , _ ( " follows order of mixer " ) ) ;
rm - > add ( EditorOrdered , _ ( " follows order of editor " ) ) ;
2013-06-06 08:31:46 -04:00
add_option ( _ ( " Control Surfaces " ) , rm ) ;
2011-10-29 16:08:48 -04:00
2013-03-12 17:00:09 -04:00
/* VIDEO Timeline */
add_option ( _ ( " Video " ) , new VideoTimelineOptions ( _rc_config ) ) ;
2011-10-29 16:08:48 -04:00
/* INTERFACE */
2013-06-06 08:31:46 -04:00
add_option ( S_ ( " Preferences|GUI " ) ,
2011-11-09 15:10:05 -05:00
new BoolOption (
2012-01-22 05:18:37 -05:00
" widget-prelight " ,
2011-11-09 15:10:05 -05:00
_ ( " Graphically indicate mouse pointer hovering over various widgets " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_widget_prelight ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_widget_prelight )
) ) ;
2013-06-06 08:31:46 -04:00
add_option ( S_ ( " Preferences|GUI " ) ,
2012-11-14 18:23:53 -05:00
new BoolOption (
" use-tooltips " ,
_ ( " Show tooltips if mouse hovers over a control " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_use_tooltips ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_use_tooltips )
) ) ;
2011-11-03 18:00:49 -04:00
# ifndef GTKOSX
/* font scaling does nothing with GDK/Quartz */
2013-06-06 08:31:46 -04:00
add_option ( S_ ( " Preferences|GUI " ) , new FontScalingOptions ( _rc_config ) ) ;
2011-11-03 18:00:49 -04:00
# endif
2013-03-03 08:45:32 -05:00
add_option ( S_ ( " GUI " ) ,
new BoolOption (
" super-rapid-clock-update " ,
_ ( " update transport clock display every 40ms instead of every 100ms " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_super_rapid_clock_update ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_super_rapid_clock_update )
) ) ;
2011-10-29 16:08:48 -04:00
/* The names of these controls must be the same as those given in MixerStrip
for the actual widgets being controlled .
*/
_mixer_strip_visibility . add ( 0 , X_ ( " PhaseInvert " ) , _ ( " Phase Invert " ) ) ;
_mixer_strip_visibility . add ( 0 , X_ ( " SoloSafe " ) , _ ( " Solo Safe " ) ) ;
_mixer_strip_visibility . add ( 0 , X_ ( " SoloIsolated " ) , _ ( " Solo Isolated " ) ) ;
2011-10-29 17:18:26 -04:00
_mixer_strip_visibility . add ( 0 , X_ ( " Comments " ) , _ ( " Comments " ) ) ;
2011-10-31 22:39:39 -04:00
_mixer_strip_visibility . add ( 0 , X_ ( " MeterPoint " ) , _ ( " Meter Point " ) ) ;
2011-10-29 16:08:48 -04:00
add_option (
2013-06-06 08:31:46 -04:00
S_ ( " Preferences|GUI " ) ,
2011-10-29 16:08:48 -04:00
new VisibilityOption (
_ ( " Mixer Strip " ) ,
& _mixer_strip_visibility ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_mixer_strip_visibility ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_mixer_strip_visibility )
)
) ;
2011-11-03 18:00:49 -04:00
2013-06-06 08:31:46 -04:00
add_option ( S_ ( " Preferences|GUI " ) ,
2011-11-03 18:00:49 -04:00
new BoolOption (
" default-narrow_ms " ,
2012-06-19 10:12:01 -04:00
_ ( " Use narrow strips in the mixer by default " ) ,
2011-11-03 18:00:49 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_default_narrow_ms ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_default_narrow_ms )
) ) ;
2013-06-06 08:31:46 -04:00
add_option ( S_ ( " Preferences|GUI " ) , new OptionEditorHeading ( _ ( " Metering " ) ) ) ;
2011-11-03 18:00:49 -04:00
ComboOption < float > * mht = new ComboOption < float > (
" meter-hold " ,
2013-07-09 06:42:12 -04:00
_ ( " Peak hold time " ) ,
2011-11-03 18:00:49 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_meter_hold ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_meter_hold )
) ;
mht - > add ( MeterHoldOff , _ ( " off " ) ) ;
mht - > add ( MeterHoldShort , _ ( " short " ) ) ;
mht - > add ( MeterHoldMedium , _ ( " medium " ) ) ;
mht - > add ( MeterHoldLong , _ ( " long " ) ) ;
2013-06-06 08:31:46 -04:00
add_option ( S_ ( " Preferences|GUI " ) , mht ) ;
2011-11-03 18:00:49 -04:00
ComboOption < float > * mfo = new ComboOption < float > (
" meter-falloff " ,
2013-07-09 06:42:12 -04:00
_ ( " DPM fall-off " ) ,
2011-11-03 18:00:49 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_meter_falloff ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_meter_falloff )
) ;
2013-07-05 19:40:57 -04:00
mfo - > add ( METER_FALLOFF_OFF , _ ( " off " ) ) ;
mfo - > add ( METER_FALLOFF_SLOWEST , _ ( " slowest [6.6dB/sec] " ) ) ;
mfo - > add ( METER_FALLOFF_SLOW , _ ( " slow [8.6dB/sec] (BBC PPM, EBU PPM) " ) ) ;
mfo - > add ( METER_FALLOFF_SLOWISH , _ ( " slowish [12.0dB/sec] (DIN) " ) ) ;
mfo - > add ( METER_FALLOFF_MODERATE , _ ( " moderate [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM) " ) ) ;
mfo - > add ( METER_FALLOFF_MEDIUM , _ ( " medium [20dB/sec] " ) ) ;
mfo - > add ( METER_FALLOFF_FAST , _ ( " fast [32dB/sec] " ) ) ;
mfo - > add ( METER_FALLOFF_FASTER , _ ( " faster [46dB/sec] " ) ) ;
mfo - > add ( METER_FALLOFF_FASTEST , _ ( " fastest [70dB/sec] " ) ) ;
2011-11-03 18:00:49 -04:00
2013-06-06 08:31:46 -04:00
add_option ( S_ ( " Preferences|GUI " ) , mfo ) ;
2013-07-05 16:18:04 -04:00
ComboOption < MeterLineUp > * mlu = new ComboOption < MeterLineUp > (
" meter-line-up-level " ,
2013-07-23 15:20:51 -04:00
_ ( " Meter line-up level; 0dBu " ) ,
2013-07-05 16:18:04 -04:00
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_meter_line_up_level ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_meter_line_up_level )
) ;
2013-07-23 17:07:41 -04:00
mlu - > add ( MeteringLineUp24 , _ ( " -24dBFS (SMPTE US: 4dBu = -20dBFS) " ) ) ;
mlu - > add ( MeteringLineUp20 , _ ( " -20dBFS (SMPTE RP.0155) " ) ) ;
2013-07-23 15:20:51 -04:00
mlu - > add ( MeteringLineUp18 , _ ( " -18dBFS (EBU, BBC) " ) ) ;
mlu - > add ( MeteringLineUp15 , _ ( " -15dBFS (DIN) " ) ) ;
2013-07-05 16:18:04 -04:00
2013-07-27 21:29:16 -04:00
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( mlu - > tip_widget ( ) , _ ( " Configure meter-marks and color-knee point for dBFS scale DPM, set reference level for IEC1/Nordic, IEC2 PPM and VU meter. " ) ) ;
2013-07-05 19:40:57 -04:00
2013-07-05 16:18:04 -04:00
add_option ( S_ ( " Preferences|GUI " ) , mlu ) ;
2013-07-05 18:01:51 -04:00
2013-07-27 21:29:16 -04:00
ComboOption < MeterLineUp > * mld = new ComboOption < MeterLineUp > (
" meter-line-up-din " ,
_ ( " IEC1/DIN Meter line-up level; 0dBu " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_meter_line_up_din ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_meter_line_up_din )
) ;
mld - > add ( MeteringLineUp24 , _ ( " -24dBFS (SMPTE US: 4dBu = -20dBFS) " ) ) ;
mld - > add ( MeteringLineUp20 , _ ( " -20dBFS (SMPTE RP.0155) " ) ) ;
mld - > add ( MeteringLineUp18 , _ ( " -18dBFS (EBU, BBC) " ) ) ;
mld - > add ( MeteringLineUp15 , _ ( " -15dBFS (DIN) " ) ) ;
Gtkmm2ext : : UI : : instance ( ) - > set_tip ( mld - > tip_widget ( ) , _ ( " Reference level for IEC1/DIN meter. " ) ) ;
add_option ( S_ ( " Preferences|GUI " ) , mld ) ;
2013-07-23 15:20:51 -04:00
ComboOption < VUMeterStandard > * mvu = new ComboOption < VUMeterStandard > (
" meter-vu-standard " ,
_ ( " VU Meter standard " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_meter_vu_standard ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_meter_vu_standard )
) ;
2013-07-23 17:07:41 -04:00
mvu - > add ( MeteringVUfrench , _ ( " 0VU = -2dBu (France) " ) ) ;
mvu - > add ( MeteringVUamerican , _ ( " 0VU = 0dBu (North America, Australia) " ) ) ;
mvu - > add ( MeteringVUstandard , _ ( " 0VU = +4dBu (standard) " ) ) ;
2013-07-25 17:33:11 -04:00
mvu - > add ( MeteringVUeight , _ ( " 0VU = +8dBu " ) ) ;
2013-07-23 15:20:51 -04:00
add_option ( S_ ( " Preferences|GUI " ) , mvu ) ;
2013-07-09 06:42:12 -04:00
Gtk : : Adjustment * mpk = manage ( new Gtk : : Adjustment ( 0 , - 10 , 0 , .1 , .1 ) ) ;
HSliderOption * mpks = new HSliderOption ( " meter-peak " ,
_ ( " Peak threshold [dBFS] " ) ,
2013-07-05 19:40:17 -04:00
mpk ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_meter_peak ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_meter_peak )
) ;
Gtkmm2ext : : UI : : instance ( ) - > set_tip
( mpks - > tip_widget ( ) ,
_ ( " Specify the audio signal level in dbFS at and above which the meter-peak indicator will flash red. " ) ) ;
add_option ( S_ ( " Preferences|GUI " ) , mpks ) ;
2013-07-27 21:01:37 -04:00
add_option ( S_ ( " Preferences|GUI " ) ,
new BoolOption (
" meter-style-led " ,
_ ( " LED meter style " ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : get_meter_style_led ) ,
sigc : : mem_fun ( * _rc_config , & RCConfiguration : : set_meter_style_led )
) ) ;
2009-05-13 20:15:38 -04:00
}
2011-01-04 15:52:30 -05:00
void
RCOptionEditor : : parameter_changed ( string const & p )
{
OptionEditor : : parameter_changed ( p ) ;
2011-06-01 13:00:29 -04:00
2011-01-04 15:52:30 -05:00
if ( p = = " use-monitor-bus " ) {
bool const s = Config - > get_use_monitor_bus ( ) ;
if ( ! s ) {
/* we can't use this if we don't have a monitor bus */
Config - > set_solo_control_is_listen_control ( false ) ;
}
_solo_control_is_listen_control - > set_sensitive ( s ) ;
_listen_position - > set_sensitive ( s ) ;
2012-10-11 11:50:54 -04:00
} else if ( p = = " sync-source " ) {
2012-11-12 11:49:11 -05:00
_sync_source - > set_sensitive ( true ) ;
if ( _session ) {
2013-01-05 05:40:07 -05:00
_sync_source - > set_sensitive ( ! _session - > config . get_external_sync ( ) ) ;
2012-11-12 11:49:11 -05:00
}
2012-10-16 19:04:00 -04:00
switch ( Config - > get_sync_source ( ) ) {
case ARDOUR : : MTC :
case ARDOUR : : LTC :
2012-10-11 11:50:54 -04:00
_sync_genlock - > set_sensitive ( true ) ;
_sync_framerate - > set_sensitive ( true ) ;
2012-11-07 18:02:11 -05:00
_sync_source_2997 - > set_sensitive ( true ) ;
2012-10-16 19:04:00 -04:00
break ;
default :
_sync_genlock - > set_sensitive ( false ) ;
_sync_framerate - > set_sensitive ( false ) ;
2012-11-07 18:02:11 -05:00
_sync_source_2997 - > set_sensitive ( false ) ;
2012-10-16 19:04:00 -04:00
break ;
2012-10-10 23:10:18 -04:00
}
2012-10-23 19:32:36 -04:00
} else if ( p = = " send-ltc " ) {
bool const s = Config - > get_send_ltc ( ) ;
_ltc_send_continuously - > set_sensitive ( s ) ;
_ltc_volume_slider - > set_sensitive ( s ) ;
2012-10-10 23:10:18 -04:00
}
}
2012-10-23 19:32:36 -04:00
void RCOptionEditor : : ltc_generator_volume_changed ( ) {
_rc_config - > set_ltc_output_volume ( pow ( 10 , _ltc_volume_adjustment - > get_value ( ) / 20 ) ) ;
}
2012-10-10 23:10:18 -04:00
void
RCOptionEditor : : populate_sync_options ( )
{
vector < SyncSource > sync_opts = ARDOUR : : get_available_sync_options ( ) ;
_sync_source - > clear ( ) ;
for ( vector < SyncSource > : : iterator i = sync_opts . begin ( ) ; i ! = sync_opts . end ( ) ; + + i ) {
_sync_source - > add ( * i , sync_source_to_string ( * i ) ) ;
2011-01-04 15:52:30 -05:00
}
}