25 static LiVESWidget *saved_closebutton;
26 static LiVESWidget *saved_applybutton;
27 static LiVESWidget *saved_revertbutton;
28 static boolean mt_needs_idlefunc;
32 static uint32_t prefs_current_page;
34 static void select_pref_list_row(uint32_t selected_idx,
_prefsw *
prefsw);
36 #define ACTIVE(widget, signal) lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->widget), LIVES_WIDGET_ ##signal## \
37 _SIGNAL, LIVES_GUI_CALLBACK(apply_button_set_enabled), NULL)
47 if (LIVES_IS_TOGGLE_BUTTON(widget))
50 else if (LIVES_IS_CHECK_MENU_ITEM(widget))
57 static void on_osc_enable_toggled(LiVESToggleButton *t1, livespointer t2) {
65 static LiVESResponseType get_pref_inner(
const char *filename,
const char *key,
char *val,
int maxlen,
68 memset(val, 0, maxlen);
73 lives_snprintf(val, maxlen,
"%s", prefval);
75 return LIVES_RESPONSE_YES;
77 return LIVES_RESPONSE_NO;
88 return LIVES_RESPONSE_NONE;
101 if (ret == LIVES_RESPONSE_NO) lives_snprintf(val, maxlen,
"%s", def);
108 return get_pref_inner(filename, key, val, maxlen,
mainw->
gen_cache);
116 tmp = lives_filename_to_utf8(val, -1, NULL, NULL, NULL);
117 lives_snprintf(val, maxlen,
"%s", tmp);
129 LiVESList *retlist = NULL;
131 if (
get_string_pref(key, buf, 65535) == LIVES_RESPONSE_NO)
return NULL;
132 if (!(*buf))
return NULL;
135 array = lives_strsplit(buf,
"\n", nvals);
136 for (i = 0; i < nvals; i++) {
137 retlist = lives_list_append(retlist, lives_strdup(array[i]));
140 lives_strfreev(array);
149 if (!strcmp(buffer,
"true"))
return TRUE;
157 if (!(*buffer))
return defval;
158 if (!strcmp(buffer,
"true"))
return TRUE;
166 if (!(*buffer))
return 0;
174 if (!(*buffer))
return defval;
182 if (!(*buffer))
return defval;
190 if (!(*buffer))
return 0.;
191 return strtod(buffer, NULL);
198 if (!(*buffer))
return defval;
199 return strtod(buffer, NULL);
206 if (!(*buffer))
return FALSE;
219 if (!(*buffer))
return FALSE;
222 array = lives_strsplit(buffer,
" ", 4);
223 lcol->
red = atoi(array[0]);
224 lcol->
green = atoi(array[1]);
225 lcol->
blue = atoi(array[2]);
226 if (ntoks == 4) lcol->
alpha = atoi(array[3]);
227 else lcol->
alpha = 65535;
228 lives_strfreev(array);
241 if (!tmp)
return FALSE;
247 array = lives_strsplit(tmp,
" ", 4);
248 lcol->
red = atoi(array[0]);
249 lcol->
green = atoi(array[1]);
250 lcol->
blue = atoi(array[2]);
251 if (ntoks == 4) lcol->
alpha = atoi(array[3]);
252 else lcol->
alpha = 65535;
253 lives_strfreev(array);
259 static int run_prefs_command(
const char *com) {
269 }
else if (ret == 3) {
272 }
else if (ret != 0) {
277 }
while (ret == LIVES_RESPONSE_RETRY);
284 int ret = run_prefs_command(com);
292 int ret = run_prefs_command(com);
300 int ret = run_prefs_command(com);
308 char *tmp = U82F(value);
310 int ret = run_prefs_command(com);
324 }
while (ret == LIVES_RESPONSE_RETRY);
331 int ret = run_prefs_command(com);
340 int ret = run_prefs_command(com);
348 int ret = run_prefs_command(com);
362 ret = run_prefs_command(com);
370 LiVESList *xlist = values;
371 char *
string = NULL, *tmp;
375 if (
string == NULL)
string = lives_strdup((
char *)xlist->data);
384 if (
string == NULL)
string = lives_strdup(
"");
405 int ret = run_prefs_command(com);
494 do_error_dialog(
_(
"\n\nVideo playback plugins are only activated in\nfull screen, separate window (fs) mode\n"));
532 static void set_workdir_label_text(LiVESLabel *label,
const char *dir) {
537 tmp = (
_(
"(Free space = UNKNOWN)"));
545 "and sets are stored.\n"
546 "It should be in a partition with plenty of free disk space.\n\n%s"),
558 const char *audio_player = newval;
584 do_error_dialogf(
_(
"\nUnable to switch audio players to %s\n%s must be installed first.\nSee %s\n"),
622 #ifdef HAVE_PULSE_AUDIO
627 do_error_dialogf(
_(
"\nUnable to switch audio players to %s\n%s must be installed first.\nSee %s\n"),
660 #ifdef HAVE_PULSE_AUDIO
690 if (strlen(newval) > 2) {
886 boolean success =
FALSE;
887 boolean rec_ext_audio = newval;
904 if (
prefsw && permanent) {
936 #ifdef HAVE_PULSE_AUDIO
1034 LiVESWidgetColor col;
1059 if (newval <= 0 && prefs->mt_auto_back > 0) {
1079 if (newval < mainw->n_messages && newval >= 0) {
1205 }
else permanent =
FALSE;
1271 if (newval) js_open();
1278 prefs->use_alsa_midi = !newval;
1280 prefs->alsa_midi_dummy = newval;
1337 #ifdef HAVE_LIBVISUAL
1348 const char *audio_codec = NULL;
1351 LiVESWidgetColor colf, colb, colf2, colb2, coli, colt, coltcfg, coltcbg;
1357 boolean needs_restart =
FALSE;
1401 boolean warn_after_dvgrab =
1409 boolean warn_yuv4m_open =
1410 #ifdef HAVE_YUV4MPEG
1420 boolean warn_mt_backup_space
1499 #ifdef ENABLE_JACK_TRANSPORT
1508 boolean jack_tstart =
FALSE;
1509 boolean jack_master =
FALSE;
1510 boolean jack_client =
FALSE;
1511 boolean jack_tb_start =
FALSE, jack_mtb_start =
FALSE;
1512 boolean jack_tb_client =
FALSE;
1547 #ifdef OMC_MIDI_IMPL
1568 char audio_player[256];
1575 unsigned char *new_undo_buf;
1579 boolean set_omc_dev_opts =
FALSE;
1580 #ifdef OMC_MIDI_IMPL
1581 boolean needs_midi_restart =
FALSE;
1587 -1, NULL, NULL, NULL);
1669 lives_snprintf(workdir,
PATH_MAX,
"%s",
1671 -1, NULL, NULL, NULL)));
1720 if (msgs_unlimited) {
1780 #ifdef HAVE_PULSE_AUDIO
1792 #if GTK_CHECK_VERSION(2, 12, 0)
1827 #ifdef HAVE_LIBVISUAL
1885 needs_restart =
TRUE;
1889 if (!fx_threads) nfx_threads = 1;
2092 lives_snprintf(
prefs->
theme, 64,
"%s", theme);
2215 set_omc_dev_opts =
TRUE;
2218 #ifdef OMC_MIDI_IMPL
2227 set_omc_dev_opts =
TRUE;
2231 set_omc_dev_opts =
TRUE;
2234 if (!needs_midi_restart) {
2240 set_omc_dev_opts =
TRUE;
2241 if (!needs_midi_restart) {
2247 if (needs_midi_restart) {
2290 if (!mt_enable_audio) mt_def_achans = 0;
2309 if ((new_undo_buf = (
unsigned char *)
lives_malloc(mt_undo_buf * 1024 * 1024)) == NULL) {
2314 if (mt_undo_buf < prefs->mt_undo_buf) {
2315 ssize_t space_needed =
mainw->
multitrack->undo_buffer_used - (size_t)(mt_undo_buf * 1024 * 1024);
2321 ulist->data = new_undo_buf + ((
unsigned char *)ulist->data -
mainw->
multitrack->undo_mem);
2322 ulist = ulist->next;
2342 if (mt_autoback_always) mt_autoback_time = 0;
2343 else if (mt_autoback_never) mt_autoback_time = -1;
2368 char *xworkdir = lives_strdup(workdir);
2373 lives_snprintf(workdir,
PATH_MAX,
"%s", xworkdir);
2381 needs_restart =
TRUE;
2390 return needs_restart;
2423 for (idx = 0; idx < listlen && strcmp((
char *)lives_list_nth_data(
prefs->
acodec_list, idx), audio_codec); idx++);
2442 boolean is_allowed =
FALSE;
2463 for (idx = 0; strlen(
anames[idx]); idx++) {
2466 (
_(
"PCM (highest quality; largest files)")));
2528 static void on_forcesmon_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2534 play_monitor != gui_monitor &&
2539 static void pmoni_gmoni_changed(LiVESWidget *sbut, livespointer user_data) {
2549 static void on_mtbackevery_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2552 if (user_data) xprefsw = (
_prefsw *)user_data;
2560 #ifdef ENABLE_JACK_TRANSPORT
2561 static void after_jack_client_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2573 static void after_jack_tb_start_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2586 static void after_jack_master_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2600 #ifdef OMC_MIDI_IMPL
2602 static void on_alsa_midi_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2605 if (user_data) xprefsw = (
_prefsw *)user_data;
2619 static void on_audp_entry_changed(LiVESWidget *audp_combo, livespointer ptr) {
2662 #ifdef HAVE_PULSE_AUDIO
2682 static void stream_audio_toggled(LiVESToggleButton *togglebutton, livespointer user_data) {
2756 static void pref_init_list(LiVESWidget * list) {
2757 LiVESCellRenderer *renderer, *pixbufRenderer;
2758 LiVESTreeViewColumn *column1, *column2;
2759 LiVESListStore *store;
2781 static void prefs_add_to_list(LiVESWidget * list, LiVESPixbuf * pix,
const char *str, uint32_t idx) {
2782 LiVESListStore *store;
2800 LiVESTreeModel *model;
2803 for (
int i = 0; i < 2; i++) {
2812 switch (prefs_current_page) {
2875 #ifdef OMC_MIDI_IMPL
2888 #if !LIVES_HAS_GRID_WIDGET
2920 static void spinbutton_ds_value_changed(LiVESSpinButton * warn_ds, livespointer is_critp) {
2921 boolean is_crit = LIVES_POINTER_TO_INT(is_critp);
2922 char *tmp = NULL, *tmp2;
2924 uint64_t umyval = (uint64_t)myval *
MILLIONS(1);
2941 static void theme_widgets_set_sensitive(LiVESCombo * combo, livespointer xprefsw) {
2944 boolean theme_set =
TRUE;
2976 static boolean check_txtsize(LiVESWidget * combo) {
2983 show_warn_image(combo,
_(
"Text size may be too large for the screen size"));
2995 LiVESWidget *dialog_vbox_main;
2996 LiVESWidget *dialog_table;
2997 LiVESWidget *list_scroll;
2999 LiVESPixbuf *pixbuf_multitrack;
3000 LiVESPixbuf *pixbuf_gui;
3001 LiVESPixbuf *pixbuf_decoding;
3002 LiVESPixbuf *pixbuf_playback;
3003 LiVESPixbuf *pixbuf_recording;
3004 LiVESPixbuf *pixbuf_encoding;
3005 LiVESPixbuf *pixbuf_effects;
3006 LiVESPixbuf *pixbuf_directories;
3007 LiVESPixbuf *pixbuf_warnings;
3008 LiVESPixbuf *pixbuf_misc;
3009 LiVESPixbuf *pixbuf_themes;
3010 LiVESPixbuf *pixbuf_net;
3011 LiVESPixbuf *pixbuf_jack;
3012 LiVESPixbuf *pixbuf_midi;
3014 LiVESWidget *ins_resample;
3017 LiVESWidget *layout;
3022 LiVESWidget *dirbutton;
3024 LiVESWidget *pp_combo;
3027 LiVESWidget *mt_enter_defs;
3029 LiVESWidget *advbutton;
3031 LiVESWidget *sp_red, *sp_green, *sp_blue;
3034 #ifdef OMC_MIDI_IMPL
3035 LiVESWidget *raw_midi_button;
3043 LiVESSList *jpeg_png = NULL;
3044 LiVESSList *mt_enter_prompt = NULL;
3045 LiVESSList *rb_group2 = NULL;
3048 #ifdef OMC_MIDI_IMPL
3049 LiVESSList *alsa_midi_group = NULL;
3050 LiVESList *mchanlist = NULL;
3054 LiVESSList *autoback_group = NULL;
3055 LiVESSList *st_interface_group = NULL;
3057 LiVESSList *asrc_group = NULL;
3060 LiVESList *themes = NULL;
3061 LiVESList *ofmt = NULL;
3062 LiVESList *ofmt_all = NULL;
3063 LiVESList *audp = NULL;
3064 LiVESList *encoders = NULL;
3065 LiVESList *vid_playback_plugins = NULL;
3066 LiVESList *textsizes_list;
3067 LiVESList *rmodelist = NULL;
3068 LiVESList *radjlist = NULL;
3072 char **array, **filt;
3073 char *tmp, *tmp2, *tmp3;
3077 #ifdef OMC_MIDI_IMPL
3083 boolean has_ap_rec =
FALSE;
3098 if (!saved_dialog) {
3127 #if GTK_CHECK_VERSION(3, 16, 0)
3133 "background-image", tmp);
3163 LIVES_POLICY_AUTOMATIC);
3180 #if GTK_CHECK_VERSION(3, 0, 0)
3212 LIVES_BOX(hbox), NULL);
3228 (tmp = H_(
"Setting is assumed automatically if letterbox playback is enabled")));
3238 #if GTK_CHECK_VERSION(2, 12, 0)
3294 1., 1., 0, LIVES_BOX(hbox), NULL);
3301 nmons == 1 ? 0 : nmons, 1., 1., 0, LIVES_BOX(hbox),
3302 (tmp = lives_strdup(H_(
"A setting of 0 means use all available "
3303 "monitors (only works with some playback "
3314 (tmp2 = (
_(
"Ignore all except the first monitor."))));
3325 lives_signal_sync_connect(LIVES_GUI_OBJECT(
prefsw->
forcesmon), LIVES_WIDGET_TOGGLED_SIGNAL,
3326 LIVES_GUI_CALLBACK(on_forcesmon_toggled), NULL);
3331 LIVES_BOX(hbox), NULL);
3338 pmoni_gmoni_changed(NULL, (livespointer)
prefsw);
3347 LIVES_BOX(hbox), NULL);
3348 ACTIVE(nmessages_spin, VALUE_CHANGED);
3355 lives_signal_sync_connect(LIVES_GUI_OBJECT(
prefsw->
nmessages_spin), LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
3357 ACTIVE(msgs_unlimited, TOGGLED);
3363 LIVES_BOX(hbox), NULL);
3369 LIVES_GUI_CALLBACK(check_txtsize), NULL);
3373 ACTIVE(msg_textsize_combo, CHANGED);
3378 ACTIVE(msgs_pbdis, TOGGLED);
3406 &mt_enter_prompt, LIVES_BOX(hbox), NULL);
3409 &mt_enter_prompt, LIVES_BOX(hbox), NULL);
3450 LIVES_BOX(hbox), NULL);
3474 &autoback_group, LIVES_BOX(hbox), NULL);
3481 LIVES_GUI_CALLBACK(on_mtbackevery_toggled),
prefsw);
3497 1., 1., 0, LIVES_BOX(hbox), NULL);
3519 (tmp2 = (H_(
"Enable instant opening of some file types using decoder plugins"))));
3528 lives_signal_sync_connect(LIVES_GUI_OBJECT(advbutton), LIVES_WIDGET_CLICKED_SIGNAL,
3538 LIVES_BOX(hbox), NULL);
3544 _(
"The image format to be used when opening clips\n"
3545 "for which there is no instant decoder candidate."));
3574 (tmp = H_(
"A higher value will require less disk space\n"
3575 "but may slow down the application.\n"
3576 "For jpeg, a higher value may lead to\n"
3577 "loss of image quality\n"
3578 "The default value of 15 is recommended")));
3592 _(
"Enable automatic deinterlacing when possible"))),
3594 (tmp2 = (
_(
"Automatically deinterlace frames when a plugin suggests it"))));
3602 _(
"Automatic trimming / padding of audio when possible"))),
3604 (tmp2 = (
_(
"Automatically trim or pad audio when a plugin suggests it"))));
3614 (tmp2 = (
_(
"Clip any blank borders from frames where possible"))));
3625 _(
"When opening multiple files, concatenate images into one clip"),
3658 (tmp2 = (H_(
"If enabled, quality will be automatically adjusted during playback\n"
3659 "in order to maintain a smooth frame rate"))));
3675 (tmp2 = (
_(
"The preview quality for video playback - affects resizing"))));
3693 LIVES_BOX(hbox), NULL);
3708 (tmp = H_(
"This setting only affects newly created layouts.\nTo change the current layout, use menu option\n'Tools' / 'Change Width, Height and Audio Values'\nin the multitrack window")));
3721 LIVES_BOX(hbox), NULL);
3731 vid_playback_plugins = lives_list_prepend(vid_playback_plugins,
3752 lives_signal_sync_connect_after(LIVES_WIDGET_OBJECT(pp_combo), LIVES_WIDGET_CHANGED_SIGNAL,
3759 (tmp2 =
_(
"Stream audio to playback plugin")));
3765 LIVES_GUI_CALLBACK(stream_audio_toggled), NULL);
3772 (tmp2 = lives_strdup
3773 (
_(
"Record output from player instead of input to player"))));
3792 #ifdef HAVE_PULSE_AUDIO
3806 if (has_ap_rec) audp = lives_list_append(audp, lives_strdup(
AUDIO_PLAYER_SOX));
3830 #ifdef HAVE_PULSE_AUDIO
3860 #ifdef HAVE_PULSE_AUDIO
3865 (tmp2 = (
_(
"Recommended, but may interfere with other running "
3866 "audio applications"))));
3869 ACTIVE(checkbutton_parestart, TOGGLED);
3874 LIVES_BOX(hbox), NULL);
3875 ACTIVE(audio_command_entry, CHANGED);
3903 &asrc_group, LIVES_BOX(hbox), NULL);
3943 _(
"Record audio when capturing an e_xternal window\n (requires jack or pulseaudio)"),
3985 LIVES_BOX(hbox), NULL);
4024 LIVES_BOX(hbox), NULL);
4034 LIVES_BOX(hbox), NULL);
4042 lives_layout_add_label(LIVES_LAYOUT(layout),
_(
"Recording is always paused if the disk space critical level is reached"),
4057 _(
"Delay recording playback start until external audio volume reaches "),
4059 LIVES_BOX(hbox), NULL);
4075 (tmp = H_(
"If LiVES crashes or ctrl-c is pressed during "
4076 "recording or when rendering a recording,"
4077 "the recorded material will be retained and reloaded "
4078 "the next time LiVES is restarted.\n\n")));
4079 ACTIVE(rr_crash, TOGGLED);
4089 H_(
"Enables various pre-processing stages so that the resulting rendering\n"
4090 "appears smoother and with fewer audio glitches"));
4093 ACTIVE(rr_super, TOGGLED);
4096 rmodelist = lives_list_append(rmodelist,
_(
"Prioritize Audio rate"));
4097 rmodelist = lives_list_append(rmodelist,
_(
"Prioritize Frame rate"));
4099 H_(
"In 'Prioritize Audio rate' mode, frame timings will be adjusted slightly "
4100 "to maintain the correct audio rate\n"
4101 "In 'Constant Frame Rate' mode, the audio rate will be adjusted slightly "
4102 "so that frames are shown at the exact recorded time\n"));
4105 ACTIVE(rr_combo, CHANGED);
4110 LIVES_BOX(hbox), NULL);
4112 ACTIVE(rr_pre_smooth, TOGGLED);
4116 LIVES_BOX(hbox), NULL);
4118 ACTIVE(rr_qsmooth, TOGGLED);
4122 radjlist = lives_list_append(radjlist,
_(
"Apply effects state at original time"));
4123 radjlist = lives_list_append(radjlist,
_(
"Apply effects state at adjusted time"));
4127 ACTIVE(rr_scombo, CHANGED);
4131 LIVES_BOX(hbox), NULL);
4133 ACTIVE(rr_amicro, TOGGLED);
4137 LIVES_BOX(hbox), NULL);
4139 ACTIVE(rr_ramicro, TOGGLED);
4166 _(
"You can also change these values when encoding a clip"),
FALSE);
4176 LIVES_BOX(hbox), NULL);
4188 for (i = 0; i < lives_list_length(ofmt_all); i++) {
4189 if (
get_token_count((
char *)lives_list_nth_data(ofmt_all, i),
'|') > 2) {
4190 array = lives_strsplit((
char *)lives_list_nth_data(ofmt_all, i),
"|", -1);
4195 ofmt = lives_list_append(ofmt, lives_strdup(array[1]));
4196 lives_strfreev(array);
4241 LIVES_BOX(hbox), NULL);
4247 LIVES_BOX(hbox), NULL);
4258 (tmp = (
_(
"Also affects the monitor gamma !! (for now...)"))));
4267 (tmp2 = lives_strdup(
4268 _(
"The number of \"virtual\" real time effect keys. "
4269 "They can be controlled through the real time effects window, or via network (OSC)."))));
4281 1., 1., 0, LIVES_BOX(hbox), NULL);
4321 (tmp = H_(
"(Frei0r directories should be separated by ':',\n"
4322 "ordered from lowest to highest priority)")));
4332 LIVES_BOX(hbox), NULL);
4340 LIVES_BOX(hbox), NULL);
4344 #ifndef HAVE_LIBVISUAL
4369 (LiVESAttachOptions)(LIVES_FILL),
4370 (LiVESAttachOptions)(0), 0, 0);
4374 (LiVESAttachOptions)(LIVES_FILL),
4375 (LiVESAttachOptions)(0), 0, 0);
4379 (LiVESAttachOptions)(LIVES_FILL),
4380 (LiVESAttachOptions)(0), 0, 0);
4384 (LiVESAttachOptions)(LIVES_FILL),
4385 (LiVESAttachOptions)(0), 0, 0);
4389 (LiVESAttachOptions)(LIVES_FILL),
4390 (LiVESAttachOptions)(0), 0, 0);
4395 (LiVESAttachOptions)(LIVES_FILL),
4396 (LiVESAttachOptions)(0), 0, 0);
4407 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4408 (LiVESAttachOptions)(0), 0, 0);
4418 (tmp2 =
_(
"The default directory for saving encoded clips to")));
4425 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4426 (LiVESAttachOptions)(0), 0, 0);
4429 ACTIVE(workdir_entry, CHANGED);
4432 NULL,
_(
"The default directory for loading video clips from"));
4434 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4435 (LiVESAttachOptions)(0), 0, 0);
4438 ACTIVE(vid_load_dir_entry, CHANGED);
4441 NULL,
_(
"The default directory for saving encoded clips to"));
4443 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4444 (LiVESAttachOptions)(0), 0, 0);
4447 ACTIVE(vid_save_dir_entry, CHANGED);
4450 NULL,
_(
"The default directory for loading and saving audio"));
4452 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4453 (LiVESAttachOptions)(0), 0, 0);
4456 ACTIVE(audio_dir_entry, CHANGED);
4459 NULL,
_(
"The default directory for saving frameshots to"));
4461 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4462 (LiVESAttachOptions)(0), 0, 0);
4465 ACTIVE(image_dir_entry, CHANGED);
4468 NULL,
_(
"The default directory for backing up/restoring single clips"));
4470 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4471 (LiVESAttachOptions)(0), 0, 0);
4474 ACTIVE(image_dir_entry, CHANGED);
4487 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4489 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(dirbutton),
FILESEL_TYPE_KEY,
4506 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4514 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4522 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4530 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4538 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4565 LIVES_BOX(hbox), (tmp2 = (H_(
"LiVES will start showing warnings if usable disk space\n"
4566 "falls below this level"))));
4584 LIVES_BOX(hbox), (tmp2 = (H_(
"LiVES will abort if usable disk space\n"
4585 "falls below this level"))));
4605 _(
"Warn on Insert / Merge if _frame rate of clipboard does "
4606 "not match frame rate of selection"),
4612 _(
"Warn on Open if Instant Opening is not available, and the file _size exceeds "),
4618 LIVES_BOX(hbox), NULL);
4630 (
_(
"Show a warning if _mplayer/mplayer2, sox, composite or convert is not "
4631 "found when LiVES is started."),
4636 (
_(
"Show a warning if no _rendered effects are found at startup."),
4641 (
_(
"Show a warning if no _encoder plugins are found at startup."),
4646 (
_(
"Show a warning if a _duplicate set name is entered."),
4651 (
_(
"When a set is loaded, warn if clips are missing from _layouts."),
4656 (
_(
"Warn if a clip used in a layout is about to be closed."),
4661 (
_(
"Warn if frames used in a layout are about to be deleted."),
4666 (
_(
"Warn if frames used in a layout are about to be shifted."),
4671 (
_(
"Warn if frames used in a layout are about to be altered."),
4676 (
_(
"Warn if audio used in a layout is about to be deleted."),
4681 (
_(
"Warn if audio used in a layout is about to be shifted."),
4686 (
_(
"Warn if audio used in a layout is about to be altered."),
4691 (
_(
"Popup layout errors after clip changes."),
4696 (
_(
"Warn if the layout has not been saved when leaving multitrack mode."),
4701 (
_(
"Warn if multitrack has no audio channels, and a layout with audio is loaded."),
4706 (
_(
"Warn if multitrack has audio channels, and your audio player is not \"jack\" or \"pulseaudio\"."),
4712 (
_(
"Show info message after importing from firewire device."),
4719 #ifdef HAVE_YUV4MPEG
4722 (
_(
"Show a warning before opening a yuv4mpeg stream (advanced)."),
4730 (
_(
"Show a warning when multitrack is low on backup space."),
4735 (
_(
"Show a warning advising cleaning of disk space after a crash."),
4740 (
_(
"Show a warning if unable to connect to pulseaudio player."),
4745 (
_(
"Show a warning before wiping a layout which has unsaved changes."),
4750 (
_(
"Show a warning if a loaded layout has incompatible gamma settings."),
4755 (
_(
"Show a warning if a loaded layout has incompatible letterbox settings."),
4760 (
_(
"Show a warning when the menu option Restart in VJ Mode becomes activated."),
4797 (tmp3 = (
_(
"LiVES can load audio tracks from this CD"))));
4805 LIVES_BOX(hbox), (tmp2 = (
_(
"Frames per second to use when none is specified"))));
4826 ACTIVE(cb_show_quota, TOGGLED);
4829 "via the commandline option"));
4839 ACTIVE(cb_show_msgstart, TOGGLED);
4848 (
_(
"_Remove temporary backup files on startup and shutdown"),
4850 "allowing LiVES to remove\ntemporary preview and backup files"));
4851 ACTIVE(cb_autoclean, TOGGLED);
4890 LIVES_BOX(hbox), NULL);
4901 (tmp = H_(
"Make the interface more interesting "
4902 "by adding harmonious colours")));
4918 &sp_green, &sp_blue, NULL);
4919 ACTIVE(cbutton_fore, COLOR_SET);
4924 &sp_green, &sp_blue, NULL);
4925 ACTIVE(cbutton_back, COLOR_SET);
4930 &sp_green, &sp_blue, NULL);
4931 ACTIVE(cbutton_mabf, COLOR_SET);
4936 &sp_green, &sp_blue, NULL);
4937 ACTIVE(cbutton_mab, COLOR_SET);
4942 &sp_green, &sp_blue, NULL);
4943 ACTIVE(cbutton_infot, COLOR_SET);
4948 &sp_green, &sp_blue, NULL);
4949 ACTIVE(cbutton_infob, COLOR_SET);
4955 (tmp2 = (
_(
"Affects some contrast details of the timeline"))));
4962 #if GTK_CHECK_VERSION(3, 0, 0)
4984 (tmp2 = (
_(
"The frame image which is shown when there is no clip loaded."))));
4999 (tmp2 = (
_(
"The image shown in the center of the interface."))));
5023 (tmp = (
_(
"Selected frames/audio (clip editor)"))),
5025 ACTIVE(cbutton_cesel, COLOR_SET);
5029 (tmp = (
_(
"Unselected frames/audio (clip editor)"))),
5031 ACTIVE(cbutton_ceunsel, COLOR_SET);
5035 (tmp = (
_(
"Track background (multitrack)"))),
5037 ACTIVE(cbutton_evbox, COLOR_SET);
5042 ACTIVE(cbutton_vidcol, COLOR_SET);
5047 ACTIVE(cbutton_audcol, COLOR_SET);
5052 ACTIVE(cbutton_fxcol, COLOR_SET);
5057 ACTIVE(cbutton_mtmark, COLOR_SET);
5061 (tmp = (
_(
"Timeline selection (multitrack)"))),
5063 ACTIVE(cbutton_tlreg, COLOR_SET);
5068 (tmp = (
_(
"Timecode background (multitrack)"))),
5069 FALSE, &rgba, &sp_red, &sp_green, &sp_blue, NULL);
5070 ACTIVE(cbutton_tcbg, COLOR_SET);
5075 (tmp = (
_(
"Timecode foreground (multitrack)"))),
5076 FALSE, &rgba, &sp_red, &sp_green, &sp_blue, NULL);
5077 ACTIVE(cbutton_tcfg, COLOR_SET);
5083 ACTIVE(cbutton_fsur, COLOR_SET);
5086 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(
prefsw->
theme_combo), LIVES_WIDGET_CHANGED_SIGNAL,
5087 LIVES_GUI_CALLBACK(theme_widgets_set_sensitive), (livespointer)
prefsw);
5137 LIVES_BOX(hbox), NULL);
5168 #ifndef ENABLE_JACK_TRANSPORT
5170 _(
"LiVES must be compiled with jack/transport.h and jack/jack.h present to use jack transport"));
5177 LIVES_BOX(hbox), NULL);
5183 LIVES_BOX(hbox), NULL);
5190 LIVES_BOX(hbox), NULL);
5193 LIVES_GUI_CALLBACK(after_jack_master_toggled), NULL);
5198 :
FALSE, LIVES_BOX(hbox), NULL);
5208 LIVES_BOX(hbox), NULL);
5211 LIVES_GUI_CALLBACK(after_jack_client_toggled), NULL);
5216 :
FALSE, LIVES_BOX(hbox), NULL);
5222 LIVES_GUI_CALLBACK(after_jack_tb_start_toggled), NULL);
5232 :
FALSE, LIVES_BOX(hbox),
5233 (tmp = H_(
"If playback is triggered by jack transport,\n"
5234 "then LiVES will attempt to sync with transport"
5235 "\nuntil playback finishes.")));
5268 LIVES_BOX(hbox), NULL);
5275 LIVES_BOX(hbox), NULL);
5283 (
_(
"Automatically connect to System Out ports when 'playing' External Audio"),
5285 LIVES_BOX(hbox), NULL);
5316 LIVES_BOX(hbox), NULL);
5326 (tmp2 = (H_(
"The joystick device, e.g. /dev/input/js0\n"
5327 "Leave blank to use defaults"))));
5330 #ifdef OMC_MIDI_IMPL
5336 #ifdef OMC_MIDI_IMPL
5341 LIVES_BOX(hbox), NULL);
5347 for (i = 0; i < 16; i++) {
5349 mchanlist = lives_list_append(mchanlist, midichan);
5374 (tmp2 = (
_(
"Create an ALSA MIDI port which other MIDI devices can be connected to"))));
5380 (tmp2 = (
_(
"Create a dummy ALSA MIDI output port."))));
5390 LIVES_BOX(hbox), (tmp2 = (
_(
"Read directly from the MIDI device"))));
5404 (tmp2 = (
_(
"The MIDI device, e.g. /dev/input/midi0"))));
5418 (tmp2 = lives_strdup(
5419 _(
"Number of MIDI checks per keyboard tick. Increasing this may improve "
5420 "MIDI responsiveness, "
5421 "but may slow down playback."))));
5429 (tmp2 = (
_(
"Number of non-reads allowed between succesive reads."))));
5438 lives_signal_sync_connect(LIVES_GUI_OBJECT(
prefsw->
alsa_midi), LIVES_WIDGET_TOGGLED_SIGNAL,
5439 LIVES_GUI_CALLBACK(on_alsa_midi_toggled), NULL);
5470 if (!saved_dialog) {
5474 LIVES_STOCK_REVERT_TO_SAVED, NULL, LIVES_RESPONSE_CANCEL);
5479 LIVES_RESPONSE_ACCEPT);
5498 LIVES_KEY_Escape, (LiVESXModifierType)0, (LiVESAccelFlags)0);
5507 ACTIVE(theme_style2, TOGGLED);
5509 ACTIVE(theme_style3, TOGGLED);
5510 ACTIVE(theme_style4, TOGGLED);
5512 ACTIVE(wpp_entry, CHANGED);
5513 ACTIVE(frei0r_entry, CHANGED);
5514 ACTIVE(libvis_entry, CHANGED);
5515 ACTIVE(ladspa_entry, CHANGED);
5517 ACTIVE(fs_max_check, TOGGLED);
5518 ACTIVE(recent_check, TOGGLED);
5519 ACTIVE(stop_screensaver_check, TOGGLED);
5520 ACTIVE(open_maximised_check, TOGGLED);
5521 ACTIVE(show_tool, TOGGLED);
5522 ACTIVE(mouse_scroll, TOGGLED);
5523 ACTIVE(checkbutton_ce_maxspect, TOGGLED);
5524 ACTIVE(ce_thumbs, TOGGLED);
5525 ACTIVE(checkbutton_button_icons, TOGGLED);
5526 ACTIVE(checkbutton_extra_colours, TOGGLED);
5527 ACTIVE(checkbutton_hfbwnp, TOGGLED);
5528 ACTIVE(checkbutton_show_asrc, TOGGLED);
5529 ACTIVE(checkbutton_show_ttips, TOGGLED);
5530 ACTIVE(rb_startup_mt, TOGGLED);
5531 ACTIVE(rb_startup_ce, TOGGLED);
5533 ACTIVE(spinbutton_warn_ds, VALUE_CHANGED);
5534 ACTIVE(spinbutton_crit_ds, VALUE_CHANGED);
5537 LIVES_GUI_CALLBACK(spinbutton_ds_value_changed), LIVES_INT_TO_POINTER(
FALSE));
5539 LIVES_GUI_CALLBACK(spinbutton_ds_value_changed), LIVES_INT_TO_POINTER(
TRUE));
5541 ACTIVE(spinbutton_gmoni, VALUE_CHANGED);
5542 ACTIVE(spinbutton_pmoni, VALUE_CHANGED);
5545 LIVES_GUI_CALLBACK(pmoni_gmoni_changed), NULL);
5547 LIVES_GUI_CALLBACK(pmoni_gmoni_changed), NULL);
5549 ACTIVE(forcesmon, TOGGLED);
5550 ACTIVE(checkbutton_stream_audio, TOGGLED);
5551 ACTIVE(checkbutton_rec_after_pb, TOGGLED);
5552 ACTIVE(spinbutton_warn_ds, VALUE_CHANGED);
5553 ACTIVE(spinbutton_crit_ds, VALUE_CHANGED);
5555 lives_signal_sync_connect(LIVES_GUI_OBJECT(mt_enter_defs), LIVES_WIDGET_TOGGLED_SIGNAL,
5558 ACTIVE(mt_enter_prompt, TOGGLED);
5559 ACTIVE(checkbutton_render_prompt, TOGGLED);
5561 ACTIVE(spinbutton_mt_def_width, VALUE_CHANGED);
5562 ACTIVE(spinbutton_mt_def_height, VALUE_CHANGED);
5563 ACTIVE(spinbutton_mt_def_fps, VALUE_CHANGED);
5565 ACTIVE(backaudio_checkbutton, TOGGLED);
5566 ACTIVE(pertrack_checkbutton, TOGGLED);
5568 ACTIVE(spinbutton_mt_undo_buf, VALUE_CHANGED);
5570 ACTIVE(checkbutton_mt_exit_render, TOGGLED);
5572 ACTIVE(spinbutton_mt_ab_time, VALUE_CHANGED);
5573 ACTIVE(spinbutton_max_disp_vtracks, VALUE_CHANGED);
5575 ACTIVE(mt_autoback_always, TOGGLED);
5576 ACTIVE(mt_autoback_never, TOGGLED);
5577 ACTIVE(mt_autoback_every, TOGGLED);
5579 ACTIVE(video_open_entry, CHANGED);
5580 ACTIVE(frameblank_entry, CHANGED);
5581 ACTIVE(sepimg_entry, CHANGED);
5583 ACTIVE(spinbutton_ocp, VALUE_CHANGED);
5586 ACTIVE(checkbutton_instant_open, TOGGLED);
5587 ACTIVE(checkbutton_auto_deint, TOGGLED);
5588 ACTIVE(checkbutton_concat_images, TOGGLED);
5589 ACTIVE(checkbutton_lb, TOGGLED);
5590 ACTIVE(checkbutton_lbmt, TOGGLED);
5591 ACTIVE(checkbutton_screengamma, TOGGLED);
5592 ACTIVE(spinbutton_gamma, VALUE_CHANGED);
5593 ACTIVE(pbq_adaptive, TOGGLED);
5595 ACTIVE(pbq_combo, CHANGED);
5596 lives_signal_sync_connect(LIVES_GUI_OBJECT(pp_combo), LIVES_WIDGET_CHANGED_SIGNAL,
5598 ACTIVE(audp_combo, CHANGED);
5600 ACTIVE(checkbutton_show_stats, TOGGLED);
5602 ACTIVE(checkbutton_afollow, TOGGLED);
5603 ACTIVE(checkbutton_aclips, TOGGLED);
5605 ACTIVE(rdesk_audio, TOGGLED);
5607 ACTIVE(rframes, TOGGLED);
5609 ACTIVE(reffects, TOGGLED);
5612 ACTIVE(rextaudio, TOGGLED);
5614 ACTIVE(pa_gens, TOGGLED);
5616 ACTIVE(spinbutton_ext_aud_thresh, VALUE_CHANGED);
5617 ACTIVE(spinbutton_rec_gb, VALUE_CHANGED);
5619 ACTIVE(encoder_combo, CHANGED);
5622 ACTIVE(ofmt_combo, CHANGED);
5623 ACTIVE(acodec_combo, CHANGED);
5626 ACTIVE(checkbutton_antialias, TOGGLED);
5627 ACTIVE(checkbutton_load_rfx, TOGGLED);
5628 ACTIVE(checkbutton_apply_gamma, TOGGLED);
5630 ACTIVE(spinbutton_rte_keys, VALUE_CHANGED);
5631 ACTIVE(spinbutton_nfx_threads, VALUE_CHANGED);
5633 ACTIVE(checkbutton_threads, TOGGLED);
5635 ACTIVE(checkbutton_warn_fps, TOGGLED);
5636 ACTIVE(checkbutton_warn_fsize, TOGGLED);
5637 ACTIVE(checkbutton_warn_save_set, TOGGLED);
5638 ACTIVE(checkbutton_warn_mplayer, TOGGLED);
5639 ACTIVE(checkbutton_warn_rendered_fx, TOGGLED);
5640 ACTIVE(checkbutton_warn_encoders, TOGGLED);
5641 ACTIVE(checkbutton_warn_dup_set, TOGGLED);
5642 ACTIVE(checkbutton_warn_layout_clips, TOGGLED);
5643 ACTIVE(checkbutton_warn_layout_close, TOGGLED);
5644 ACTIVE(checkbutton_warn_layout_delete, TOGGLED);
5645 ACTIVE(checkbutton_warn_layout_shift, TOGGLED);
5646 ACTIVE(checkbutton_warn_layout_alter, TOGGLED);
5647 ACTIVE(checkbutton_warn_layout_adel, TOGGLED);
5648 ACTIVE(checkbutton_warn_layout_ashift, TOGGLED);
5649 ACTIVE(checkbutton_warn_layout_aalt, TOGGLED);
5650 ACTIVE(checkbutton_warn_layout_popup, TOGGLED);
5651 ACTIVE(checkbutton_warn_discard_layout, TOGGLED);
5652 ACTIVE(checkbutton_warn_mt_achans, TOGGLED);
5653 ACTIVE(checkbutton_warn_mt_no_jack, TOGGLED);
5655 ACTIVE(spinbutton_warn_fsize, VALUE_CHANGED);
5658 ACTIVE(checkbutton_warn_after_dvgrab, TOGGLED);
5660 #ifdef HAVE_YUV4MPEG
5661 ACTIVE(checkbutton_warn_yuv4m_open, TOGGLED);
5663 ACTIVE(checkbutton_warn_layout_gamma, TOGGLED);
5664 ACTIVE(checkbutton_warn_layout_lb, TOGGLED);
5665 ACTIVE(checkbutton_warn_layout_wipe, TOGGLED);
5666 ACTIVE(checkbutton_warn_no_pulse, TOGGLED);
5667 ACTIVE(checkbutton_warn_after_crash, TOGGLED);
5668 ACTIVE(checkbutton_warn_mt_backup_space, TOGGLED);
5669 ACTIVE(checkbutton_warn_vjmode_enter, TOGGLED);
5671 ACTIVE(check_midi, TOGGLED);
5672 ACTIVE(midichan_combo, CHANGED);
5674 ACTIVE(ins_speed, TOGGLED);
5676 ACTIVE(cdplay_entry, CHANGED);
5678 ACTIVE(spinbutton_def_fps, VALUE_CHANGED);
5680 ACTIVE(theme_combo, CHANGED);
5682 ACTIVE(spinbutton_bwidth, VALUE_CHANGED);
5684 ACTIVE(spinbutton_osc_udp, VALUE_CHANGED);
5685 ACTIVE(enable_OSC_start, TOGGLED);
5686 ACTIVE(enable_OSC, TOGGLED);
5689 #ifdef ENABLE_JACK_TRANSPORT
5690 ACTIVE(jack_tserver_entry, CHANGED);
5691 ACTIVE(checkbutton_start_tjack, TOGGLED);
5692 ACTIVE(checkbutton_jack_master, TOGGLED);
5693 ACTIVE(checkbutton_jack_client, TOGGLED);
5694 ACTIVE(checkbutton_jack_tb_start, TOGGLED);
5695 ACTIVE(checkbutton_jack_mtb_start, TOGGLED);
5696 ACTIVE(checkbutton_jack_tb_client, TOGGLED);
5700 ACTIVE(jack_aserver_entry, CHANGED);
5701 ACTIVE(checkbutton_start_ajack, TOGGLED);
5702 ACTIVE(checkbutton_jack_pwp, TOGGLED);
5703 ACTIVE(checkbutton_jack_read_autocon, TOGGLED);
5708 ACTIVE(checkbutton_omc_js, TOGGLED);
5709 ACTIVE(omc_js_entry, CHANGED);
5711 #ifdef OMC_MIDI_IMPL
5712 ACTIVE(checkbutton_omc_midi, TOGGLED);
5714 ACTIVE(alsa_midi, TOGGLED);
5715 ACTIVE(alsa_midi_dummy, TOGGLED);
5717 ACTIVE(omc_midi_entry, CHANGED);
5718 ACTIVE(spinbutton_midicr, VALUE_CHANGED);
5719 ACTIVE(spinbutton_midirpt, VALUE_CHANGED);
5732 LIVES_WIDGET_CHANGED_SIGNAL, LIVES_GUI_CALLBACK(on_audp_entry_changed), NULL);
5735 lives_signal_sync_connect(LIVES_GUI_OBJECT(
prefsw->
enable_OSC), LIVES_WIDGET_TOGGLED_SIGNAL,
5736 LIVES_GUI_CALLBACK(on_osc_enable_toggled),
5739 if (saved_dialog == NULL) {
5740 lives_signal_sync_connect(LIVES_GUI_OBJECT(
prefsw->
revertbutton), LIVES_WIDGET_CLICKED_SIGNAL,
5743 lives_signal_sync_connect(LIVES_GUI_OBJECT(
prefsw->
prefs_dialog), LIVES_WIDGET_DELETE_EVENT,
5746 lives_signal_sync_connect(LIVES_GUI_OBJECT(
prefsw->
applybutton), LIVES_WIDGET_CLICKED_SIGNAL,
5755 if (prefs_current_page == -1) {
5760 }
else select_pref_list_row(prefs_current_page,
prefsw);
5773 LiVESWidget *saved_dialog = (LiVESWidget *)user_data;
5774 mt_needs_idlefunc =
FALSE;
5780 mt_needs_idlefunc =
TRUE;
5785 if (menuitem) prefs_current_page = -1;
5828 if (mt_needs_idlefunc) {
5886 boolean needs_restart =
FALSE;
5901 if (needs_restart) {
5903 do_info_dialog(
_(
"LiVES will restart when preferences dialog closes."));
5909 do_info_dialog(
_(
"Disabling the theme will not take effect until the next time you start LiVES."));
5910 }
else do_info_dialog(
_(
"Theme changes will only take full effect after restarting LiVES."));
5915 do_info_dialog(
_(
"Jack options will not take effect until the next time you start LiVES."));
5960 static void select_pref_list_row(uint32_t selected_idx,
_prefsw *
prefsw) {
5962 LiVESTreeModel *model;
5971 if (idx == selected_idx) {
5982 LiVESWidget *saved_dialog;
6024 static int text_to_lives_perm(
const char *text) {
6032 const char *sudocom = NULL;
6035 int what = atoi(argv[offs]);
6037 what = text_to_lives_perm(argv[offs]);
6045 if (argc >= 5 && strstr(argv[4],
"_TRY_SUDO_")) sudocom = (
const char *)argv[2];