LiVES 3.2.0
preferences.c
Go to the documentation of this file.
1// preferences.c
2// LiVES (lives-exe)
3// (c) G. Finch 2004 - 2019 <salsaman+lives@gmail.com>
4// released under the GNU GPL 3 or later
5// see file ../COPYING or www.gnu.org for licensing details
6// functions dealing with getting/setting user preferences
7// TODO - use atom type system for prefs
8
9#include <dlfcn.h>
10
11#include "main.h"
12#include "paramwindow.h"
13#include "callbacks.h"
14#include "resample.h"
15#include "plugins.h"
16#include "rte_window.h"
17#include "interface.h"
18#include "startup.h"
19#include "effects-weed.h"
20
21#ifdef ENABLE_OSC
22#include "omc-learn.h"
23#endif
24
25static LiVESWidget *saved_closebutton;
26static LiVESWidget *saved_applybutton;
27static LiVESWidget *saved_revertbutton;
28static boolean mt_needs_idlefunc;
29
30static int nmons;
31
32static uint32_t prefs_current_page;
33
34static void select_pref_list_row(uint32_t selected_idx, _prefsw *prefsw);
35
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)
38
39
46void toggle_sets_pref(LiVESWidget *widget, livespointer prefidx) {
47 if (LIVES_IS_TOGGLE_BUTTON(widget))
48 pref_factory_bool((const char *)prefidx,
49 lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(widget)), FALSE);
50 else if (LIVES_IS_CHECK_MENU_ITEM(widget))
51 pref_factory_bool((const char *)prefidx,
52 lives_check_menu_item_get_active(LIVES_CHECK_MENU_ITEM(widget)), TRUE);
53}
54
55
56#ifdef ENABLE_OSC
57static void on_osc_enable_toggled(LiVESToggleButton *t1, livespointer t2) {
58 if (prefs->osc_udp_started) return;
60 lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(t2)));
61}
62#endif
63
64
65static LiVESResponseType get_pref_inner(const char *filename, const char *key, char *val, int maxlen,
66 LiVESList *cache) {
67 char *com;
68 memset(val, 0, maxlen);
69 if (!filename) {
70 if (cache) {
71 char *prefval = get_val_from_cached_list(key, maxlen, cache);
72 if (prefval) {
73 lives_snprintf(val, maxlen, "%s", prefval);
74 lives_free(prefval);
75 return LIVES_RESPONSE_YES;
76 }
77 return LIVES_RESPONSE_NO;
78 }
79 com = lives_strdup_printf("%s get_pref \"%s\" -", prefs->backend_sync, key);
80 } else {
81 com = lives_strdup_printf("%s get_clip_value \"%s\" - - \"%s\"", prefs->backend_sync, key,
82 filename);
83 }
84
85 lives_popen(com, TRUE, val, maxlen);
86
87 lives_free(com);
88 return LIVES_RESPONSE_NONE;
89}
90
91
92LIVES_GLOBAL_INLINE LiVESResponseType get_string_pref(const char *key, char *val, int maxlen) {
94 return get_pref_inner(NULL, key, val, maxlen, mainw->prefs_cache);
95}
96
97
98LIVES_GLOBAL_INLINE LiVESResponseType get_string_prefd(const char *key, char *val, int maxlen, const char *def) {
100 int ret = get_pref_inner(NULL, key, val, maxlen, mainw->prefs_cache);
101 if (ret == LIVES_RESPONSE_NO) lives_snprintf(val, maxlen, "%s", def);
102 return ret;
103}
104
105
106LIVES_GLOBAL_INLINE LiVESResponseType get_pref_from_file(const char *filename, const char *key, char *val, int maxlen) {
108 return get_pref_inner(filename, key, val, maxlen, mainw->gen_cache);
109}
110
111
112LiVESResponseType get_utf8_pref(const char *key, char *val, int maxlen) {
113 // get a pref in locale encoding, then convert it to utf8
114 char *tmp;
115 int retval = get_string_pref(key, val, maxlen);
116 tmp = lives_filename_to_utf8(val, -1, NULL, NULL, NULL);
117 lives_snprintf(val, maxlen, "%s", tmp);
118 lives_free(tmp);
119 return retval;
120}
121
122
123LiVESList *get_list_pref(const char *key) {
124 // get a list of values from a preference
125 char **array;
126 char buf[65536];
127 int nvals, i;
128
129 LiVESList *retlist = NULL;
130
131 if (get_string_pref(key, buf, 65535) == LIVES_RESPONSE_NO) return NULL;
132 if (!(*buf)) return NULL;
133
134 nvals = get_token_count(buf, '\n');
135 array = lives_strsplit(buf, "\n", nvals);
136 for (i = 0; i < nvals; i++) {
137 retlist = lives_list_append(retlist, lives_strdup(array[i]));
138 }
139
140 lives_strfreev(array);
141
142 return retlist;
143}
144
145
146LIVES_GLOBAL_INLINE boolean get_boolean_pref(const char *key) {
147 char buffer[16];
148 get_string_pref(key, buffer, 16);
149 if (!strcmp(buffer, "true")) return TRUE;
150 return FALSE;
151}
152
153
154LIVES_GLOBAL_INLINE boolean get_boolean_prefd(const char *key, boolean defval) {
155 char buffer[16];
156 get_string_pref(key, buffer, 16);
157 if (!(*buffer)) return defval;
158 if (!strcmp(buffer, "true")) return TRUE;
159 return FALSE;
160}
161
162
163LIVES_GLOBAL_INLINE int get_int_pref(const char *key) {
164 char buffer[64];
165 get_string_pref(key, buffer, 64);
166 if (!(*buffer)) return 0;
167 return atoi(buffer);
168}
169
170
171LIVES_GLOBAL_INLINE int get_int_prefd(const char *key, int defval) {
172 char buffer[64];
173 get_string_pref(key, buffer, 64);
174 if (!(*buffer)) return defval;
175 return atoi(buffer);
176}
177
178
179LIVES_GLOBAL_INLINE int64_t get_int64_prefd(const char *key, int64_t defval) {
180 char buffer[64];
181 get_string_pref(key, buffer, 64);
182 if (!(*buffer)) return defval;
183 return atol(buffer);
184}
185
186
187LIVES_GLOBAL_INLINE double get_double_pref(const char *key) {
188 char buffer[64];
189 get_string_pref(key, buffer, 64);
190 if (!(*buffer)) return 0.;
191 return strtod(buffer, NULL);
192}
193
194
195LIVES_GLOBAL_INLINE double get_double_prefd(const char *key, double defval) {
196 char buffer[64];
197 get_string_pref(key, buffer, 64);
198 if (!(*buffer)) return defval;
199 return strtod(buffer, NULL);
200}
201
202
203LIVES_GLOBAL_INLINE boolean has_pref(const char *key) {
204 char buffer[64];
205 get_string_pref(key, buffer, 64);
206 if (!(*buffer)) return FALSE;
207 return TRUE;
208}
209
210
211boolean get_colour_pref(const char *key, lives_colRGBA64_t *lcol) {
213 // use get_theme_colour_pref
214 char buffer[64];
215 char **array;
216 int ntoks;
217
218 if (get_string_pref(key, buffer, 64) == LIVES_RESPONSE_NO) return FALSE;
219 if (!(*buffer)) return FALSE;
220 if ((ntoks = get_token_count(buffer, ' ')) < 3) return FALSE;
221
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);
229
230 return TRUE;
231}
232
233
234boolean get_theme_colour_pref(const char *key, lives_colRGBA64_t *lcol) {
236 char *tmp;
237 char **array;
238 int ntoks;
239
241 if (!tmp) return FALSE;
242
243 if ((ntoks = get_token_count(tmp, ' ')) < 3) {
244 lives_free(tmp);
245 return FALSE;
246 }
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);
254 lives_free(tmp);
255 return TRUE;
256}
257
258
259static int run_prefs_command(const char *com) {
260 int ret = 0;
261 do {
262 ret = lives_system(com, TRUE) >> 8;
263 if (mainw && mainw->is_ready) {
264 if (ret == 4) {
265 // error writing to temp config file
267 ret = do_write_failed_error_s_with_retry(newrcfile, NULL);
268 lives_free(newrcfile);
269 } else if (ret == 3) {
270 // error writing to config file
272 } else if (ret != 0) {
273 // error reading from config file
275 }
276 } else ret = 0;
277 } while (ret == LIVES_RESPONSE_RETRY);
278 return ret;
279}
280
281
282int delete_pref(const char *key) {
283 char *com = lives_strdup_printf("%s delete_pref \"%s\"", prefs->backend_sync, key);
284 int ret = run_prefs_command(com);
285 lives_free(com);
286 return ret;
287}
288
289
290int set_string_pref(const char *key, const char *value) {
291 char *com = lives_strdup_printf("%s set_pref \"%s\" \"%s\"", prefs->backend_sync, key, value);
292 int ret = run_prefs_command(com);
293 lives_free(com);
294 return ret;
295}
296
297
298int set_string_pref_priority(const char *key, const char *value) {
299 char *com = lives_strdup_printf("%s set_pref_priority \"%s\" \"%s\"", prefs->backend_sync, key, value);
300 int ret = run_prefs_command(com);
301 lives_free(com);
302 return ret;
303}
304
305
306int set_utf8_pref(const char *key, const char *value) {
307 // convert to locale encoding
308 char *tmp = U82F(value);
309 char *com = lives_strdup_printf("%s set_pref \"%s\" \"%s\"", prefs->backend_sync, key, tmp);
310 int ret = run_prefs_command(com);
311 lives_free(com);
312 lives_free(tmp);
313 return ret;
314}
315
316
317void set_theme_pref(const char *themefile, const char *key, const char *value) {
318 char *com = lives_strdup_printf("%s set_clip_value \"%s\" \"%s\" \"%s\"", prefs->backend_sync, themefile, key, value);
319 int ret = 0;
320 do {
321 if (lives_system(com, TRUE)) {
322 ret = do_write_failed_error_s_with_retry(themefile, NULL);
323 }
324 } while (ret == LIVES_RESPONSE_RETRY);
325 lives_free(com);
326}
327
328
329int set_int_pref(const char *key, int value) {
330 char *com = lives_strdup_printf("%s set_pref \"%s\" %d", prefs->backend_sync, key, value);
331 int ret = run_prefs_command(com);
332 lives_free(com);
333 return ret;
334}
335
336
337int set_int64_pref(const char *key, int64_t value) {
338 // not used
339 char *com = lives_strdup_printf("%s set_pref \"%s\" %"PRId64, prefs->backend_sync, key, value);
340 int ret = run_prefs_command(com);
341 lives_free(com);
342 return ret;
343}
344
345
346int set_double_pref(const char *key, double value) {
347 char *com = lives_strdup_printf("%s set_pref \"%s\" %.3f", prefs->backend_sync, key, value);
348 int ret = run_prefs_command(com);
349 lives_free(com);
350 return ret;
351}
352
353
354int set_boolean_pref(const char *key, boolean value) {
355 char *com;
356 int ret;
357 if (value) {
358 com = lives_strdup_printf("%s set_pref \"%s\" true", prefs->backend_sync, key);
359 } else {
360 com = lives_strdup_printf("%s set_pref \"%s\" false", prefs->backend_sync, key);
361 }
362 ret = run_prefs_command(com);
363 lives_free(com);
364 return ret;
365}
366
367
368int set_list_pref(const char *key, LiVESList *values) {
369 // set pref from a list of values
370 LiVESList *xlist = values;
371 char *string = NULL, *tmp;
372 int ret;
373
374 while (xlist) {
375 if (string == NULL) string = lives_strdup((char *)xlist->data);
376 else {
377 tmp = lives_strdup_printf("%s\n%s", string, (char *)xlist->data);
378 lives_free(string);
379 string = tmp;
380 }
381 xlist = xlist->next;
382 }
383
384 if (string == NULL) string = lives_strdup("");
385
386 ret = set_string_pref(key, string);
387
388 lives_free(string);
389 return ret;
390}
391
392
393void set_theme_colour_pref(const char *themefile, const char *key, lives_colRGBA64_t *lcol) {
394 char *myval = lives_strdup_printf("%d %d %d", lcol->red, lcol->green, lcol->blue);
395 char *com = lives_strdup_printf("%s set_clip_value \"%s\" \"%s\" \"%s\"", prefs->backend_sync, themefile, key, myval);
396 lives_system(com, FALSE);
397 lives_free(com);
398 lives_free(myval);
399}
400
401
402int set_colour_pref(const char *key, lives_colRGBA64_t *lcol) {
403 char *myval = lives_strdup_printf("%d %d %d %d", lcol->red, lcol->green, lcol->blue, lcol->alpha);
404 char *com = lives_strdup_printf("%s set_pref \"%s\" \"%s\"", prefs->backend_sync, key, myval);
405 int ret = run_prefs_command(com);
406 lives_free(com);
407 lives_free(myval);
408 return ret;
409}
410
411
412void set_palette_prefs(boolean save) {
414
415 lcol.red = palette->style;
416 lcol.green = lcol.blue = lcol.alpha = 0;
417
418 if (save) {
419 if (set_colour_pref(THEME_DETAIL_STYLE, &lcol)) return;
420
423 }
424
426 if (save)
427 if (set_colour_pref(THEME_DETAIL_NORMAL_FORE, &lcol)) return;
428
430 if (save)
431 if (set_colour_pref(THEME_DETAIL_NORMAL_BACK, &lcol)) return;
432
434 if (save)
435 if (set_colour_pref(THEME_DETAIL_ALT_FORE, &lcol)) return;
436
438 if (save)
439 if (set_colour_pref(THEME_DETAIL_ALT_BACK, &lcol)) return;
440
442 if (save)
443 if (set_colour_pref(THEME_DETAIL_INFO_TEXT, &lcol)) return;
444
446 if (save)
447 if (set_colour_pref(THEME_DETAIL_INFO_BASE, &lcol)) return;
448
450 if (save)
451 if (set_colour_pref(THEME_DETAIL_MT_TCFG, &lcol)) return;
452
454 if (save)
455 if (set_colour_pref(THEME_DETAIL_MT_TCBG, &lcol)) return;
456
457 if (save) {
461
465
467
470
473 }
474}
475
476void set_vpp(boolean set_in_prefs) {
477 // Video Playback Plugin
478
479 if (*future_prefs->vpp_name) {
481 if (mainw->vpp) {
484 mainw->vpp = NULL;
485 if (set_in_prefs) set_string_pref(PREF_VID_PLAYBACK_PLUGIN, "none");
486 }
487 } else {
490 mainw->vpp = vpp;
491 if (set_in_prefs) {
493 if (!mainw->ext_playback)
494 do_error_dialog(_("\n\nVideo playback plugins are only activated in\nfull screen, separate window (fs) mode\n"));
495 }
496 }
497 }
498 if (set_in_prefs) mainw->write_vpp_file = TRUE;
499 }
500
501 if (future_prefs->vpp_argv && mainw->vpp) {
508 if (mainw->vpp->fixed_fpsd > 0.) {
509 if (mainw->fixed_fpsd != -1. || !((*mainw->vpp->set_fps)(mainw->vpp->fixed_fpsd))) {
511 mainw->vpp->fixed_fpsd = -1.;
513 }
514 }
515 if (!(*mainw->vpp->set_palette)(mainw->vpp->palette)) {
517 }
519
521
524 if (set_in_prefs) mainw->write_vpp_file = TRUE;
525 }
526
527 memset(future_prefs->vpp_name, 0, 64);
528 future_prefs->vpp_argv = NULL;
529}
530
531
532static void set_workdir_label_text(LiVESLabel *label, const char *dir) {
533 char *free_ds;
534 char *tmp, *txt;
535
536 if (!is_writeable_dir(dir)) {
537 tmp = (_("(Free space = UNKNOWN)"));
538 } else {
540 tmp = lives_strdup_printf(_("(Free space = %s)"), free_ds);
541 lives_free(free_ds);
542 }
543
544 txt = lives_strdup_printf(_("The work directory is LiVES working directory where opened clips "
545 "and sets are stored.\n"
546 "It should be in a partition with plenty of free disk space.\n\n%s"),
547 tmp);
548 lives_free(tmp);
549 lives_layout_label_set_text(label, txt);
550 lives_free(txt);
551}
552
553
554boolean pref_factory_string(const char *prefidx, const char *newval, boolean permanent) {
556
557 if (!lives_strcmp(prefidx, PREF_AUDIO_PLAYER)) {
558 const char *audio_player = newval;
559
560 if (!(lives_strcmp(audio_player, AUDIO_PLAYER_NONE)) && prefs->audio_player != AUD_PLAYER_NONE) {
561 // switch to none
562 switch_aud_to_none(permanent);
563#if 0
565 else mainw->nullaudio_loop = AUDIO_LOOP_FORWARD;
566#endif
567 update_all_host_info(); // let fx plugins know about the change
568 goto success1;
569 } else if (!(lives_strcmp(audio_player, AUDIO_PLAYER_SOX)) && prefs->audio_player != AUD_PLAYER_SOX) {
570 // switch to sox
571 if (switch_aud_to_sox(permanent)) goto success1;
572 // revert text
573 if (prefsw) {
576 }
577 goto fail1;
578 }
579
580#ifdef ENABLE_JACK
581 if (!(lives_strcmp(audio_player, AUDIO_PLAYER_JACK)) && prefs->audio_player != AUD_PLAYER_JACK) {
582 // switch to jack
583 if (!capable->has_jackd) {
584 do_error_dialogf(_("\nUnable to switch audio players to %s\n%s must be installed first.\nSee %s\n"),
587 JACK_URL);
588 goto fail1;
589 } else {
591 do_error_dialogf(_("\nSwitching audio players requires restart (%s must not be running)\n"), EXEC_JACKD);
592 // revert text
593 if (prefsw) {
596 }
597 goto fail1;
598 }
599 }
600 if (!switch_aud_to_jack(permanent)) {
601 // failed
603 // revert text
604 if (prefsw) {
607 }
608 goto fail1;
609 } else {
610 // success
611 if (mainw->loop_cont) {
613 else mainw->jackd->loop = AUDIO_LOOP_FORWARD;
614 }
615 update_all_host_info(); // let fx plugins know about the change
616 goto success1;
617 }
618 goto fail1;
619 }
620#endif
621
622#ifdef HAVE_PULSE_AUDIO
623 if ((!lives_strcmp(audio_player, AUDIO_PLAYER_PULSE) || !lives_strcmp(audio_player, AUDIO_PLAYER_PULSE_AUDIO)) &&
625 // switch to pulseaudio
626 if (!capable->has_pulse_audio) {
627 do_error_dialogf(_("\nUnable to switch audio players to %s\n%s must be installed first.\nSee %s\n"),
631 // revert text
632 if (prefsw) {
635 }
636 goto fail1;
637 } else {
638 if (!switch_aud_to_pulse(permanent)) {
639 // revert text
640 if (prefsw) {
643 }
644 goto fail1;
645 } else {
646 // success
647 if (mainw->loop_cont) {
649 else mainw->pulsed->loop = AUDIO_LOOP_FORWARD;
650 }
651 update_all_host_info(); // let fx plugins know about the change
652 goto success1;
653 }
654 }
655 }
656#endif
657 goto fail1;
658 }
659
660#ifdef HAVE_PULSE_AUDIO
661 if (!lives_strcmp(prefidx, PREF_PASTARTOPTS)) {
662 if (lives_strcmp(newval, prefs->pa_start_opts)) {
663 lives_snprintf(prefs->pa_start_opts, 255, "%s", newval);
664 if (permanent) set_string_pref(PREF_PASTARTOPTS, newval);
665 goto success1;
666 }
667 goto fail1;
668 }
669#endif
670
671 if (!lives_strcmp(prefidx, PREF_OMC_JS_FNAME)) {
672 if (lives_strcmp(newval, prefs->omc_js_fname)) {
673 lives_snprintf(prefs->omc_js_fname, PATH_MAX, "%s", newval);
674 if (permanent) set_utf8_pref(PREF_OMC_JS_FNAME, newval);
675 goto success1;
676 }
677 goto fail1;
678 }
679
680 if (!lives_strcmp(prefidx, PREF_OMC_MIDI_FNAME)) {
681 if (lives_strcmp(newval, prefs->omc_midi_fname)) {
682 lives_snprintf(prefs->omc_midi_fname, PATH_MAX, "%s", newval);
683 if (permanent) set_utf8_pref(PREF_OMC_MIDI_FNAME, newval);
684 goto success1;
685 }
686 goto fail1;
687 }
688
689 if (!lives_strcmp(prefidx, PREF_MIDI_RCV_CHANNEL)) {
690 if (strlen(newval) > 2) {
691 if (prefs->midi_rcv_channel != -1) {
694 goto success1;
695 }
696 } else if (prefs->midi_rcv_channel != atoi(newval)) {
697 prefs->midi_rcv_channel = atoi(newval);
699 goto success1;
700 }
701 goto fail1;
702 }
703
704fail1:
706 return FALSE;
707
708success1:
709 if (prefsw) {
712 }
713 return TRUE;
714}
715
716
717boolean pref_factory_bool(const char *prefidx, boolean newval, boolean permanent) {
718 // this is called from lbindings.c which in turn is called from liblives.cpp
719
720 // can also be called from other places
721
723
724 if (!lives_strcmp(prefidx, PREF_RRCRASH)) {
725 if (prefs->rr_crash == newval) goto fail2;
726 prefs->rr_crash = newval;
727 goto success2;
728 }
729
730 if (!lives_strcmp(prefidx, PREF_RRSUPER)) {
731 if (prefs->rr_super == newval) goto fail2;
732 prefs->rr_super = newval;
733 goto success2;
734 }
735
736 if (!lives_strcmp(prefidx, PREF_RRPRESMOOTH)) {
737 if (prefs->rr_pre_smooth == newval) goto fail2;
738 prefs->rr_pre_smooth = newval;
739 goto success2;
740 }
741
742 if (!lives_strcmp(prefidx, PREF_RRQSMOOTH)) {
743 if (prefs->rr_qsmooth == newval) goto fail2;
744 prefs->rr_qsmooth = newval;
745 goto success2;
746 }
747
748 if (!lives_strcmp(prefidx, PREF_RRAMICRO)) {
749 if (prefs->rr_amicro == newval) goto fail2;
750 prefs->rr_amicro = newval;
751 goto success2;
752 }
753
754 if (!lives_strcmp(prefidx, PREF_RRRAMICRO)) {
755 if (prefs->rr_ramicro == newval) goto fail2;
756 prefs->rr_ramicro = newval;
757 goto success2;
758 }
759
760 if (!lives_strcmp(prefidx, PREF_SHOW_QUOTA)) {
761 if (prefs->show_disk_quota == newval) goto fail2;
762 prefs->show_disk_quota = newval;
764 permanent = TRUE;
765 goto success2;
766 }
767
768 if (!lives_strcmp(prefidx, PREF_MSG_START)) {
769 if (prefs->show_msgs_on_startup == newval) goto fail2;
770 prefs->show_msgs_on_startup = newval;
772 permanent = TRUE;
773 goto success2;
774 }
775
776 if (!lives_strcmp(prefidx, PREF_AUTOCLEAN_TRASH)) {
777 if (prefs->autoclean == newval) goto fail2;
778 prefs->autoclean = newval;
779 goto success2;
780 }
781
782 if (!lives_strcmp(prefidx, PREF_MT_SHOW_CTX)) {
783 if (prefs->mt_show_ctx == newval) goto fail2;
784 prefs->mt_show_ctx = newval;
785 goto success2;
786 }
787
788 if (!lives_strcmp(prefidx, PREF_PREF_TRASH)) {
789 if (prefs->pref_trash == newval) goto fail2;
790 prefs->pref_trash = newval;
791 goto success2;
792 }
793
794 if (!lives_strcmp(prefidx, PREF_SHOW_BUTTON_ICONS)) {
795 if (prefs->show_button_images == newval) goto fail2;
799 goto success2;
800 }
801
802 if (!lives_strcmp(prefidx, PREF_EXTRA_COLOURS)) {
803 if (prefs->extra_colours == newval) goto fail2;
804 prefs->extra_colours = newval;
807 goto success2;
808 }
809
810 // show recent
811 if (!lives_strcmp(prefidx, PREF_SHOW_RECENT_FILES)) {
812 if (prefs->show_recent == newval) goto fail2;
813 prefs->show_recent = newval;
814 if (newval) {
817 } else {
820 }
821 if (prefsw) lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->recent_check), newval);
822 }
823
824 if (!lives_strcmp(prefidx, PREF_MSG_PBDIS)) {
825 if (prefs->msgs_pbdis == newval) goto fail2;
826 prefs->msgs_pbdis = newval;
827 if (prefsw) lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->msgs_pbdis), newval);
828 goto success2;
829 }
830
831 if (!lives_strcmp(prefidx, PREF_USE_SCREEN_GAMMA)) {
832 if (prefs->use_screen_gamma == newval) goto fail2;
833 prefs->use_screen_gamma = newval;
834 if (prefsw) lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_screengamma), newval);
835 goto success2;
836 }
837
838 if (!lives_strcmp(prefidx, PREF_LETTERBOX)) {
839 if (prefs->letterbox == newval) goto fail2;
840 prefs->letterbox = newval;
841 if (prefsw) lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_lb), newval);
842 if (mainw->multitrack) {
844 lives_check_menu_item_set_active(LIVES_CHECK_MENU_ITEM(mainw->letter), newval);
846 }
847 goto success2;
848 }
849
850 if (!lives_strcmp(prefidx, PREF_LETTERBOXMT)) {
851 prefs->letterbox_mt = newval;
852 if (permanent) {
853 if (prefs->letterbox_mt == newval) goto fail2;
854 future_prefs->letterbox_mt = newval;
855 if (prefsw) lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_lbmt), newval);
856 }
857 if (mainw->multitrack && mainw->multitrack->event_list)
859 goto success2;
860 }
861
862 if (!lives_strcmp(prefidx, PREF_PBQ_ADAPTIVE)) {
863 if (prefs->pbq_adaptive == newval) goto fail2;
864 prefs->pbq_adaptive = newval;
865 if (prefsw) lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->pbq_adaptive), newval);
866 goto success2;
867 }
868
869 if (!lives_strcmp(prefidx, PREF_VJMODE)) {
870 if (future_prefs->vj_mode == newval) goto fail2;
871 if (mainw && mainw->vj_mode)
872 lives_check_menu_item_set_active(LIVES_CHECK_MENU_ITEM(mainw->vj_mode), newval);
873 future_prefs->vj_mode = newval;
874 goto success2;
875 }
876
877 if (!lives_strcmp(prefidx, PREF_SHOW_DEVOPTS)) {
878 if (prefs->show_dev_opts == newval) goto fail2;
879 if (mainw && mainw->show_devopts != NULL)
880 lives_check_menu_item_set_active(LIVES_CHECK_MENU_ITEM(mainw->show_devopts), newval);
881 prefs->show_dev_opts = newval;
882 goto success2;
883 }
884
885 if (!lives_strcmp(prefidx, PREF_REC_EXT_AUDIO)) {
886 boolean success = FALSE;
887 boolean rec_ext_audio = newval;
888 if (rec_ext_audio && prefs->audio_src == AUDIO_SRC_INT) {
890 if (permanent) {
893 }
894 success = TRUE;
895 } else if (!rec_ext_audio && prefs->audio_src == AUDIO_SRC_EXT) {
897 if (permanent) {
900 }
901 success = TRUE;
902 }
903 if (success) {
904 if (prefsw && permanent) {
906 lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->rextaudio), TRUE);
907 else
908 lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->rintaudio), TRUE);
909 }
912
915 goto success2;
916 }
917 goto fail2;
918 }
919
920 if (!lives_strcmp(prefidx, PREF_MT_EXIT_RENDER)) {
921 if (prefs->mt_exit_render == newval) goto fail2;
922 prefs->mt_exit_render = newval;
923 if (prefsw)
925 goto success2;
926 }
927
928 if (!lives_strcmp(prefidx, PREF_PUSH_AUDIO_TO_GENS)) {
929 if (prefs->push_audio_to_gens == newval) goto fail2;
930 prefs->push_audio_to_gens = newval;
931 if (prefsw)
933 goto success2;
934 }
935
936#ifdef HAVE_PULSE_AUDIO
937 if (!lives_strcmp(prefidx, PREF_PARESTART)) {
938 if (prefs->pa_restart == newval) goto fail2;
939 prefs->pa_restart = newval;
940 if (prefsw)
942 goto success2;
943 }
944#endif
945
946 if (!lives_strcmp(prefidx, PREF_SHOW_ASRC)) {
947 if (prefs->show_asrc == newval) goto fail2;
948 prefs->show_asrc = newval;
949 if (prefsw)
951 if (!newval) {
957 } else {
963 }
964 goto success2;
965 }
966
967 if (!lives_strcmp(prefidx, PREF_SHOW_TOOLTIPS)) {
968 if (prefs->show_tooltips == newval) goto fail2;
969 else {
970 if (newval) prefs->show_tooltips = newval;
971 if (prefsw) {
973 lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_show_ttips), newval);
975 }
977 if (mainw->multitrack) set_tooltips_state(mainw->multitrack->top_vbox, newval);
978 if (fx_dialog[0] && LIVES_IS_WIDGET(fx_dialog[0]->dialog)) set_tooltips_state(fx_dialog[0]->dialog, newval);
979 if (fx_dialog[1] && LIVES_IS_WIDGET(fx_dialog[1]->dialog)) set_tooltips_state(fx_dialog[1]->dialog, newval);
981 }
982 // turn off after, or we cannot nullify the ttips
983 if (!newval) prefs->show_tooltips = newval;
984 goto success2;
985 }
986
987 if (!lives_strcmp(prefidx, PREF_HFBWNP)) {
988 if (prefs->hfbwnp == newval) goto fail2;
989 prefs->hfbwnp = newval;
990 if (prefsw)
992 if (newval) {
993 if (!LIVES_IS_PLAYING) {
995 }
996 } else {
998 (!mainw->fs || (mainw->ext_playback && mainw->vpp &&
1002 }
1003 }
1004 goto success2;
1005 }
1006
1007 if (!lives_strcmp(prefidx, PREF_AR_CLIPSET)) {
1008 if (prefs->ar_clipset == newval) goto fail2;
1009 prefs->ar_clipset = newval;
1010 goto success2;
1011 }
1012
1013 if (!lives_strcmp(prefidx, PREF_AR_LAYOUT)) {
1014 if (prefs->ar_layout == newval) goto fail2;
1015 prefs->ar_layout = newval;
1016 goto success2;
1017 }
1018
1019fail2:
1021 return FALSE;
1022
1023success2:
1024 if (prefsw) {
1027 }
1028 if (permanent) set_boolean_pref(prefidx, newval);
1029 return TRUE;
1030}
1031
1032
1033boolean pref_factory_color_button(lives_colRGBA64_t *pcol, LiVESColorButton *cbutton) {
1034 LiVESWidgetColor col;
1035 lives_colRGBA64_t lcol;
1036
1038
1040 lives_rgba_copy(pcol, &lcol);
1041 if (prefsw) {
1044 }
1045 return TRUE;
1046 }
1047
1049 return FALSE;
1050}
1051
1052
1053boolean pref_factory_int(const char *prefidx, int newval, boolean permanent) {
1055
1056 if (!lives_strcmp(prefidx, PREF_MT_AUTO_BACK)) {
1057 if (newval == prefs->mt_auto_back) goto fail3;
1058 if (mainw->multitrack) {
1059 if (newval <= 0 && prefs->mt_auto_back > 0) {
1060 if (mainw->multitrack->idlefunc > 0) {
1062 mainw->multitrack->idlefunc = 0;
1063 }
1064 if (newval == 0) {
1065 prefs->mt_auto_back = newval;
1067 }
1068 }
1069 if (newval > 0 && prefs->mt_auto_back <= 0 && mainw->multitrack->idlefunc > 0) {
1071 }
1072 }
1073 prefs->mt_auto_back = newval;
1074 goto success3;
1075 }
1076
1077 if (!lives_strcmp(prefidx, PREF_MAX_MSGS)) {
1078 if (newval == prefs->max_messages) goto fail3;
1079 if (newval < mainw->n_messages && newval >= 0) {
1080 free_n_msgs(mainw->n_messages - newval);
1081 if (prefs->show_msg_area)
1082 msg_area_scroll(LIVES_ADJUSTMENT(mainw->msg_adj), mainw->msg_area);
1083 }
1084 prefs->max_messages = newval;
1085 goto success3;
1086 }
1087
1088 if (!lives_strcmp(prefidx, PREF_SEPWIN_TYPE)) {
1089 if (prefs->sepwin_type == newval) goto fail3;
1090 prefs->sepwin_type = newval;
1091 if (newval == SEPWIN_TYPE_STICKY) {
1092 if (mainw->sep_win) {
1093 if (!LIVES_IS_PLAYING) {
1095 }
1096 } else {
1097 if (mainw->play_window) {
1099 }
1100 }
1101 } else {
1102 if (mainw->sep_win) {
1103 if (!LIVES_IS_PLAYING) {
1105 } else {
1107 }
1108 }
1109 }
1110
1111 if (permanent) future_prefs->sepwin_type = prefs->sepwin_type;
1112 goto success3;
1113 }
1114
1115 if (!lives_strcmp(prefidx, PREF_RRQMODE)) {
1116 if (newval != prefs->rr_qmode) {
1117 prefs->rr_qmode = newval;
1118 goto success3;
1119 }
1120 goto fail3;
1121 }
1122
1123 if (!lives_strcmp(prefidx, PREF_RRFSTATE)) {
1124 if (newval != prefs->rr_fstate) {
1125 prefs->rr_fstate = newval;
1126 goto success3;
1127 }
1128 goto fail3;
1129 }
1130
1131 if (!lives_strcmp(prefidx, PREF_MIDI_CHECK_RATE)) {
1132 if (newval != prefs->midi_check_rate) {
1133 prefs->midi_check_rate = newval;
1134 goto success3;
1135 }
1136 goto fail3;
1137 }
1138
1139 if (!lives_strcmp(prefidx, PREF_MIDI_RPT)) {
1140 if (newval != prefs->midi_rpt) {
1141 prefs->midi_rpt = newval;
1142 goto success3;
1143 }
1144 goto fail3;
1145 }
1146
1147
1148fail3:
1150 return FALSE;
1151
1152success3:
1153 if (prefsw) {
1156 }
1157 if (permanent) set_int_pref(prefidx, newval);
1158 return TRUE;
1159}
1160
1161boolean pref_factory_string_choice(const char *prefidx, LiVESList *list, const char *strval, boolean permanent) {
1162 int idx = lives_list_strcmp_index(list, (livesconstpointer)strval, TRUE);
1164
1165 if (!lives_strcmp(prefidx, PREF_MSG_TEXTSIZE)) {
1166 if (idx == prefs->msg_textsize) goto fail4;
1167 prefs->msg_textsize = idx;
1168 if (permanent) future_prefs->msg_textsize = prefs->msg_textsize;
1169 if (prefs->show_msg_area) {
1170 if (mainw->multitrack)
1171 msg_area_scroll(LIVES_ADJUSTMENT(mainw->multitrack->msg_adj), mainw->multitrack->msg_area);
1172 else
1173 msg_area_scroll(LIVES_ADJUSTMENT(mainw->msg_adj), mainw->msg_area);
1174 }
1175 goto success4;
1176 }
1177
1178fail4:
1180 return FALSE;
1181
1182success4:
1183 if (prefsw) {
1186 }
1187 if (permanent) set_int_pref(prefidx, idx);
1188 return TRUE;
1189}
1190
1191
1192boolean pref_factory_float(const char *prefidx, float newval, boolean permanent) {
1194
1195 if (!lives_strcmp(prefidx, PREF_MASTER_VOLUME)) {
1196 char *ttip;
1197 if ((LIVES_IS_PLAYING && future_prefs->volume == newval)
1198 || (!LIVES_IS_PLAYING && prefs->volume == (double)newval)) goto fail5;
1199 future_prefs->volume = newval;
1200 ttip = lives_strdup_printf(_("Audio volume (%.2f)"), newval);
1202 lives_free(ttip);
1203 if (!LIVES_IS_PLAYING) {
1204 prefs->volume = newval;
1205 } else permanent = FALSE;
1206 if (LIVES_IS_RANGE(mainw->volume_scale)) {
1207 lives_range_set_value(LIVES_RANGE(mainw->volume_scale), newval);
1208 } else {
1209 lives_scale_button_set_value(LIVES_SCALE_BUTTON(mainw->volume_scale), newval);
1210 }
1211 goto success5;
1212 }
1213
1214 if (!lives_strcmp(prefidx, PREF_AHOLD_THRESHOLD)) {
1215 if (prefs->ahold_threshold == newval) goto fail5;
1216 prefs->ahold_threshold = newval;
1217 goto success5;
1218 }
1219
1220 if (!lives_strcmp(prefidx, PREF_SCREEN_GAMMA)) {
1221 if (prefs->screen_gamma == newval) goto fail5;
1222 prefs->screen_gamma = newval;
1223 goto success5;
1224 }
1225
1226fail5:
1228 return FALSE;
1229
1230success5:
1231 if (prefsw) {
1234 }
1235 if (permanent) set_double_pref(prefidx, newval);
1236 return TRUE;
1237}
1238
1239
1240boolean pref_factory_bitmapped(const char *prefidx, int bitfield, boolean newval, boolean permanent) {
1242
1243 if (!lives_strcmp(prefidx, PREF_AUDIO_OPTS)) {
1244 if (newval && !(prefs->audio_opts & bitfield)) prefs->audio_opts &= bitfield;
1245 else if (!newval && (prefs->audio_opts & bitfield)) prefs->audio_opts ^= bitfield;
1246 else goto fail6;
1247
1248 if (permanent) set_int_pref(PREF_AUDIO_OPTS, prefs->audio_opts);
1249
1250 if (prefsw) {
1251 if (bitfield == AUDIO_OPTS_FOLLOW_FPS) {
1254 }
1255 if (bitfield == AUDIO_OPTS_FOLLOW_CLIPS) {
1258 }
1259 }
1260 goto success6;
1261 }
1262
1263 if (!lives_strcmp(prefidx, PREF_OMC_DEV_OPTS)) {
1264 if (newval && !(prefs->omc_dev_opts & bitfield)) prefs->omc_dev_opts &= bitfield;
1265 else if (!newval && (prefs->omc_dev_opts & bitfield)) prefs->omc_dev_opts ^= bitfield;
1266 else goto fail6;
1267
1269
1270 if (bitfield == OMC_DEV_JS) {
1271 if (newval) js_open();
1272 else js_close();
1273 } else if (bitfield == OMC_DEV_MIDI) {
1274 if (!newval) midi_close();
1275 }
1276#ifdef ALSA_MIDI
1277 else if (bitfield == OMC_DEV_FORCE_RAW_MIDI) {
1278 prefs->use_alsa_midi = !newval;
1279 } else if (bitfield == OMC_DEV_MIDI_DUMMY) {
1280 prefs->alsa_midi_dummy = newval;
1281 }
1282#endif
1283 goto success6;
1284 }
1285
1286fail6:
1288 return FALSE;
1289
1290success6:
1291 if (prefsw) {
1294 }
1295 return TRUE;
1296}
1297
1298
1299boolean pref_factory_int64(const char *prefidx, int64_t newval, boolean permanent) {
1301
1302 if (!lives_strcmp(prefidx, PREF_DISK_QUOTA)) {
1303 if (newval != prefs->disk_quota) {
1305 goto success7;
1306 }
1307 goto fail7;
1308 }
1309
1310fail7:
1312 return FALSE;
1313
1314success7:
1315 if (prefsw) {
1318 }
1319 if (permanent) set_int64_pref(prefidx, newval);
1320 return TRUE;
1321}
1322
1323
1324boolean apply_prefs(boolean skip_warn) {
1325 // set current prefs from prefs dialog
1326 char prefworkdir[PATH_MAX];
1327
1328 const char *video_open_command = lives_entry_get_text(LIVES_ENTRY(prefsw->video_open_entry));
1329 /* const char *audio_play_command = lives_entry_get_text(LIVES_ENTRY(prefsw->audio_command_entry)); */
1330 const char *def_vid_load_dir = lives_entry_get_text(LIVES_ENTRY(prefsw->vid_load_dir_entry));
1331 const char *def_vid_save_dir = lives_entry_get_text(LIVES_ENTRY(prefsw->vid_save_dir_entry));
1332 const char *def_audio_dir = lives_entry_get_text(LIVES_ENTRY(prefsw->audio_dir_entry));
1333 const char *def_image_dir = lives_entry_get_text(LIVES_ENTRY(prefsw->image_dir_entry));
1334 const char *def_proj_dir = lives_entry_get_text(LIVES_ENTRY(prefsw->proj_dir_entry));
1335 const char *wp_path = lives_entry_get_text(LIVES_ENTRY(prefsw->wpp_entry));
1336 const char *frei0r_path = lives_entry_get_text(LIVES_ENTRY(prefsw->frei0r_entry));
1337#ifdef HAVE_LIBVISUAL
1338 const char *libvis_path = lives_entry_get_text(LIVES_ENTRY(prefsw->libvis_entry));
1339#endif
1340 const char *ladspa_path = lives_entry_get_text(LIVES_ENTRY(prefsw->ladspa_entry));
1341
1342 const char *sepimg_path = lives_entry_get_text(LIVES_ENTRY(prefsw->sepimg_entry));
1343 const char *frameblank_path = lives_entry_get_text(LIVES_ENTRY(prefsw->frameblank_entry));
1344
1345 char workdir[PATH_MAX];
1346 const char *theme = lives_combo_get_active_text(LIVES_COMBO(prefsw->theme_combo));
1347 const char *audp = lives_combo_get_active_text(LIVES_COMBO(prefsw->audp_combo));
1348 const char *audio_codec = NULL;
1349 const char *pb_quality = lives_combo_get_active_text(LIVES_COMBO(prefsw->pbq_combo));
1350
1351 LiVESWidgetColor colf, colb, colf2, colb2, coli, colt, coltcfg, coltcbg;
1352
1353 boolean pbq_adap = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->pbq_adaptive));
1354 int pbq = PB_QUALITY_MED;
1355 int idx;
1356
1357 boolean needs_restart = FALSE;
1358
1359 double default_fps = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_def_fps));
1360 double ext_aud_thresh = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_ext_aud_thresh)) / 100.;
1361 boolean load_rfx = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_load_rfx));
1362 boolean apply_gamma = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_apply_gamma));
1363 boolean antialias = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_antialias));
1364 boolean fx_threads = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_threads));
1365
1366 boolean lbox = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_lb));
1367 boolean lboxmt = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_lbmt));
1368 boolean scgamma = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_screengamma));
1369 double gamma = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_gamma));
1370
1371 int nfx_threads = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_nfx_threads));
1372
1373 boolean stop_screensaver = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->stop_screensaver_check));
1374 boolean open_maximised = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->open_maximised_check));
1375 boolean fs_maximised = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->fs_max_check));
1376 boolean show_recent = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->recent_check));
1377 boolean stream_audio_out = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_stream_audio));
1378 boolean rec_after_pb = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_rec_after_pb));
1379
1380 int max_msgs = (uint64_t)lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->nmessages_spin));
1381 const char *msgtextsize = lives_combo_get_active_text(LIVES_COMBO(prefsw->msg_textsize_combo));
1382 boolean msgs_unlimited = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->msgs_unlimited));
1383 boolean msgs_pbdis = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->msgs_pbdis));
1384
1385 uint64_t ds_warn_level = (uint64_t)lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_warn_ds)) * 1000000;
1386 uint64_t ds_crit_level = (uint64_t)lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_crit_ds)) * 1000000;
1387
1388 boolean warn_fps = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_fps));
1389 boolean warn_save_set = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_save_set));
1390 boolean warn_fsize = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_fsize));
1391 boolean warn_mplayer = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_mplayer));
1392 boolean warn_rendered_fx = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_rendered_fx));
1393 boolean warn_encoders = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_encoders));
1394 boolean warn_duplicate_set = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_dup_set));
1395 boolean warn_layout_missing_clips = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_clips));
1396 boolean warn_layout_close = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_close));
1397 boolean warn_layout_delete = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_delete));
1398 boolean warn_layout_shift = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_shift));
1399 boolean warn_layout_alter = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_alter));
1400 boolean warn_discard_layout = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_discard_layout));
1401 boolean warn_after_dvgrab =
1402#ifdef HAVE_LDVGRAB
1404#else
1406#endif
1407 boolean warn_mt_achans = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_mt_achans));
1408 boolean warn_mt_no_jack = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_mt_no_jack));
1409 boolean warn_yuv4m_open =
1410#ifdef HAVE_YUV4MPEG
1412#else
1414#endif
1415
1416 boolean warn_layout_adel = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_adel));
1417 boolean warn_layout_ashift = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_ashift));
1418 boolean warn_layout_aalt = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_aalt));
1419 boolean warn_layout_popup = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_popup));
1420 boolean warn_mt_backup_space
1422 boolean warn_after_crash = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_after_crash));
1423 boolean warn_no_pulse = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_no_pulse));
1424 boolean warn_layout_wipe = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_wipe));
1425 boolean warn_layout_gamma = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_gamma));
1426 boolean warn_layout_lb = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_layout_lb));
1427 boolean warn_vjmode_enter = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_warn_vjmode_enter));
1428
1429 boolean midisynch = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->check_midi));
1430 boolean instant_open = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_instant_open));
1431 boolean auto_deint = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_auto_deint));
1432 boolean auto_trim = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_auto_trim));
1433 boolean auto_nobord = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_nobord));
1434 boolean concat_images = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_concat_images));
1435 boolean ins_speed = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->ins_speed));
1436 boolean show_player_stats = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_show_stats));
1437 boolean ext_jpeg = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->jpeg));
1438 boolean show_tool = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->show_tool));
1439 boolean mouse_scroll = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->mouse_scroll));
1440 boolean ce_maxspect = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_ce_maxspect));
1441 boolean show_button_icons = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_button_icons));
1442 boolean extra_colours = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_extra_colours));
1443 boolean show_asrc = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_show_asrc));
1444 boolean show_ttips = prefsw->checkbutton_show_ttips == NULL ? FALSE : lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(
1446 boolean hfbwnp = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_hfbwnp));
1447
1448 int fsize_to_warn = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_warn_fsize));
1449 int dl_bwidth = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_bwidth));
1450 int ocp = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_ocp));
1451
1452 boolean rec_frames = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->rframes));
1453 boolean rec_fps = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->rfps));
1454 boolean rec_effects = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->reffects));
1455 boolean rec_clips = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->rclips));
1456 boolean rec_audio = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->raudio));
1457 boolean pa_gens = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->pa_gens));
1458 boolean rec_ext_audio = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->rextaudio));
1459#ifdef RT_AUDIO
1460 boolean rec_desk_audio = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->rdesk_audio));
1461#endif
1462
1463 boolean mt_enter_prompt = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->mt_enter_prompt));
1464 boolean render_prompt = !lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_render_prompt));
1465
1466 int mt_def_width = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_mt_def_width));
1467 int mt_def_height = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_mt_def_height));
1468 int mt_def_fps = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_mt_def_fps));
1469 int mt_def_arate = atoi(lives_entry_get_text(LIVES_ENTRY(resaudw->entry_arate)));
1470 int mt_def_achans = atoi(lives_entry_get_text(LIVES_ENTRY(resaudw->entry_achans)));
1471 int mt_def_asamps = atoi(lives_entry_get_text(LIVES_ENTRY(resaudw->entry_asamps)));
1472 int mt_def_signed_endian = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(resaudw->rb_unsigned)) *
1475 int mt_undo_buf = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_mt_undo_buf));
1476
1477 boolean mt_exit_render = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_mt_exit_render));
1478 boolean mt_enable_audio = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(resaudw->aud_checkbutton));
1479 boolean mt_pertrack_audio = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->pertrack_checkbutton));
1480 boolean mt_backaudio = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->backaudio_checkbutton));
1481
1482 boolean mt_autoback_always = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->mt_autoback_always));
1483 boolean mt_autoback_never = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->mt_autoback_never));
1484
1485 int mt_autoback_time = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_mt_ab_time));
1486 int max_disp_vtracks = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_max_disp_vtracks));
1487 int gui_monitor = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_gmoni));
1488 int play_monitor = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_pmoni));
1489
1490 boolean ce_thumbs = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->ce_thumbs));
1491
1492 boolean forcesmon = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->forcesmon));
1493 boolean startup_ce = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->rb_startup_ce));
1494
1495 boolean show_msgstart = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->cb_show_msgstart));
1496 boolean show_quota = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->cb_show_quota));
1497 boolean autoclean = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->cb_autoclean));
1498
1499#ifdef ENABLE_JACK_TRANSPORT
1500 boolean jack_tstart = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_start_tjack));
1501 boolean jack_master = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_jack_master));
1502 boolean jack_client = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_jack_client));
1503 boolean jack_tb_start = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_jack_tb_start));
1504 boolean jack_mtb_start = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_jack_mtb_start));
1505 boolean jack_tb_client = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_jack_tb_client));
1506#else
1507#ifdef ENABLE_JACK
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;
1513#endif
1514#endif
1515
1516#ifdef ENABLE_JACK
1517 boolean jack_astart = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_start_ajack));
1518 boolean jack_pwp = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_jack_pwp));
1519 boolean jack_read_autocon = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_jack_read_autocon));
1520 uint32_t jack_opts = (JACK_OPTS_TRANSPORT_CLIENT * jack_client + JACK_OPTS_TRANSPORT_MASTER * jack_master +
1521 JACK_OPTS_START_TSERVER * jack_tstart + JACK_OPTS_START_ASERVER * jack_astart +
1522 JACK_OPTS_NOPLAY_WHEN_PAUSED * !jack_pwp + JACK_OPTS_TIMEBASE_START * jack_tb_start +
1523 JACK_OPTS_TIMEBASE_LSTART * jack_mtb_start +
1524 JACK_OPTS_TIMEBASE_CLIENT * jack_tb_client + JACK_OPTS_NO_READ_AUTOCON * !jack_read_autocon);
1525#endif
1526
1527#ifdef RT_AUDIO
1528 boolean audio_follow_fps = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_afollow));
1529 boolean audio_follow_clips = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_aclips));
1530 uint32_t audio_opts = (AUDIO_OPTS_FOLLOW_FPS * audio_follow_fps + AUDIO_OPTS_FOLLOW_CLIPS * audio_follow_clips);
1531#endif
1532
1533#ifdef ENABLE_OSC
1534 uint32_t osc_udp_port = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_osc_udp));
1535 boolean osc_start = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->enable_OSC_start));
1536 boolean osc_enable = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->enable_OSC));
1537#endif
1538
1539 int rte_keys_virtual = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_rte_keys));
1540
1541#ifdef ENABLE_OSC
1542#ifdef OMC_JS_IMPL
1543 boolean omc_js_enable = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_omc_js));
1544 const char *omc_js_fname = lives_entry_get_text(LIVES_ENTRY(prefsw->omc_js_entry));
1545#endif
1546
1547#ifdef OMC_MIDI_IMPL
1548 boolean omc_midi_enable = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_omc_midi));
1549 const char *omc_midi_fname = lives_entry_get_text(LIVES_ENTRY(prefsw->omc_midi_entry));
1550 int midicr = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_midicr));
1551 int midirpt = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_midirpt));
1552 const char *midichan = lives_combo_get_active_text(LIVES_COMBO(prefsw->midichan_combo));
1553
1554#ifdef ALSA_MIDI
1555 boolean use_alsa_midi = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->alsa_midi));
1556 boolean alsa_midi_dummy = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->alsa_midi_dummy));
1557#endif
1558
1559#endif
1560#endif
1561
1562 boolean pstyle2 = palette->style & STYLE_2;
1563 boolean pstyle3 = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->theme_style3));
1564 boolean pstyle4 = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->theme_style4));
1565
1566 int rec_gb = lives_spin_button_get_value_as_int(LIVES_SPIN_BUTTON(prefsw->spinbutton_rec_gb));
1567
1568 char audio_player[256];
1569 int listlen = lives_list_length(prefs->acodec_list);
1570 int rec_opts = rec_frames * REC_FRAMES + rec_fps * REC_FPS + rec_effects * REC_EFFECTS + rec_clips * REC_CLIPS + rec_audio *
1571 REC_AUDIO
1572 + rec_after_pb * REC_AFTER_PB;
1573 uint64_t warn_mask;
1574
1575 unsigned char *new_undo_buf;
1576 LiVESList *ulist;
1577
1578#ifdef ENABLE_OSC
1579 boolean set_omc_dev_opts = FALSE;
1580#ifdef OMC_MIDI_IMPL
1581 boolean needs_midi_restart = FALSE;
1582#endif
1583#endif
1584
1585 char *tmp;
1586 char *cdplay_device = lives_filename_from_utf8((char *)lives_entry_get_text(LIVES_ENTRY(prefsw->cdplay_entry)),
1587 -1, NULL, NULL, NULL);
1588
1589 lives_snprintf(prefworkdir, PATH_MAX, "%s", prefs->workdir);
1590 ensure_isdir(prefworkdir);
1591
1592 // TODO: move all into pref_factory_* functions
1594
1595 if (prefsw->theme_style2)
1596 pstyle2 = lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->theme_style2));
1597
1598 lives_color_button_get_color(LIVES_COLOR_BUTTON(prefsw->cbutton_fore), &colf);
1599 lives_color_button_get_color(LIVES_COLOR_BUTTON(prefsw->cbutton_back), &colb);
1600 lives_color_button_get_color(LIVES_COLOR_BUTTON(prefsw->cbutton_mabf), &colf2);
1601 lives_color_button_get_color(LIVES_COLOR_BUTTON(prefsw->cbutton_mab), &colb2);
1602 lives_color_button_get_color(LIVES_COLOR_BUTTON(prefsw->cbutton_infob), &coli);
1603 lives_color_button_get_color(LIVES_COLOR_BUTTON(prefsw->cbutton_infot), &colt);
1604
1605 if (strcasecmp(future_prefs->theme, LIVES_THEME_NONE)) {
1612 ((pstyle2 * STYLE_2) != (palette->style & STYLE_2)) ||
1613 ((pstyle3 * STYLE_3) != (palette->style & STYLE_3)) ||
1614 ((pstyle4 * STYLE_4) != (palette->style & STYLE_4))
1615 ) {
1616
1623
1624 palette->style = STYLE_1 | (pstyle2 * STYLE_2) | (pstyle3 * STYLE_3) | (pstyle4 * STYLE_4);
1626 }
1627 }
1628
1629 if (pref_factory_color_button(&palette->ce_sel, LIVES_COLOR_BUTTON(prefsw->cbutton_cesel)))
1635 if (pref_factory_color_button(&palette->mt_mark, LIVES_COLOR_BUTTON(prefsw->cbutton_mtmark)))
1637 if (pref_factory_color_button(&palette->mt_evbox, LIVES_COLOR_BUTTON(prefsw->cbutton_evbox)))
1641 if (pref_factory_color_button(&palette->vidcol, LIVES_COLOR_BUTTON(prefsw->cbutton_vidcol)))
1643 if (pref_factory_color_button(&palette->audcol, LIVES_COLOR_BUTTON(prefsw->cbutton_audcol)))
1645 if (pref_factory_color_button(&palette->fxcol, LIVES_COLOR_BUTTON(prefsw->cbutton_fxcol)))
1647
1648 lives_color_button_get_color(LIVES_COLOR_BUTTON(prefsw->cbutton_tcfg), &coltcfg);
1652 }
1653
1654 lives_color_button_get_color(LIVES_COLOR_BUTTON(prefsw->cbutton_tcbg), &coltcbg);
1658 }
1659
1661 audio_codec = lives_combo_get_active_text(LIVES_COMBO(prefsw->acodec_combo));
1662
1663 for (idx = 0; idx < listlen && lives_strcmp((char *)lives_list_nth_data(prefs->acodec_list, idx), audio_codec); idx++);
1664
1665 if (idx == listlen) future_prefs->encoder.audio_codec = 0;
1667 } else future_prefs->encoder.audio_codec = 0;
1668
1669 lives_snprintf(workdir, PATH_MAX, "%s",
1670 (tmp = lives_filename_from_utf8((char *)lives_entry_get_text(LIVES_ENTRY(prefsw->workdir_entry)),
1671 -1, NULL, NULL, NULL)));
1672 lives_free(tmp);
1673
1674 if (!audp ||
1676 strlen(mainw->string_constants[LIVES_STRING_CONSTANT_NONE]))) lives_snprintf(audio_player, 256, AUDIO_PLAYER_NONE);
1677 else if (!strncmp(audp, AUDIO_PLAYER_JACK, strlen(AUDIO_PLAYER_JACK))) lives_snprintf(audio_player, 256, AUDIO_PLAYER_JACK);
1678 else if (!strncmp(audp, AUDIO_PLAYER_SOX, strlen(AUDIO_PLAYER_SOX))) lives_snprintf(audio_player, 256, AUDIO_PLAYER_SOX);
1679 else if (!strncmp(audp, AUDIO_PLAYER_PULSE_AUDIO, strlen(AUDIO_PLAYER_PULSE_AUDIO))) lives_snprintf(audio_player, 256,
1681
1685 }
1686
1687 if (rec_opts != prefs->rec_opts) {
1688 prefs->rec_opts = rec_opts;
1690 }
1691
1692 if (!mainw->multitrack) {
1693 pref_factory_bool(PREF_REC_EXT_AUDIO, rec_ext_audio, TRUE);
1694 } else {
1696 }
1697
1698 warn_mask = !warn_fps * WARN_MASK_FPS + !warn_save_set * WARN_MASK_SAVE_SET
1699 + !warn_fsize * WARN_MASK_FSIZE + !warn_mplayer *
1700 WARN_MASK_NO_MPLAYER + !warn_rendered_fx * WARN_MASK_RENDERED_FX + !warn_encoders *
1701 WARN_MASK_NO_ENCODERS + !warn_layout_missing_clips * WARN_MASK_LAYOUT_MISSING_CLIPS + !warn_duplicate_set *
1702 WARN_MASK_DUPLICATE_SET + !warn_layout_close * WARN_MASK_LAYOUT_CLOSE_FILE + !warn_layout_delete *
1703 WARN_MASK_LAYOUT_DELETE_FRAMES + !warn_layout_shift * WARN_MASK_LAYOUT_SHIFT_FRAMES + !warn_layout_alter *
1704 WARN_MASK_LAYOUT_ALTER_FRAMES + !warn_discard_layout * WARN_MASK_EXIT_MT + !warn_after_dvgrab *
1705 WARN_MASK_AFTER_DVGRAB + !warn_mt_achans * WARN_MASK_MT_ACHANS + !warn_mt_no_jack *
1706 WARN_MASK_MT_NO_JACK + !warn_layout_adel * WARN_MASK_LAYOUT_DELETE_AUDIO + !warn_layout_ashift *
1707 WARN_MASK_LAYOUT_SHIFT_AUDIO + !warn_layout_aalt * WARN_MASK_LAYOUT_ALTER_AUDIO + !warn_layout_popup *
1708 WARN_MASK_LAYOUT_POPUP + !warn_yuv4m_open * WARN_MASK_OPEN_YUV4M + !warn_mt_backup_space *
1710 + !warn_no_pulse * WARN_MASK_NO_PULSE_CONNECT
1711 + !warn_layout_wipe * WARN_MASK_LAYOUT_WIPE + !warn_layout_gamma * WARN_MASK_LAYOUT_GAMMA + !warn_layout_lb *
1712 WARN_MASK_LAYOUT_LB + !warn_vjmode_enter *
1714
1715 if (warn_mask != prefs->warning_mask) {
1716 prefs->warning_mask = warn_mask;
1718 }
1719
1720 if (msgs_unlimited) {
1721 pref_factory_int(PREF_MAX_MSGS, -max_msgs, TRUE);
1722 } else {
1724 }
1725
1727 pref_factory_bool(PREF_MSG_START, show_msgstart, TRUE);
1734
1735 ulist = get_textsizes_list();
1737 lives_list_free_all(&ulist);
1738
1739 if (fsize_to_warn != prefs->warn_file_size) {
1740 prefs->warn_file_size = fsize_to_warn;
1741 set_int_pref(PREF_WARN_FILE_SIZE, fsize_to_warn);
1742 }
1743
1744 if (dl_bwidth != prefs->dl_bandwidth) {
1745 prefs->dl_bandwidth = dl_bwidth;
1747 }
1748
1749 if (ocp != prefs->ocp) {
1750 prefs->ocp = ocp;
1752 }
1753
1754 if (show_tool != prefs->show_tool) {
1755 prefs->show_tool = show_tool;
1757 }
1758
1759 if (mouse_scroll != prefs->mouse_scroll_clips) {
1760 prefs->mouse_scroll_clips = mouse_scroll;
1762 }
1763
1770
1773
1775
1776 pref_factory_bool(PREF_SHOW_BUTTON_ICONS, show_button_icons, TRUE);
1777
1778 pref_factory_bool(PREF_EXTRA_COLOURS, extra_colours, TRUE);
1779
1780#ifdef HAVE_PULSE_AUDIO
1783 TRUE);
1784 if (prefs->pa_restart)
1786#endif
1787
1788 if (show_asrc != prefs->show_asrc) {
1790 }
1791
1792#if GTK_CHECK_VERSION(2, 12, 0)
1793 if (show_ttips != prefs->show_tooltips) {
1795 }
1796#endif
1797
1798 if (hfbwnp != prefs->hfbwnp) {
1800 }
1801
1802 if (ce_maxspect != prefs->ce_maxspect) {
1803 prefs->ce_maxspect = ce_maxspect;
1804 set_boolean_pref(PREF_CE_MAXSPECT, ce_maxspect);
1805 if (mainw->multitrack == NULL) {
1806 if (mainw->current_file > -1) {
1807 int current_file = mainw->current_file;
1808 switch_to_file((mainw->current_file = 0), current_file);
1809 }
1810 }
1811 }
1812
1813 if (lives_strcmp(wp_path, prefs->weed_plugin_path)) {
1815 lives_snprintf(prefs->weed_plugin_path, PATH_MAX, "%s", wp_path);
1816 lives_setenv("WEED_PLUGIN_PATH", wp_path);
1817 }
1818
1819#ifdef HAVE_FREI0R
1820 if (lives_strcmp(frei0r_path, prefs->frei0r_path)) {
1821 set_string_pref(PREF_FREI0R_PATH, frei0r_path);
1822 lives_snprintf(prefs->frei0r_path, PATH_MAX, "%s", frei0r_path);
1823 lives_setenv("FREI0R_PATH", frei0r_path);
1824 }
1825#endif
1826
1827#ifdef HAVE_LIBVISUAL
1828 if (lives_strcmp(libvis_path, prefs->libvis_path)) {
1830 lives_snprintf(prefs->libvis_path, PATH_MAX, "%s", libvis_path);
1831 lives_setenv("VISDUAL_PLUGIN_PATH", libvis_path);
1832 }
1833#endif
1834
1835#ifdef HAVE_LADSPA
1836 if (lives_strcmp(ladspa_path, prefs->ladspa_path)) {
1837 set_string_pref(PREF_LADSPA_PATH, ladspa_path);
1838 lives_snprintf(prefs->ladspa_path, PATH_MAX, "%s", ladspa_path);
1839 lives_setenv("LADSPA_PATH", ladspa_path);
1840 }
1841#endif
1842
1843 if (lives_strcmp(sepimg_path, mainw->sepimg_path)) {
1844 lives_snprintf(mainw->sepimg_path, PATH_MAX, "%s", sepimg_path);
1846 }
1847
1848 if (lives_strcmp(frameblank_path, mainw->frameblank_path)) {
1849 lives_snprintf(mainw->frameblank_path, PATH_MAX, "%s", frameblank_path);
1851 }
1852
1853 ensure_isdir(workdir);
1854
1855 // disabled_decoders
1861 }
1862
1863 // stop xscreensaver
1864 if (prefs->stop_screensaver != stop_screensaver) {
1865 prefs->stop_screensaver = stop_screensaver;
1867 }
1868
1869 // antialias
1870 if (prefs->antialias != antialias) {
1871 prefs->antialias = antialias;
1872 set_boolean_pref(PREF_ANTIALIAS, antialias);
1873 }
1874
1875 // load rfx
1876 if (prefs->load_rfx_builtin != load_rfx) {
1877 prefs->load_rfx_builtin = load_rfx;
1879 }
1880
1881 // apply gamma correction
1882 if (prefs->apply_gamma != apply_gamma) {
1883 prefs->apply_gamma = apply_gamma;
1884 set_boolean_pref(PREF_APPLY_GAMMA, apply_gamma);
1885 needs_restart = TRUE;
1886 }
1887
1888 // fx_threads
1889 if (!fx_threads) nfx_threads = 1;
1890 if (prefs->nfx_threads != nfx_threads) {
1891 future_prefs->nfx_threads = nfx_threads;
1892 set_int_pref(PREF_NFX_THREADS, nfx_threads);
1893 }
1894
1895 // open maximised
1896 if (prefs->open_maximised != open_maximised) {
1897 prefs->open_maximised = open_maximised;
1898 set_boolean_pref(PREF_OPEN_MAXIMISED, open_maximised);
1899 }
1900
1901 // filesel maximised
1902 if (prefs->fileselmax != fs_maximised) {
1903 prefs->fileselmax = fs_maximised;
1905 }
1906
1907 // monitors
1908
1909 if (forcesmon != prefs->force_single_monitor) {
1910 prefs->force_single_monitor = forcesmon;
1914 }
1915
1916 if (capable->nmonitors > 1) {
1917 if (gui_monitor != prefs->gui_monitor || play_monitor != prefs->play_monitor) {
1918 char *str = lives_strdup_printf("%d,%d", gui_monitor, play_monitor);
1920 prefs->gui_monitor = gui_monitor;
1921 prefs->play_monitor = play_monitor;
1924 }
1925 }
1926
1927 if (ce_thumbs != prefs->ce_thumb_mode) {
1928 prefs->ce_thumb_mode = ce_thumbs;
1930 }
1931
1932 // fps stats
1933 if (prefs->show_player_stats != show_player_stats) {
1934 prefs->show_player_stats = show_player_stats;
1935 set_boolean_pref(PREF_SHOW_PLAYER_STATS, show_player_stats);
1936 }
1937
1938 if (prefs->stream_audio_out != stream_audio_out) {
1939 prefs->stream_audio_out = stream_audio_out;
1940 set_boolean_pref(PREF_STREAM_AUDIO_OUT, stream_audio_out);
1941 }
1942
1944
1945 // midi synch
1946 if (prefs->midisynch != midisynch) {
1947 prefs->midisynch = midisynch;
1948 set_boolean_pref(PREF_MIDISYNCH, midisynch);
1949 }
1950
1951 // jpeg/png
1952 if (strcmp(prefs->image_ext, LIVES_FILE_EXT_JPG) && ext_jpeg) {
1954 lives_snprintf(prefs->image_ext, 16, LIVES_FILE_EXT_JPG);
1955 lives_snprintf(prefs->image_type, 16, "%s", LIVES_IMAGE_TYPE_JPEG);
1956 } else if (!strcmp(prefs->image_ext, LIVES_FILE_EXT_JPG) && !ext_jpeg) {
1958 lives_snprintf(prefs->image_ext, 16, LIVES_FILE_EXT_PNG);
1959 lives_snprintf(prefs->image_type, 16, "%s", LIVES_IMAGE_TYPE_PNG);
1960 }
1961
1962 // instant open
1963 if (prefs->instant_open != instant_open) {
1965 }
1966
1967 // auto deinterlace
1968 if (prefs->auto_deint != auto_deint) {
1970 }
1971
1972 // auto deinterlace
1973 if (prefs->auto_trim_audio != auto_trim) {
1975 }
1976
1977 // auto border cut
1978 if (prefs->auto_nobord != auto_nobord) {
1980 }
1981
1982 // concat images
1983 if (prefs->concat_images != concat_images) {
1985 }
1986
1987 // encoder
1988 if (strcmp(prefs->encoder.name, future_prefs->encoder.name)) {
1989 lives_snprintf(prefs->encoder.name, 64, "%s", future_prefs->encoder.name);
1991 lives_snprintf(prefs->encoder.of_restrict, 1024, "%s", future_prefs->encoder.of_restrict);
1993 }
1994
1995 // output format
1997 lives_snprintf(prefs->encoder.of_name, 64, "%s", future_prefs->encoder.of_name);
1998 lives_snprintf(prefs->encoder.of_restrict, 1024, "%s", future_prefs->encoder.of_restrict);
1999 lives_snprintf(prefs->encoder.of_desc, 128, "%s", future_prefs->encoder.of_desc);
2002 }
2003
2008 }
2009 }
2010
2011 // pb quality
2012 if (!strcmp(pb_quality, (char *)lives_list_nth_data(prefsw->pbq_list, 0))) pbq = PB_QUALITY_LOW;
2013 if (!strcmp(pb_quality, (char *)lives_list_nth_data(prefsw->pbq_list, 1))) pbq = PB_QUALITY_MED;
2014 if (!strcmp(pb_quality, (char *)lives_list_nth_data(prefsw->pbq_list, 2))) pbq = PB_QUALITY_HIGH;
2015
2016 if (pbq != prefs->pb_quality) {
2019 }
2020
2022
2023 // video open command
2024 if (lives_strcmp(prefs->video_open_command, video_open_command)) {
2025 lives_snprintf(prefs->video_open_command, PATH_MAX * 2, "%s", video_open_command);
2027 }
2028
2029 //playback plugin
2030 set_vpp(TRUE);
2031
2032 /* // audio play command */
2033 /* if (strcmp(prefs->audio_play_command, audio_play_command)) { */
2034 /* lives_snprintf(prefs->audio_play_command, PATH_MAX * 2, "%s", audio_play_command); */
2035 /* set_string_pref(PREF_AUDIO_PLAY_COMMAND, prefs->audio_play_command); */
2036 /* } */
2037
2038 // cd play device
2039 if (lives_strcmp(prefs->cdplay_device, cdplay_device)) {
2040 lives_snprintf(prefs->cdplay_device, PATH_MAX, "%s", cdplay_device);
2042 }
2043
2044 lives_free(cdplay_device);
2045
2046 // default video load directory
2047 if (lives_strcmp(prefs->def_vid_load_dir, def_vid_load_dir)) {
2048 lives_snprintf(prefs->def_vid_load_dir, PATH_MAX, "%s/", def_vid_load_dir);
2051 lives_snprintf(mainw->vid_load_dir, PATH_MAX, "%s", prefs->def_vid_load_dir);
2052 }
2053
2054 // default video save directory
2055 if (lives_strcmp(prefs->def_vid_save_dir, def_vid_save_dir)) {
2056 lives_snprintf(prefs->def_vid_save_dir, PATH_MAX, "%s/", def_vid_save_dir);
2059 lives_snprintf(mainw->vid_save_dir, PATH_MAX, "%s", prefs->def_vid_save_dir);
2060 }
2061
2062 // default audio directory
2063 if (lives_strcmp(prefs->def_audio_dir, def_audio_dir)) {
2064 lives_snprintf(prefs->def_audio_dir, PATH_MAX, "%s/", def_audio_dir);
2067 lives_snprintf(mainw->audio_dir, PATH_MAX, "%s", prefs->def_audio_dir);
2068 }
2069
2070 // default image directory
2071 if (lives_strcmp(prefs->def_image_dir, def_image_dir)) {
2072 lives_snprintf(prefs->def_image_dir, PATH_MAX, "%s/", def_image_dir);
2075 lives_snprintf(mainw->image_dir, PATH_MAX, "%s", prefs->def_image_dir);
2076 }
2077
2078 // default project directory - for backup and restore
2079 if (lives_strcmp(prefs->def_proj_dir, def_proj_dir)) {
2080 lives_snprintf(prefs->def_proj_dir, PATH_MAX, "%s/", def_proj_dir);
2083 lives_snprintf(mainw->proj_load_dir, PATH_MAX, "%s", prefs->def_proj_dir);
2084 lives_snprintf(mainw->proj_save_dir, PATH_MAX, "%s", prefs->def_proj_dir);
2085 }
2086
2087 // the theme
2088 if (lives_utf8_strcmp(future_prefs->theme, theme) && !(!strcasecmp(future_prefs->theme, LIVES_THEME_NONE) &&
2092 lives_snprintf(prefs->theme, 64, "%s", theme);
2093 lives_snprintf(future_prefs->theme, 64, "%s", theme);
2097 if (mainw->multitrack) {
2098 if (mainw->multitrack->frame_pixbuf == mainw->imframe) mainw->multitrack->frame_pixbuf = NULL;
2099 }
2102 } else {
2103 lives_snprintf(future_prefs->theme, 64, LIVES_THEME_NONE);
2114 }
2115 }
2116
2117 // default fps
2118 if (prefs->default_fps != default_fps) {
2119 prefs->default_fps = default_fps;
2121 }
2122
2123 // ahold
2125
2126 // virtual rte keys
2127 if (prefs->rte_keys_virtual != rte_keys_virtual) {
2128 // if we are showing the rte window, we must destroy and recreate it
2130
2131 prefs->rte_keys_virtual = rte_keys_virtual;
2133 }
2134
2135 if (prefs->rec_stop_gb != rec_gb) {
2136 // disk free level at which we must stop recording
2137 prefs->rec_stop_gb = rec_gb;
2139 }
2140
2141 if (ins_speed == prefs->ins_resample) {
2142 prefs->ins_resample = !ins_speed;
2144 }
2145
2146 if (ds_warn_level != prefs->ds_warn_level) {
2147 prefs->ds_warn_level = ds_warn_level;
2149 set_int64_pref(PREF_DS_WARN_LEVEL, ds_warn_level);
2150 }
2151
2152 if (ds_crit_level != prefs->ds_crit_level) {
2153 prefs->ds_crit_level = ds_crit_level;
2154 set_int64_pref(PREF_DS_CRIT_LEVEL, ds_crit_level);
2155 }
2156
2157#ifdef ENABLE_OSC
2158 if (osc_enable) {
2159 if (prefs->osc_udp_started && osc_udp_port != prefs->osc_udp_port) {
2160 // port number changed
2161 lives_osc_end();
2163 }
2164 prefs->osc_udp_port = osc_udp_port;
2165 // try to start on new port number
2166 if (!prefs->osc_udp_started) prefs->osc_udp_started = lives_osc_init(prefs->osc_udp_port);
2167 } else {
2168 if (prefs->osc_udp_started) {
2169 lives_osc_end();
2171 }
2172 }
2173 if (osc_start) {
2174 if (!future_prefs->osc_start) {
2177 }
2178 } else {
2179 if (future_prefs->osc_start) {
2182 }
2183 }
2184 if (prefs->osc_udp_port != osc_udp_port) {
2185 prefs->osc_udp_port = osc_udp_port;
2186 set_int_pref(PREF_OSC_PORT, osc_udp_port);
2187 }
2188#endif
2189
2190#ifdef RT_AUDIO
2191 if (prefs->audio_opts != audio_opts) {
2192 prefs->audio_opts = audio_opts;
2193 set_int_pref(PREF_AUDIO_OPTS, audio_opts);
2194 }
2195
2196 if (rec_desk_audio != prefs->rec_desktop_audio) {
2197 prefs->rec_desktop_audio = rec_desk_audio;
2199 }
2200#endif
2201
2203
2204#ifdef ENABLE_JACK
2205 if (prefs->jack_opts != jack_opts) {
2206 set_int_pref(PREF_JACK_OPTS, jack_opts);
2207 future_prefs->jack_opts = prefs->jack_opts = jack_opts;
2208 }
2209#endif
2210
2211#ifdef ENABLE_OSC
2212#ifdef OMC_JS_IMPL
2215 set_omc_dev_opts = TRUE;
2216#endif
2217
2218#ifdef OMC_MIDI_IMPL
2221
2224
2225 if (omc_midi_enable && !(prefs->omc_dev_opts & OMC_DEV_MIDI)) needs_midi_restart = TRUE;
2227 set_omc_dev_opts = TRUE;
2228
2229#ifdef ALSA_MIDI
2231 set_omc_dev_opts = TRUE;
2232
2233 if (use_alsa_midi == ((prefs->omc_dev_opts & OMC_DEV_FORCE_RAW_MIDI) / OMC_DEV_FORCE_RAW_MIDI)) {
2234 if (!needs_midi_restart) {
2235 needs_midi_restart = (mainw->ext_cntl[EXT_CNTL_MIDI]);
2236 }
2237 }
2238
2240 set_omc_dev_opts = TRUE;
2241 if (!needs_midi_restart) {
2242 needs_midi_restart = (mainw->ext_cntl[EXT_CNTL_MIDI]);
2243 }
2244 }
2245#endif
2246
2247 if (needs_midi_restart) {
2248 midi_close();
2249 midi_open();
2250 }
2251
2252#endif
2253 if (set_omc_dev_opts) set_int_pref(PREF_OMC_DEV_OPTS, prefs->omc_dev_opts);
2254#endif
2255
2256 if (mt_enter_prompt != prefs->mt_enter_prompt) {
2257 prefs->mt_enter_prompt = mt_enter_prompt;
2258 set_boolean_pref(PREF_MT_ENTER_PROMPT, mt_enter_prompt);
2259 }
2260
2261 pref_factory_bool(PREF_MT_EXIT_RENDER, mt_exit_render, TRUE);
2262
2263 if (render_prompt != prefs->render_prompt) {
2264 prefs->render_prompt = render_prompt;
2265 set_boolean_pref(PREF_RENDER_PROMPT, render_prompt);
2266 }
2267
2268 if (mt_pertrack_audio != prefs->mt_pertrack_audio) {
2269 prefs->mt_pertrack_audio = mt_pertrack_audio;
2270 set_boolean_pref(PREF_MT_PERTRACK_AUDIO, mt_pertrack_audio);
2271 }
2272
2273 if (mt_backaudio != prefs->mt_backaudio) {
2274 prefs->mt_backaudio = mt_backaudio;
2275 set_int_pref(PREF_MT_BACKAUDIO, mt_backaudio);
2276 }
2277
2278 if (mt_def_width != prefs->mt_def_width) {
2279 prefs->mt_def_width = mt_def_width;
2280 set_int_pref(PREF_MT_DEF_WIDTH, mt_def_width);
2281 }
2282 if (mt_def_height != prefs->mt_def_height) {
2283 prefs->mt_def_height = mt_def_height;
2284 set_int_pref(PREF_MT_DEF_HEIGHT, mt_def_height);
2285 }
2286 if (mt_def_fps != prefs->mt_def_fps) {
2287 prefs->mt_def_fps = mt_def_fps;
2288 set_double_pref(PREF_MT_DEF_FPS, mt_def_fps);
2289 }
2290 if (!mt_enable_audio) mt_def_achans = 0;
2291 if (mt_def_achans != prefs->mt_def_achans) {
2292 prefs->mt_def_achans = mt_def_achans;
2293 set_int_pref(PREF_MT_DEF_ACHANS, mt_def_achans);
2294 }
2295 if (mt_def_asamps != prefs->mt_def_asamps) {
2296 prefs->mt_def_asamps = mt_def_asamps;
2297 set_int_pref(PREF_MT_DEF_ASAMPS, mt_def_asamps);
2298 }
2299 if (mt_def_arate != prefs->mt_def_arate) {
2300 prefs->mt_def_arate = mt_def_arate;
2301 set_int_pref(PREF_MT_DEF_ARATE, mt_def_arate);
2302 }
2303 if (mt_def_signed_endian != prefs->mt_def_signed_endian) {
2304 prefs->mt_def_signed_endian = mt_def_signed_endian;
2305 set_int_pref(PREF_MT_DEF_SIGNED_ENDIAN, mt_def_signed_endian);
2306 }
2307
2308 if (mt_undo_buf != prefs->mt_undo_buf) {
2309 if ((new_undo_buf = (unsigned char *)lives_malloc(mt_undo_buf * 1024 * 1024)) == NULL) {
2311 } else {
2312 if (mainw->multitrack) {
2313 if (mainw->multitrack->undo_mem) {
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);
2316 if (space_needed > 0) make_backup_space(mainw->multitrack, space_needed);
2317 lives_memcpy(new_undo_buf, mainw->multitrack->undo_mem, mt_undo_buf * 1024 * 1024);
2318 } else lives_memcpy(new_undo_buf, mainw->multitrack->undo_mem, prefs->mt_undo_buf * 1024 * 1024);
2319 ulist = mainw->multitrack->undos;
2320 while (ulist) {
2321 ulist->data = new_undo_buf + ((unsigned char *)ulist->data - mainw->multitrack->undo_mem);
2322 ulist = ulist->next;
2323 }
2324 lives_free(mainw->multitrack->undo_mem);
2325 mainw->multitrack->undo_mem = new_undo_buf;
2326 } else {
2327 mainw->multitrack->undo_mem = (unsigned char *)lives_malloc(mt_undo_buf * 1024 * 1024);
2328 if (mainw->multitrack->undo_mem == NULL) {
2330 } else {
2331 mainw->multitrack->undo_buffer_used = 0;
2332 mainw->multitrack->undos = NULL;
2333 mainw->multitrack->undo_offset = 0;
2334 }
2335 }
2336 }
2337 prefs->mt_undo_buf = mt_undo_buf;
2338 set_int_pref(PREF_MT_UNDO_BUF, mt_undo_buf);
2339 }
2340 }
2341
2342 if (mt_autoback_always) mt_autoback_time = 0;
2343 else if (mt_autoback_never) mt_autoback_time = -1;
2344
2345 pref_factory_int(PREF_MT_AUTO_BACK, mt_autoback_time, TRUE);
2346
2347 if (max_disp_vtracks != prefs->max_disp_vtracks) {
2348 prefs->max_disp_vtracks = max_disp_vtracks;
2349 set_int_pref(PREF_MAX_DISP_VTRACKS, max_disp_vtracks);
2351 }
2352
2353 if (startup_ce && future_prefs->startup_interface != STARTUP_CE) {
2356 if ((mainw->multitrack && mainw->multitrack->event_list) || mainw->stored_event_list)
2358 } else if (!startup_ce && future_prefs->startup_interface != STARTUP_MT) {
2361 if ((mainw->multitrack && mainw->multitrack->event_list) || mainw->stored_event_list)
2363 }
2364
2366
2367 if (lives_strcmp(prefworkdir, workdir)) {
2368 char *xworkdir = lives_strdup(workdir);
2369 if (check_workdir_valid(&xworkdir, LIVES_DIALOG(prefsw->prefs_dialog), FALSE) == LIVES_RESPONSE_OK) {
2370 char *msg = workdir_ch_warning();
2371
2372 if (do_warning_dialog(msg)) {
2373 lives_snprintf(workdir, PATH_MAX, "%s", xworkdir);
2374 set_workdir_label_text(LIVES_LABEL(prefsw->workdir_label), xworkdir);
2375 lives_free(xworkdir);
2376
2378 lives_widget_context_update(); // update prefs window before showing confirmation box
2379 lives_snprintf(future_prefs->workdir, PATH_MAX, "%s", workdir);
2381 needs_restart = TRUE;
2382 } else {
2383 future_prefs->workdir[0] = '\0';
2385 }
2386 lives_free(msg);
2387 }
2388 }
2389
2390 return needs_restart;
2391}
2392
2393
2395 // save future prefs on exit, if they have changed
2396
2397 // show_recent is a special case, future prefs has our original value
2399 for (register int i = 1; i < + N_RECENT_FILES; i++) {
2400 char *prefname = lives_strdup_printf("%s%d", PREF_RECENT, i);
2401 set_string_pref(prefname, "");
2402 lives_free(prefname);
2403 }
2404 }
2405
2408 }
2409
2410 if ((*future_prefs->workdir)) {
2413 }
2414}
2415
2416
2417void rdet_acodec_changed(LiVESCombo *acodec_combo, livespointer user_data) {
2418 int listlen = lives_list_length(prefs->acodec_list);
2419 int idx;
2420 const char *audio_codec = lives_combo_get_active_text(acodec_combo);
2421 if (!strcmp(audio_codec, mainw->string_constants[LIVES_STRING_CONSTANT_ANY])) return;
2422
2423 for (idx = 0; idx < listlen && strcmp((char *)lives_list_nth_data(prefs->acodec_list, idx), audio_codec); idx++);
2424
2425 if (idx == listlen) future_prefs->encoder.audio_codec = 0;
2427
2432 }
2433 }
2434}
2435
2436
2438 // could be done better, but no time...
2439 // get settings for current format
2440
2441 int count = 0, idx;
2442 boolean is_allowed = FALSE;
2443
2444 if (prefs->acodec_list) {
2445 lives_list_free(prefs->acodec_list);
2446 prefs->acodec_list = NULL;
2447 }
2448
2450 prefs->acodec_list = lives_list_append(prefs->acodec_list, lives_strdup(mainw->string_constants[LIVES_STRING_CONSTANT_NONE]));
2452
2453 if (prefsw) {
2456 }
2457 if (rdet) {
2460 }
2461 return;
2462 }
2463 for (idx = 0; strlen(anames[idx]); idx++) {
2464 if (future_prefs->encoder.of_allowed_acodecs & (1 << idx)) {
2465 if (idx == AUDIO_CODEC_PCM) prefs->acodec_list = lives_list_append(prefs->acodec_list,
2466 (_("PCM (highest quality; largest files)")));
2467 else prefs->acodec_list = lives_list_append(prefs->acodec_list, lives_strdup(anames[idx]));
2468 prefs->acodec_list_to_format[count++] = idx;
2469 if (future_prefs->encoder.audio_codec == idx) is_allowed = TRUE;
2470 }
2471 }
2472
2473 if (prefsw) {
2475 }
2476 if (rdet) {
2478 }
2479 if (!is_allowed) {
2481 }
2482
2483 for (idx = 0; idx < lives_list_length(prefs->acodec_list); idx++) {
2485 if (prefsw) {
2487 }
2488 if (rdet) {
2490 }
2491 break;
2492 }
2493 }
2494}
2495
2496
2497void after_vpp_changed(LiVESWidget *vpp_combo, livespointer advbutton) {
2498 const char *newvpp = lives_combo_get_active_text(LIVES_COMBO(vpp_combo));
2499 _vid_playback_plugin *tmpvpp;
2500
2502 lives_widget_set_sensitive(LIVES_WIDGET(advbutton), FALSE);
2503 } else {
2504 lives_widget_set_sensitive(LIVES_WIDGET(advbutton), TRUE);
2505
2506 // will call set_astream_settings
2507 if ((tmpvpp = open_vid_playback_plugin(newvpp, FALSE)) == NULL) {
2508 lives_combo_set_active_string(LIVES_COMBO(vpp_combo), mainw->vpp->name);
2509 return;
2510 }
2512 }
2513 lives_snprintf(future_prefs->vpp_name, 64, "%s", newvpp);
2514
2515 if (future_prefs->vpp_argv) {
2516 register int i;
2517 for (i = 0; future_prefs->vpp_argv[i]; lives_free(future_prefs->vpp_argv[i++]));
2519 future_prefs->vpp_argv = NULL;
2520 }
2522
2525}
2526
2527
2528static void on_forcesmon_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2529 int gui_monitor = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_gmoni));
2530 int play_monitor = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_pmoni));
2534 play_monitor != gui_monitor &&
2535 play_monitor != 0 && capable->nmonitors > 1);
2536}
2537
2538
2539static void pmoni_gmoni_changed(LiVESWidget *sbut, livespointer user_data) {
2540 _prefsw *prefsw = (_prefsw *)user_data;
2541 int gui_monitor = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_gmoni));
2542 int play_monitor = lives_spin_button_get_value(LIVES_SPIN_BUTTON(prefsw->spinbutton_pmoni));
2543 lives_widget_set_sensitive(prefsw->ce_thumbs, play_monitor != gui_monitor &&
2544 play_monitor != 0 && !lives_toggle_button_get_active(LIVES_TOGGLE_BUTTON(prefsw->forcesmon)) &&
2545 capable->nmonitors > 1);
2546}
2547
2548
2549static void on_mtbackevery_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2550 _prefsw *xprefsw;
2551
2552 if (user_data) xprefsw = (_prefsw *)user_data;
2553 else xprefsw = prefsw;
2554
2556
2557}
2558
2559
2560#ifdef ENABLE_JACK_TRANSPORT
2561static void after_jack_client_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2562 if (!lives_toggle_button_get_active(tbutton)) {
2565 } else {
2569 }
2570}
2571
2572
2573static void after_jack_tb_start_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2574 if (!lives_toggle_button_get_active(tbutton)) {
2578 } else {
2582 future_prefs->jack_opts &= ~JACK_OPTS_TIMEBASE_START;
2583 }
2584}
2585
2586static void after_jack_master_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2587 if (!lives_toggle_button_get_active(tbutton)) {
2590 } else {
2594 }
2595}
2596#endif
2597
2598
2599#ifdef ENABLE_OSC
2600#ifdef OMC_MIDI_IMPL
2601#ifdef ALSA_MIDI
2602static void on_alsa_midi_toggled(LiVESToggleButton *tbutton, livespointer user_data) {
2603 _prefsw *xprefsw;
2604
2605 if (user_data) xprefsw = (_prefsw *)user_data;
2606 else xprefsw = prefsw;
2607
2613}
2614#endif
2615#endif
2616#endif
2617
2618
2619static void on_audp_entry_changed(LiVESWidget *audp_combo, livespointer ptr) {
2620 const char *audp = lives_combo_get_active_text(LIVES_COMBO(audp_combo));
2621
2622 if (!(*audp) || !strcmp(audp, prefsw->audp_name)) return;
2623 if (LIVES_IS_PLAYING) {
2626
2627 lives_combo_set_active_string(LIVES_COMBO(audp_combo), prefsw->audp_name);
2628
2629 //lives_widget_queue_draw(audp_entry);
2631 return;
2632 }
2633
2634#ifdef RT_AUDIO
2635 if (!strcmp(audp, AUDIO_PLAYER_JACK) || !strcmp(audp, AUDIO_PLAYER_PULSE_AUDIO)) {
2641 } else {
2647 lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->rextaudio), FALSE);
2648 }
2649#ifdef ENABLE_JACK
2650 if (!strcmp(audp, AUDIO_PLAYER_JACK)) {
2655 } else {
2660 }
2661#endif
2662#ifdef HAVE_PULSE_AUDIO
2663 if (!strcmp(audp, AUDIO_PLAYER_PULSE_AUDIO)) {
2667
2668 } else {
2671 }
2672#endif
2673#endif
2675
2676 prefsw->audp_name = lives_strdup(lives_combo_get_active_text(LIVES_COMBO(audp_combo)));
2679}
2680
2681
2682static void stream_audio_toggled(LiVESToggleButton *togglebutton, livespointer user_data) {
2683 // if audio streaming is enabled, check requisites
2684
2685 if (lives_toggle_button_get_active(togglebutton)) {
2686 // init vpp, get audio codec, check requisites
2687 _vid_playback_plugin *tmpvpp;
2688 uint32_t orig_acodec = AUDIO_CODEC_NONE;
2689
2690 if (*future_prefs->vpp_name) {
2691 if ((tmpvpp = open_vid_playback_plugin(future_prefs->vpp_name, FALSE)) == NULL) return;
2692 } else {
2693 tmpvpp = mainw->vpp;
2694 orig_acodec = mainw->vpp->audio_codec;
2695 get_best_audio(mainw->vpp); // check again because audio player may differ
2696 }
2697
2698 if (tmpvpp->audio_codec != AUDIO_CODEC_NONE) {
2699 // make audiostream plugin name
2700 size_t rlen;
2701
2702 char buf[1024];
2703 char *com;
2704
2705 char *astreamer = lives_build_filename(prefs->lib_dir, PLUGIN_EXEC_DIR, PLUGIN_AUDIO_STREAM, AUDIO_STREAMER_NAME, NULL);
2706
2707 com = lives_strdup_printf("\"%s\" check %d", astreamer, tmpvpp->audio_codec);
2708 lives_free(astreamer);
2709
2710 rlen = lives_popen(com, TRUE, buf, 1024);
2711 lives_free(com);
2712 if (rlen > 0) {
2714 }
2715 }
2716
2717 if (tmpvpp) {
2718 if (tmpvpp != mainw->vpp) {
2719 // close the temp current vpp
2721 } else {
2722 // restore current codec
2723 mainw->vpp->audio_codec = orig_acodec;
2724 // *INDENT-OFF*
2725 }}}
2726 // *INDENT-ON*
2727}
2728
2729
2731 if (vpp && (vpp->audio_codec != AUDIO_CODEC_NONE || vpp->init_audio)) {
2733 //lives_toggle_button_set_active (LIVES_TOGGLE_BUTTON (prefsw->checkbutton_stream_audio),future_prefs->stream_audio_out);
2734 } else {
2737 }
2738}
2739
2740
2742 if (vpp && (vpp->capabilities & VPP_CAN_RETURN)) {
2744 //lives_widget_set_sensitive(prefsw->checkbutton_rec_after_pb, TRUE);
2745 //lives_toggle_button_set_active (LIVES_TOGGLE_BUTTON (prefsw->checkbutton_stream_audio),future_prefs->stream_audio_out);
2746 } else {
2749 }
2750}
2751
2752
2753/*
2754 Initialize preferences dialog list
2755*/
2756static void pref_init_list(LiVESWidget * list) {
2757 LiVESCellRenderer *renderer, *pixbufRenderer;
2758 LiVESTreeViewColumn *column1, *column2;
2759 LiVESListStore *store;
2760
2761 renderer = lives_cell_renderer_text_new();
2762 pixbufRenderer = lives_cell_renderer_pixbuf_new();
2763
2764 column1 = lives_tree_view_column_new_with_attributes("List Icons", pixbufRenderer, LIVES_TREE_VIEW_COLUMN_PIXBUF, LIST_ICON,
2765 NULL);
2766 column2 = lives_tree_view_column_new_with_attributes("List Items", renderer, LIVES_TREE_VIEW_COLUMN_TEXT, LIST_ITEM, NULL);
2767 lives_tree_view_append_column(LIVES_TREE_VIEW(list), column1);
2768 lives_tree_view_append_column(LIVES_TREE_VIEW(list), column2);
2769 lives_tree_view_column_set_sizing(column2, LIVES_TREE_VIEW_COLUMN_FIXED);
2771
2772 store = lives_list_store_new(N_COLUMNS, LIVES_COL_TYPE_PIXBUF, LIVES_COL_TYPE_STRING, LIVES_COL_TYPE_UINT);
2773
2774 lives_tree_view_set_model(LIVES_TREE_VIEW(list), LIVES_TREE_MODEL(store));
2775}
2776
2777
2778/*
2779 Adds entry to preferences dialog list
2780*/
2781static void prefs_add_to_list(LiVESWidget * list, LiVESPixbuf * pix, const char *str, uint32_t idx) {
2782 LiVESListStore *store;
2783 LiVESTreeIter iter;
2784
2785 char *tmp = lives_strdup_printf("\n %s\n", str);
2786
2787 store = LIVES_LIST_STORE(lives_tree_view_get_model(LIVES_TREE_VIEW(list)));
2788
2789 lives_list_store_insert(store, &iter, idx);
2790 lives_list_store_set(store, &iter, LIST_ICON, pix, LIST_ITEM, tmp, LIST_NUM, idx, -1);
2791 lives_free(tmp);
2792}
2793
2794
2795/*
2796 Callback function called when preferences list row changed
2797*/
2798void on_prefs_page_changed(LiVESTreeSelection * widget, _prefsw * prefsw) {
2799 LiVESTreeIter iter;
2800 LiVESTreeModel *model;
2801 char *name, *tmp;
2802
2803 for (int i = 0; i < 2; i++) {
2804 // for some reason gtk+ needs us to do this twice..
2805 if (lives_tree_selection_get_selected(widget, &model, &iter)) {
2806
2807 // Hide currently shown widget
2808 if (prefsw->right_shown) {
2810 }
2811
2812 switch (prefs_current_page) {
2816 break;
2820 break;
2824 break;
2828 break;
2832 break;
2833 case LIST_ENTRY_EFFECTS:
2836 break;
2840 break;
2844 break;
2845 case LIST_ENTRY_MISC:
2851 }
2852 break;
2853 case LIST_ENTRY_THEMES:
2856 break;
2857 case LIST_ENTRY_NET:
2860 break;
2861 case LIST_ENTRY_JACK:
2863
2864#ifdef ENABLE_JACK
2867 }
2868#endif
2869
2871 break;
2872 case LIST_ENTRY_MIDI:
2875#ifdef OMC_MIDI_IMPL
2876#ifndef ALSA_MIDI
2878#endif
2879#endif
2880 break;
2881 case LIST_ENTRY_GUI:
2882 default:
2885 if (nmons > 1) {
2888#if !LIVES_HAS_GRID_WIDGET
2891#endif
2892 }
2893 prefs_current_page = LIST_ENTRY_GUI;
2894 }
2895 lives_tree_model_get(model, &iter, LIST_NUM, &prefs_current_page, LIST_ITEM, &name, -1);
2896 tmp = lives_strdup_printf("<big><b>%s</b></big>", name);
2898 lives_label_set_text(LIVES_LABEL(prefsw->tlabel), tmp);
2900 lives_free(tmp);
2901 }
2902 }
2903
2905}
2906
2907
2908/*
2909 Function makes apply button sensitive
2910*/
2911void apply_button_set_enabled(LiVESWidget * widget, livespointer func_data) {
2912 if (prefsw->ignore_apply) return;
2913 lives_button_grab_default_special(prefsw->applybutton); // need to do this first or the button doesnt get its colour
2917}
2918
2919
2920static 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;
2923 double myval = lives_spin_button_get_value(warn_ds);
2924 uint64_t umyval = (uint64_t)myval * MILLIONS(1);
2925 if (is_crit)
2927 if (myval == 0.) tmp2 = lives_strdup(mainw->string_constants[LIVES_STRING_CONSTANT_DISABLED]);
2928 else {
2930 tmp2 = lives_strdup_printf("(%s)", tmp);
2931 }
2932 if (is_crit)
2933 lives_label_set_text(LIVES_LABEL(prefsw->dsc_label), tmp2);
2934 else
2935 lives_label_set_text(LIVES_LABEL(prefsw->dsl_label), tmp2);
2936 if (tmp)lives_free(tmp);
2937 lives_free(tmp2);
2938}
2939
2940
2941static void theme_widgets_set_sensitive(LiVESCombo * combo, livespointer xprefsw) {
2942 _prefsw *prefsw = (_prefsw *)xprefsw;
2943 const char *theme = lives_combo_get_active_text(combo);
2944 boolean theme_set = TRUE;
2957 if (prefsw->theme_style2) {
2959 }
2973}
2974
2975
2976static boolean check_txtsize(LiVESWidget * combo) {
2977 LiVESList *list = get_textsizes_list();
2978 const char *msgtextsize = lives_combo_get_active_text(LIVES_COMBO(combo));
2979 int idx = lives_list_strcmp_index(list, (livesconstpointer)msgtextsize, TRUE);
2980 lives_list_free_all(&list);
2981
2982 if (idx > mainw->max_textsize) {
2983 show_warn_image(combo, _("Text size may be too large for the screen size"));
2984 return TRUE;
2985 }
2986 hide_warn_image(combo);
2987 return FALSE;
2988}
2989
2990
2991/*
2992 Function creates preferences dialog
2993*/
2994_prefsw *create_prefs_dialog(LiVESWidget * saved_dialog) {
2995 LiVESWidget *dialog_vbox_main;
2996 LiVESWidget *dialog_table;
2997 LiVESWidget *list_scroll;
2998
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;
3013
3014 LiVESWidget *ins_resample;
3015 LiVESWidget *hbox;
3016
3017 LiVESWidget *layout;
3018
3019 LiVESWidget *hbox1;
3020 LiVESWidget *vbox;
3021
3022 LiVESWidget *dirbutton;
3023
3024 LiVESWidget *pp_combo;
3025 LiVESWidget *png;
3026 LiVESWidget *frame;
3027 LiVESWidget *mt_enter_defs;
3028
3029 LiVESWidget *advbutton;
3030
3031 LiVESWidget *sp_red, *sp_green, *sp_blue;
3032
3033#ifdef ENABLE_OSC
3034#ifdef OMC_MIDI_IMPL
3035 LiVESWidget *raw_midi_button;
3036#endif
3037#endif
3038
3039 LiVESWidget *label;
3040
3041 // radio button groups
3042 //LiVESSList *rb_group = NULL;
3043 LiVESSList *jpeg_png = NULL;
3044 LiVESSList *mt_enter_prompt = NULL;
3045 LiVESSList *rb_group2 = NULL;
3046
3047#ifdef ENABLE_OSC
3048#ifdef OMC_MIDI_IMPL
3049 LiVESSList *alsa_midi_group = NULL;
3050 LiVESList *mchanlist = NULL;
3051#endif
3052#endif
3053
3054 LiVESSList *autoback_group = NULL;
3055 LiVESSList *st_interface_group = NULL;
3056
3057 LiVESSList *asrc_group = NULL;
3058
3059 // drop down lists
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;
3069
3070 lives_colRGBA64_t rgba;
3071
3072 char **array, **filt;
3073 char *tmp, *tmp2, *tmp3;
3074 char *theme;
3075
3076#ifdef ENABLE_OSC
3077#ifdef OMC_MIDI_IMPL
3078 char *midichan;
3079#endif
3080#endif
3081
3082 boolean pfsm;
3083 boolean has_ap_rec = FALSE;
3084
3085 int woph;
3086
3087 register int i;
3088
3089 // Allocate memory for the preferences structure
3090 _prefsw *prefsw = (_prefsw *)(lives_malloc(sizeof(_prefsw)));
3091 prefsw->right_shown = NULL;
3093
3094 prefsw->accel_group = LIVES_ACCEL_GROUP(lives_accel_group_new());
3095
3097
3098 if (!saved_dialog) {
3099 // Create new modal dialog window and set some attributes
3103 } else prefsw->prefs_dialog = saved_dialog;
3104
3106 //prefs->cb_is_switch = TRUE; // TODO: intercept TOGGLED handler
3107
3108 // Get dialog's vbox and show it
3109 dialog_vbox_main = lives_dialog_get_content_area(LIVES_DIALOG(prefsw->prefs_dialog));
3110 lives_widget_show(dialog_vbox_main);
3111
3112 // Create dialog horizontal panels
3115
3116 // Create dialog table for the right panel controls placement
3117 dialog_table = lives_vbox_new(FALSE, 0);
3118
3119 hbox = lives_hbox_new(FALSE, 0);
3120 lives_box_pack_start(LIVES_BOX(dialog_table), hbox, FALSE, FALSE, widget_opts.packing_height);
3121 widget_opts.justify = LIVES_JUSTIFY_CENTER;
3123 lives_widget_apply_theme2(prefsw->tlabel, LIVES_WIDGET_STATE_NORMAL, TRUE);
3125 lives_box_pack_start(LIVES_BOX(hbox), prefsw->tlabel, TRUE, TRUE, 0);
3126
3127#if GTK_CHECK_VERSION(3, 16, 0)
3128 if (mainw->pretty_colours) {
3129 char *colref2 = gdk_rgba_to_string(&palette->menu_and_bars);
3130 char *colref = gdk_rgba_to_string(&palette->normal_back);
3131 char *tmp = lives_strdup_printf("linear-gradient(%s, %s)", colref2, colref);
3132 set_css_value_direct(prefsw->tlabel, LIVES_WIDGET_STATE_NORMAL, "",
3133 "background-image", tmp);
3134 lives_free(colref); lives_free(colref2);
3135 lives_free(tmp);
3136 set_css_value_direct(LIVES_WIDGET(prefsw->tlabel), LIVES_WIDGET_STATE_NORMAL, "", "border-top-left-radius", "20px");
3137 set_css_value_direct(LIVES_WIDGET(prefsw->tlabel), LIVES_WIDGET_STATE_NORMAL, "", "border-top-right-radius", "20px");
3138 }
3139#endif
3140
3141 lives_widget_show_all(dialog_table);
3142 lives_widget_set_no_show_all(dialog_table, TRUE);
3143
3144 // Create preferences list with invisible headers
3146
3147 if (palette->style & STYLE_1) {
3148 lives_widget_apply_theme(prefsw->prefs_list, LIVES_WIDGET_STATE_SELECTED);
3149 }
3150
3152
3153 // Place panels into main vbox
3154 lives_box_pack_start(LIVES_BOX(dialog_vbox_main), prefsw->dialog_hpaned, TRUE, TRUE, 0);
3155
3156 // Place list on the left panel
3157 pref_init_list(prefsw->prefs_list);
3158
3159 list_scroll =
3161 NULL);
3162 lives_scrolled_window_set_policy(LIVES_SCROLLED_WINDOW(list_scroll), LIVES_POLICY_AUTOMATIC,
3163 LIVES_POLICY_AUTOMATIC);
3164 lives_container_add(LIVES_CONTAINER(list_scroll), prefsw->prefs_list);
3165
3166 if (palette->style & STYLE_1) {
3167 lives_widget_apply_theme3(prefsw->prefs_list, LIVES_WIDGET_STATE_NORMAL);
3168 }
3169
3170 if (palette->style & STYLE_1) {
3171 lives_widget_apply_theme(dialog_table, LIVES_WIDGET_STATE_NORMAL);
3172 lives_widget_apply_theme(prefsw->dialog_hpaned, LIVES_WIDGET_STATE_NORMAL);
3173 }
3174
3175 lives_paned_pack(1, LIVES_PANED(prefsw->dialog_hpaned), list_scroll, TRUE, FALSE);
3176 // Place table on the right panel
3177
3178 lives_paned_pack(2, LIVES_PANED(prefsw->dialog_hpaned), dialog_table, TRUE, FALSE);
3179
3180#if GTK_CHECK_VERSION(3, 0, 0)
3182#else
3184#endif
3185 // -------------------,
3186 // gui controls |
3187 // -------------------'
3189
3192
3193 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_gui));
3194 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3195
3197 lives_standard_check_button_new(_("Open file selection maximised"), prefs->fileselmax, LIVES_BOX(hbox), NULL);
3198
3199 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3200
3202 lives_standard_check_button_new(_("Show recent files in the File menu"), prefs->show_recent, LIVES_BOX(hbox), NULL);
3203
3204 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3205
3207 lives_standard_check_button_new(_("Stop screensaver on playback "), prefs->stop_screensaver, LIVES_BOX(hbox), NULL);
3208
3209 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3210
3212 LIVES_BOX(hbox), NULL);
3213
3214 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3215
3216 prefsw->show_tool =
3217 lives_standard_check_button_new(_("Show toolbar when background is blanked"), prefs->show_tool, LIVES_BOX(hbox), NULL);
3218
3219 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3220
3222 lives_standard_check_button_new(_("Allow mouse wheel to switch clips"), prefs->mouse_scroll_clips, LIVES_BOX(hbox), NULL);
3223
3224 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3225
3227 lives_standard_check_button_new(_("Shrink previews to fit in interface"), prefs->ce_maxspect, LIVES_BOX(hbox),
3228 (tmp = H_("Setting is assumed automatically if letterbox playback is enabled")));
3229 lives_free(tmp);
3230
3231 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3232
3234 lives_standard_check_button_new(_("Hide framebar when not playing"), prefs->hfbwnp, LIVES_BOX(hbox), NULL);
3235
3236 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3237
3238#if GTK_CHECK_VERSION(2, 12, 0)
3240 lives_standard_check_button_new(_("Show tooltips"), prefs->show_tooltips, LIVES_BOX(hbox), NULL);
3241#else
3243#endif
3244
3245 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3246
3248 lives_standard_check_button_new(_("Show audio source in toolbar"), prefs->show_asrc, LIVES_BOX(hbox), NULL);
3249
3251
3252 hbox = lives_hbox_new(FALSE, 0);
3255
3256 label = lives_standard_label_new(_("Startup mode:"));
3257 lives_box_pack_start(LIVES_BOX(hbox), label, FALSE, TRUE, 0);
3258
3259 add_fill_to_box(LIVES_BOX(hbox));
3260
3261 prefsw->rb_startup_ce = lives_standard_radio_button_new(_("_Clip editor"), &st_interface_group, LIVES_BOX(hbox), NULL);
3262
3263 add_fill_to_box(LIVES_BOX(hbox));
3264
3265 prefsw->rb_startup_mt = lives_standard_radio_button_new(_("_Multitrack mode"), &st_interface_group, LIVES_BOX(hbox), NULL);
3266
3267 if (prefs->vj_mode)
3268 show_warn_image(prefsw->rb_startup_mt, _("Disabled in VJ mode"));
3269
3272 } else {
3274 }
3275
3276 add_fill_to_box(LIVES_BOX(hbox));
3277
3278 //
3279 // multihead support (inside Gui part)
3280 //
3281
3285 nmons = capable->nmonitors;
3286
3287 label = lives_standard_label_new(_("Multi-head support"));
3289
3290 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_gui));
3291 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3292
3293 prefsw->spinbutton_gmoni = lives_standard_spin_button_new(_("Monitor number for LiVES interface"), prefs->gui_monitor, 1, nmons,
3294 1., 1., 0, LIVES_BOX(hbox), NULL);
3295
3296 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3297
3299 lives_standard_spin_button_new(_("Monitor number for playback"),
3300 prefs->play_monitor, 0,
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 "
3304 "plugins)."))));
3305 lives_free(tmp);
3307
3308 add_fill_to_box(LIVES_BOX(hbox));
3309
3310 prefsw->forcesmon_hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3311
3312 prefsw->forcesmon = lives_standard_check_button_new((tmp = (_("Force single monitor"))),
3314 (tmp2 = (_("Ignore all except the first monitor."))));
3315 lives_free(tmp);
3316 lives_free(tmp2);
3317
3319
3320 if (nmons <= 1) {
3323 }
3324
3325 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->forcesmon), LIVES_WIDGET_TOGGLED_SIGNAL,
3326 LIVES_GUI_CALLBACK(on_forcesmon_toggled), NULL);
3327
3328 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3329
3330 prefsw->ce_thumbs = lives_standard_check_button_new(_("Show clip thumbnails during playback"), prefs->ce_thumb_mode,
3331 LIVES_BOX(hbox), NULL);
3333
3336 capable->nmonitors > 1);
3337
3338 pmoni_gmoni_changed(NULL, (livespointer)prefsw);
3339
3341
3342 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_gui));
3343 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3344
3345 prefsw->nmessages_spin = lives_standard_spin_button_new(_("Number of _Info Messages to Buffer"),
3346 ABS(prefs->max_messages), 0., 100000., 1., 1., 0,
3347 LIVES_BOX(hbox), NULL);
3348 ACTIVE(nmessages_spin, VALUE_CHANGED);
3349
3350 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3352 prefs->max_messages < 0, LIVES_BOX(hbox), NULL);
3353
3355 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->nmessages_spin), LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
3356 LIVES_GUI_CALLBACK(widget_inact_toggle), prefsw->msgs_unlimited);
3357 ACTIVE(msgs_unlimited, TOGGLED);
3358
3359 textsizes_list = get_textsizes_list();
3360
3361 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3362 prefsw->msg_textsize_combo = lives_standard_combo_new(_("Message Area _Font Size"), textsizes_list,
3363 LIVES_BOX(hbox), NULL);
3364
3366
3367 check_txtsize(prefsw->msg_textsize_combo);
3368 lives_signal_connect_after(LIVES_WIDGET_OBJECT(prefsw->msg_textsize_combo), LIVES_WIDGET_CHANGED_SIGNAL,
3369 LIVES_GUI_CALLBACK(check_txtsize), NULL);
3370
3371 lives_list_free_all(&textsizes_list);
3372
3373 ACTIVE(msg_textsize_combo, CHANGED);
3374
3375 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3376 prefsw->msgs_pbdis = lives_standard_check_button_new(_("_Disable message output during playback"),
3377 prefs->msgs_pbdis, LIVES_BOX(hbox), NULL);
3378 ACTIVE(msgs_pbdis, TOGGLED);
3379
3380 pixbuf_gui = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_GUI, LIVES_ICON_SIZE_CUSTOM, -1, -1);
3381
3382 prefs_add_to_list(prefsw->prefs_list, pixbuf_gui, _("GUI"), LIST_ENTRY_GUI);
3383 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_gui);
3384
3385 // -----------------------,
3386 // multitrack controls |
3387 // -----------------------'
3388
3391
3393
3394 hbox = lives_hbox_new(FALSE, 0);
3396
3397 label = lives_standard_label_new(_("When entering Multitrack mode:"));
3398 lives_box_pack_start(LIVES_BOX(hbox), label, FALSE, FALSE, widget_opts.packing_width);
3399
3400 add_fill_to_box(LIVES_BOX(hbox));
3401
3402 hbox = lives_hbox_new(FALSE, 0);
3404
3405 prefsw->mt_enter_prompt = lives_standard_radio_button_new(_("_Prompt me for width, height, fps and audio settings"),
3406 &mt_enter_prompt, LIVES_BOX(hbox), NULL);
3407
3408 mt_enter_defs = lives_standard_radio_button_new(_("_Always use the following values:"),
3409 &mt_enter_prompt, LIVES_BOX(hbox), NULL);
3410
3411 lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(mt_enter_defs), !prefs->mt_enter_prompt);
3412
3413 hbox = lives_hbox_new(FALSE, 0);
3415
3416 prefsw->checkbutton_render_prompt = lives_standard_check_button_new(_("Use these same _values for rendering a new clip"),
3417 !prefs->render_prompt, LIVES_BOX(hbox), NULL);
3418
3422 mainw->multitrack == NULL ? prefs->mt_def_fps : cfile->fps, NULL, 0, FALSE, NULL);
3423
3425
3427
3430
3431 // must be done after creating check buttons
3433
3434 // must be done after resaudw
3436
3439
3442
3444
3445 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_multitrack));
3446 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3447
3449 prefs->mt_undo_buf, 0., ONE_MILLION, 1., 1., 0,
3450 LIVES_BOX(hbox), NULL);
3451
3452 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3453 prefsw->checkbutton_mt_exit_render = lives_standard_check_button_new(_("_Exit multitrack mode after rendering"),
3454 prefs->mt_exit_render, LIVES_BOX(hbox), NULL);
3455
3456 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3457 label = lives_standard_label_new(_("Auto backup layouts:"));
3458 lives_box_pack_end(LIVES_BOX(hbox), label, FALSE, TRUE, widget_opts.packing_width * 2);
3459
3460 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3461 int wopw = widget_opts.packing_width;
3463 prefsw->mt_autoback_every = lives_standard_radio_button_new(_("_Every"), &autoback_group, LIVES_BOX(hbox), NULL);
3464
3466 prefsw->spinbutton_mt_ab_time = lives_standard_spin_button_new(_("seconds"), 120., 10., 1800., 1., 10., 0, LIVES_BOX(hbox),
3467 NULL);
3470
3471 lives_layout_add_fill(LIVES_LAYOUT(layout), TRUE);
3472 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3474 &autoback_group, LIVES_BOX(hbox), NULL);
3475
3476 lives_layout_add_fill(LIVES_LAYOUT(layout), TRUE);
3477 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3478 prefsw->mt_autoback_never = lives_standard_radio_button_new(_("_Never"), &autoback_group, LIVES_BOX(hbox), NULL);
3479
3480 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->mt_autoback_every), LIVES_WIDGET_TOGGLED_SIGNAL,
3481 LIVES_GUI_CALLBACK(on_mtbackevery_toggled), prefsw);
3482
3483 if (prefs->mt_auto_back == 0) {
3485 } else if (prefs->mt_auto_back == -1) {
3487 } else {
3490 }
3491
3492 lives_layout_add_fill(LIVES_LAYOUT(layout), FALSE);
3493
3494 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3495 prefsw->spinbutton_max_disp_vtracks = lives_standard_spin_button_new(_("Maximum number of visible tracks"),
3496 prefs->max_disp_vtracks, 5., 15.,
3497 1., 1., 0, LIVES_BOX(hbox), NULL);
3498
3499 pixbuf_multitrack = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_MULTITRACK, LIVES_ICON_SIZE_CUSTOM, -1, -1);
3500
3501 prefs_add_to_list(prefsw->prefs_list, pixbuf_multitrack, _("Multitrack/Render"), LIST_ENTRY_MULTITRACK);
3502 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_multitrack);
3503
3504 // ---------------,
3505 // decoding |
3506 // ---------------'
3507
3510
3512
3513 hbox = lives_hbox_new(FALSE, 0);
3515
3517 lives_standard_check_button_new((tmp = (_("Use instant opening when possible"))),
3518 prefs->instant_open, LIVES_BOX(hbox),
3519 (tmp2 = (H_("Enable instant opening of some file types using decoder plugins"))));
3520
3521 lives_free(tmp);
3522 lives_free(tmp2);
3523
3524 // advanced instant opening
3525 advbutton = lives_standard_button_new_from_stock_full(LIVES_STOCK_PREFERENCES, _("_Advanced"),
3526 DEF_BUTTON_WIDTH, DEF_BUTTON_HEIGHT, LIVES_BOX(hbox), TRUE, NULL);
3527
3528 lives_signal_sync_connect(LIVES_GUI_OBJECT(advbutton), LIVES_WIDGET_CLICKED_SIGNAL,
3529 LIVES_GUI_CALLBACK(on_decplug_advanced_clicked), NULL);
3530
3531 toggle_sets_sensitive(LIVES_TOGGLE_BUTTON(prefsw->checkbutton_instant_open), advbutton, FALSE);
3532
3533 hbox = lives_hbox_new(FALSE, 0);
3535
3536 prefsw->video_open_entry = lives_standard_entry_new(_("Video open command (fallback)"),
3538 LIVES_BOX(hbox), NULL);
3539
3540 hbox = lives_hbox_new(FALSE, 0);
3542
3543 label = lives_standard_label_new_with_tooltips(_("Fallback image format"), LIVES_BOX(hbox),
3544 _("The image format to be used when opening clips\n"
3545 "for which there is no instant decoder candidate."));
3546
3547 add_fill_to_box(LIVES_BOX(hbox));
3548
3549 prefsw->jpeg = lives_standard_radio_button_new(_("_jpeg"), &jpeg_png, LIVES_BOX(hbox), NULL);
3550
3551 add_fill_to_box(LIVES_BOX(hbox));
3552
3553 png = lives_standard_radio_button_new(_("_png"), &jpeg_png, LIVES_BOX(hbox), NULL);
3554 lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(png), !strcmp(prefs->image_ext, LIVES_FILE_EXT_PNG));
3555
3556 hbox = lives_hbox_new(FALSE, 0);
3558
3559 label = lives_standard_label_new(_("(Check Help/Troubleshoot to see which image formats are supported)"));
3560 lives_box_pack_start(LIVES_BOX(hbox), label, TRUE, TRUE, widget_opts.packing_width);
3561
3563
3564 hbox = lives_hbox_new(FALSE, 0);
3566
3567 label = lives_standard_label_new(_("Image compression"));
3568 lives_box_pack_start(LIVES_BOX(hbox), label, FALSE, FALSE, widget_opts.packing_width);
3569
3573 lives_standard_spin_button_new((" % "), prefs->ocp, 0., 60., 1., 5., 0, LIVES_BOX(hbox),
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")));
3579 lives_free(tmp);
3582
3583 add_fill_to_box(LIVES_BOX(hbox));
3584 add_fill_to_box(LIVES_BOX(hbox));
3585
3587
3588 hbox = lives_hbox_new(FALSE, 0);
3590
3592 _("Enable automatic deinterlacing when possible"))),
3593 prefs->auto_deint, LIVES_BOX(hbox),
3594 (tmp2 = (_("Automatically deinterlace frames when a plugin suggests it"))));
3595 lives_free(tmp);
3596 lives_free(tmp2);
3597
3598 hbox = lives_hbox_new(FALSE, 0);
3600
3602 _("Automatic trimming / padding of audio when possible"))),
3603 prefs->auto_trim_audio, LIVES_BOX(hbox),
3604 (tmp2 = (_("Automatically trim or pad audio when a plugin suggests it"))));
3605 lives_free(tmp);
3606 lives_free(tmp2);
3607
3608
3609 hbox = lives_hbox_new(FALSE, 0);
3611
3612 prefsw->checkbutton_nobord = lives_standard_check_button_new((tmp = (_("Ignore blank borders when possible"))),
3613 prefs->auto_nobord, LIVES_BOX(hbox),
3614 (tmp2 = (_("Clip any blank borders from frames where possible"))));
3615 lives_free(tmp);
3616 lives_free(tmp2);
3617
3618
3620
3621 hbox = lives_hbox_new(FALSE, 0);
3623
3625 _("When opening multiple files, concatenate images into one clip"),
3626 prefs->concat_images, LIVES_BOX(hbox), NULL);
3627
3628 pixbuf_decoding = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_DECODING, LIVES_ICON_SIZE_CUSTOM, -1, -1);
3629
3630 prefs_add_to_list(prefsw->prefs_list, pixbuf_decoding, _("Decoding"), LIST_ENTRY_DECODING);
3631
3632 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_decoding);
3633
3634 // ---------------,
3635 // playback |
3636 // ---------------'
3637
3639
3641
3642 frame = lives_standard_frame_new(_("VIDEO"), 0., FALSE);
3643
3645
3646 vbox = lives_vbox_new(FALSE, 0);
3647 lives_container_add(LIVES_CONTAINER(frame), vbox);
3649
3650 layout = lives_layout_new(LIVES_BOX(vbox));
3651 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3652
3655 (tmp = lives_strdup_printf(_("_Enable adaptive quality (%s)"),
3657 prefs->pbq_adaptive, LIVES_BOX(hbox),
3658 (tmp2 = (H_("If enabled, quality will be automatically adjusted during playback\n"
3659 "in order to maintain a smooth frame rate"))));
3660 lives_free(tmp);
3661 lives_free(tmp2);
3662
3663 prefsw->pbq_list = NULL;
3664 // TRANSLATORS: video quality, max len 50
3665 prefsw->pbq_list = lives_list_append(prefsw->pbq_list, (_("Low - can improve performance on slower machines")));
3666 // TRANSLATORS: video quality, max len 50
3667 prefsw->pbq_list = lives_list_append(prefsw->pbq_list, (_("Normal - recommended for most users")));
3668 // TRANSLATORS: video quality, max len 50
3669 prefsw->pbq_list = lives_list_append(prefsw->pbq_list, (_("High - can improve quality on very fast machines")));
3670
3671 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3672
3673 //widget_opts.expand = LIVES_EXPAND_EXTRA;
3674 prefsw->pbq_combo = lives_standard_combo_new((tmp = (_("Preview _quality"))), prefsw->pbq_list, LIVES_BOX(hbox),
3675 (tmp2 = (_("The preview quality for video playback - affects resizing"))));
3676 //widget_opts.expand = LIVES_EXPAND_DEFAULT;
3677
3678 lives_free(tmp);
3679 lives_free(tmp2);
3680
3681 switch (future_prefs->pb_quality) {
3682 case PB_QUALITY_HIGH:
3684 break;
3685 case PB_QUALITY_MED:
3687 }
3688
3689 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3690
3693 LIVES_BOX(hbox), NULL);
3694
3695 add_hsep_to_box(LIVES_BOX(vbox));
3696
3697 layout = lives_layout_new(LIVES_BOX(vbox));
3698
3699 lives_layout_add_label(LIVES_LAYOUT(layout), _("Use letterboxing by default:"), TRUE);
3700
3701 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3703 prefs->letterbox, LIVES_BOX(hbox), NULL);
3704
3705 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3707 future_prefs->letterbox_mt, LIVES_BOX(hbox),
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")));
3709 lives_free(tmp);
3710
3711 lives_layout_add_row(LIVES_LAYOUT(layout));
3712 lives_layout_add_label(LIVES_LAYOUT(layout), _("Monitor gamma setting:"), TRUE);
3713
3714 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3716 prefs->use_screen_gamma, LIVES_BOX(hbox), NULL);
3717
3718 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3720 prefs->screen_gamma, 1.2, 3.0, .01, .1, 2,
3721 LIVES_BOX(hbox), NULL);
3722
3724
3725 add_hsep_to_box(LIVES_BOX(vbox));
3726
3727 layout = lives_layout_new(LIVES_BOX(vbox));
3728 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3729
3730 vid_playback_plugins = get_plugin_list(PLUGIN_VID_PLAYBACK, TRUE, NULL, "-" DLL_NAME);
3731 vid_playback_plugins = lives_list_prepend(vid_playback_plugins,
3733
3734 pp_combo = lives_standard_combo_new(_("_Plugin"), vid_playback_plugins, LIVES_BOX(hbox), NULL);
3735
3736 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3737 advbutton = lives_standard_button_new_from_stock_full(LIVES_STOCK_PREFERENCES, _("_Advanced"),
3738 DEF_BUTTON_WIDTH, DEF_BUTTON_HEIGHT, LIVES_BOX(hbox), TRUE, NULL);
3739
3740 lives_signal_connect(LIVES_GUI_OBJECT(advbutton), LIVES_WIDGET_CLICKED_SIGNAL,
3741 LIVES_GUI_CALLBACK(on_vpp_advanced_clicked),
3742 LIVES_INT_TO_POINTER(LIVES_INTENTION_PLAY));
3743
3744 if (mainw->vpp) {
3745 lives_combo_set_active_string(LIVES_COMBO(pp_combo), mainw->vpp->name);
3746 } else {
3747 lives_combo_set_active_index(LIVES_COMBO(pp_combo), 0);
3749 }
3750 lives_list_free_all(&vid_playback_plugins);
3751
3752 lives_signal_sync_connect_after(LIVES_WIDGET_OBJECT(pp_combo), LIVES_WIDGET_CHANGED_SIGNAL,
3753 LIVES_GUI_CALLBACK(after_vpp_changed), (livespointer) advbutton);
3754
3755 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3756
3758 lives_standard_check_button_new((tmp = (_("Stream audio"))), prefs->stream_audio_out, LIVES_BOX(hbox),
3759 (tmp2 = _("Stream audio to playback plugin")));
3760 lives_free(tmp); lives_free(tmp2);
3761
3763
3764 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->checkbutton_stream_audio), LIVES_WIDGET_TOGGLED_SIGNAL,
3765 LIVES_GUI_CALLBACK(stream_audio_toggled), NULL);
3766
3767 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3768
3770 lives_standard_check_button_new((tmp = (_("Record player output"))),
3771 (prefs->rec_opts & REC_AFTER_PB), LIVES_BOX(hbox),
3772 (tmp2 = lives_strdup
3773 (_("Record output from player instead of input to player"))));
3774 lives_free(tmp); lives_free(tmp2);
3775
3778
3780
3781 //-
3782
3783 frame = lives_standard_frame_new(_("AUDIO"), 0., FALSE);
3784
3786
3787 vbox = lives_vbox_new(FALSE, 0);
3788 lives_container_add(LIVES_CONTAINER(frame), vbox);
3789
3790 audp = lives_list_append(audp, lives_strdup_printf("%s", mainw->string_constants[LIVES_STRING_CONSTANT_NONE]));
3791
3792#ifdef HAVE_PULSE_AUDIO
3793 audp = lives_list_append(audp, lives_strdup_printf("%s (%s)", AUDIO_PLAYER_PULSE_AUDIO,
3795 has_ap_rec = TRUE;
3796#endif
3797
3798#ifdef ENABLE_JACK
3799 if (!has_ap_rec) audp = lives_list_append(audp, lives_strdup_printf("%s (%s)", AUDIO_PLAYER_JACK,
3801 else audp = lives_list_append(audp, lives_strdup_printf(AUDIO_PLAYER_JACK));
3802 has_ap_rec = TRUE;
3803#endif
3804
3805 if (capable->has_sox_play) {
3806 if (has_ap_rec) audp = lives_list_append(audp, lives_strdup(AUDIO_PLAYER_SOX));
3807 else audp = lives_list_append(audp, lives_strdup_printf("%s (%s)", AUDIO_PLAYER_SOX,
3809 }
3810
3811 layout = lives_layout_new(LIVES_BOX(vbox));
3812 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3813
3814 prefsw->audp_combo = lives_standard_combo_new(_("_Player"), audp, LIVES_BOX(hbox), NULL);
3815
3816 has_ap_rec = FALSE;
3817
3818 lives_layout_add_row(LIVES_LAYOUT(layout));
3819
3821 lives_layout_add_label(LIVES_LAYOUT(layout), _("(See also the Jack Integration tab for jack startup options)"), TRUE);
3823
3824 prefsw->audp_name = NULL;
3825
3828 }
3829
3830#ifdef HAVE_PULSE_AUDIO
3834 }
3835 has_ap_rec = TRUE;
3836#endif
3837
3838#ifdef ENABLE_JACK
3840 if (!has_ap_rec)
3844 }
3845 has_ap_rec = TRUE;
3846#endif
3847
3849 if (!has_ap_rec) prefsw->audp_name = lives_strdup_printf("%s (%s)", AUDIO_PLAYER_SOX,
3852 }
3853
3854 if (prefsw->audp_name)
3856 prefsw->orig_audp_name = lives_strdup(prefsw->audp_name);
3857
3858 //---
3859
3860#ifdef HAVE_PULSE_AUDIO
3861 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3862
3863 prefsw->checkbutton_parestart = lives_standard_check_button_new((tmp = (_("Restart pulseaudio on LiVES startup"))),
3864 prefs->pa_restart, LIVES_BOX(hbox),
3865 (tmp2 = (_("Recommended, but may interfere with other running "
3866 "audio applications"))));
3867 lives_free(tmp);
3868 lives_free(tmp2);
3869 ACTIVE(checkbutton_parestart, TOGGLED);
3870
3871 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3872 tmp = lives_strdup_printf(_("Pulseaudio restart command: %s -k"), EXEC_PULSEAUDIO);
3874 LIVES_BOX(hbox), NULL);
3875 ACTIVE(audio_command_entry, CHANGED);
3877#endif
3878
3879 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3880
3881 prefsw->checkbutton_afollow = lives_standard_check_button_new(_("Audio follows video _rate/direction"),
3882 (prefs->audio_opts & AUDIO_OPTS_FOLLOW_FPS) ? TRUE : FALSE, LIVES_BOX(hbox), NULL);
3883
3884 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3885
3886 prefsw->checkbutton_aclips = lives_standard_check_button_new(_("Audio follows _clip switches"),
3887 (prefs->audio_opts & AUDIO_OPTS_FOLLOW_CLIPS) ? TRUE : FALSE, LIVES_BOX(hbox), NULL);
3888
3889 add_hsep_to_box(LIVES_BOX(vbox));
3890
3891 hbox = lives_hbox_new(FALSE, 0);
3892 lives_box_pack_start(LIVES_BOX(vbox), hbox, FALSE, FALSE, 0);
3893 label = lives_standard_label_new(_("Audio Source (clip editor only):"));
3894 lives_box_pack_start(LIVES_BOX(hbox), label, FALSE, FALSE, widget_opts.packing_width);
3895 add_fill_to_box(LIVES_BOX(hbox));
3896 add_fill_to_box(LIVES_BOX(vbox));
3897
3898 prefsw->rintaudio = lives_standard_radio_button_new(_("_Internal"), &asrc_group, LIVES_BOX(hbox), NULL);
3899
3900 add_fill_to_box(LIVES_BOX(hbox));
3901
3902 prefsw->rextaudio = lives_standard_radio_button_new(_("_External [monitor]"),
3903 &asrc_group, LIVES_BOX(hbox), NULL);
3904
3906 add_fill_to_box(LIVES_BOX(hbox));
3907
3910
3911 if (mainw->playing_file > 0 && mainw->record) {
3913 }
3914
3917 }
3918
3919 pixbuf_playback = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_PLAYBACK, LIVES_ICON_SIZE_CUSTOM, -1, -1);
3920
3921 prefs_add_to_list(prefsw->prefs_list, pixbuf_playback, _("Playback"), LIST_ENTRY_PLAYBACK);
3922 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_playback);
3923
3925
3926#ifdef ENABLE_JACK
3929 }
3930#endif
3931
3932 // ---------------,
3933 // recording |
3934 // ---------------'
3935
3938
3940
3941 hbox = lives_hbox_new(FALSE, 0);
3943 _("Record audio when capturing an e_xternal window\n (requires jack or pulseaudio)"),
3944 prefs->rec_desktop_audio, LIVES_BOX(hbox), NULL);
3945
3946#ifndef RT_AUDIO
3948#endif
3949
3951
3953
3954 hbox = lives_hbox_new(FALSE, 0);
3956
3957 label = lives_standard_label_new(_("What to record when 'r' is pressed"));
3958
3959 lives_box_pack_start(LIVES_BOX(hbox), label, FALSE, FALSE, widget_opts.packing_width);
3960
3961 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_recording));
3962 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3963 prefsw->rframes = lives_standard_check_button_new(_("_Frame changes"), (prefs->rec_opts & REC_FRAMES), LIVES_BOX(hbox), NULL);
3964
3966 lives_widget_set_sensitive(prefsw->rframes, FALSE); // we must record these if recording fps changes or clip switches
3967 }
3968 if (mainw->playing_file > 0 && mainw->record) {
3970 }
3971
3972 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3973 prefsw->rfps = lives_standard_check_button_new(_("F_PS changes"), (prefs->rec_opts & REC_FPS), LIVES_BOX(hbox), NULL);
3974
3975 if (prefs->rec_opts & REC_CLIPS) {
3976 lives_widget_set_sensitive(prefsw->rfps, FALSE); // we must record these if recording clip switches
3977 }
3978
3979 if (mainw->playing_file > 0 && mainw->record) {
3981 }
3982
3983 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3985 LIVES_BOX(hbox), NULL);
3986
3987 if (mainw->playing_file > 0 && mainw->record) {
3989 }
3990
3991 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
3992 prefsw->rclips = lives_standard_check_button_new(_("_Clip switches"), (prefs->rec_opts & REC_CLIPS), LIVES_BOX(hbox), NULL);
3993
3994 if (mainw->playing_file > 0 && mainw->record) {
3996 }
3997
3998 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
3999 prefsw->raudio = lives_standard_check_button_new(_("_Audio (requires jack or pulseaudio player)"),
4000 (prefs->rec_opts & REC_AUDIO), LIVES_BOX(hbox), NULL);
4001
4002 if (mainw->playing_file > 0 && mainw->record) {
4004 }
4005
4008 }
4009
4011
4012 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_recording));
4013
4014 lives_layout_add_label(LIVES_LAYOUT(layout), _("Pause recording if:"), TRUE);
4015
4016 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4017
4018 lives_standard_check_button_new(_("Free disk space falls below"), TRUE, LIVES_BOX(hbox), NULL);
4019
4021
4022 // TRANSLATORS: gigabytes
4024 LIVES_BOX(hbox), NULL);
4026
4027 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4028 lives_standard_check_button_new(_("More than"), TRUE, LIVES_BOX(hbox), NULL);
4029
4030 //hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
4032 // xgettext:no-c-format
4033 lives_standard_spin_button_new(_("% of quota is used"), 90., 0., 100., 1., 5., 0,
4034 LIVES_BOX(hbox), NULL);
4036
4037 //lives_layout_add_fill(LIVES_LAYOUT(layout), TRUE);
4038
4039 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4040 lives_standard_check_button_new(_("Disk space warning level is passed"), TRUE, LIVES_BOX(hbox), NULL);
4041
4042 lives_layout_add_label(LIVES_LAYOUT(layout), _("Recording is always paused if the disk space critical level is reached"),
4043 FALSE);
4044
4046
4047 hbox = lives_hbox_new(FALSE, 0);
4050
4051 label = lives_standard_label_new(_("External Audio Source"));
4052 lives_box_pack_start(LIVES_BOX(hbox), label, FALSE, FALSE, widget_opts.packing_width);
4053
4054 hbox = lives_hbox_new(FALSE, 0);
4057 _("Delay recording playback start until external audio volume reaches "),
4058 prefs->ahold_threshold * 100., 0., 100., 1., 10., 0,
4059 LIVES_BOX(hbox), NULL);
4060
4061 label = lives_standard_label_new("%");
4062 lives_box_pack_start(LIVES_BOX(hbox), label, FALSE, FALSE, widget_opts.packing_width);
4063 add_fill_to_box(LIVES_BOX(hbox));
4064
4065 // Rendering options
4066
4068
4069 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_recording));
4070 lives_layout_add_label(LIVES_LAYOUT(layout), _("Rendering Options (post Recording)"), FALSE);
4071
4072 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4073 prefsw->rr_crash = lives_standard_check_button_new(_("Enable Crash Recovery for recordings"), prefs->rr_crash,
4074 LIVES_BOX(hbox),
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);
4080
4081 if (!prefs->crash_recovery)
4082 show_warn_image(prefsw->rr_crash, _("Crash recovery also needs to be enabled for this feature to function."));
4083
4084 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4085
4087 prefsw->rr_super = lives_standard_check_button_new(_("Enable <b><u>SuperFluid</u></b> rendering:"),
4088 prefs->rr_super, LIVES_BOX(hbox),
4089 H_("Enables various pre-processing stages so that the resulting rendering\n"
4090 "appears smoother and with fewer audio glitches"));
4092
4093 ACTIVE(rr_super, TOGGLED);
4094
4095 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4096 rmodelist = lives_list_append(rmodelist, _("Prioritize Audio rate"));
4097 rmodelist = lives_list_append(rmodelist, _("Prioritize Frame rate"));
4098 prefsw->rr_combo = lives_standard_combo_new(_("Render mode:"), rmodelist, LIVES_BOX(hbox),
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"));
4103 lives_list_free_all(&rmodelist);
4105 ACTIVE(rr_combo, CHANGED);
4106
4107 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4108
4109 prefsw->rr_pre_smooth = lives_standard_check_button_new(_("Enable pre-quantisation frame smoothing"), prefs->rr_pre_smooth,
4110 LIVES_BOX(hbox), NULL);
4112 ACTIVE(rr_pre_smooth, TOGGLED);
4113
4114 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4115 prefsw->rr_qsmooth = lives_standard_check_button_new(_("Enable frame smoothing during quantisation"), prefs->rr_qsmooth,
4116 LIVES_BOX(hbox), NULL);
4118 ACTIVE(rr_qsmooth, TOGGLED);
4119
4120 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4121
4122 radjlist = lives_list_append(radjlist, _("Apply effects state at original time"));
4123 radjlist = lives_list_append(radjlist, _("Apply effects state at adjusted time"));
4124 prefsw->rr_scombo = lives_standard_combo_new(_("When re-aligning frames"), radjlist, LIVES_BOX(hbox), NULL);
4125 lives_list_free_all(&radjlist);
4127 ACTIVE(rr_scombo, CHANGED);
4128
4129 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4130 prefsw->rr_amicro = lives_standard_check_button_new(_("Enable audio micro-adjustments during quantisation"), prefs->rr_amicro,
4131 LIVES_BOX(hbox), NULL);
4133 ACTIVE(rr_amicro, TOGGLED);
4134
4135 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4136 prefsw->rr_ramicro = lives_standard_check_button_new(_("Ignore tiny audio jumps during rendering"), prefs->rr_ramicro,
4137 LIVES_BOX(hbox), NULL);
4139 ACTIVE(rr_ramicro, TOGGLED);
4140
4141 toggle_sets_sensitive(LIVES_TOGGLE_BUTTON(prefsw->rr_super), prefsw->rr_combo, FALSE);
4142 toggle_sets_sensitive(LIVES_TOGGLE_BUTTON(prefsw->rr_super), prefsw->rr_scombo, FALSE);
4143 toggle_sets_sensitive(LIVES_TOGGLE_BUTTON(prefsw->rr_super), prefsw->rr_combo, FALSE);
4145 toggle_sets_sensitive(LIVES_TOGGLE_BUTTON(prefsw->rr_super), prefsw->rr_qsmooth, FALSE);
4146 toggle_sets_sensitive(LIVES_TOGGLE_BUTTON(prefsw->rr_super), prefsw->rr_amicro, FALSE);
4147 toggle_sets_sensitive(LIVES_TOGGLE_BUTTON(prefsw->rr_super), prefsw->rr_ramicro, FALSE);
4148
4149 pixbuf_recording = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_RECORD, LIVES_ICON_SIZE_CUSTOM, -1, -1);
4150
4151 prefs_add_to_list(prefsw->prefs_list, pixbuf_recording, _("Recording"), LIST_ENTRY_RECORDING);
4152 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_recording);
4153
4154 // ---------------,
4155 // encoding |
4156 // ---------------'
4157
4159
4161
4163 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_encoding));
4164
4165 lives_layout_add_label(LIVES_LAYOUT(layout),
4166 _("You can also change these values when encoding a clip"), FALSE);
4167
4169 // scan for encoder plugins
4170 encoders = get_plugin_list(PLUGIN_ENCODERS, TRUE, NULL, NULL);
4171 }
4172
4173 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4174
4175 prefsw->encoder_combo = lives_standard_combo_new(_("Encoder"), encoders,
4176 LIVES_BOX(hbox), NULL);
4177
4178 lives_layout_add_fill(LIVES_LAYOUT(layout), TRUE);
4179
4180 if (encoders) {
4182 lives_list_free_all(&encoders);
4183 }
4184
4186 // reqest formats from the encoder plugin
4187 if ((ofmt_all = plugin_request_by_line(PLUGIN_ENCODERS, prefs->encoder.name, "get_formats"))) {
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);
4191 if (!strcmp(array[0], prefs->encoder.of_name)) {
4192 prefs->encoder.of_allowed_acodecs = atoi(array[2]);
4193 lives_snprintf(prefs->encoder.of_restrict, 1024, "%s", array[3]);
4194 }
4195 ofmt = lives_list_append(ofmt, lives_strdup(array[1]));
4196 lives_strfreev(array);
4197 }
4198 }
4200 } else {
4203 }
4204
4205 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4206 prefsw->ofmt_combo = lives_standard_combo_new(_("Output format"), ofmt, LIVES_BOX(hbox), NULL);
4207
4208 if (ofmt) {
4210 lives_list_free_all(&ofmt);
4211 }
4212
4213 lives_list_free_all(&ofmt_all);
4214
4215 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4216 prefsw->acodec_combo = lives_standard_combo_new(_("Audio codec"), NULL, LIVES_BOX(hbox), NULL);
4217 prefs->acodec_list = NULL;
4218
4220
4221 } else prefsw->acodec_combo = NULL;
4223
4224 pixbuf_encoding = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_ENCODING, LIVES_ICON_SIZE_CUSTOM, -1, -1);
4225
4226 prefs_add_to_list(prefsw->prefs_list, pixbuf_encoding, _("Encoding"), LIST_ENTRY_ENCODING);
4227 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_encoding);
4228
4229 // ---------------,
4230 // effects |
4231 // ---------------'
4232
4234
4236
4237 hbox = lives_hbox_new(FALSE, 0);
4239
4240 prefsw->checkbutton_load_rfx = lives_standard_check_button_new(_("Load rendered effects on startup"), prefs->load_rfx_builtin,
4241 LIVES_BOX(hbox), NULL);
4242
4243 if (prefs->vj_mode)
4244 show_warn_image(prefsw->checkbutton_load_rfx, _("Disabled in VJ mode"));
4245
4246 prefsw->checkbutton_antialias = lives_standard_check_button_new(_("Use _antialiasing when resizing"), prefs->antialias,
4247 LIVES_BOX(hbox), NULL);
4248
4250
4251 hbox = lives_hbox_new(FALSE, 0);
4254
4256 lives_standard_check_button_new(_("Automatic gamma correction (requires restart)"),
4257 prefs->apply_gamma, LIVES_BOX(hbox),
4258 (tmp = (_("Also affects the monitor gamma !! (for now...)"))));
4259 lives_free(tmp);
4260
4261 hbox = lives_hbox_new(FALSE, 0);
4263
4265 ((tmp = (_("Number of _real time effect keys"))), prefs->rte_keys_virtual, FX_KEYS_PHYSICAL,
4266 FX_KEYS_MAX_VIRTUAL, 1., 1., 0, LIVES_BOX(hbox),
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)."))));
4270 lives_free(tmp); lives_free(tmp2);
4271
4272 hbox = lives_hbox_new(FALSE, 0);
4274
4275 prefsw->checkbutton_threads = lives_standard_check_button_new(_("Use _threads where possible when applying effects"),
4276 future_prefs->nfx_threads > 1, LIVES_BOX(hbox), NULL);
4277
4278 add_fill_to_box(LIVES_BOX(hbox));
4279
4281 1., 1., 0, LIVES_BOX(hbox), NULL);
4282
4284
4285 add_fill_to_box(LIVES_BOX(hbox));
4286 add_fill_to_box(LIVES_BOX(hbox));
4287
4289
4290 hbox = lives_hbox_new(FALSE, 0);
4292
4293 prefsw->pa_gens = lives_standard_check_button_new(_("Push audio to video generators that support it"),
4294 prefs->push_audio_to_gens, LIVES_BOX(hbox), NULL);
4295
4297
4298 hbox = lives_hbox_new(FALSE, 0);
4301
4302 label = lives_standard_label_new(_("Restart is required if any of the following paths are changed:"));
4303
4304 lives_box_pack_start(LIVES_BOX(hbox), label, TRUE, TRUE, 0);
4305
4306 add_fill_to_box(LIVES_BOX(hbox));
4307
4309
4310 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_effects));
4311
4312 lives_layout_add_label(LIVES_LAYOUT(layout), _("Changing these values will only take effect after a restart of LiVES:"), FALSE);
4313
4314 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4316 LONG_ENTRY_WIDTH, PATH_MAX, LIVES_BOX(hbox), NULL);
4317
4318 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4320 LONG_ENTRY_WIDTH, PATH_MAX, LIVES_BOX(hbox),
4321 (tmp = H_("(Frei0r directories should be separated by ':',\n"
4322 "ordered from lowest to highest priority)")));
4323 lives_free(tmp);
4324
4325#ifndef HAVE_FREI0R
4327 show_warn_image(prefsw->frei0r_entry, _("LiVES was compiled without frei0r support"));
4328#endif
4329
4330 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4332 LIVES_BOX(hbox), NULL);
4333#ifndef HAVE_LADSPA
4335 show_warn_image(prefsw->ladspa_entry, _("LiVES was compiled without LADSPA support"));
4336#endif
4337
4338 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4340 LIVES_BOX(hbox), NULL);
4341
4343
4344#ifndef HAVE_LIBVISUAL
4346 show_warn_image(prefsw->libvis_entry, _("LiVES was compiled without libvisual support"));
4347#endif
4348
4349 pixbuf_effects = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_EFFECTS, LIVES_ICON_SIZE_CUSTOM, -1, -1);
4350
4351 prefs_add_to_list(prefsw->prefs_list, pixbuf_effects, _("Effects"), LIST_ENTRY_EFFECTS);
4352 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_effects);
4353
4354 // -------------------,
4355 // Directories |
4356 // -------------------'
4357
4359
4363
4365
4366 widget_opts.justify = LIVES_JUSTIFY_END;
4367 label = lives_standard_label_new(_("Video load directory (default)"));
4368 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), label, 0, 1, 4, 5,
4369 (LiVESAttachOptions)(LIVES_FILL),
4370 (LiVESAttachOptions)(0), 0, 0);
4371
4372 label = lives_standard_label_new(_("Video save directory (default)"));
4373 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), label, 0, 1, 5, 6,
4374 (LiVESAttachOptions)(LIVES_FILL),
4375 (LiVESAttachOptions)(0), 0, 0);
4376
4377 label = lives_standard_label_new(_("Audio load directory (default)"));
4378 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), label, 0, 1, 6, 7,
4379 (LiVESAttachOptions)(LIVES_FILL),
4380 (LiVESAttachOptions)(0), 0, 0);
4381
4382 label = lives_standard_label_new(_("Image directory (default)"));
4383 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), label, 0, 1, 7, 8,
4384 (LiVESAttachOptions)(LIVES_FILL),
4385 (LiVESAttachOptions)(0), 0, 0);
4386
4387 label = lives_standard_label_new(_("Backup/Restore directory (default)"));
4388 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), label, 0, 1, 8, 9,
4389 (LiVESAttachOptions)(LIVES_FILL),
4390 (LiVESAttachOptions)(0), 0, 0);
4391
4393 label = lives_standard_label_new(_("<b>Work directory</b>"));
4394 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), label, 0, 1, 3, 4,
4395 (LiVESAttachOptions)(LIVES_FILL),
4396 (LiVESAttachOptions)(0), 0, 0);
4399
4400 // workdir warning label
4401 layout = lives_layout_new(NULL);
4402
4403 prefsw->workdir_label = lives_layout_add_label(LIVES_LAYOUT(layout), NULL, FALSE);
4404 set_workdir_label_text(LIVES_LABEL(prefsw->workdir_label), prefs->workdir);
4405
4406 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), layout, 0, 3, 0, 2,
4407 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4408 (LiVESAttachOptions)(0), 0, 0);
4409
4410 hbox = lives_hbox_new(FALSE, 0);
4411
4417 -1, PATH_MAX, LIVES_BOX(hbox),
4418 (tmp2 = _("The default directory for saving encoded clips to")));
4419 lives_free(tmp2);
4420
4423
4424 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), hbox, 1, 2, 3, 4,
4425 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4426 (LiVESAttachOptions)(0), 0, 0);
4427
4429 ACTIVE(workdir_entry, CHANGED);
4430
4432 NULL, _("The default directory for loading video clips from"));
4434 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4435 (LiVESAttachOptions)(0), 0, 0);
4436
4438 ACTIVE(vid_load_dir_entry, CHANGED);
4439
4441 NULL, _("The default directory for saving encoded clips to"));
4443 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4444 (LiVESAttachOptions)(0), 0, 0);
4445
4447 ACTIVE(vid_save_dir_entry, CHANGED);
4448
4450 NULL, _("The default directory for loading and saving audio"));
4452 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4453 (LiVESAttachOptions)(0), 0, 0);
4454
4456 ACTIVE(audio_dir_entry, CHANGED);
4457
4459 NULL, _("The default directory for saving frameshots to"));
4461 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4462 (LiVESAttachOptions)(0), 0, 0);
4463
4465 ACTIVE(image_dir_entry, CHANGED);
4466
4468 NULL, _("The default directory for backing up/restoring single clips"));
4470 (LiVESAttachOptions)(LIVES_EXPAND | LIVES_FILL),
4471 (LiVESAttachOptions)(0), 0, 0);
4472
4474 ACTIVE(image_dir_entry, CHANGED);
4475
4477
4478 /* dirbutton = lives_standard_file_button_new(TRUE, */
4479 /* g_filename_from_utf8(*future_prefs->workdir */
4480 /* ? future_prefs->workdir : prefs->workdir, */
4481 /* -1, NULL, NULL, NULL)); */
4482
4485
4486 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), dirbutton, 2, 3, 3, 4,
4487 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4488
4489 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(dirbutton), FILESEL_TYPE_KEY,
4490 (livespointer)LIVES_DIR_SELECTION_WORKDIR);
4491
4492 lives_signal_sync_connect(dirbutton, LIVES_WIDGET_CLICKED_SIGNAL, LIVES_GUI_CALLBACK(on_filesel_button_clicked),
4494
4496 show_warn_image(prefsw->workdir_entry, _("Value cannot be changed when workdir\nis set via commandline option"));
4498 } else if (prefs->vj_mode) {
4499 show_warn_image(prefsw->workdir_entry, _("Changes disabled in VJ mode"));
4501 }
4502
4503 dirbutton = lives_standard_file_button_new(TRUE, NULL);
4504
4505 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), dirbutton, 2, 3, 4, 5,
4506 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4507
4508 lives_signal_sync_connect(dirbutton, LIVES_WIDGET_CLICKED_SIGNAL, LIVES_GUI_CALLBACK(on_filesel_button_clicked),
4510
4511 dirbutton = lives_standard_file_button_new(TRUE, NULL);
4512
4513 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), dirbutton, 2, 3, 5, 6,
4514 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4515
4516 lives_signal_sync_connect(dirbutton, LIVES_WIDGET_CLICKED_SIGNAL, LIVES_GUI_CALLBACK(on_filesel_button_clicked),
4518
4519 dirbutton = lives_standard_file_button_new(TRUE, NULL);
4520
4521 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), dirbutton, 2, 3, 6, 7,
4522 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4523
4524 lives_signal_sync_connect(dirbutton, LIVES_WIDGET_CLICKED_SIGNAL, LIVES_GUI_CALLBACK(on_filesel_button_clicked),
4526
4527 dirbutton = lives_standard_file_button_new(TRUE, NULL);
4528
4529 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), dirbutton, 2, 3, 7, 8,
4530 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4531
4532 lives_signal_sync_connect(dirbutton, LIVES_WIDGET_CLICKED_SIGNAL, LIVES_GUI_CALLBACK(on_filesel_button_clicked),
4534
4535 dirbutton = lives_standard_file_button_new(TRUE, NULL);
4536
4537 lives_table_attach(LIVES_TABLE(prefsw->table_right_directories), dirbutton, 2, 3, 8, 9,
4538 (LiVESAttachOptions)(0), (LiVESAttachOptions)(0), 0, 0);
4539
4540 lives_signal_sync_connect(dirbutton, LIVES_WIDGET_CLICKED_SIGNAL, LIVES_GUI_CALLBACK(on_filesel_button_clicked),
4542
4543 pixbuf_directories = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_DIRECTORY, LIVES_ICON_SIZE_CUSTOM, -1, -1);
4544
4545 prefs_add_to_list(prefsw->prefs_list, pixbuf_directories, _("Directories"), LIST_ENTRY_DIRECTORIES);
4546 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_directories);
4547
4548 // ---------------,
4549 // Warnings |
4550 // ---------------'
4551
4555
4556 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_warnings));
4557 lives_layout_add_label(LIVES_LAYOUT(layout), _("Low Disk Space Warnings (set to zero to disable)"), FALSE);
4558
4559 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4560
4562 lives_standard_spin_button_new((tmp = (_("Disk space warning level"))),
4564 1., 50., 1,
4565 LIVES_BOX(hbox), (tmp2 = (H_("LiVES will start showing warnings if usable disk space\n"
4566 "falls below this level"))));
4567 lives_free(tmp); lives_free(tmp2);
4568
4569 if (prefs->vj_mode)
4570 show_warn_image(prefsw->spinbutton_warn_ds, _("Reduced checking in VJ mode"));
4571
4572 lives_layout_add_label(LIVES_LAYOUT(layout), _("MB"), TRUE);
4573
4575 tmp2 = lives_strdup_printf("(%s)", tmp);
4576 prefsw->dsl_label = lives_layout_add_label(LIVES_LAYOUT(layout), tmp2, TRUE);
4577 lives_free(tmp); lives_free(tmp2);
4578
4579 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4580
4582 lives_standard_spin_button_new((tmp = (_("Disk space critical level"))),
4583 prefs->ds_crit_level / MILLIONS(1), 0, MILLIONS(1), 1., 10., 1,
4584 LIVES_BOX(hbox), (tmp2 = (H_("LiVES will abort if usable disk space\n"
4585 "falls below this level"))));
4586 lives_free(tmp); lives_free(tmp2);
4587
4588 if (prefs->vj_mode)
4589 show_warn_image(prefsw->spinbutton_crit_ds, _("Reduced checking in VJ mode"));
4590
4591 lives_layout_add_label(LIVES_LAYOUT(layout), _("MB"), TRUE);
4592
4594 tmp2 = lives_strdup_printf("(%s)", tmp);
4595 prefsw->dsc_label = lives_layout_add_label(LIVES_LAYOUT(layout), tmp2, TRUE);
4596 lives_free(tmp); lives_free(tmp2);
4597
4599
4600 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_warnings));
4601 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
4602
4603 //hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4605 _("Warn on Insert / Merge if _frame rate of clipboard does "
4606 "not match frame rate of selection"),
4607 !(prefs->warning_mask & WARN_MASK_FPS), LIVES_BOX(hbox), NULL);
4608
4609
4610 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4612 _("Warn on Open if Instant Opening is not available, and the file _size exceeds "),
4613 !(prefs->warning_mask & WARN_MASK_FSIZE), LIVES_BOX(hbox), NULL);
4614
4615 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
4617 prefs->warn_file_size, 1., 2048., 1., 10., 0,
4618 LIVES_BOX(hbox), NULL);
4619
4620 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
4621 label = lives_standard_label_new(_(" MB"));
4622 lives_box_pack_start(LIVES_BOX(hbox), label, FALSE, FALSE, widget_opts.packing_width >> 1);
4623
4624 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4625 prefsw->checkbutton_warn_save_set = lives_standard_check_button_new(_("Show a warning before saving a se_t"),
4626 !(prefs->warning_mask & WARN_MASK_SAVE_SET), LIVES_BOX(hbox), NULL);
4627
4628 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4630 (_("Show a warning if _mplayer/mplayer2, sox, composite or convert is not "
4631 "found when LiVES is started."),
4632 !(prefs->warning_mask & WARN_MASK_NO_MPLAYER), LIVES_BOX(hbox), NULL);
4633
4634 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4636 (_("Show a warning if no _rendered effects are found at startup."),
4637 !(prefs->warning_mask & WARN_MASK_RENDERED_FX), LIVES_BOX(hbox), NULL);
4638
4639 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4641 (_("Show a warning if no _encoder plugins are found at startup."),
4642 !(prefs->warning_mask & WARN_MASK_NO_ENCODERS), LIVES_BOX(hbox), NULL);
4643
4644 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4646 (_("Show a warning if a _duplicate set name is entered."),
4647 !(prefs->warning_mask & WARN_MASK_DUPLICATE_SET), LIVES_BOX(hbox), NULL);
4648
4649 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4651 (_("When a set is loaded, warn if clips are missing from _layouts."),
4652 !(prefs->warning_mask & WARN_MASK_LAYOUT_MISSING_CLIPS), LIVES_BOX(hbox), NULL);
4653
4654 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4656 (_("Warn if a clip used in a layout is about to be closed."),
4657 !(prefs->warning_mask & WARN_MASK_LAYOUT_CLOSE_FILE), LIVES_BOX(hbox), NULL);
4658
4659 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4661 (_("Warn if frames used in a layout are about to be deleted."),
4662 !(prefs->warning_mask & WARN_MASK_LAYOUT_DELETE_FRAMES), LIVES_BOX(hbox), NULL);
4663
4664 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4666 (_("Warn if frames used in a layout are about to be shifted."),
4667 !(prefs->warning_mask & WARN_MASK_LAYOUT_SHIFT_FRAMES), LIVES_BOX(hbox), NULL);
4668
4669 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4671 (_("Warn if frames used in a layout are about to be altered."),
4672 !(prefs->warning_mask & WARN_MASK_LAYOUT_ALTER_FRAMES), LIVES_BOX(hbox), NULL);
4673
4674 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4676 (_("Warn if audio used in a layout is about to be deleted."),
4677 !(prefs->warning_mask & WARN_MASK_LAYOUT_DELETE_AUDIO), LIVES_BOX(hbox), NULL);
4678
4679 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4681 (_("Warn if audio used in a layout is about to be shifted."),
4682 !(prefs->warning_mask & WARN_MASK_LAYOUT_SHIFT_AUDIO), LIVES_BOX(hbox), NULL);
4683
4684 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4686 (_("Warn if audio used in a layout is about to be altered."),
4687 !(prefs->warning_mask & WARN_MASK_LAYOUT_ALTER_AUDIO), LIVES_BOX(hbox), NULL);
4688
4689 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4691 (_("Popup layout errors after clip changes."),
4692 !(prefs->warning_mask & WARN_MASK_LAYOUT_POPUP), LIVES_BOX(hbox), NULL);
4693
4694 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4696 (_("Warn if the layout has not been saved when leaving multitrack mode."),
4697 !(prefs->warning_mask & WARN_MASK_EXIT_MT), LIVES_BOX(hbox), NULL);
4698
4699 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4701 (_("Warn if multitrack has no audio channels, and a layout with audio is loaded."),
4702 !(prefs->warning_mask & WARN_MASK_MT_ACHANS), LIVES_BOX(hbox), NULL);
4703
4704 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4706 (_("Warn if multitrack has audio channels, and your audio player is not \"jack\" or \"pulseaudio\"."),
4707 !(prefs->warning_mask & WARN_MASK_MT_NO_JACK), LIVES_BOX(hbox), NULL);
4708
4709#ifdef HAVE_LDVGRAB
4710 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4712 (_("Show info message after importing from firewire device."),
4713 !(prefs->warning_mask & WARN_MASK_AFTER_DVGRAB), LIVES_BOX(hbox), NULL);
4714
4715#else
4717#endif
4718
4719#ifdef HAVE_YUV4MPEG
4720 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4722 (_("Show a warning before opening a yuv4mpeg stream (advanced)."),
4723 !(prefs->warning_mask & WARN_MASK_OPEN_YUV4M), LIVES_BOX(hbox), NULL);
4724#else
4726#endif
4727
4728 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4730 (_("Show a warning when multitrack is low on backup space."),
4731 !(prefs->warning_mask & WARN_MASK_MT_BACKUP_SPACE), LIVES_BOX(hbox), NULL);
4732
4733 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4735 (_("Show a warning advising cleaning of disk space after a crash."),
4736 !(prefs->warning_mask & WARN_MASK_CLEAN_AFTER_CRASH), LIVES_BOX(hbox), NULL);
4737
4738 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4740 (_("Show a warning if unable to connect to pulseaudio player."),
4741 !(prefs->warning_mask & WARN_MASK_NO_PULSE_CONNECT), LIVES_BOX(hbox), NULL);
4742
4743 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4745 (_("Show a warning before wiping a layout which has unsaved changes."),
4746 !(prefs->warning_mask & WARN_MASK_LAYOUT_WIPE), LIVES_BOX(hbox), NULL);
4747
4748 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4750 (_("Show a warning if a loaded layout has incompatible gamma settings."),
4751 !(prefs->warning_mask & WARN_MASK_LAYOUT_GAMMA), LIVES_BOX(hbox), NULL);
4752
4753 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4755 (_("Show a warning if a loaded layout has incompatible letterbox settings."),
4756 !(prefs->warning_mask & WARN_MASK_LAYOUT_LB), LIVES_BOX(hbox), NULL);
4757
4758 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4760 (_("Show a warning when the menu option Restart in VJ Mode becomes activated."),
4761 !(prefs->warning_mask & WARN_MASK_VJMODE_ENTER), LIVES_BOX(hbox), NULL);
4762
4763 pixbuf_warnings = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_WARNING, LIVES_ICON_SIZE_CUSTOM, -1, -1);
4764
4765 prefs_add_to_list(prefsw->prefs_list, pixbuf_warnings, _("Warnings"), LIST_ENTRY_WARNINGS);
4766 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_warnings);
4767
4768 // -----------,
4769 // Misc |
4770 // -----------'
4771
4774
4776
4777 hbox = lives_hbox_new(FALSE, 0);
4779
4780 label = lives_standard_label_new(_("When inserting/merging frames:"));
4781
4782 lives_box_pack_start(LIVES_BOX(hbox), label, FALSE, FALSE, widget_opts.packing_width);
4783 add_fill_to_box(LIVES_BOX(hbox));
4784
4785 prefsw->ins_speed = lives_standard_radio_button_new(_("_Speed Up/Slow Down Insertion"), &rb_group2, LIVES_BOX(hbox), NULL);
4786
4787 ins_resample = lives_standard_radio_button_new(_("_Resample Insertion"), &rb_group2, LIVES_BOX(hbox), NULL);
4788
4789 lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(ins_resample), prefs->ins_resample);
4790
4793
4794 prefsw->cdplay_entry = lives_standard_fileentry_new((tmp = (_("CD device"))),
4795 (tmp2 = lives_filename_to_utf8(prefs->cdplay_device, -1, NULL, NULL, NULL)),
4797 (tmp3 = (_("LiVES can load audio tracks from this CD"))));
4798 lives_free(tmp); lives_free(tmp2); lives_free(tmp3);
4799
4800 hbox = lives_hbox_new(FALSE, 0);
4802
4803 prefsw->spinbutton_def_fps = lives_standard_spin_button_new((tmp = (_("Default FPS"))),
4804 prefs->default_fps, 1., FPS_MAX, 1., 1., 3,
4805 LIVES_BOX(hbox), (tmp2 = (_("Frames per second to use when none is specified"))));
4806 lives_free(tmp); lives_free(tmp2);
4807
4808 pixbuf_misc = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_MISC, LIVES_ICON_SIZE_CUSTOM, -1, -1);
4809
4810 prefs_add_to_list(prefsw->prefs_list, pixbuf_misc, _("Misc"), LIST_ENTRY_MISC);
4811 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_misc);
4812
4816 }
4817
4819
4820 hbox = lives_hbox_new(FALSE, 0);
4823
4825 (_("Pop up disk quota settings window on startup"), prefs->show_disk_quota, LIVES_BOX(hbox), NULL);
4826 ACTIVE(cb_show_quota, TOGGLED);
4828 show_warn_image(prefsw->cb_show_quota, _("Quota checking is disabled when workdir is set\n"
4829 "via the commandline option"));
4830 else if (prefs->vj_mode)
4831 show_warn_image(prefsw->cb_show_quota, _("Disabled in VJ mode"));
4832
4833 hbox = lives_hbox_new(FALSE, 0);
4836
4838 (_("Pop up messages window on startup"), prefs->show_msgs_on_startup, LIVES_BOX(hbox), NULL);
4839 ACTIVE(cb_show_msgstart, TOGGLED);
4840 if (prefs->vj_mode)
4841 show_warn_image(prefsw->cb_show_msgstart, _("Disabled in VJ mode"));
4842
4843 hbox = lives_hbox_new(FALSE, 0);
4846
4848 (_("_Remove temporary backup files on startup and shutdown"),
4849 prefs->autoclean, LIVES_BOX(hbox), H_("Save disk space by "
4850 "allowing LiVES to remove\ntemporary preview and backup files"));
4851 ACTIVE(cb_autoclean, TOGGLED);
4852
4853 if (prefs->vj_mode)
4854 show_warn_image(prefsw->rb_startup_mt, _("Disabled in VJ mode"));
4855
4856 // -----------,
4857 // Themes |
4858 // -----------'
4859
4862
4864
4865 hbox = lives_hbox_new(FALSE, 0);
4867
4868 // scan for themes
4869 themes = get_plugin_list(PLUGIN_THEMES_CUSTOM, TRUE, NULL, NULL);
4870 themes = lives_list_concat(themes, get_plugin_list(PLUGIN_THEMES, TRUE, NULL, NULL));
4871 themes = lives_list_prepend(themes, lives_strdup(mainw->string_constants[LIVES_STRING_CONSTANT_NONE]));
4872
4873 prefsw->theme_combo = lives_standard_combo_new(_("New theme: "), themes, LIVES_BOX(hbox), NULL);
4874
4875 if (strcasecmp(future_prefs->theme, LIVES_THEME_NONE)) {
4876 theme = lives_strdup(future_prefs->theme);
4877 } else theme = lives_strdup(mainw->string_constants[LIVES_STRING_CONSTANT_NONE]);
4878
4879 lives_list_free_all(&themes);
4880
4882
4883 layout = lives_layout_new(LIVES_BOX(prefsw->vbox_right_themes));
4884 lives_layout_add_label(LIVES_LAYOUT(layout), _("Eye Candy"), FALSE);
4885
4886 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4887
4890 LIVES_BOX(hbox), NULL);
4891
4893 lives_layout_add_fill(LIVES_LAYOUT(layout), TRUE);
4895
4896 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
4897
4899 lives_standard_check_button_new(_("Invent interface colours"),
4900 prefs->extra_colours, LIVES_BOX(hbox),
4901 (tmp = H_("Make the interface more interesting "
4902 "by adding harmonious colours")));
4903 lives_free(tmp);
4904
4905 frame = lives_standard_frame_new(_("Main Theme Details"), 0., FALSE);
4906
4908
4909 vbox = lives_vbox_new(FALSE, 0);
4910 lives_container_add(LIVES_CONTAINER(frame), vbox);
4912
4913 layout = lives_layout_new(LIVES_BOX(vbox));
4914 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
4915
4917 prefsw->cbutton_fore = lives_standard_color_button_new(LIVES_BOX(hbox), _("_Foreground Color"), FALSE, &rgba, &sp_red,
4918 &sp_green, &sp_blue, NULL);
4919 ACTIVE(cbutton_fore, COLOR_SET);
4920
4921 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4923 prefsw->cbutton_back = lives_standard_color_button_new(LIVES_BOX(hbox), _("_Background Color"), FALSE, &rgba, &sp_red,
4924 &sp_green, &sp_blue, NULL);
4925 ACTIVE(cbutton_back, COLOR_SET);
4926
4927 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4929 prefsw->cbutton_mabf = lives_standard_color_button_new(LIVES_BOX(hbox), _("_Alt Foreground Color"), FALSE, &rgba, &sp_red,
4930 &sp_green, &sp_blue, NULL);
4931 ACTIVE(cbutton_mabf, COLOR_SET);
4932
4933 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4935 prefsw->cbutton_mab = lives_standard_color_button_new(LIVES_BOX(hbox), _("_Alt Background Color"), FALSE, &rgba, &sp_red,
4936 &sp_green, &sp_blue, NULL);
4937 ACTIVE(cbutton_mab, COLOR_SET);
4938
4939 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4941 prefsw->cbutton_infot = lives_standard_color_button_new(LIVES_BOX(hbox), _("Info _Text Color"), FALSE, &rgba, &sp_red,
4942 &sp_green, &sp_blue, NULL);
4943 ACTIVE(cbutton_infot, COLOR_SET);
4944
4945 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
4947 prefsw->cbutton_infob = lives_standard_color_button_new(LIVES_BOX(hbox), _("Info _Base Color"), FALSE, &rgba, &sp_red,
4948 &sp_green, &sp_blue, NULL);
4949 ACTIVE(cbutton_infob, COLOR_SET);
4950
4951 hbox = lives_hbox_new(FALSE, 0);
4952 lives_box_pack_start(LIVES_BOX(vbox), hbox, FALSE, FALSE, 0);
4953 prefsw->theme_style3 = lives_standard_check_button_new((tmp = (_("Theme is _light"))), (palette->style & STYLE_3),
4954 LIVES_BOX(hbox),
4955 (tmp2 = (_("Affects some contrast details of the timeline"))));
4956 lives_free(tmp); lives_free(tmp2);
4957
4958 hbox = lives_hbox_new(FALSE, 0);
4959 lives_box_pack_start(LIVES_BOX(vbox), hbox, FALSE, FALSE, 0);
4960
4961 prefsw->theme_style2 = NULL;
4962#if GTK_CHECK_VERSION(3, 0, 0)
4963 prefsw->theme_style2 = lives_standard_check_button_new(_("Color the start/end frame spinbuttons (requires restart)"),
4964 (palette->style & STYLE_2), LIVES_BOX(hbox), NULL);
4965#endif
4966
4967 hbox = lives_hbox_new(FALSE, 0);
4968 lives_box_pack_start(LIVES_BOX(vbox), hbox, FALSE, FALSE, 0);
4969
4970 prefsw->theme_style4 = lives_standard_check_button_new(_("Highlight horizontal separators in multitrack"),
4971 (palette->style & STYLE_4), LIVES_BOX(hbox), NULL);
4972 layout = lives_layout_new(LIVES_BOX(vbox));
4973
4974 filt = (char **)lives_malloc(3 * sizeof(char *));
4975 filt[0] = LIVES_FILE_EXT_JPG;
4976 filt[1] = LIVES_FILE_EXT_PNG;
4977 filt[2] = NULL;
4978
4979 lives_layout_add_label(LIVES_LAYOUT(layout), _("Frame blank image"), TRUE);
4980
4981 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
4983 prefs->def_image_dir, MEDIUM_ENTRY_WIDTH, PATH_MAX, LIVES_BOX(hbox),
4984 (tmp2 = (_("The frame image which is shown when there is no clip loaded."))));
4985 lives_free(tmp2);
4986
4988
4989 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(prefsw->fb_filebutton), FILTER_KEY, filt);
4990 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(prefsw->fb_filebutton), FILESEL_TYPE_KEY,
4991 LIVES_INT_TO_POINTER(LIVES_FILE_SELECTION_IMAGE_ONLY));
4992
4993 lives_layout_add_row(LIVES_LAYOUT(layout));
4994 lives_layout_add_label(LIVES_LAYOUT(layout), _("Separator image"), TRUE);
4995
4996 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
4998 prefs->def_image_dir, MEDIUM_ENTRY_WIDTH, PATH_MAX, LIVES_BOX(hbox),
4999 (tmp2 = (_("The image shown in the center of the interface."))));
5000 lives_free(tmp2);
5001
5003 lives_signal_sync_connect(prefsw->se_filebutton, LIVES_WIDGET_CLICKED_SIGNAL, LIVES_GUI_CALLBACK(on_filesel_button_clicked),
5005
5006 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(prefsw->se_filebutton), FILTER_KEY, filt);
5007 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(prefsw->se_filebutton), FILESEL_TYPE_KEY,
5008 LIVES_INT_TO_POINTER(LIVES_FILE_SELECTION_IMAGE_ONLY));
5009
5010 lives_free(filt);
5011
5012 frame = lives_standard_frame_new(_("Extended Theme Details"), 0., FALSE);
5013
5015
5016 vbox = lives_vbox_new(FALSE, 0);
5017 lives_container_add(LIVES_CONTAINER(frame), vbox);
5019
5020 layout = lives_layout_new(LIVES_BOX(vbox));
5021 hbox = lives_layout_hbox_new(LIVES_LAYOUT(layout));
5023 (tmp = (_("Selected frames/audio (clip editor)"))),
5024 FALSE, &palette->ce_sel, &sp_red, &sp_green, &sp_blue, NULL);
5025 ACTIVE(cbutton_cesel, COLOR_SET);
5026
5027 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
5029 (tmp = (_("Unselected frames/audio (clip editor)"))),
5030 FALSE, &palette->ce_unsel, &sp_red, &sp_green, &sp_blue, NULL);
5031 ACTIVE(cbutton_ceunsel, COLOR_SET);
5032
5033 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
5035 (tmp = (_("Track background (multitrack)"))),
5036 FALSE, &palette->mt_evbox, &sp_red, &sp_green, &sp_blue, NULL);
5037 ACTIVE(cbutton_evbox, COLOR_SET);
5038
5039 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
5040 prefsw->cbutton_vidcol = lives_standard_color_button_new(LIVES_BOX(hbox), (tmp = (_("Video block (multitrack)"))),
5041 FALSE, &palette->vidcol, &sp_red, &sp_green, &sp_blue, NULL);
5042 ACTIVE(cbutton_vidcol, COLOR_SET);
5043
5044 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
5045 prefsw->cbutton_audcol = lives_standard_color_button_new(LIVES_BOX(hbox), (tmp = (_("Audio block (multitrack)"))),
5046 FALSE, &palette->audcol, &sp_red, &sp_green, &sp_blue, NULL);
5047 ACTIVE(cbutton_audcol, COLOR_SET);
5048
5049 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
5050 prefsw->cbutton_fxcol = lives_standard_color_button_new(LIVES_BOX(hbox), (tmp = (_("Effects block (multitrack)"))),
5051 FALSE, &palette->fxcol, &sp_red, &sp_green, &sp_blue, NULL);
5052 ACTIVE(cbutton_fxcol, COLOR_SET);
5053
5054 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
5055 prefsw->cbutton_mtmark = lives_standard_color_button_new(LIVES_BOX(hbox), (tmp = (_("Timeline mark (multitrack)"))),
5056 FALSE, &palette->mt_mark, &sp_red, &sp_green, &sp_blue, NULL);
5057 ACTIVE(cbutton_mtmark, COLOR_SET);
5058
5059 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
5061 (tmp = (_("Timeline selection (multitrack)"))),
5062 FALSE, &palette->mt_timeline_reg, &sp_red, &sp_green, &sp_blue, NULL);
5063 ACTIVE(cbutton_tlreg, COLOR_SET);
5064
5065 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
5068 (tmp = (_("Timecode background (multitrack)"))),
5069 FALSE, &rgba, &sp_red, &sp_green, &sp_blue, NULL);
5070 ACTIVE(cbutton_tcbg, COLOR_SET);
5071
5072 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
5075 (tmp = (_("Timecode foreground (multitrack)"))),
5076 FALSE, &rgba, &sp_red, &sp_green, &sp_blue, NULL);
5077 ACTIVE(cbutton_tcfg, COLOR_SET);
5078
5079 hbox = lives_layout_row_new(LIVES_LAYOUT(layout));
5080 prefsw->cbutton_fsur = lives_standard_color_button_new(LIVES_BOX(hbox), (tmp = (_("Frame surround"))),
5081 FALSE, &palette->frame_surround, &sp_red, &sp_green, &sp_blue, NULL);
5082 lives_free(tmp);
5083 ACTIVE(cbutton_fsur, COLOR_SET);
5084
5085 // change in value of theme combo should set other widgets sensitive / insensitive
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);
5088 lives_combo_set_active_string(LIVES_COMBO(prefsw->theme_combo), theme);
5089 lives_free(theme);
5090
5091 pixbuf_themes = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_THEMES, LIVES_ICON_SIZE_CUSTOM, -1, -1);
5092
5093 prefs_add_to_list(prefsw->prefs_list, pixbuf_themes, _("Themes/Colors"), LIST_ENTRY_THEMES);
5094 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_themes);
5095
5096 // --------------------------,
5097 // streaming/networking |
5098 // --------------------------'
5099
5102
5104
5105 hbox = lives_hbox_new(FALSE, 0);
5107
5108 prefsw->spinbutton_bwidth = lives_standard_spin_button_new(_("Download bandwidth (Kb/s)"),
5109 prefs->dl_bandwidth, 0, 100000000., 1, 10, 0, LIVES_BOX(hbox), NULL);
5110
5112
5113#ifndef ENABLE_OSC
5114 label = lives_standard_label_new(_("LiVES must be compiled without \"configure --disable-OSC\" to use OMC"));
5116#endif
5117
5118 hbox1 = lives_hbox_new(FALSE, 0);
5120
5121 hbox = lives_hbox_new(FALSE, 0);
5122 lives_box_pack_start(LIVES_BOX(hbox1), hbox, FALSE, FALSE, 0);
5123
5124 prefsw->enable_OSC = lives_standard_check_button_new(_("OMC remote control enabled"), FALSE, LIVES_BOX(hbox), NULL);
5125
5126#ifndef ENABLE_OSC
5128#endif
5129
5131 prefs->osc_udp_port, 1., 65535., 1., 10., 0, LIVES_BOX(hbox), NULL);
5132
5133 hbox = lives_hbox_new(FALSE, 0);
5135
5137 LIVES_BOX(hbox), NULL);
5138
5139#ifndef ENABLE_OSC
5143#else
5144 if (prefs->osc_udp_started) {
5145 lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(prefsw->enable_OSC), TRUE);
5148 }
5149#endif
5150
5151 pixbuf_net = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_NET, LIVES_ICON_SIZE_CUSTOM, -1, -1);
5152
5153 prefs_add_to_list(prefsw->prefs_list, pixbuf_net, _("Streaming/Networking"), LIST_ENTRY_NET);
5154 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_net);
5155
5156 // ----------,
5157 // jack |
5158 // ----------'
5159
5162
5164
5165 label = lives_standard_label_new(_("Jack transport"));
5167
5168#ifndef ENABLE_JACK_TRANSPORT
5170 _("LiVES must be compiled with jack/transport.h and jack/jack.h present to use jack transport"));
5172#else
5173 hbox = lives_hbox_new(FALSE, 0);
5175
5176 prefsw->jack_tserver_entry = lives_standard_entry_new(_("Jack _transport config file"), prefs->jack_tserver, -1, PATH_MAX,
5177 LIVES_BOX(hbox), NULL);
5178
5180
5181 prefsw->checkbutton_start_tjack = lives_standard_check_button_new(_("Start _server on LiVES startup"),
5183 LIVES_BOX(hbox), NULL);
5184
5185 hbox = lives_hbox_new(FALSE, 0);
5187
5188 prefsw->checkbutton_jack_master = lives_standard_check_button_new(_("Jack transport _master (start and stop)"),
5190 LIVES_BOX(hbox), NULL);
5191
5192 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(prefsw->checkbutton_jack_master), LIVES_WIDGET_TOGGLED_SIGNAL,
5193 LIVES_GUI_CALLBACK(after_jack_master_toggled), NULL);
5194
5195 prefsw->checkbutton_jack_mtb_start = lives_standard_check_button_new(_("LiVES can set start position"),
5198 : FALSE, LIVES_BOX(hbox), NULL);
5199
5202
5203 hbox = lives_hbox_new(FALSE, 0);
5205
5206 prefsw->checkbutton_jack_client = lives_standard_check_button_new(_("Jack transport _client (start and stop)"),
5208 LIVES_BOX(hbox), NULL);
5209
5210 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(prefsw->checkbutton_jack_client), LIVES_WIDGET_TOGGLED_SIGNAL,
5211 LIVES_GUI_CALLBACK(after_jack_client_toggled), NULL);
5212
5213 prefsw->checkbutton_jack_tb_start = lives_standard_check_button_new(_("Jack transport can set start position"),
5216 : FALSE, LIVES_BOX(hbox), NULL);
5217
5220
5221 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(prefsw->checkbutton_jack_tb_start), LIVES_WIDGET_TOGGLED_SIGNAL,
5222 LIVES_GUI_CALLBACK(after_jack_tb_start_toggled), NULL);
5223
5224 hbox = lives_hbox_new(FALSE, 0);
5226
5227 //add_fill_to_box(LIVES_BOX(hbox));
5228
5229 prefsw->checkbutton_jack_tb_client = lives_standard_check_button_new(_("Jack transport timebase slave"),
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.")));
5236 lives_free(tmp);
5237
5240
5241 label = lives_standard_label_new(_("(See also Playback -> Audio follows video rate/direction)\n\n\n\n"));
5243
5244#endif
5245
5247
5248 label = lives_standard_label_new(_("Jack audio"));
5250
5251#ifndef ENABLE_JACK
5252 label = lives_standard_label_new(_("LiVES must be compiled with jack/jack.h present to use jack audio"));
5254#else
5255 label = lives_standard_label_new(_("You MUST set the audio player to \"jack\" in the Playback tab to use jack audio"));
5257
5258 hbox = lives_hbox_new(FALSE, 0);
5260
5261 prefsw->jack_aserver_entry = lives_standard_entry_new(_("Jack _audio server config file"), prefs->jack_aserver, -1,
5262 PATH_MAX, LIVES_BOX(hbox), NULL);
5263
5265
5266 prefsw->checkbutton_start_ajack = lives_standard_check_button_new(_("Start _server on LiVES startup"),
5268 LIVES_BOX(hbox), NULL);
5269
5270 hbox = lives_hbox_new(FALSE, 0);
5272
5273 prefsw->checkbutton_jack_pwp = lives_standard_check_button_new(_("Play audio even when transport is _paused"),
5275 LIVES_BOX(hbox), NULL);
5276
5278
5279 hbox = lives_hbox_new(FALSE, 0);
5281
5283 (_("Automatically connect to System Out ports when 'playing' External Audio"),
5285 LIVES_BOX(hbox), NULL);
5286
5288
5289#endif
5290
5291 pixbuf_jack = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_JACK, LIVES_ICON_SIZE_CUSTOM, -1, -1);
5292
5293 prefs_add_to_list(prefsw->prefs_list, pixbuf_jack, _("Jack Integration"), LIST_ENTRY_JACK);
5294 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_jack);
5295
5296 // ----------------------,
5297 // MIDI/js learner |
5298 // ----------------------'
5299
5301
5303
5305
5306 label = lives_standard_label_new(_("Events to respond to:"));
5308
5309#ifdef ENABLE_OSC
5310#ifdef OMC_JS_IMPL
5311
5312 hbox = lives_hbox_new(FALSE, 0);
5314
5316 LIVES_BOX(hbox), NULL);
5317
5318 label = lives_standard_label_new(_("Leave blank to use defaults"));
5320
5321 hbox = lives_hbox_new(FALSE, 0);
5323
5324 prefsw->omc_js_entry = lives_standard_fileentry_new((tmp = (_("_Joystick device")))
5326 (tmp2 = (H_("The joystick device, e.g. /dev/input/js0\n"
5327 "Leave blank to use defaults"))));
5328 lives_free(tmp); lives_free(tmp2);
5329
5330#ifdef OMC_MIDI_IMPL
5332#endif
5333
5334#endif
5335
5336#ifdef OMC_MIDI_IMPL
5337 hbox = lives_hbox_new(FALSE, 0);
5339
5341 LIVES_BOX(hbox), NULL);
5342
5343 add_fill_to_box(LIVES_BOX(hbox));
5344
5345 if (!(mainw->midi_channel_lock &&
5346 prefs->midi_rcv_channel > -1)) mchanlist = lives_list_append(mchanlist, (_("All channels")));
5347 for (i = 0; i < 16; i++) {
5348 midichan = lives_strdup_printf("%d", i);
5349 mchanlist = lives_list_append(mchanlist, midichan);
5350 }
5351
5352 midichan = lives_strdup_printf("%d", prefs->midi_rcv_channel);
5353
5354 prefsw->midichan_combo = lives_standard_combo_new(_("MIDI receive _channel"), mchanlist, LIVES_BOX(hbox), NULL);
5355
5356 lives_list_free_all(&mchanlist);
5357
5358 if (prefs->midi_rcv_channel > -1) {
5359 lives_combo_set_active_string(LIVES_COMBO(prefsw->midichan_combo), midichan);
5360 }
5361
5362 lives_free(midichan);
5363
5365
5367
5370
5371#ifdef ALSA_MIDI
5372 prefsw->alsa_midi = lives_standard_radio_button_new((tmp = (_("Use _ALSA MIDI (recommended)"))), &alsa_midi_group,
5373 LIVES_BOX(prefsw->midi_hbox),
5374 (tmp2 = (_("Create an ALSA MIDI port which other MIDI devices can be connected to"))));
5375
5376 lives_free(tmp); lives_free(tmp2);
5377
5378 prefsw->alsa_midi_dummy = lives_standard_check_button_new((tmp = (_("Create dummy MIDI output"))),
5379 prefs->alsa_midi_dummy, LIVES_BOX(prefsw->midi_hbox),
5380 (tmp2 = (_("Create a dummy ALSA MIDI output port."))));
5381
5382 lives_free(tmp); lives_free(tmp2);
5383
5385#endif
5386
5387 hbox = lives_hbox_new(FALSE, 0);
5388
5389 raw_midi_button = lives_standard_radio_button_new((tmp = (_("Use _raw MIDI"))), &alsa_midi_group,
5390 LIVES_BOX(hbox), (tmp2 = (_("Read directly from the MIDI device"))));
5391
5392 lives_free(tmp); lives_free(tmp2);
5393
5394#ifdef ALSA_MIDI
5395 lives_toggle_button_set_active(LIVES_TOGGLE_BUTTON(raw_midi_button), !prefs->use_alsa_midi);
5396#endif
5397
5399
5400 hbox = lives_hbox_new(FALSE, 0);
5403 LIVES_DEVICE_DIR, LONG_ENTRY_WIDTH, PATH_MAX, LIVES_BOX(hbox),
5404 (tmp2 = (_("The MIDI device, e.g. /dev/input/midi0"))));
5405
5406 lives_free(tmp); lives_free(tmp2);
5407
5409
5410 label = lives_standard_label_new(_("Advanced"));
5412
5413 hbox = lives_hbox_new(FALSE, 0);
5415
5416 prefsw->spinbutton_midicr = lives_standard_spin_button_new((tmp = (_("MIDI check _rate"))),
5417 prefs->midi_check_rate, 1., 2000., 1., 10., 0, LIVES_BOX(hbox),
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."))));
5422
5423 lives_free(tmp); lives_free(tmp2);
5424
5425 add_fill_to_box(LIVES_BOX(hbox));
5426
5427 prefsw->spinbutton_midirpt = lives_standard_spin_button_new((tmp = (_("MIDI repeat"))),
5428 prefs->midi_rpt, 1., 10000., 10., 100., 0, LIVES_BOX(hbox),
5429 (tmp2 = (_("Number of non-reads allowed between succesive reads."))));
5430
5431 lives_free(tmp); lives_free(tmp2);
5432
5433 label = lives_standard_label_new(_("(Warning: setting this value too high can slow down playback.)"));
5434
5436
5437#ifdef ALSA_MIDI
5438 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->alsa_midi), LIVES_WIDGET_TOGGLED_SIGNAL,
5439 LIVES_GUI_CALLBACK(on_alsa_midi_toggled), NULL);
5440
5441 on_alsa_midi_toggled(LIVES_TOGGLE_BUTTON(prefsw->alsa_midi), prefsw);
5442#endif
5443
5445
5446#endif
5447#endif
5448
5449 hbox = lives_hbox_new(FALSE, 0);
5451
5453 ((tmp = lives_strdup_printf(_("Midi program synch (requires the files %s and %s)"), EXEC_MIDISTART, EXEC_MIDISTOP)),
5454 prefs->midisynch, LIVES_BOX(hbox), NULL);
5455 lives_free(tmp);
5456
5458
5459 pixbuf_midi = lives_pixbuf_new_from_stock_at_size(LIVES_LIVES_STOCK_PREF_MIDI, LIVES_ICON_SIZE_CUSTOM, -1, -1);
5460
5461 prefs_add_to_list(prefsw->prefs_list, pixbuf_midi, _("MIDI/Joystick learner"), LIST_ENTRY_MIDI);
5462 lives_container_add(LIVES_CONTAINER(dialog_table), prefsw->scrollw_right_midi);
5463
5465 lives_tree_selection_set_mode(prefsw->selection, LIVES_SELECTION_SINGLE);
5466
5467 lives_signal_sync_connect(prefsw->selection, LIVES_WIDGET_CHANGED_SIGNAL, LIVES_GUI_CALLBACK(on_prefs_page_changed),
5468 (livespointer)prefsw);
5469
5470 if (!saved_dialog) {
5472 // Preferences 'Revert' button
5474 LIVES_STOCK_REVERT_TO_SAVED, NULL, LIVES_RESPONSE_CANCEL);
5476
5477 // Preferences 'Apply' button
5478 prefsw->applybutton = lives_dialog_add_button_from_stock(LIVES_DIALOG(prefsw->prefs_dialog), LIVES_STOCK_APPLY, NULL,
5479 LIVES_RESPONSE_ACCEPT);
5481
5482 // Preferences 'Close' button
5483 prefsw->closebutton = lives_dialog_add_button_from_stock(LIVES_DIALOG(prefsw->prefs_dialog), LIVES_STOCK_CLOSE, NULL,
5484 LIVES_RESPONSE_OK);
5487 } else {
5488 prefsw->revertbutton = saved_revertbutton;
5489 prefsw->applybutton = saved_applybutton;
5490 prefsw->closebutton = saved_closebutton;
5492 }
5494
5496
5497 lives_widget_add_accelerator(prefsw->closebutton, LIVES_WIDGET_CLICKED_SIGNAL, prefsw->accel_group,
5498 LIVES_KEY_Escape, (LiVESXModifierType)0, (LiVESAccelFlags)0);
5499
5500 // Set 'Revert' button as inactive since there are no changes yet
5502 // Set 'Apply' button as inactive since there are no changes yet
5504
5505 // Connect signals for 'Apply' button activity handling
5506 if (prefsw->theme_style2)
5507 ACTIVE(theme_style2, TOGGLED);
5508
5509 ACTIVE(theme_style3, TOGGLED);
5510 ACTIVE(theme_style4, TOGGLED);
5511
5512 ACTIVE(wpp_entry, CHANGED);
5513 ACTIVE(frei0r_entry, CHANGED);
5514 ACTIVE(libvis_entry, CHANGED);
5515 ACTIVE(ladspa_entry, CHANGED);
5516
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);
5532
5533 ACTIVE(spinbutton_warn_ds, VALUE_CHANGED);
5534 ACTIVE(spinbutton_crit_ds, VALUE_CHANGED);
5535
5536 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->spinbutton_warn_ds), LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
5537 LIVES_GUI_CALLBACK(spinbutton_ds_value_changed), LIVES_INT_TO_POINTER(FALSE));
5538 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->spinbutton_crit_ds), LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
5539 LIVES_GUI_CALLBACK(spinbutton_ds_value_changed), LIVES_INT_TO_POINTER(TRUE));
5540
5541 ACTIVE(spinbutton_gmoni, VALUE_CHANGED);
5542 ACTIVE(spinbutton_pmoni, VALUE_CHANGED);
5543
5544 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->spinbutton_gmoni), LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
5545 LIVES_GUI_CALLBACK(pmoni_gmoni_changed), NULL);
5546 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->spinbutton_pmoni), LIVES_WIDGET_VALUE_CHANGED_SIGNAL,
5547 LIVES_GUI_CALLBACK(pmoni_gmoni_changed), NULL);
5548
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);
5554
5555 lives_signal_sync_connect(LIVES_GUI_OBJECT(mt_enter_defs), LIVES_WIDGET_TOGGLED_SIGNAL,
5556 LIVES_GUI_CALLBACK(apply_button_set_enabled), NULL);
5557
5558 ACTIVE(mt_enter_prompt, TOGGLED);
5559 ACTIVE(checkbutton_render_prompt, TOGGLED);
5560
5561 ACTIVE(spinbutton_mt_def_width, VALUE_CHANGED);
5562 ACTIVE(spinbutton_mt_def_height, VALUE_CHANGED);
5563 ACTIVE(spinbutton_mt_def_fps, VALUE_CHANGED);
5564
5565 ACTIVE(backaudio_checkbutton, TOGGLED);
5566 ACTIVE(pertrack_checkbutton, TOGGLED);
5567
5568 ACTIVE(spinbutton_mt_undo_buf, VALUE_CHANGED);
5569
5570 ACTIVE(checkbutton_mt_exit_render, TOGGLED);
5571
5572 ACTIVE(spinbutton_mt_ab_time, VALUE_CHANGED);
5573 ACTIVE(spinbutton_max_disp_vtracks, VALUE_CHANGED);
5574
5575 ACTIVE(mt_autoback_always, TOGGLED);
5576 ACTIVE(mt_autoback_never, TOGGLED);
5577 ACTIVE(mt_autoback_every, TOGGLED);
5578
5579 ACTIVE(video_open_entry, CHANGED);
5580 ACTIVE(frameblank_entry, CHANGED);
5581 ACTIVE(sepimg_entry, CHANGED);
5582
5583 ACTIVE(spinbutton_ocp, VALUE_CHANGED);
5584 ACTIVE(jpeg, TOGGLED);
5585
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);
5594
5595 ACTIVE(pbq_combo, CHANGED);
5596 lives_signal_sync_connect(LIVES_GUI_OBJECT(pp_combo), LIVES_WIDGET_CHANGED_SIGNAL,
5597 LIVES_GUI_CALLBACK(apply_button_set_enabled), NULL);
5598 ACTIVE(audp_combo, CHANGED);
5599
5600 ACTIVE(checkbutton_show_stats, TOGGLED);
5601
5602 ACTIVE(checkbutton_afollow, TOGGLED);
5603 ACTIVE(checkbutton_aclips, TOGGLED);
5604
5605 ACTIVE(rdesk_audio, TOGGLED);
5606
5607 ACTIVE(rframes, TOGGLED);
5608 ACTIVE(rfps, TOGGLED);
5609 ACTIVE(reffects, TOGGLED);
5610 ACTIVE(rclips, TOGGLED);
5611 ACTIVE(raudio, TOGGLED);
5612 ACTIVE(rextaudio, TOGGLED);
5613
5614 ACTIVE(pa_gens, TOGGLED);
5615
5616 ACTIVE(spinbutton_ext_aud_thresh, VALUE_CHANGED);
5617 ACTIVE(spinbutton_rec_gb, VALUE_CHANGED);
5618
5619 ACTIVE(encoder_combo, CHANGED);
5620
5622 ACTIVE(ofmt_combo, CHANGED);
5623 ACTIVE(acodec_combo, CHANGED);
5624 }
5625
5626 ACTIVE(checkbutton_antialias, TOGGLED);
5627 ACTIVE(checkbutton_load_rfx, TOGGLED);
5628 ACTIVE(checkbutton_apply_gamma, TOGGLED);
5629
5630 ACTIVE(spinbutton_rte_keys, VALUE_CHANGED);
5631 ACTIVE(spinbutton_nfx_threads, VALUE_CHANGED);
5632
5633 ACTIVE(checkbutton_threads, TOGGLED);
5634
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);
5654
5655 ACTIVE(spinbutton_warn_fsize, VALUE_CHANGED);
5656
5657#ifdef HAVE_LDVGRAB
5658 ACTIVE(checkbutton_warn_after_dvgrab, TOGGLED);
5659#endif
5660#ifdef HAVE_YUV4MPEG
5661 ACTIVE(checkbutton_warn_yuv4m_open, TOGGLED);
5662#endif
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);
5670
5671 ACTIVE(check_midi, TOGGLED);
5672 ACTIVE(midichan_combo, CHANGED);
5673
5674 ACTIVE(ins_speed, TOGGLED);
5675
5676 ACTIVE(cdplay_entry, CHANGED);
5677
5678 ACTIVE(spinbutton_def_fps, VALUE_CHANGED);
5679
5680 ACTIVE(theme_combo, CHANGED);
5681
5682 ACTIVE(spinbutton_bwidth, VALUE_CHANGED);
5683#ifdef ENABLE_OSC
5684 ACTIVE(spinbutton_osc_udp, VALUE_CHANGED);
5685 ACTIVE(enable_OSC_start, TOGGLED);
5686 ACTIVE(enable_OSC, TOGGLED);
5687#endif
5688
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);
5697#endif
5698
5699#ifdef ENABLE_JACK
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);
5704#endif
5705
5706#ifdef ENABLE_OSC
5707#ifdef OMC_JS_IMPL
5708 ACTIVE(checkbutton_omc_js, TOGGLED);
5709 ACTIVE(omc_js_entry, CHANGED);
5710#endif
5711#ifdef OMC_MIDI_IMPL
5712 ACTIVE(checkbutton_omc_midi, TOGGLED);
5713#ifdef ALSA_MIDI
5714 ACTIVE(alsa_midi, TOGGLED);
5715 ACTIVE(alsa_midi_dummy, TOGGLED);
5716#endif
5717 ACTIVE(omc_midi_entry, CHANGED);
5718 ACTIVE(spinbutton_midicr, VALUE_CHANGED);
5719 ACTIVE(spinbutton_midirpt, VALUE_CHANGED);
5720#endif
5721#endif
5722
5724 prefsw->encoder_name_fn = lives_signal_sync_connect(LIVES_GUI_OBJECT(LIVES_COMBO(prefsw->encoder_combo)),
5725 LIVES_WIDGET_CHANGED_SIGNAL, LIVES_GUI_CALLBACK(on_encoder_entry_changed), NULL);
5726
5727 prefsw->encoder_ofmt_fn = lives_signal_sync_connect(LIVES_GUI_OBJECT(LIVES_COMBO(prefsw->ofmt_combo)),
5728 LIVES_WIDGET_CHANGED_SIGNAL, LIVES_GUI_CALLBACK(on_encoder_ofmt_changed), NULL);
5729 }
5730
5731 prefsw->audp_entry_func = lives_signal_sync_connect(LIVES_GUI_OBJECT(LIVES_COMBO(prefsw->audp_combo)),
5732 LIVES_WIDGET_CHANGED_SIGNAL, LIVES_GUI_CALLBACK(on_audp_entry_changed), NULL);
5733
5734#ifdef ENABLE_OSC
5735 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->enable_OSC), LIVES_WIDGET_TOGGLED_SIGNAL,
5736 LIVES_GUI_CALLBACK(on_osc_enable_toggled),
5737 (livespointer)prefsw->enable_OSC_start);
5738#endif
5739 if (saved_dialog == NULL) {
5740 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->revertbutton), LIVES_WIDGET_CLICKED_SIGNAL,
5741 LIVES_GUI_CALLBACK(on_prefs_revert_clicked), NULL);
5742
5743 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->prefs_dialog), LIVES_WIDGET_DELETE_EVENT,
5744 LIVES_GUI_CALLBACK(on_prefs_close_clicked), NULL);
5745
5746 lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->applybutton), LIVES_WIDGET_CLICKED_SIGNAL,
5747 LIVES_GUI_CALLBACK(on_prefs_apply_clicked), NULL);
5748 }
5749
5750 prefsw->close_func = lives_signal_sync_connect(LIVES_GUI_OBJECT(prefsw->closebutton), LIVES_WIDGET_CLICKED_SIGNAL,
5751 LIVES_GUI_CALLBACK(on_prefs_close_clicked), prefsw);
5752
5753 lives_list_free_all(&audp);
5754
5755 if (prefs_current_page == -1) {
5756 if (!mainw->multitrack)
5757 select_pref_list_row(LIST_ENTRY_GUI, prefsw);
5758 else
5759 select_pref_list_row(LIST_ENTRY_MULTITRACK, prefsw);
5760 } else select_pref_list_row(prefs_current_page, prefsw);
5761
5763
5765 //on_prefs_page_changed(prefsw->selection, prefsw);
5766
5768 return prefsw;
5769}
5770
5771
5772void on_preferences_activate(LiVESMenuItem * menuitem, livespointer user_data) {
5773 LiVESWidget *saved_dialog = (LiVESWidget *)user_data;
5774 mt_needs_idlefunc = FALSE;
5775
5776 if (mainw->multitrack) {
5777 if (mainw->multitrack->idlefunc > 0) {
5779 mainw->multitrack->idlefunc = 0;
5780 mt_needs_idlefunc = TRUE;
5781 }
5783 }
5784
5785 if (menuitem) prefs_current_page = -1;
5786
5787 if (prefsw && prefsw->prefs_dialog) {
5790 return;
5791 }
5792
5796
5797 prefsw = create_prefs_dialog(saved_dialog);
5799 lives_window_set_position(LIVES_WINDOW(prefsw->prefs_dialog), LIVES_WIN_POS_CENTER_ALWAYS);
5803}
5804
5805
5809void on_prefs_close_clicked(LiVESButton * button, livespointer user_data) {
5812 lives_tree_view_set_model(LIVES_TREE_VIEW(prefsw->prefs_list), NULL);
5815 lives_freep((void **)&resaudw);
5817
5818 lives_general_button_clicked(button, user_data);
5819
5820 prefsw = NULL;
5821
5824 on_quit_activate(NULL, NULL);
5825 }
5826 if (mainw->multitrack) {
5828 if (mt_needs_idlefunc) {
5830 }
5831 }
5832}
5833
5834
5836 if (prefs->show_gui) {
5837 if (mainw->current_file == -1) {
5839 load_end_image(0);
5841 }
5843 if (mainw->multitrack && mainw->multitrack->sep_image) {
5844 lives_image_set_from_pixbuf(LIVES_IMAGE(mainw->multitrack->sep_image), mainw->imsep);
5847 }
5848 }
5849}
5850
5851
5853 // minor colours changed
5854 if (prefs->show_gui) {
5855 if (mainw->multitrack) {
5858 } else {
5861 }
5862 }
5863}
5864
5865
5867 if (mainw->preview_box) {
5869 }
5870
5871 if (prefs->show_gui) {
5874
5875 if (mainw->multitrack) {
5880 } else update_play_times();
5881 }
5882}
5883
5884
5885void on_prefs_apply_clicked(LiVESButton * button, livespointer user_data) {
5886 boolean needs_restart = FALSE;
5887
5889
5893
5894 // Apply preferences
5895 needs_restart = apply_prefs(FALSE);
5896
5897 if (!mainw->prefs_need_restart) {
5898 mainw->prefs_need_restart = needs_restart;
5899 }
5900
5901 if (needs_restart) {
5902 //do_info_dialog(_("For the directory change to take effect LiVES will restart when preferences dialog closes."));
5903 do_info_dialog(_("LiVES will restart when preferences dialog closes."));
5904 }
5905
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."));
5911 } else
5913
5915 do_info_dialog(_("Jack options will not take effect until the next time you start LiVES."));
5916 }
5917
5922 // set details in prefs
5926 }
5927 }
5928
5931 }
5932
5935 }
5936
5938 // major coulours changed
5939 // force reshow of window
5941 on_prefs_revert_clicked(button, NULL);
5942 } else if (mainw->prefs_changed & PREFS_NEEDS_REVERT) {
5943 on_prefs_revert_clicked(button, NULL);
5944 }
5945
5948
5951
5952 mainw->prefs_changed = 0;
5953}
5954
5955
5956/*
5957 Function is used to select particular row in preferences selection list
5958 selection is performed according to provided index which is one of LIST_ENTRY_* constants
5959*/
5960static void select_pref_list_row(uint32_t selected_idx, _prefsw * prefsw) {
5961 LiVESTreeIter iter;
5962 LiVESTreeModel *model;
5963 boolean valid;
5964 uint32_t idx;
5965
5966 model = lives_tree_view_get_model(LIVES_TREE_VIEW(prefsw->prefs_list));
5967 valid = lives_tree_model_get_iter_first(model, &iter);
5968 while (valid) {
5969 lives_tree_model_get(model, &iter, LIST_NUM, &idx, -1);
5970 //
5971 if (idx == selected_idx) {
5973 break;
5974 }
5975 //
5976 valid = lives_tree_model_iter_next(model, &iter);
5977 }
5978}
5979
5980
5981void on_prefs_revert_clicked(LiVESButton * button, livespointer user_data) {
5982 LiVESWidget *saved_dialog;
5983 register int i;
5984
5987
5988 if (future_prefs->vpp_argv) {
5989 for (i = 0; future_prefs->vpp_argv[i]; lives_free(future_prefs->vpp_argv[i++]));
5990
5992
5993 future_prefs->vpp_argv = NULL;
5994 }
5995 memset(future_prefs->vpp_name, 0, 64);
5996
5999 lives_tree_view_set_model(LIVES_TREE_VIEW(prefsw->prefs_list), NULL);
6000
6003
6005
6006 saved_dialog = prefsw->prefs_dialog;
6007 saved_revertbutton = prefsw->revertbutton;
6008 saved_applybutton = prefsw->applybutton;
6009 saved_closebutton = prefsw->closebutton;
6011 lives_widget_remove_accelerator(prefsw->closebutton, prefsw->accel_group, LIVES_KEY_Escape, (LiVESXModifierType)0);
6012
6014 lives_freep((void **)&prefsw);
6015
6017
6018 on_preferences_activate(NULL, saved_dialog);
6019
6021}
6022
6023
6024static int text_to_lives_perm(const char *text) {
6025 if (!text || !*text) return LIVES_PERM_INVALID;
6026 if (!strcmp(text, "DOWNLOADLOCAL")) return LIVES_PERM_DOWNLOAD_LOCAL;
6027 if (!strcmp(text, "COPYLOCAL")) return LIVES_PERM_COPY_LOCAL;
6028 return LIVES_PERM_INVALID;
6029}
6030
6031boolean lives_ask_permission(char **argv, int argc, int offs) {
6032 const char *sudocom = NULL;
6033 char *msg;
6034 boolean ret;
6035 int what = atoi(argv[offs]);
6036 if (what == LIVES_PERM_INVALID && *argv[offs]) {
6037 what = text_to_lives_perm(argv[offs]);
6038 }
6039
6040 switch (what) {
6042 return ask_permission_dialog(what);
6045 if (argc >= 5 && strstr(argv[4], "_TRY_SUDO_")) sudocom = (const char *)argv[2];
6046 ret = ask_permission_dialog_complex(what, argv, argc, ++offs, sudocom);
6047 return ret;
6048 default:
6049 msg = lives_strdup_printf("Unknown permission (%d) requested", what);
6050 LIVES_WARN(msg);
6051 lives_free(msg);
6052 }
6053 return FALSE;
6054}
6055
#define is_realtime_aplayer(ptype)
Definition: audio.h:236
@ AUDIO_LOOP_FORWARD
Definition: audio.h:147
@ AUDIO_LOOP_PINGPONG
Definition: audio.h:148
void on_encoder_ofmt_changed(LiVESCombo *combo, livespointer user_data)
Definition: callbacks.c:11680
void on_encoder_entry_changed(LiVESCombo *combo, livespointer ptr)
Definition: callbacks.c:4779
void on_quit_activate(LiVESMenuItem *menuitem, livespointer user_data)
Definition: callbacks.c:2133
LIVES_GLOBAL_INLINE LiVESResponseType do_info_dialog(const char *text)
Definition: dialogs.c:787
LiVESResponseType do_error_dialogf(const char *fmt,...)
Definition: dialogs.c:735
LiVESResponseType do_read_failed_error_s_with_retry(const char *fname, const char *errtext)
Definition: dialogs.c:4122
boolean ask_permission_dialog(int what)
Definition: dialogs.c:4587
LIVES_GLOBAL_INLINE void do_aud_during_play_error(void)
Definition: dialogs.c:899
LIVES_GLOBAL_INLINE void do_shutdown_msg(void)
Definition: dialogs.c:4554
LIVES_GLOBAL_INLINE void do_vpp_fps_error(void)
Definition: dialogs.c:3737
LIVES_GLOBAL_INLINE char * workdir_ch_warning(void)
Definition: dialogs.c:4544
LiVESResponseType do_write_failed_error_s_with_retry(const char *fname, const char *errtext)
Definition: dialogs.c:4058
LIVES_GLOBAL_INLINE void do_vpp_palette_error(void)
Definition: dialogs.c:3727
LIVES_GLOBAL_INLINE void do_mt_set_mem_error(boolean has_mt)
Definition: dialogs.c:3593
LIVES_GLOBAL_INLINE LiVESResponseType do_error_dialog(const char *text)
Definition: dialogs.c:749
LIVES_GLOBAL_INLINE boolean do_warning_dialog(const char *text)
Definition: dialogs.c:564
boolean ask_permission_dialog_complex(int what, char **argv, int argc, int offs, const char *sudocom)
Definition: dialogs.c:4605
void update_all_host_info(void)
Definition: effects-weed.c:478
LiVESWidget * add_audio_options(LiVESWidget **cbbackaudio, LiVESWidget **cbpertrack)
Definition: events.c:6184
LiVESWidget * add_video_options(LiVESWidget **spwidth, int defwidth, LiVESWidget **spheight, int defheight, LiVESWidget **spfps, double deffps, LiVESWidget **spframes, int defframes, boolean add_aspect, LiVESWidget *extra)
Definition: events.c:6072
render_details * rdet
Definition: events.h:256
void resize_widgets_for_monitor(boolean do_get_play_times)
Definition: gui.c:3752
void set_colours(LiVESWidgetColor *colf, LiVESWidgetColor *colb, LiVESWidgetColor *colf2, LiVESWidgetColor *colb2, LiVESWidgetColor *colt, LiVESWidgetColor *coli)
Definition: gui.c:168
void play_window_set_title(void)
Definition: gui.c:3722
void load_theme_images(void)
Definition: gui.c:65
void set_preview_box_colours(void)
Definition: gui.c:3505
void make_play_window(void)
actually in gui.c
Definition: gui.c:3932
void kill_play_window(void)
Definition: gui.c:4386
void on_filesel_button_clicked(LiVESButton *button, livespointer user_data)
callback for lives_standard filesel button same callback is used for dierctory buttons object_data in...
Definition: interface.c:3930
void msg_area_scroll(LiVESAdjustment *adj, livespointer userdata)
Definition: interface.c:7284
#define LIVES_DIR_SELECTION_WORKDIR
Definition: interface.h:187
#define LIVES_FILE_SELECTION_IMAGE_ONLY
Definition: interface.h:181
LIVES_GLOBAL_INLINE boolean lives_strcmp(const char *st1, const char *st2)
returns FALSE if strings match
uint64_t get_ds_free(const char *dir)
Definition: machinestate.c:776
char * lives_format_storage_space_string(uint64_t space)
Definition: machinestate.c:664
void * main_thread_execute(lives_funcptr_t func, int return_type, void *retval, const char *args_fmt,...)
#define lives_free
Definition: machinestate.h:52
#define lives_malloc
Definition: machinestate.h:46
#define lives_memcpy
Definition: machinestate.h:55
void *(* lives_funcptr_t)(void *)
Definition: machinestate.h:378
#define PRId64
Definition: machinestate.h:169
void load_end_image(int frame)
Definition: main.c:5922
void load_start_image(int frame)
Definition: main.c:5650
_palette * palette
interface colour settings
Definition: main.c:101
boolean set_palette_colours(boolean force_reload)
Definition: main.c:2663
void load_preview_image(boolean update_always)
Definition: main.c:6205
mainwindow * mainw
Definition: main.c:103
void switch_to_file(int old_file, int new_file)
Definition: main.c:9646
void get_monitors(boolean reset)
Definition: main.c:400
#define LIVES_WARN(x)
Definition: main.h:1862
LiVESList * lives_list_copy_strings(LiVESList *list)
Definition: utils.c:5820
ssize_t lives_popen(const char *com, boolean allow_error, char *buff, ssize_t buflen)
Definition: utils.c:194
void lives_list_free_all(LiVESList **)
Definition: utils.c:4873
size_t get_token_count(const char *string, int delim)
Definition: utils.c:5430
#define LIVES_GLOBAL_INLINE
Definition: main.h:239
boolean ensure_isdir(char *fname)
Definition: utils.c:3346
void get_dirname(char *filename)
Definition: utils.c:3167
#define LIVES_IS_PLAYING
Definition: main.h:840
int lives_utf8_strcasecmp(const char *s1, const char *s2)
Definition: utils.c:5458
boolean switch_aud_to_jack(boolean set_pref)
Definition: utils.c:3819
boolean lives_setenv(const char *name, const char *value)
Definition: utils.c:120
int lives_system(const char *com, boolean allow_error)
Definition: utils.c:145
#define N_RECENT_FILES
Definition: main.h:657
void switch_aud_to_none(boolean set_pref)
Definition: utils.c:4001
boolean is_writeable_dir(const char *dir)
Definition: utils.c:5701
int free_n_msgs(int frval)
Definition: utils.c:2381
#define AFORM_UNSIGNED
Definition: main.h:786
#define FPS_MAX
maximum fps we will allow (double)
Definition: main.h:218
void update_play_times(void)
like get_play_times, but will force redraw of audio waveforms
Definition: utils.c:3677
void do_jack_noopen_warn(void)
char * get_val_from_cached_list(const char *key, size_t maxlen, LiVESList *cache)
Definition: utils.c:4966
capability * capable
Definition: main.h:627
boolean string_lists_differ(LiVESList *, LiVESList *)
Definition: utils.c:5831
#define cfile
Definition: main.h:1833
boolean switch_aud_to_pulse(boolean set_pref)
Definition: utils.c:3884
int lives_list_strcmp_index(LiVESList *list, livesconstpointer data, boolean case_sensitive)
Definition: utils.c:4678
boolean check_for_executable(lives_checkstatus_t *cap, const char *exec)
Definition: utils.c:3434
int lives_utf8_strcmp(const char *s1, const char *s2)
Definition: utils.c:5469
#define AFORM_BIG_ENDIAN
Definition: main.h:787
boolean switch_aud_to_sox(boolean set_pref)
Definition: utils.c:3944
char * ensure_extension(const char *fname, const char *ext) WARN_UNUSED
Definition: utils.c:3232
#define PATH_MAX
Definition: main.h:255
boolean lives_freep(void **ptr)
Definition: utils.c:1411
#define FX_KEYS_PHYSICAL
FX keys, 1 - 9 normally.
Definition: mainwindow.h:198
#define THEME_DETAIL_MT_TLREG
Definition: mainwindow.h:286
#define STYLE_3
style is lightish - allow themeing of widgets with dark text, otherwise use menu bg
Definition: mainwindow.h:301
#define THEME_DETAIL_SEPWIN_IMAGE
Definition: mainwindow.h:274
#define DEF_BUTTON_HEIGHT
Definition: mainwindow.h:183
#define THEME_DETAIL_FXCOL
Definition: mainwindow.h:285
#define DLL_NAME
Definition: mainwindow.h:530
#define THEME_DETAIL_MT_MARK
Definition: mainwindow.h:287
#define THEME_DETAIL_ALT_BACK
Definition: mainwindow.h:279
#define LIVES_IMAGE_TYPE_JPEG
Definition: mainwindow.h:479
#define THEME_DETAIL_INFO_TEXT
Definition: mainwindow.h:280
#define EXEC_JACKD
recommended if (!have_pulseaudio)
Definition: mainwindow.h:417
@ EXT_CNTL_MIDI
Definition: mainwindow.h:220
#define EXEC_PULSEAUDIO
Definition: mainwindow.h:392
#define THEME_DETAIL_MT_TCFG
Definition: mainwindow.h:289
#define THEME_DETAIL_ALT_FORE
Definition: mainwindow.h:278
#define PLUGIN_EXEC_DIR
Definition: mainwindow.h:599
#define LIVES_MAIN_WINDOW_WIDGET
Definition: mainwindow.h:188
#define STYLE_4
separator col. in mt
Definition: mainwindow.h:302
#define THEME_DETAIL_FRAMEBLANK_IMAGE
Definition: mainwindow.h:275
#define ONE_MILLION
Definition: mainwindow.h:27
#define THEME_DETAIL_CE_SEL
Definition: mainwindow.h:292
@ LIVES_STRING_CONSTANT_DISABLED
Definition: mainwindow.h:373
@ LIVES_STRING_CONSTANT_RECOMMENDED
Definition: mainwindow.h:372
@ LIVES_STRING_CONSTANT_NONE
Definition: mainwindow.h:371
@ LIVES_STRING_CONSTANT_ANY
Definition: mainwindow.h:370
#define THEME_DETAIL_MT_EVBOX
Definition: mainwindow.h:288
#define LIVES_DEVICE_DIR
Definition: mainwindow.h:591
#define LIVES_FILE_EXT_PNG
Definition: mainwindow.h:487
#define THEME_DETAIL_AUDCOL
Definition: mainwindow.h:283
#define DEF_BUTTON_WIDTH
Definition: mainwindow.h:182
#define THEME_DETAIL_INFO_BASE
Definition: mainwindow.h:281
#define THEME_DETAIL_MT_TCBG
Definition: mainwindow.h:290
#define FX_KEYS_MAX_VIRTUAL
must be >= FX_KEYS_PHYSICAL, and <=64 (number of bits in a 64bit int mask) (max number of keys accesi...
Definition: mainwindow.h:203
#define THEME_DETAIL_CE_UNSEL
Definition: mainwindow.h:293
#define THEME_DETAIL_FRAME_SURROUND
Definition: mainwindow.h:291
#define LIVES_FILE_EXT_NEW
Definition: mainwindow.h:491
#define EXEC_MIDISTOP
shipped
Definition: mainwindow.h:416
#define THEME_DETAIL_NORMAL_BACK
Definition: mainwindow.h:277
#define MILLIONS(n)
Definition: mainwindow.h:26
#define STYLE_1
turn on theming if set
Definition: mainwindow.h:299
_fx_dialog * fx_dialog[2]
Definition: mainwindow.h:1851
#define THEME_DETAIL_NORMAL_FORE
Definition: mainwindow.h:276
#define LIVES_IMAGE_TYPE_PNG
Definition: mainwindow.h:480
#define LIVES_FILE_EXT_JPG
Definition: mainwindow.h:488
#define THEME_DETAIL_STYLE
Definition: mainwindow.h:273
#define EXEC_CDDA2WAV
Definition: mainwindow.h:419
#define EXEC_MIDISTART
shipped
Definition: mainwindow.h:415
#define STYLE_2
colour the spinbuttons on the front page if set
Definition: mainwindow.h:300
#define LIVES_THEME_NONE
Definition: mainwindow.h:552
#define THEME_DETAIL_VIDCOL
Definition: mainwindow.h:284
#define EXEC_ICEDAX
Definition: mainwindow.h:420
void mt_clip_select(lives_mt *mt, boolean scroll)
Definition: multitrack.c:3024
boolean mt_auto_backup(livespointer user_data)
Definition: multitrack.c:863
boolean resize_timeline(lives_mt *mt)
Definition: multitrack.c:11721
uint32_t mt_idle_add(lives_mt *mt)
Definition: multitrack.c:901
void mt_desensitise(lives_mt *mt)
Definition: multitrack.c:16979
void track_select(lives_mt *mt)
must call after setting mt->current_track
Definition: multitrack.c:1941
void mt_sensitise(lives_mt *mt)
Definition: multitrack.c:17052
void set_mt_colours(lives_mt *mt)
Definition: multitrack.c:6148
boolean make_backup_space(lives_mt *mt, size_t space_needed)
Definition: multitrack.c:5157
void scroll_tracks(lives_mt *mt, int top_track, boolean set_value)
Definition: multitrack.c:2347
void mt_show_current_frame(lives_mt *mt, boolean return_layer)
preview the current frame
Definition: multitrack.c:3214
boolean write_backup_layout_numbering(lives_mt *mt)
Definition: multitrack.c:668
#define OMC_DEV_FORCE_RAW_MIDI
Definition: omc-learn.h:12
#define OMC_DEV_JS
Definition: omc-learn.h:11
boolean midi_open(void)
#define OMC_DEV_MIDI
Definition: omc-learn.h:10
void midi_close(void)
#define OMC_DEV_MIDI_DUMMY
Definition: omc-learn.h:13
void vid_playback_plugin_exit(void)
Definition: plugins.c:1413
void do_plugin_encoder_error(const char *plugin_name)
Definition: plugins.c:1531
LiVESList * get_plugin_list(const char *plugin_type, boolean allow_nonex, const char *plugdir, const char *filter_ext)
Definition: plugins.c:115
_vid_playback_plugin * open_vid_playback_plugin(const char *name, boolean in_use)
Definition: plugins.c:1099
void close_vid_playback_plugin(_vid_playback_plugin *vpp)
Definition: plugins.c:998
int64_t get_best_audio(_vid_playback_plugin *vpp)
Definition: plugins.c:1441
const char *const anames[AUDIO_CODEC_MAX]
Definition: plugins.c:21
void on_decplug_advanced_clicked(LiVESButton *button, livespointer user_data)
Definition: plugins.c:2575
LIVES_GLOBAL_INLINE LiVESList * plugin_request_by_line(const char *plugin_type, const char *plugin_name, const char *request)
Definition: plugins.c:59
_vppaw * on_vpp_advanced_clicked(LiVESButton *button, livespointer user_data)
Definition: plugins.c:727
#define AUDIO_CODEC_PCM
Definition: plugins.h:240
#define AUDIO_STREAMER_NAME
Definition: plugins.h:103
#define PLUGIN_THEMES_CUSTOM
Definition: plugins.h:107
#define PLUGIN_ENCODERS
Definition: plugins.h:98
#define AUDIO_CODEC_NONE
Definition: plugins.h:252
#define PLUGIN_AUDIO_STREAM
Definition: plugins.h:101
#define VPP_LOCAL_DISPLAY
Definition: plugins.h:69
@ LIVES_INTENTION_PLAY
Definition: plugins.h:45
#define VPP_CAN_RETURN
Definition: plugins.h:68
#define PLUGIN_THEMES
smogrify handles the directory differently for themes
Definition: plugins.h:106
#define PLUGIN_VID_PLAYBACK
Definition: plugins.h:100
#define VPP_CAN_RESIZE
type sepcific caps
Definition: plugins.h:67
#define AUDIO_CODEC_UNKNOWN
Definition: plugins.h:253
LIVES_GLOBAL_INLINE boolean get_boolean_prefd(const char *key, boolean defval)
Definition: preferences.c:154
int delete_pref(const char *key)
Definition: preferences.c:282
void on_prefs_revert_clicked(LiVESButton *button, livespointer user_data)
Definition: preferences.c:5981
void pref_change_xcolours(void)
Definition: preferences.c:5852
int set_colour_pref(const char *key, lives_colRGBA64_t *lcol)
Definition: preferences.c:402
void on_preferences_activate(LiVESMenuItem *menuitem, livespointer user_data)
Definition: preferences.c:5772
int set_boolean_pref(const char *key, boolean value)
Definition: preferences.c:354
LIVES_GLOBAL_INLINE LiVESResponseType get_string_pref(const char *key, char *val, int maxlen)
Definition: preferences.c:92
boolean pref_factory_float(const char *prefidx, float newval, boolean permanent)
Definition: preferences.c:1192
boolean pref_factory_bitmapped(const char *prefidx, int bitfield, boolean newval, boolean permanent)
Definition: preferences.c:1240
int set_double_pref(const char *key, double value)
Definition: preferences.c:346
int set_list_pref(const char *key, LiVESList *values)
Definition: preferences.c:368
void on_prefs_close_clicked(LiVESButton *button, livespointer user_data)
Definition: preferences.c:5809
LiVESList * get_list_pref(const char *key)
Definition: preferences.c:123
boolean lives_ask_permission(char **argv, int argc, int offs)
Definition: preferences.c:6031
boolean pref_factory_int64(const char *prefidx, int64_t newval, boolean permanent)
Definition: preferences.c:1299
void rdet_acodec_changed(LiVESCombo *acodec_combo, livespointer user_data)
Definition: preferences.c:2417
boolean apply_prefs(boolean skip_warn)
Definition: preferences.c:1324
void set_theme_colour_pref(const char *themefile, const char *key, lives_colRGBA64_t *lcol)
Definition: preferences.c:393
void pref_change_images(void)
Definition: preferences.c:5835
void on_prefs_page_changed(LiVESTreeSelection *widget, _prefsw *prefsw)
Definition: preferences.c:2798
void apply_button_set_enabled(LiVESWidget *widget, livespointer func_data)
Definition: preferences.c:2911
LIVES_GLOBAL_INLINE boolean get_boolean_pref(const char *key)
Definition: preferences.c:146
LIVES_GLOBAL_INLINE double get_double_pref(const char *key)
Definition: preferences.c:187
void set_theme_pref(const char *themefile, const char *key, const char *value)
Definition: preferences.c:317
LIVES_GLOBAL_INLINE int64_t get_int64_prefd(const char *key, int64_t defval)
Definition: preferences.c:179
LIVES_GLOBAL_INLINE LiVESResponseType get_pref_from_file(const char *filename, const char *key, char *val, int maxlen)
Definition: preferences.c:106
_prefsw * create_prefs_dialog(LiVESWidget *saved_dialog)
Definition: preferences.c:2994
void pref_change_colours(void)
Definition: preferences.c:5866
boolean get_colour_pref(const char *key, lives_colRGBA64_t *lcol)
Definition: preferences.c:211
int set_string_pref(const char *key, const char *value)
Definition: preferences.c:290
int set_utf8_pref(const char *key, const char *value)
Definition: preferences.c:306
void toggle_sets_pref(LiVESWidget *widget, livespointer prefidx)
callback to set to make a togglebutton or check_menu_item directly control a boolean pref widget is e...
Definition: preferences.c:46
LIVES_GLOBAL_INLINE boolean has_pref(const char *key)
Definition: preferences.c:203
boolean pref_factory_string(const char *prefidx, const char *newval, boolean permanent)
Definition: preferences.c:554
LIVES_GLOBAL_INLINE double get_double_prefd(const char *key, double defval)
Definition: preferences.c:195
boolean pref_factory_int(const char *prefidx, int newval, boolean permanent)
Definition: preferences.c:1053
boolean pref_factory_string_choice(const char *prefidx, LiVESList *list, const char *strval, boolean permanent)
Definition: preferences.c:1161
void on_prefs_apply_clicked(LiVESButton *button, livespointer user_data)
Definition: preferences.c:5885
int set_int64_pref(const char *key, int64_t value)
Definition: preferences.c:337
LIVES_GLOBAL_INLINE int get_int_pref(const char *key)
Definition: preferences.c:163
#define ACTIVE(widget, signal)
Definition: preferences.c:36
LIVES_GLOBAL_INLINE int get_int_prefd(const char *key, int defval)
Definition: preferences.c:171
boolean pref_factory_color_button(lives_colRGBA64_t *pcol, LiVESColorButton *cbutton)
Definition: preferences.c:1033
void prefsw_set_astream_settings(_vid_playback_plugin *vpp, _prefsw *prefsw)
Definition: preferences.c:2730
void save_future_prefs(void)
Definition: preferences.c:2394
void prefsw_set_rec_after_settings(_vid_playback_plugin *vpp, _prefsw *prefsw)
Definition: preferences.c:2741
LIVES_GLOBAL_INLINE LiVESResponseType get_string_prefd(const char *key, char *val, int maxlen, const char *def)
Definition: preferences.c:98
void after_vpp_changed(LiVESWidget *vpp_combo, livespointer advbutton)
Definition: preferences.c:2497
void set_palette_prefs(boolean save)
Definition: preferences.c:412
boolean pref_factory_bool(const char *prefidx, boolean newval, boolean permanent)
Definition: preferences.c:717
void set_vpp(boolean set_in_prefs)
Definition: preferences.c:476
void set_acodec_list_from_allowed(_prefsw *prefsw, render_details *rdet)
Definition: preferences.c:2437
int set_string_pref_priority(const char *key, const char *value)
Definition: preferences.c:298
int set_int_pref(const char *key, int value)
Definition: preferences.c:329
boolean get_theme_colour_pref(const char *key, lives_colRGBA64_t *lcol)
Definition: preferences.c:234
LiVESResponseType get_utf8_pref(const char *key, char *val, int maxlen)
Definition: preferences.c:112
#define AUDIO_PLAYER_NONE
Definition: preferences.h:47
#define PREF_VID_LOAD_DIR
Definition: preferences.h:954
#define REC_FPS
Definition: preferences.h:198
#define WARN_MASK_LAYOUT_WIPE
Definition: preferences.h:124
#define PREF_FILESEL_MAXIMISED
Definition: preferences.h:1049
#define STARTUP_CE
Definition: preferences.h:338
#define JACK_OPTS_TIMEBASE_START
jack sets play start position
Definition: preferences.h:238
#define PREF_WORKING_DIR_OLD
Definition: preferences.h:906
#define PREF_RRCRASH
Definition: preferences.h:1081
#define PREF_REC_STOP_GB
Definition: preferences.h:973
#define PREF_DS_WARN_LEVEL
Definition: preferences.h:959
#define AUDIO_PLAYER_PULSE_AUDIO
used for display, alternate pref and alternate startup opt (-aplayer pulseaudio)
Definition: preferences.h:52
#define PREF_PARESTART
Definition: preferences.h:1071
#define PREF_RRAMICRO
Definition: preferences.h:1085
#define PREF_LADSPA_PATH
Definition: preferences.h:915
#define WARN_MASK_MT_NO_JACK
Definition: preferences.h:118
#define PREF_MAX_DISP_VTRACKS
Definition: preferences.h:983
#define PREF_FORCE_SINGLE_MONITOR
Definition: preferences.h:1031
#define WARN_MASK_LAYOUT_DELETE_FRAMES
Definition: preferences.h:96
#define PREFS_IMAGES_CHANGED
Definition: preferences.h:18
#define PREF_RECENT
Definition: preferences.h:956
#define WARN_MASK_MT_ACHANS
Definition: preferences.h:109
#define PREF_REC_EXT_AUDIO
Definition: preferences.h:892
#define PREF_RRPRESMOOTH
Definition: preferences.h:1083
#define WARN_MASK_VJMODE_ENTER
Definition: preferences.h:126
#define PREF_MT_SHOW_CTX
Definition: preferences.h:1018
#define PREF_SHOW_RECENT_FILES
Definition: preferences.h:1030
#define PREF_USE_SCREEN_GAMMA
Definition: preferences.h:978
#define PREFS_JACK_CHANGED
Definition: preferences.h:14
#define PREF_MT_DEF_FPS
Definition: preferences.h:1091
#define PREF_SHOW_ASRC
Definition: preferences.h:898
#define PREF_RRQMODE
Definition: preferences.h:1026
#define JACK_OPTS_TRANSPORT_CLIENT
jack can start/stop
Definition: preferences.h:233
_prefs * prefs
Definition: preferences.h:847
#define PREF_PREF_TRASH
prefer trash to delete
Definition: preferences.h:1077
#define PREFS_XCOLOURS_CHANGED
Definition: preferences.h:17
#define PREF_IMAGE_DIR
Definition: preferences.h:948
#define PREF_OSC_PORT
Definition: preferences.h:1005
#define PREF_OMC_MIDI_FNAME
Definition: preferences.h:945
#define PREFS_COLOURS_CHANGED
Definition: preferences.h:16
#define PREF_MASTER_VOLUME
Definition: preferences.h:1099
#define WARN_MASK_LAYOUT_MISSING_CLIPS
Definition: preferences.h:94
#define LIVES_PERM_COPY_LOCAL
Definition: preferences.h:1157
@ LIST_NUM
Definition: preferences.h:520
@ LIST_ITEM
Definition: preferences.h:519
@ LIST_ICON
Definition: preferences.h:518
@ N_COLUMNS
Definition: preferences.h:521
#define PREF_OUTPUT_TYPE
Definition: preferences.h:929
#define PREF_DS_CRIT_LEVEL
Definition: preferences.h:960
#define PREF_OMC_JS_FNAME
Definition: preferences.h:946
#define PREF_MT_BACKAUDIO
Definition: preferences.h:1017
#define PREF_CE_MAXSPECT
Definition: preferences.h:1039
#define PREF_PASTARTOPTS
Definition: preferences.h:939
#define PREF_AUDIO_PLAYER
Definition: preferences.h:910
#define WARN_MASK_MT_BACKUP_SPACE
Definition: preferences.h:120
#define PREF_AHOLD_THRESHOLD
Definition: preferences.h:1098
#define PREF_AR_CLIPSET
Definition: preferences.h:934
#define PREF_SHOW_DEVOPTS
Definition: preferences.h:1067
#define PREF_AUTO_TRIM_PAD_AUDIO
Definition: preferences.h:1041
#define AUD_PLAYER_SOX
Definition: preferences.h:42
#define AUDIO_OPTS_FOLLOW_CLIPS
Definition: preferences.h:255
#define PREF_MT_DEF_ASAMPS
Definition: preferences.h:1011
#define PREF_WORKING_DIR
Definition: preferences.h:905
#define PREF_ENCODER_ACODEC
Definition: preferences.h:1000
#define AUDIO_PLAYER_JACK
Definition: preferences.h:49
#define WARN_MASK_LAYOUT_DELETE_AUDIO
Definition: preferences.h:110
#define WARN_MASK_SAVE_SET
Definition: preferences.h:90
#define PREF_MT_DEF_ARATE
Definition: preferences.h:1009
#define PREF_PUSH_AUDIO_TO_GENS
Definition: preferences.h:1060
#define PREF_MIDISYNCH
Definition: preferences.h:1052
#define PREF_SHOW_TOOLTIPS
Definition: preferences.h:1062
#define AUDIO_PLAYER_SOX
Definition: preferences.h:48
#define PREF_REC_DESKTOP_AUDIO
Definition: preferences.h:1055
#define WARN_MASK_LAYOUT_ALTER_FRAMES
off by default on a fresh install
Definition: preferences.h:102
#define WARN_MASK_NO_PULSE_CONNECT
Definition: preferences.h:123
#define PREF_MT_DEF_ACHANS
Definition: preferences.h:1010
#define PREF_ANTIALIAS
Definition: preferences.h:1048
#define PREF_RENDER_PROMPT
Definition: preferences.h:1035
#define PREF_OPEN_MAXIMISED
Definition: preferences.h:1040
#define PREF_STARTUP_INTERFACE
Definition: preferences.h:966
#define PREF_RTE_KEYS_VIRTUAL
Definition: preferences.h:991
#define PREF_PB_QUALITY
Definition: preferences.h:971
#define PREF_INSTANT_OPEN
Definition: preferences.h:1051
#define WARN_MASK_LAYOUT_LB
Definition: preferences.h:128
#define PREF_RRFSTATE
Definition: preferences.h:1027
#define AUDIO_PLAYER_PULSE
used in pref and for external players (e.g -ao pulse, -aplayer pulse)
Definition: preferences.h:51
#define PREFWIN_HEIGHT
Definition: preferences.h:525
#define PREF_RRSUPER
Definition: preferences.h:1082
#define PREF_INSERT_RESAMPLE
Definition: preferences.h:1056
#define PREF_AUTOCLEAN_TRASH
remove unneeded files on shutdown / startup
Definition: preferences.h:1076
#define PREF_GUI_THEME
Definition: preferences.h:926
#define PREF_MT_DEF_HEIGHT
Definition: preferences.h:1008
#define PREF_AR_LAYOUT
Definition: preferences.h:933
#define JACK_OPTS_TIMEBASE_CLIENT
full timebase client
Definition: preferences.h:239
#define PREF_RECORD_OPTS
Definition: preferences.h:1002
#define PREF_SCREEN_GAMMA
Definition: preferences.h:979
#define PB_QUALITY_HIGH
Definition: preferences.h:34
#define PREF_DEFAULT_IMAGE_TYPE
Definition: preferences.h:922
#define PREF_MSG_TEXTSIZE
Definition: preferences.h:986
#define PREF_DISK_QUOTA
Definition: preferences.h:961
#define PREF_LOAD_RFX_BUILTIN
Definition: preferences.h:1047
#define PREF_HFBWNP
Definition: preferences.h:899
#define PREF_VIDEO_OPEN_COMMAND
Definition: preferences.h:924
#define STARTUP_MT
Definition: preferences.h:339
#define PREF_MT_DEF_WIDTH
Definition: preferences.h:1007
#define PREF_WEED_PLUGIN_PATH
Definition: preferences.h:916
#define PREF_OPEN_COMPRESSION_PERCENT
Definition: preferences.h:969
#define SEPWIN_TYPE_STICKY
Definition: preferences.h:188
#define PREF_AUDIO_OPTS
Definition: preferences.h:893
#define PREF_LETTERBOX
Definition: preferences.h:1069
#define PREF_RRQSMOOTH
Definition: preferences.h:1084
#define PREF_SHOW_QUOTA
Definition: preferences.h:1079
#define PREF_STOP_SCREENSAVER
Definition: preferences.h:1032
#define PREF_MT_DEF_SIGNED_ENDIAN
Definition: preferences.h:1012
#define LIVES_PERM_OSC_PORTS
Definition: preferences.h:1155
#define PREFS_NEEDS_REVERT
Definition: preferences.h:20
#define WARN_MASK_EXIT_MT
off by default on a fresh install
Definition: preferences.h:106
#define WARN_MASK_OPEN_YUV4M
Definition: preferences.h:119
#define REC_AUDIO
Definition: preferences.h:201
#define PREF_MIDI_RPT
Definition: preferences.h:996
#define PREF_MT_EXIT_RENDER
Definition: preferences.h:1034
#define PREF_MIDI_CHECK_RATE
Definition: preferences.h:995
#define PREF_STREAM_AUDIO_OUT
Definition: preferences.h:1045
#define REC_CLIPS
Definition: preferences.h:200
#define PREFS_PANED_POS
Definition: preferences.h:10
#define AUD_PLAYER_NONE
Definition: preferences.h:41
#define PREF_SHOW_TOOLBAR
Definition: preferences.h:1038
#define PREF_MOUSE_SCROLL_CLIPS
Definition: preferences.h:1043
#define PULSE_AUDIO_URL
Definition: preferences.h:22
#define WARN_MASK_LAYOUT_POPUP
Definition: preferences.h:121
#define JACK_OPTS_NOPLAY_WHEN_PAUSED
play audio even when transport paused
Definition: preferences.h:236
#define JACK_OPTS_START_TSERVER
start transport server
Definition: preferences.h:235
#define PREF_OMC_DEV_OPTS
Definition: preferences.h:1004
#define WARN_MASK_LAYOUT_CLOSE_FILE
Definition: preferences.h:95
#define AUDIO_OPTS_FOLLOW_FPS
Definition: preferences.h:256
#define PREF_NFX_THREADS
Definition: preferences.h:975
#define PREF_CONCAT_IMAGES
Definition: preferences.h:1057
#define WARN_MASK_LAYOUT_ALTER_AUDIO
off by default on a fresh install
Definition: preferences.h:116
#define WARN_MASK_RENDERED_FX
Definition: preferences.h:92
#define PREF_AUDIO_SRC
Definition: preferences.h:911
#define PREF_RRRAMICRO
Definition: preferences.h:1086
#define PREF_MT_PERTRACK_AUDIO
Definition: preferences.h:1036
#define PREF_AUTO_DEINTERLACE
Definition: preferences.h:1053
#define WARN_MASK_DUPLICATE_SET
Definition: preferences.h:103
#define PREFWIN_WIDTH
Definition: preferences.h:524
#define JACK_OPTS_TRANSPORT_MASTER
transport master
Definition: preferences.h:234
@ LIST_ENTRY_MISC
Definition: preferences.h:509
@ LIST_ENTRY_ENCODING
Definition: preferences.h:505
@ LIST_ENTRY_WARNINGS
Definition: preferences.h:508
@ LIST_ENTRY_JACK
Definition: preferences.h:512
@ LIST_ENTRY_MULTITRACK
Definition: preferences.h:514
@ LIST_ENTRY_PLAYBACK
Definition: preferences.h:503
@ LIST_ENTRY_NET
Definition: preferences.h:511
@ LIST_ENTRY_DECODING
Definition: preferences.h:502
@ LIST_ENTRY_GUI
Definition: preferences.h:501
@ LIST_ENTRY_EFFECTS
Definition: preferences.h:506
@ LIST_ENTRY_MIDI
Definition: preferences.h:513
@ LIST_ENTRY_RECORDING
Definition: preferences.h:504
@ LIST_ENTRY_DIRECTORIES
Definition: preferences.h:507
@ LIST_ENTRY_THEMES
Definition: preferences.h:510
#define PREF_CE_THUMB_MODE
Definition: preferences.h:1046
#define AUD_PLAYER_JACK
Definition: preferences.h:43
#define PREF_DL_BANDWIDTH_K
Definition: preferences.h:1021
#define WARN_MASK_LAYOUT_GAMMA
Definition: preferences.h:125
#define PB_QUALITY_MED
default
Definition: preferences.h:33
#define PREF_EXTRA_COLOURS
Definition: preferences.h:1073
_prefsw * prefsw
Definition: preferences.h:849
#define PREF_JACK_OPTS
Definition: preferences.h:993
#define PREF_MT_ENTER_PROMPT
Definition: preferences.h:1033
#define PB_QUALITY_LOW
Definition: preferences.h:32
#define REC_AFTER_PB
Definition: preferences.h:202
#define WARN_MASK_NO_ENCODERS
Definition: preferences.h:93
#define WARN_MASK_LAYOUT_SHIFT_FRAMES
off by default on a fresh install
Definition: preferences.h:99
#define JACK_URL
Definition: preferences.h:23
#define PREF_MIDI_RCV_CHANNEL
Definition: preferences.h:998
#define WARN_MASK_FPS
Definition: preferences.h:87
#define JACK_OPTS_TIMEBASE_LSTART
LiVES sets play start position.
Definition: preferences.h:242
_future_prefs * future_prefs
Definition: preferences.h:848
#define REC_FRAMES
Definition: preferences.h:197
#define LIVES_PERM_INVALID
Definition: preferences.h:1154
#define PREFS_WORKDIR_CHANGED
Definition: preferences.h:15
#define AUDIO_SRC_EXT
Definition: preferences.h:206
#define PREF_OSC_START
Definition: preferences.h:1037
#define PREF_LIBVISUAL_PATH
Definition: preferences.h:918
#define WARN_MASK_FSIZE
Definition: preferences.h:88
#define PREF_VID_PLAYBACK_PLUGIN
Definition: preferences.h:920
#define PREF_LETTERBOXMT
Definition: preferences.h:1070
#define PREF_PROJ_DIR
Definition: preferences.h:951
#define WARN_MASK_NO_MPLAYER
Definition: preferences.h:91
#define PREF_MT_UNDO_BUF
Definition: preferences.h:1015
#define LIVES_PERM_DOWNLOAD_LOCAL
Definition: preferences.h:1156
#define PREF_APPLY_GAMMA
Definition: preferences.h:1061
#define PREF_AUTO_CUT_BORDERS
Definition: preferences.h:1054
#define PREFS_THEME_CHANGED
Definition: preferences.h:13
#define AUDIO_SRC_INT
Definition: preferences.h:205
#define WARN_MASK_AFTER_DVGRAB
Definition: preferences.h:108
#define PREF_DEFAULT_FPS
Definition: preferences.h:1092
#define DS_WARN_CRIT_MAX
MB. (default 1 TB)
Definition: preferences.h:527
#define PREF_MSG_PBDIS
Definition: preferences.h:987
#define PREF_VJMODE
Definition: preferences.h:1068
#define PREF_MSG_START
Definition: preferences.h:1078
#define PREF_FREI0R_PATH
Definition: preferences.h:917
#define PREF_AUDIO_DIR
Definition: preferences.h:949
#define PREF_LIVES_WARNING_MASK
Definition: preferences.h:968
#define PREF_PBQ_ADAPTIVE
Definition: preferences.h:1072
#define PREF_MAX_MSGS
Definition: preferences.h:985
#define REC_EFFECTS
Definition: preferences.h:199
#define PREF_MONITORS
Definition: preferences.h:913
#define PREF_SHOW_BUTTON_ICONS
Definition: preferences.h:1044
#define PREF_SEPWIN_TYPE
Definition: preferences.h:894
#define WARN_MASK_LAYOUT_SHIFT_AUDIO
off by default on a fresh install
Definition: preferences.h:113
#define WARN_MASK_CLEAN_AFTER_CRASH
Definition: preferences.h:122
#define AUD_PLAYER_PULSE
Definition: preferences.h:44
#define PREF_DISABLED_DECODERS
Definition: preferences.h:1102
#define PREF_VID_SAVE_DIR
Definition: preferences.h:953
#define PREF_MT_AUTO_BACK
Definition: preferences.h:1014
#define PREF_ENCODER
Definition: preferences.h:928
#define JACK_OPTS_START_ASERVER
start audio server
Definition: preferences.h:237
#define PREF_WARN_FILE_SIZE
Definition: preferences.h:1019
#define PREF_SHOW_PLAYER_STATS
Definition: preferences.h:1050
#define PREF_CDPLAY_DEVICE
Definition: preferences.h:931
#define JACK_OPTS_NO_READ_AUTOCON
do not auto con. rd clients when playing ext aud
Definition: preferences.h:241
_resaudw * create_resaudw(short type, render_details *rdet, LiVESWidget *top_vbox)
resample audio window
Definition: resample.c:1521
_resaudw * resaudw
Definition: resample.h:38
LiVESWidget * refresh_rte_window(void)
Definition: rte_window.c:2434
LiVESWidget * rte_window
Definition: rte_window.h:58
LiVESResponseType check_workdir_valid(char **pdirname, LiVESDialog *dialog, boolean fullcheck)
Definition: startup.c:329
char of_desc[128]
Definition: plugins.h:264
char name[64]
Definition: plugins.h:234
char of_name[64]
Definition: plugins.h:263
char of_restrict[1024]
Definition: plugins.h:266
uint32_t audio_codec
Definition: plugins.h:235
int of_allowed_acodecs
Definition: plugins.h:265
int vpp_fixed_fps_numer
Definition: preferences.h:803
volatile float volume
audio volume level (for jack and pulse)
Definition: preferences.h:837
char theme[64]
Definition: preferences.h:800
int vpp_YUV_clamping
Definition: preferences.h:809
boolean pref_trash
user prefers trash to delete (future / present swapped)
Definition: preferences.h:843
boolean letterbox_mt
Definition: preferences.h:844
char workdir[PATH_MAX]
Definition: preferences.h:799
boolean vj_mode
Definition: preferences.h:839
int startup_interface
Definition: preferences.h:825
int vpp_fixed_fps_denom
Definition: preferences.h:804
uint32_t jack_opts
Definition: preferences.h:827
short sepwin_type
Definition: preferences.h:832
boolean osc_start
Definition: preferences.h:824
LiVESList * disabled_decoders
Definition: preferences.h:834
double vpp_fixed_fpsd
Definition: preferences.h:806
char ** vpp_argv
Definition: preferences.h:817
_encoder encoder
Definition: preferences.h:820
short pb_quality
Definition: preferences.h:831
char vpp_name[64]
new video playback plugin
Definition: preferences.h:801
boolean show_recent
Definition: preferences.h:822
uint64_t disk_quota
Definition: preferences.h:818
lives_colRGBA64_t ce_sel
Definition: mainwindow.h:348
LiVESWidgetColor mt_timecode_bg
Definition: mainwindow.h:332
LiVESWidgetColor normal_fore
Definition: mainwindow.h:325
LiVESWidgetColor info_base
Definition: mainwindow.h:330
int style
Definition: mainwindow.h:297
lives_colRGBA64_t mt_evbox
Definition: mainwindow.h:346
lives_colRGBA64_t mt_timeline_reg
Definition: mainwindow.h:342
LiVESWidgetColor menu_and_bars
Definition: mainwindow.h:327
lives_colRGBA64_t audcol
Definition: mainwindow.h:339
LiVESWidgetColor info_text
Definition: mainwindow.h:329
LiVESWidgetColor normal_back
Definition: mainwindow.h:324
lives_colRGBA64_t frame_surround
Definition: mainwindow.h:344
lives_colRGBA64_t ce_unsel
Definition: mainwindow.h:349
lives_colRGBA64_t mt_mark
Definition: mainwindow.h:345
LiVESWidgetColor menu_and_bars_fore
Definition: mainwindow.h:328
lives_colRGBA64_t fxcol
Definition: mainwindow.h:341
lives_colRGBA64_t vidcol
Definition: mainwindow.h:340
LiVESWidgetColor mt_timecode_fg
Definition: mainwindow.h:333
boolean ce_thumb_mode
Definition: preferences.h:420
boolean ce_maxspect
Definition: preferences.h:341
boolean auto_deint
Definition: preferences.h:302
int rr_fstate
Definition: preferences.h:493
int nfx_threads
Definition: preferences.h:356
boolean vj_mode
Definition: preferences.h:459
boolean load_rfx_builtin
Definition: preferences.h:449
boolean instant_open
Definition: preferences.h:301
int mt_def_arate
Definition: preferences.h:273
double mt_def_fps
Definition: preferences.h:271
boolean show_asrc
Definition: preferences.h:438
_encoder encoder
from main.h
Definition: preferences.h:38
boolean rr_pre_smooth
Definition: preferences.h:491
int mt_auto_back
time diff to backup (-1 == never, 0 == after every change, > 0 == seconds)
Definition: preferences.h:281
boolean show_tooltips
Definition: preferences.h:455
boolean crash_recovery
TRUE==maintain mainw->recovery file.
Definition: preferences.h:259
uint64_t ds_crit_level
diskspace critical level bytes
Definition: preferences.h:380
char omc_js_fname[PATH_MAX]
utf8
Definition: preferences.h:320
volatile uint32_t audio_opts
Definition: preferences.h:254
boolean rec_desktop_audio
Definition: preferences.h:288
boolean hfbwnp
Definition: preferences.h:436
int ocp
open_compression_percent : get/set in prefs
Definition: preferences.h:217
boolean pbq_adaptive
Definition: preferences.h:36
boolean show_recent
Definition: preferences.h:179
char pa_start_opts[255]
Definition: preferences.h:473
boolean rr_super
Definition: preferences.h:490
int audio_src
Definition: preferences.h:204
uint64_t disk_quota
Definition: preferences.h:383
int midi_check_rate
deprecated
Definition: preferences.h:315
int play_monitor
Definition: preferences.h:306
uint64_t warning_mask
Definition: preferences.h:80
boolean push_audio_to_gens
Definition: preferences.h:424
boolean mt_show_ctx
Definition: preferences.h:277
boolean hide_framebar
Definition: preferences.h:434
boolean auto_trim_audio
Definition: preferences.h:370
boolean show_msgs_on_startup
Definition: preferences.h:484
boolean show_gui
Definition: preferences.h:290
char video_open_command[PATH_MAX *2]
Definition: preferences.h:170
int mt_backaudio
Definition: preferences.h:279
boolean ar_layout
Definition: preferences.h:284
char def_vid_save_dir[PATH_MAX]
Definition: preferences.h:68
double default_fps
Definition: preferences.h:173
boolean letterbox_mt
playback with letterbox (multitrack)
Definition: preferences.h:363
float volume
audio volume level (for jack and pulse)
Definition: preferences.h:457
char jack_tserver[PATH_MAX]
Definition: preferences.h:244
char ladspa_path[PATH_MAX]
Definition: preferences.h:415
char def_image_dir[PATH_MAX]
Definition: preferences.h:70
uint32_t osc_udp_port
Definition: preferences.h:210
boolean rr_ramicro
Definition: preferences.h:495
char workdir[PATH_MAX]
kept in locale encoding
Definition: preferences.h:61
int rec_opts
Definition: preferences.h:196
boolean autoclean
remove temp files on shutdown / startup
Definition: preferences.h:481
double screen_gamma
Definition: preferences.h:442
char frei0r_path[PATH_MAX]
Definition: preferences.h:414
boolean show_msg_area
Definition: preferences.h:225
boolean mt_exit_render
Definition: preferences.h:275
int max_disp_vtracks
Definition: preferences.h:430
int mt_def_signed_endian
Definition: preferences.h:273
float ahold_threshold
Definition: preferences.h:440
int rr_qmode
Definition: preferences.h:489
boolean letterbox
playback with letterbox
Definition: preferences.h:362
boolean fileselmax
Definition: preferences.h:178
int midi_rcv_channel
Definition: preferences.h:334
char def_audio_dir[PATH_MAX]
Definition: preferences.h:69
boolean show_player_stats
Definition: preferences.h:190
boolean extra_colours
Definition: preferences.h:479
int midi_rpt
Definition: preferences.h:316
boolean antialias
Definition: preferences.h:219
int dl_bandwidth
Definition: preferences.h:182
boolean mt_enter_prompt
Definition: preferences.h:268
boolean msgs_pbdis
Definition: preferences.h:467
LiVESList * acodec_list
Definition: preferences.h:251
int mt_def_achans
Definition: preferences.h:273
char cdplay_device[PATH_MAX]
locale encoding
Definition: preferences.h:172
short rte_keys_virtual
Definition: preferences.h:223
LiVESList * disabled_decoders
Definition: preferences.h:408
char configfile[PATH_MAX]
kept in locale encoding (config settings) [default ~/.local/config/lives)
Definition: preferences.h:63
boolean force_single_monitor
Definition: preferences.h:308
boolean ins_resample
Definition: preferences.h:184
boolean midisynch
Definition: preferences.h:181
uint32_t jack_opts
Definition: preferences.h:232
short sepwin_type
Definition: preferences.h:186
char lib_dir[PATH_MAX]
Definition: preferences.h:75
int gui_monitor
Definition: preferences.h:305
boolean show_disk_quota
Definition: preferences.h:485
boolean stream_audio_out
Definition: preferences.h:360
boolean concat_images
Definition: preferences.h:296
boolean show_button_images
Definition: preferences.h:422
char weed_plugin_path[PATH_MAX]
Definition: preferences.h:413
int mt_def_asamps
Definition: preferences.h:273
char omc_midi_fname[PATH_MAX]
utf8
Definition: preferences.h:321
boolean mouse_scroll_clips
Definition: preferences.h:323
char libvis_path[PATH_MAX]
Definition: preferences.h:416
char theme[64]
the theme name
Definition: preferences.h:29
char image_type[16]
Definition: preferences.h:77
uint32_t omc_dev_opts
Definition: preferences.h:318
int mt_def_width
Definition: preferences.h:270
int mt_def_height
Definition: preferences.h:270
boolean pref_trash
user prefers trash to delete
Definition: preferences.h:480
int acodec_list_to_format[AUDIO_CODEC_NONE]
Definition: preferences.h:252
boolean pa_restart
Definition: preferences.h:474
boolean show_dev_opts
Definition: preferences.h:463
boolean mt_pertrack_audio
Definition: preferences.h:278
boolean apply_gamma
Definition: preferences.h:451
int warn_file_size
Definition: preferences.h:180
boolean ar_clipset
auto-reload
Definition: preferences.h:284
boolean rr_qsmooth
Definition: preferences.h:492
double rec_stop_gb
Definition: preferences.h:348
boolean stop_screensaver
Definition: preferences.h:27
boolean rr_amicro
Definition: preferences.h:494
boolean use_screen_gamma
Definition: preferences.h:452
int max_messages
Definition: preferences.h:444
char backend_sync[PATH_MAX *4]
Definition: preferences.h:410
int mt_undo_buf
Definition: preferences.h:267
char def_proj_dir[PATH_MAX]
Definition: preferences.h:71
short audio_player
Definition: preferences.h:40
boolean show_tool
Definition: preferences.h:185
char image_ext[16]
Definition: preferences.h:78
boolean auto_nobord
Definition: preferences.h:303
short pb_quality
Definition: preferences.h:31
boolean cb_is_switch
Definition: preferences.h:476
boolean render_prompt
Definition: preferences.h:276
uint64_t ds_warn_level
diskspace warn level bytes
Definition: preferences.h:378
int msg_textsize
Definition: preferences.h:445
boolean open_maximised
Definition: preferences.h:28
boolean osc_udp_started
Definition: preferences.h:209
char def_vid_load_dir[PATH_MAX]
Definition: preferences.h:67
boolean rr_crash
Definition: preferences.h:488
char jack_aserver[PATH_MAX]
Definition: preferences.h:245
prefs window
Definition: preferences.h:530
LiVESWidget * scrollw_right_effects
Definition: preferences.h:561
LiVESWidget * cb_show_quota
Definition: preferences.h:738
LiVESWidget * checkbutton_warn_layout_delete
Definition: preferences.h:631
LiVESWidget * alsa_midi_dummy
Definition: preferences.h:752
LiVESWidget * checkbutton_warn_rendered_fx
Definition: preferences.h:627
LiVESWidget * checkbutton_warn_layout_alter
Definition: preferences.h:632
LiVESWidget * vbox_right_playback
Definition: preferences.h:544
LiVESWidget * spinbutton_mt_def_height
Definition: preferences.h:711
LiVESWidget * msg_textsize_combo
Definition: preferences.h:688
LiVESWidget * scrollw_right_decoding
Definition: preferences.h:557
LiVESWidget * checkbutton_concat_images
Definition: preferences.h:731
LiVESWidget * checkbutton_auto_deint
Definition: preferences.h:728
LiVESWidget * show_tool
Definition: preferences.h:575
LiVESWidget * checkbutton_warn_fps
Definition: preferences.h:623
LiVESWidget * jack_tserver_entry
Definition: preferences.h:695
LiVESWidget * checkbutton_warn_layout_gamma
Definition: preferences.h:642
LiVESWidget * checkbutton_warn_layout_shift
Definition: preferences.h:633
LiVESWidget * audp_combo
Definition: preferences.h:596
LiVESWidget * cbutton_infob
Definition: preferences.h:661
LiVESWidget * cbutton_infot
Definition: preferences.h:660
LiVESWidget * vbox_right_net
Definition: preferences.h:552
LiVESWidget * revertbutton
Definition: preferences.h:570
LiVESWidget * encoder_combo
Definition: preferences.h:614
LiVESWidget * fs_max_check
Definition: preferences.h:577
LiVESWidget * spinbutton_midicr
Definition: preferences.h:748
LiVESWidget * enable_OSC
Definition: preferences.h:693
LiVESWidget * cbutton_evbox
Definition: preferences.h:669
LiVESWidget * rr_amicro
Definition: preferences.h:612
LiVESWidget * checkbutton_warn_after_crash
Definition: preferences.h:651
LiVESWidget * cbutton_tcfg
Definition: preferences.h:672
LiVESWidget * checkbutton_jack_master
Definition: preferences.h:697
ulong encoder_name_fn
Definition: preferences.h:532
LiVESWidget * reffects
Definition: preferences.h:601
LiVESWidget * checkbutton_hfbwnp
Definition: preferences.h:734
LiVESWidget * scrollw_right_recording
Definition: preferences.h:559
LiVESWidget * vbox_right_themes
Definition: preferences.h:551
LiVESWidget * checkbutton_instant_open
Definition: preferences.h:727
LiVESWidget * scrollw_right_playback
Definition: preferences.h:558
LiVESWidget * stop_screensaver_check
Definition: preferences.h:573
LiVESWidget * scrollw_right_misc
Definition: preferences.h:564
LiVESWidget * midichan_combo
Definition: preferences.h:750
LiVESWidget * raudio
Definition: preferences.h:602
LiVESWidget * checkbutton_warn_mt_no_jack
Definition: preferences.h:648
LiVESWidget * vbox_right_decoding
Definition: preferences.h:543
LiVESWidget * checkbutton_warn_layout_clips
Definition: preferences.h:629
LiVESWidget * cbutton_fsur
Definition: preferences.h:668
LiVESAccelGroup * accel_group
Definition: preferences.h:534
LiVESWidget * vbox_right_multitrack
Definition: preferences.h:542
LiVESWidget * scrollw_right_directories
Definition: preferences.h:562
LiVESWidget * sepimg_entry
Definition: preferences.h:770
LiVESWidget * rclips
Definition: preferences.h:600
LiVESWidget * applybutton
Definition: preferences.h:571
LiVESWidget * checkbutton_show_asrc
Definition: preferences.h:732
LiVESWidget * checkbutton_warn_mt_achans
Definition: preferences.h:647
LiVESWidget * tlabel
Definition: preferences.h:540
LiVESWidget * checkbutton_threads
Definition: preferences.h:618
LiVESWidget * rr_crash
Definition: preferences.h:606
LiVESWidget * se_filebutton
Definition: preferences.h:663
LiVESWidget * ofmt_combo
Definition: preferences.h:595
LiVESWidget * fb_filebutton
Definition: preferences.h:662
LiVESWidget * checkbutton_jack_read_autocon
Definition: preferences.h:703
ulong encoder_ofmt_fn
Definition: preferences.h:531
LiVESWidget * scrollw_right_midi
Definition: preferences.h:568
LiVESWidget * proj_dir_entry
Definition: preferences.h:589
LiVESWidget * scrollw_right_jack
Definition: preferences.h:567
LiVESWidget * vbox_right_misc
Definition: preferences.h:550
ulong close_func
Definition: preferences.h:533
LiVESWidget * spinbutton_mt_undo_buf
Definition: preferences.h:713
LiVESWidget * vbox_right_gui
Definition: preferences.h:541
LiVESWidget * theme_style3
Definition: preferences.h:665
LiVESWidget * vbox_right_jack
Definition: preferences.h:553
LiVESWidget * checkbutton_omc_js
Definition: preferences.h:744
LiVESWidget * rframes
Definition: preferences.h:598
LiVESWidget * vid_load_dir_entry
Definition: preferences.h:585
LiVESWidget * ce_thumbs
Definition: preferences.h:722
LiVESWidget * cbutton_cesel
Definition: preferences.h:677
LiVESWidget * spinbutton_crit_ds
Definition: preferences.h:620
LiVESWidget * spinbutton_midirpt
Definition: preferences.h:749
LiVESWidget * table_right_directories
Definition: preferences.h:548
LiVESWidget * cbutton_mab
Definition: preferences.h:659
LiVESWidget * frei0r_entry
Definition: preferences.h:764
LiVESWidget * spinbutton_rec_gb
Definition: preferences.h:716
LiVESWidget * forcesmon
Definition: preferences.h:735
LiVESWidget * checkbutton_apply_gamma
Definition: preferences.h:616
LiVESWidget * spinbutton_warn_fsize
Definition: preferences.h:653
LiVESWidget * checkbutton_parestart
Definition: preferences.h:706
LiVESWidget * jack_int_label
Definition: preferences.h:756
LiVESWidget * omc_js_entry
Definition: preferences.h:746
LiVESWidget * checkbutton_screengamma
Definition: preferences.h:581
char * audp_name
Definition: preferences.h:741
LiVESWidget * spinbutton_ocp
Definition: preferences.h:684
LiVESWidget * acodec_combo
Definition: preferences.h:689
LiVESWidget * scrollw_right_warnings
Definition: preferences.h:563
LiVESWidget * msgs_unlimited
Definition: preferences.h:686
LiVESWidget * spinbutton_bwidth
Definition: preferences.h:654
LiVESWidget * jack_aserver_entry
Definition: preferences.h:696
LiVESWidget * mt_enter_prompt
Definition: preferences.h:683
LiVESWidget * scrollw_right_multitrack
Definition: preferences.h:556
LiVESWidget * rr_combo
Definition: preferences.h:608
LiVESWidget * checkbutton_jack_client
Definition: preferences.h:698
LiVESWidget * checkbutton_warn_encoders
Definition: preferences.h:628
LiVESWidget * spinbutton_gamma
Definition: preferences.h:582
LiVESWidget * midi_hbox
Definition: preferences.h:768
LiVESWidget * spinbutton_gmoni
Definition: preferences.h:720
LiVESList * pbq_list
Definition: preferences.h:740
LiVESWidget * checkbutton_afollow
Definition: preferences.h:707
LiVESWidget * checkbutton_lbmt
Definition: preferences.h:580
LiVESWidget * checkbutton_warn_mt_backup_space
Definition: preferences.h:650
LiVESWidget * forcesmon_hbox
Definition: preferences.h:736
LiVESWidget * scrollw_right_net
Definition: preferences.h:566
LiVESWidget * checkbutton_lb
Definition: preferences.h:579
LiVESWidget * checkbutton_show_ttips
Definition: preferences.h:733
LiVESWidget * checkbutton_show_stats
Definition: preferences.h:645
LiVESWidget * prefs_list
Definition: preferences.h:538
LiVESWidget * scrollw_right_encoding
Definition: preferences.h:560
LiVESWidget * checkbutton_rec_after_pb
Definition: preferences.h:762
LiVESWidget * checkbutton_button_icons
Definition: preferences.h:758
LiVESWidget * rr_pre_smooth
Definition: preferences.h:609
LiVESWidget * checkbutton_warn_no_pulse
Definition: preferences.h:640
LiVESWidget * mt_autoback_every
Definition: preferences.h:717
char * orig_audp_name
Definition: preferences.h:742
LiVESWidget * spinbutton_pmoni
Definition: preferences.h:721
LiVESWidget * image_dir_entry
Definition: preferences.h:588
LiVESWidget * spinbutton_max_disp_vtracks
Definition: preferences.h:715
LiVESWidget * spinbutton_rte_keys
Definition: preferences.h:691
LiVESWidget * spinbutton_mt_def_width
Definition: preferences.h:710
LiVESWidget * vbox_right_encoding
Definition: preferences.h:546
LiVESWidget * theme_style2
Definition: preferences.h:664
LiVESWidget * spinbutton_osc_udp
Definition: preferences.h:690
LiVESWidget * cbutton_audcol
Definition: preferences.h:675
LiVESWidget * rr_qsmooth
Definition: preferences.h:610
LiVESWidget * workdir_label
Definition: preferences.h:760
LiVESWidget * checkbutton_ce_maxspect
Definition: preferences.h:757
LiVESWidget * pbq_combo
Definition: preferences.h:593
LiVESWidget * spinbutton_def_fps
Definition: preferences.h:592
LiVESWidget * spinbutton_warn_ds
Definition: preferences.h:619
LiVESWidget * recent_check
Definition: preferences.h:578
boolean ignore_apply
dont light the apply button when thing changes (for external calls), normally FALSE
Definition: preferences.h:775
LiVESWidget * checkbutton_warn_after_dvgrab
Definition: preferences.h:639
LiVESWidget * rdesk_audio
Definition: preferences.h:605
LiVESWidget * cbutton_tcbg
Definition: preferences.h:673
LiVESWidget * cdplay_entry
Definition: preferences.h:591
LiVESWidget * pa_gens
Definition: preferences.h:597
LiVESWidget * cbutton_fore
Definition: preferences.h:656
LiVESWidget * pbq_adaptive
Definition: preferences.h:594
LiVESWidget * checkbutton_warn_vjmode_enter
Definition: preferences.h:644
LiVESWidget * cb_show_msgstart
Definition: preferences.h:737
LiVESWidget * msgs_pbdis
Definition: preferences.h:687
LiVESWidget * closebutton
Definition: preferences.h:572
LiVESWidget * open_maximised_check
Definition: preferences.h:574
LiVESWidget * mt_autoback_never
Definition: preferences.h:719
LiVESWidget * checkbutton_mt_exit_render
Definition: preferences.h:723
LiVESWidget * cbutton_vidcol
Definition: preferences.h:674
LiVESWidget * rr_scombo
Definition: preferences.h:611
LiVESWidget * checkbutton_auto_trim
Definition: preferences.h:729
LiVESWidget * workdir_entry
Definition: preferences.h:590
LiVESWidget * checkbutton_warn_layout_close
Definition: preferences.h:630
LiVESWidget * checkbutton_antialias
Definition: preferences.h:617
LiVESWidget * checkbutton_warn_dup_set
Definition: preferences.h:626
LiVESWidget * enable_OSC_start
Definition: preferences.h:694
LiVESWidget * cbutton_tlreg
Definition: preferences.h:671
LiVESWidget * checkbutton_warn_layout_adel
Definition: preferences.h:634
LiVESWidget * checkbutton_warn_yuv4m_open
Definition: preferences.h:649
LiVESWidget * wpp_entry
Definition: preferences.h:763
LiVESWidget * checkbutton_warn_discard_layout
Definition: preferences.h:638
LiVESWidget * alsa_midi
Definition: preferences.h:751
LiVESWidget * ladspa_entry
Definition: preferences.h:765
LiVESWidget * dialog_hpaned
Definition: preferences.h:772
LiVESWidget * rr_super
Definition: preferences.h:607
LiVESWidget * spinbutton_mt_def_fps
Definition: preferences.h:712
LiVESWidget * rfps
Definition: preferences.h:599
LiVESWidget * theme_combo
Definition: preferences.h:655
LiVESWidget * mt_autoback_always
Definition: preferences.h:718
LiVESWidget * rextaudio
Definition: preferences.h:603
LiVESWidget * spinbutton_ext_aud_thresh
Definition: preferences.h:709
LiVESWidget * theme_style4
Definition: preferences.h:666
LiVESWidget * checkbutton_jack_tb_start
Definition: preferences.h:699
LiVESWidget * checkbutton_start_tjack
Definition: preferences.h:704
LiVESWidget * vbox_right_midi
Definition: preferences.h:554
LiVESWidget * checkbutton_warn_layout_aalt
Definition: preferences.h:635
LiVESWidget * vbox_right_recording
Definition: preferences.h:545
LiVESWidget * checkbutton_warn_layout_ashift
Definition: preferences.h:636
LiVESWidget * jpeg
Definition: preferences.h:682
LiVESWidget * cbutton_mabf
Definition: preferences.h:658
LiVESWidget * omc_midi_entry
Definition: preferences.h:747
LiVESWidget * vbox_right_warnings
Definition: preferences.h:549
LiVESWidget * cbutton_back
Definition: preferences.h:657
LiVESWidget * libvis_entry
Definition: preferences.h:766
LiVESWidget * checkbutton_start_ajack
Definition: preferences.h:705
LiVESWidget * checkbutton_warn_save_set
Definition: preferences.h:625
LiVESWidget * dsl_label
Definition: preferences.h:621
LiVESWidget * nmessages_spin
Definition: preferences.h:685
LiVESWidget * check_midi
Definition: preferences.h:680
LiVESWidget * spinbutton_nfx_threads
Definition: preferences.h:692
LiVESWidget * rr_ramicro
Definition: preferences.h:613
LiVESWidget * rintaudio
Definition: preferences.h:604
LiVESWidget * audio_dir_entry
Definition: preferences.h:587
LiVESWidget * frameblank_entry
Definition: preferences.h:769
LiVESWidget * checkbutton_nobord
Definition: preferences.h:730
LiVESWidget * checkbutton_extra_colours
Definition: preferences.h:759
LiVESWidget * checkbutton_warn_fsize
Definition: preferences.h:646
LiVESWidget * checkbutton_jack_tb_client
Definition: preferences.h:701
LiVESWidget * checkbutton_warn_layout_wipe
Definition: preferences.h:641
LiVESWidget * cbutton_mtmark
Definition: preferences.h:670
LiVESWidget * dsc_label
Definition: preferences.h:622
ulong audp_entry_func
Definition: preferences.h:743
LiVESWidget * backaudio_checkbutton
Definition: preferences.h:725
LiVESWidget * button_midid
Definition: preferences.h:753
LiVESWidget * rb_startup_ce
Definition: preferences.h:754
LiVESWidget * checkbutton_render_prompt
Definition: preferences.h:726
LiVESWidget * right_shown
Definition: preferences.h:569
LiVESWidget * checkbutton_warn_layout_popup
Definition: preferences.h:637
LiVESWidget * mouse_scroll
Definition: preferences.h:576
LiVESWidget * vbox_right_effects
Definition: preferences.h:547
LiVESWidget * audio_command_entry
Definition: preferences.h:584
LiVESWidget * prefs_dialog
Definition: preferences.h:536
LiVESWidget * video_open_entry
Definition: preferences.h:583
LiVESWidget * checkbutton_warn_layout_lb
Definition: preferences.h:643
LiVESWidget * checkbutton_aclips
Definition: preferences.h:708
LiVESWidget * rb_startup_mt
Definition: preferences.h:755
LiVESWidget * scrollw_right_gui
Definition: preferences.h:555
LiVESTreeSelection * selection
Definition: preferences.h:773
LiVESWidget * checkbutton_stream_audio
Definition: preferences.h:761
LiVESWidget * scrollw_right_themes
Definition: preferences.h:565
LiVESWidget * ins_speed
Definition: preferences.h:681
LiVESWidget * spinbutton_mt_ab_time
Definition: preferences.h:714
LiVESWidget * cbutton_fxcol
Definition: preferences.h:676
LiVESWidget * checkbutton_warn_mplayer
Definition: preferences.h:624
LiVESWidget * pertrack_checkbutton
Definition: preferences.h:724
LiVESWidget * vid_save_dir_entry
Definition: preferences.h:586
LiVESWidget * cb_autoclean
Definition: preferences.h:739
LiVESWidget * checkbutton_jack_mtb_start
Definition: preferences.h:700
LiVESWidget * cbutton_ceunsel
Definition: preferences.h:678
LiVESWidget * cdda_hbox
Definition: preferences.h:767
LiVESWidget * checkbutton_omc_midi
Definition: preferences.h:745
LiVESWidget * checkbutton_load_rfx
Definition: preferences.h:615
LiVESWidget * checkbutton_jack_pwp
Definition: preferences.h:702
LiVESWidget * aud_checkbutton
Definition: resample.h:32
LiVESWidget * entry_asamps
Definition: resample.h:22
LiVESWidget * rb_unsigned
Definition: resample.h:24
LiVESWidget * rb_bigend
Definition: resample.h:25
LiVESWidget * entry_arate
Definition: resample.h:20
LiVESWidget * entry_achans
Definition: resample.h:21
uint64_t capabilities
Definition: plugins.h:177
char ** extra_argv
Definition: plugins.h:191
int(* set_yuv_palette_clamping)(int clamping_type)
Definition: plugins.h:163
boolean(* init_audio)(int in_sample_rate, int in_nchans, int argc, char **argv)
Definition: plugins.h:174
int palette
width in pixels, but converted to macropixels for the player
Definition: plugins.h:181
uint32_t audio_codec
Definition: plugins.h:169
boolean(* set_fps)(double fps)
Definition: plugins.h:149
boolean(* set_palette)(int palette)
Definition: plugins.h:134
lives_checkstatus_t has_icedax
Definition: main.h:520
lives_checkstatus_t has_midistartstop
Definition: main.h:521
int nmonitors
Definition: main.h:588
lives_checkstatus_t has_sox_play
Definition: main.h:508
lives_checkstatus_t has_encoder_plugins
Definition: main.h:571
int primary_monitor
Definition: main.h:589
lives_checkstatus_t has_jackd
Definition: main.h:522
lives_checkstatus_t has_pulse_audio
Definition: main.h:523
lives_checkstatus_t has_cdda2wav
Definition: main.h:519
uint16_t alpha
Definition: main.h:326
uint16_t blue
Definition: main.h:325
uint16_t green
Definition: main.h:324
uint16_t red
Definition: main.h:323
LiVESList * prefs_cache
file caches
Definition: mainwindow.h:1517
_vid_playback_plugin * vpp
video plugin
Definition: mainwindow.h:1572
char image_dir[PATH_MAX]
Definition: mainwindow.h:734
LiVESWidget * export_theme
Definition: mainwindow.h:1141
double fixed_fpsd
<=0. means free playback
Definition: mainwindow.h:990
ulong lb_func
Definition: mainwindow.h:1077
boolean prefs_need_restart
Definition: mainwindow.h:895
void * pulsed
pulseaudio player
Definition: mainwindow.h:1463
LiVESWidget * vol_toolitem
Definition: mainwindow.h:1364
LiVESWidget * framebar
Definition: mainwindow.h:1389
LiVESWidget * top_vbox
Definition: mainwindow.h:1352
volatile boolean record
Definition: mainwindow.h:794
int n_messages
Definition: mainwindow.h:1731
char frameblank_path[PATH_MAX]
???
Definition: mainwindow.h:1717
volatile boolean loop_cont
Definition: mainwindow.h:764
char * string_constants[NUM_LIVES_STRING_CONSTANTS]
Definition: mainwindow.h:1539
char vid_save_dir[PATH_MAX]
Definition: mainwindow.h:731
boolean ext_cntl[MAX_EXT_CNTL]
external control inputs
Definition: mainwindow.h:1579
char proj_load_dir[PATH_MAX]
Definition: mainwindow.h:735
LiVESWidget * volume_scale
Definition: mainwindow.h:1363
LiVESWidget * letter
Definition: mainwindow.h:1181
int current_file
Definition: mainwindow.h:727
boolean no_context_update
may be set temporarily to block wodget context updates
Definition: mainwindow.h:1726
boolean is_ready
Definition: mainwindow.h:787
LiVESPixbuf * imframe
Definition: mainwindow.h:1102
LiVESWidget * play_window
Definition: mainwindow.h:947
uint64_t next_ds_warn_level
current disk space warning level for the tempdir
Definition: mainwindow.h:1666
void * jackd
jack audio player / transport
Definition: mainwindow.h:1453
LiVESList * gen_cache
general cache of fi
Definition: mainwindow.h:1519
LiVESAdjustment * msg_adj
Definition: mainwindow.h:1326
LiVESWidget * recent_menu
Definition: mainwindow.h:1127
boolean fs
Definition: mainwindow.h:762
LiVESWidget * show_devopts
Definition: mainwindow.h:1240
char proj_save_dir[PATH_MAX]
Definition: mainwindow.h:736
boolean ext_playback
using external video playback plugin
Definition: mainwindow.h:773
LiVESWidget * ext_audio_checkbutton
Definition: mainwindow.h:1358
boolean sep_win
Definition: mainwindow.h:761
int prefs_changed
Definition: mainwindow.h:894
weed_event_t * stored_event_list
stored mt -> clip editor
Definition: mainwindow.h:804
char sepimg_path[PATH_MAX]
Definition: mainwindow.h:1718
LiVESWidget * preview_box
Definition: mainwindow.h:1304
int max_textsize
Definition: mainwindow.h:1794
boolean has_session_workdir
Definition: mainwindow.h:1659
LiVESWidget * l1_tb
Definition: mainwindow.h:1354
LiVESWidget * msg_area
Definition: mainwindow.h:1324
lives_mt * multitrack
holds a pointer to the entire multitrack environment; NULL in Clip Edit mode
Definition: mainwindow.h:1087
volatile boolean ping_pong
Definition: mainwindow.h:765
LiVESWidget * l2_tb
Definition: mainwindow.h:1355
LiVESWidget * int_audio_checkbutton
Definition: mainwindow.h:1358
LiVESWidget * vj_mode
Definition: mainwindow.h:1239
char audio_dir[PATH_MAX]
Definition: mainwindow.h:733
boolean write_vpp_file
video playback plugin was updated; write settings to a file on exit
Definition: mainwindow.h:1040
boolean midi_channel_lock
Definition: mainwindow.h:1587
int playing_file
which number file we are playing (or -1) [generally mainw->current_file]
Definition: mainwindow.h:943
LiVESPixbuf * imsep
Definition: mainwindow.h:1104
char vid_load_dir[PATH_MAX]
Definition: mainwindow.h:730
boolean pretty_colours
Definition: mainwindow.h:1796
LiVESWidget * l3_tb
Definition: mainwindow.h:1356
LiVESWidget * acodec_combo
Definition: events.h:226
LiVESWidget * last_container
container which wraps last widget created + subwidgets (READONLY)
boolean swap_label
swap label/widget position
LiVESJustification justify
justify for labels
LiVESWidget * last_label
commonly adjusted values //////
double scale
scale factor for all sizes
int packing_height
vertical pixels between widgets
boolean show_button_images
whether to show small images in buttons or not
int monitor
monitor we are displaying on
lives_expand_t expand
how much space to apply between widgets
int packing_width
horizontal pixels between widgets
boolean use_markup
whether markup should be used in labels
int border_width
border width in pixels
int apply_theme
theming variation for widget (0 -> no theme, 1 -> normal colours, 2+ -> theme variants)
#define lives_strdup_printf(fmt,...)
Definition: support.c:27
#define _(String)
Definition: support.h:44
#define TRUE
Definition: videoplugin.h:59
#define FALSE
Definition: videoplugin.h:60
#define ABS(a)
Definition: videoplugin.h:63
boolean lives_combo_populate(LiVESCombo *combo, LiVESList *list)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_window_present(LiVESWindow *window)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_tree_model_get(LiVESTreeModel *tmod, LiVESTreeIter *titer,...)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_xwindow_raise(LiVESXWindow *xwin)
void lives_set_cursor_style(lives_cursor_t cstyle, LiVESWidget *widget)
LiVESWidget * lives_standard_label_new_with_tooltips(const char *text, LiVESBox *box, const char *tips)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_layout_new(LiVESBox *box)
WIDGET_HELPER_GLOBAL_INLINE int lives_layout_add_row(LiVESLayout *layout)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_spin_button_set_value(LiVESSpinButton *button, double value)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_list_store_insert(LiVESListStore *lstore, LiVESTreeIter *titer, int position)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_range_set_value(LiVESRange *range, double value)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_widget_set_tooltip_text(LiVESWidget *widget, const char *tip_text)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_tree_model_iter_next(LiVESTreeModel *tmod, LiVESTreeIter *titer)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidgetColor * lives_color_button_get_color(LiVESColorButton *button, LiVESWidgetColor *color)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_standard_direntry_new(const char *labeltext, const char *txt, int dispwidth, int maxchars, LiVESBox *box, const char *tooltip)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_list_store_set(LiVESListStore *lstore, LiVESTreeIter *titer,...)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_vbox_new(boolean homogeneous, int spacing)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_layout_hbox_new(LiVESLayout *layout)
WIDGET_HELPER_GLOBAL_INLINE LiVESAccelGroup * lives_accel_group_new(void)
LiVESWidget * lives_standard_entry_new(const char *labeltext, const char *txt, int dispwidth, int maxchars, LiVESBox *box, const char *tooltip)
boolean lives_button_grab_default_special(LiVESWidget *button)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_scale_button_set_value(LiVESScaleButton *scale, double value)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_toggle_button_get_active(LiVESToggleButton *button)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_table_set_row_spacings(LiVESTable *table, uint32_t spacing)
LiVESWidget * lives_standard_color_button_new(LiVESBox *box, const char *name, boolean use_alpha, lives_colRGBA64_t *rgba, LiVESWidget **sb_red, LiVESWidget **sb_green, LiVESWidget **sb_blue, LiVESWidget **sb_alpha)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_box_pack_start(LiVESBox *box, LiVESWidget *child, boolean expand, boolean fill, uint32_t padding)
WIDGET_HELPER_GLOBAL_INLINE lives_colRGBA64_t * lives_rgba_copy(lives_colRGBA64_t *col1, lives_colRGBA64_t *col2)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_paned_pack(int where, LiVESPaned *paned, LiVESWidget *child, boolean resize, boolean shrink)
LiVESWidget * lives_standard_dialog_new(const char *title, boolean add_std_buttons, int width, int height)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_signal_handler_unblock(livespointer instance, unsigned long handler_id)
WIDGET_HELPER_GLOBAL_INLINE int lives_combo_get_active_index(LiVESCombo *combo)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_queue_draw(LiVESWidget *widget)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_check_menu_item_get_active(LiVESCheckMenuItem *item)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_paned_set_position(LiVESPaned *paned, int pos)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_combo_set_active_index(LiVESCombo *combo, int index)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_tree_selection_get_selected(LiVESTreeSelection *tsel, LiVESTreeModel **tmod, LiVESTreeIter *titer)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_table_set_col_spacings(LiVESTable *table, uint32_t spacing)
WIDGET_HELPER_GLOBAL_INLINE const char * lives_entry_get_text(LiVESEntry *entry)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_toggle_tool_button_set_active(LiVESToggleToolButton *button, boolean active)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_set_sensitive(LiVESWidget *widget, boolean state)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_tree_view_column_set_fixed_width(LiVESTreeViewColumn *tvcol, int fwidth)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_table_new(uint32_t rows, uint32_t cols, boolean homogeneous)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_label_set_text(LiVESLabel *label, const char *text)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_signal_handler_block(livespointer instance, unsigned long handler_id)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_show(LiVESWidget *widget)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_signal_handler_disconnect(livespointer instance, unsigned long handler_id)
WIDGET_HELPER_GLOBAL_INLINE LiVESListStore * lives_list_store_new(int ncols,...)
WIDGET_HELPER_GLOBAL_INLINE boolean set_tooltips_state(LiVESWidget *widget, boolean state)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_tree_view_set_model(LiVESTreeView *tview, LiVESTreeModel *tmod)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_layout_row_new(LiVESLayout *layout)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_combo_set_active_string(LiVESCombo *combo, const char *active_str)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_dialog_get_content_area(LiVESDialog *dialog)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_tree_selection_select_iter(LiVESTreeSelection *tsel, LiVESTreeIter *titer)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_tree_view_column_set_sizing(LiVESTreeViewColumn *tvcol, LiVESTreeViewColumnSizing type)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_container_set_border_width(LiVESContainer *container, uint32_t width)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_check_menu_item_set_active(LiVESCheckMenuItem *item, boolean state)
LiVESList * get_textsizes_list(void)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_layout_add_label(LiVESLayout *layout, const char *text, boolean horizontal)
WIDGET_HELPER_GLOBAL_INLINE LiVESCellRenderer * lives_cell_renderer_text_new(void)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_standard_fileentry_new(const char *labeltext, const char *txt, const char *defdir, int dispwidth, int maxchars, LiVESBox *box, const char *tooltip)
WIDGET_HELPER_GLOBAL_INLINE boolean hide_warn_image(LiVESWidget *widget)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_tree_selection_set_mode(LiVESTreeSelection *tsel, LiVESSelectionMode tselmod)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_entry_set_editable(LiVESEntry *entry, boolean editable)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_tree_view_new(void)
LiVESWidget * add_hsep_to_box(LiVESBox *box)
LiVESWidget * add_fill_to_box(LiVESBox *box)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_window_set_default_size(LiVESWindow *window, int width, int height)
WIDGET_HELPER_GLOBAL_INLINE lives_colRGBA64_t * widget_color_to_lives_rgba(lives_colRGBA64_t *lcolor, LiVESWidgetColor *color)
WIDGET_HELPER_GLOBAL_INLINE const char * lives_combo_get_active_text(LiVESCombo *combo)
WIDGET_HELPER_GLOBAL_INLINE int lives_spin_button_get_value_as_int(LiVESSpinButton *button)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_rgba_equal(lives_colRGBA64_t *col1, lives_colRGBA64_t *col2)
void lives_widget_apply_theme3(LiVESWidget *widget, LiVESWidgetState state)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidgetColor * lives_widget_color_copy(LiVESWidgetColor *c1, const LiVESWidgetColor *c2)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_scrolled_window_new(LiVESAdjustment *hadj, LiVESAdjustment *vadj)
void lives_widget_apply_theme2(LiVESWidget *widget, LiVESWidgetState state, boolean set_fg)
WIDGET_HELPER_GLOBAL_INLINE int lives_tree_view_append_column(LiVESTreeView *tview, LiVESTreeViewColumn *tvcol)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_scrolled_window_set_policy(LiVESScrolledWindow *scrolledwindow, LiVESPolicyType hpolicy, LiVESPolicyType vpolicy)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_color_equal(LiVESWidgetColor *c1, const LiVESWidgetColor *c2)
LIVES_GLOBAL_INLINE boolean lives_widget_destroy(LiVESWidget *widget)
LiVESWidget * lives_standard_scrolled_window_new(int width, int height, LiVESWidget *child)
LiVESWidget * lives_dialog_add_button_from_stock(LiVESDialog *dialog, const char *stock_id, const char *label, int response_id)
WIDGET_HELPER_GLOBAL_INLINE void lives_layout_label_set_text(LiVESLabel *label, const char *text)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_container_add(LiVESContainer *container, LiVESWidget *widget)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_tree_view_set_headers_visible(LiVESTreeView *tview, boolean vis)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_set_no_show_all(LiVESWidget *widget, boolean set)
boolean set_css_value_direct(LiVESWidget *, LiVESWidgetState state, const char *selector, const char *detail, const char *value)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_toggle_button_set_active(LiVESToggleButton *button, boolean active)
WIDGET_HELPER_GLOBAL_INLINE double lives_spin_button_get_value(LiVESSpinButton *button)
WIDGET_HELPER_GLOBAL_INLINE LiVESAdjustment * lives_tree_view_get_hadjustment(LiVESTreeView *tview)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_layout_add_fill(LiVESLayout *layout, boolean horizontal)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_label_get_mnemonic_widget(LiVESLabel *label)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_hide(LiVESWidget *widget)
LiVESWidget * lives_standard_button_new_from_stock_full(const char *stock_id, const char *label, int width, int height, LiVESBox *box, boolean fake_default, const char *ttips)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_show_all(LiVESWidget *widget)
LiVESWidget * lives_standard_frame_new(const char *labeltext, float xalign, boolean invis)
boolean lives_widget_context_update(void)
WIDGET_HELPER_GLOBAL_INLINE boolean show_warn_image(LiVESWidget *widget, const char *text)
WIDGET_HELPER_GLOBAL_INLINE boolean toggle_sets_sensitive(LiVESToggleButton *tb, LiVESWidget *widget, boolean invert)
set callbacks
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_set_margin_left(LiVESWidget *widget, int margin)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_hbox_new(boolean homogeneous, int spacing)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_tree_model_get_iter_first(LiVESTreeModel *tmod, LiVESTreeIter *titer)
LiVESWidget * lives_standard_label_new(const char *text)
WIDGET_HELPER_GLOBAL_INLINE LiVESCellRenderer * lives_cell_renderer_pixbuf_new(void)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_remove_accelerator(LiVESWidget *widget, LiVESAccelGroup *acgroup, uint32_t accel_key, LiVESXModifierType accel_mods)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_table_attach(LiVESTable *table, LiVESWidget *child, uint32_t left, uint32_t right, uint32_t top, uint32_t bottom, LiVESAttachOptions xoptions, LiVESAttachOptions yoptions, uint32_t xpad, uint32_t ypad)
WIDGET_HELPER_GLOBAL_INLINE LiVESTreeModel * lives_tree_view_get_model(LiVESTreeView *tview)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_standard_file_button_new(boolean is_dir, const char *def_dir)
WIDGET_HELPER_GLOBAL_INLINE LiVESXWindow * lives_widget_get_xwindow(LiVESWidget *widget)
LiVESWidget * lives_standard_check_button_new(const char *labeltext, boolean active, LiVESBox *box, const char *tooltip)
WIDGET_HELPER_GLOBAL_INLINE LiVESTreeSelection * lives_tree_view_get_selection(LiVESTreeView *tview)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_add_accelerator(LiVESWidget *widget, const char *accel_signal, LiVESAccelGroup *accel_group, uint32_t accel_key, LiVESXModifierType accel_mods, LiVESAccelFlags accel_flags)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_source_remove(uint32_t handle)
LiVESWidget * lives_standard_spin_button_new(const char *labeltext, double val, double min, double max, double step, double page, int dp, LiVESBox *box, const char *tooltip)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_box_pack_end(LiVESBox *box, LiVESWidget *child, boolean expand, boolean fill, uint32_t padding)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_widget_process_updates(LiVESWidget *widget)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_image_set_from_pixbuf(LiVESImage *image, LiVESPixbuf *pixbuf)
LiVESWidget * lives_standard_combo_new(const char *labeltext, LiVESList *list, LiVESBox *box, const char *tooltip)
WIDGET_HELPER_GLOBAL_INLINE LiVESTreeViewColumn * lives_tree_view_column_new_with_attributes(const char *title, LiVESCellRenderer *crend,...)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_window_set_position(LiVESWindow *window, LiVESWindowPosition pos)
boolean widget_inact_toggle(LiVESWidget *widget, LiVESWidget *togglebutton)
void lives_general_button_clicked(LiVESButton *button, livespointer data_to_free)
LiVESWidget * lives_standard_radio_button_new(const char *labeltext, LiVESSList **rbgroup, LiVESBox *box, const char *tooltip)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_window_add_accel_group(LiVESWindow *window, LiVESAccelGroup *group)
LiVESPixbuf * lives_pixbuf_new_from_stock_at_size(const char *stock_id, LiVESIconSize size, int x, int y)
WIDGET_HELPER_GLOBAL_INLINE boolean lives_spin_button_set_range(LiVESSpinButton *button, double min, double max)
void lives_widget_apply_theme(LiVESWidget *widget, LiVESWidgetState state)
WIDGET_HELPER_GLOBAL_INLINE LiVESWidget * lives_hpaned_new(void)
#define LIVES_EXPAND_DEFAULT_HEIGHT
#define LIVES_LIVES_STOCK_PREF_EFFECTS
@ LIVES_CURSOR_NORMAL
must be zero
@ LIVES_CURSOR_BUSY
#define LONG_ENTRY_WIDTH
Definition: widget-helper.h:29
#define LIVES_LIVES_STOCK_PREF_MULTITRACK
#define LIVES_LIVES_STOCK_PREF_RECORD
#define LIVES_EXPAND_EXTRA_WIDTH
#define LIVES_LIVES_STOCK_PREF_DECODING
#define LIVES_LIVES_STOCK_PREF_NET
#define LIVES_LIVES_STOCK_PREF_PLAYBACK
#define LIVES_EXPAND_DEFAULT
#define LIVES_LIVES_STOCK_PREF_GUI
ulong lives_signal_connect(LiVESWidget *, const char *signal_name, ulong funcptr, livespointer data)
widget_opts_t widget_opts
#define MEDIUM_ENTRY_WIDTH
Definition: widget-helper.h:31
#define LIVES_JUSTIFY_DEFAULT
#define LIVES_LIVES_STOCK_PREF_DIRECTORY
#define LIVES_LIVES_STOCK_PREF_WARNING
#define LIVES_LIVES_STOCK_PREF_THEMES
#define FILESEL_TYPE_KEY
#define LIVES_LIVES_STOCK_PREF_JACK
#define SHORT_ENTRY_WIDTH
Definition: widget-helper.h:30
#define LIVES_LIVES_STOCK_PREF_ENCODING
#define FILTER_KEY
#define LIVES_LIVES_STOCK_PREF_MISC
#define LIVES_LIVES_STOCK_PREF_MIDI