22 static LiVESWidget **fxcombos;
23 static LiVESWidget **pscrolls;
24 static LiVESWidget **combo_entries;
25 static LiVESWidget **key_checks;
26 static LiVESWidget **rb_fx_areas;
27 static LiVESWidget **rb_clip_areas;
28 static LiVESWidget **clip_boxes;
29 static LiVESWidget *param_hbox;
30 static LiVESWidget *top_hbox;
33 static ulong *combo_fns;
34 static ulong *rb_clip_fns;
35 static ulong *rb_fx_fns;
37 static int rte_keys_virtual;
38 static int n_screen_areas;
39 static int n_clip_boxes;
41 static int next_screen_area;
43 static void ce_thumbs_remove_param_boxes(
boolean remove_pinned);
44 static void ce_thumbs_remove_param_box(
int key);
51 for (i = 0; i < rte_keys_virtual; i++) {
56 for (i = 0; i < rte_keys_virtual; i++) {
66 #if LIVES_HAS_GRID_WIDGET
67 static boolean switch_clip_cb(LiVESWidget * eventbox, LiVESXEventButton * event, livespointer user_data) {
68 int i = LIVES_POINTER_TO_INT(user_data);
76 static void ce_thumbs_fx_changed(LiVESCombo * combo, livespointer user_data) {
78 int key = LIVES_POINTER_TO_INT(user_data);
84 if (cmode == mode)
return;
98 LIVES_POINTER_TO_INT(lives_widget_object_get_data(LIVES_WIDGET_OBJECT(key_checks[i]),
108 if (key >= rte_keys_virtual)
return;
111 if (!on && pscrolls[key]) ce_thumbs_remove_param_box(key);
113 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(key_checks[key]),
"active", LIVES_INT_TO_POINTER(on));
119 if (key >= rte_keys_virtual || mode < 0)
return;
122 ce_thumbs_remove_param_box(key);
127 static void pin_toggled(LiVESToggleButton * t, livespointer pkey) {
128 int key = LIVES_POINTER_TO_INT(pkey);
129 boolean state = LIVES_POINTER_TO_INT(lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
"pinned"));
130 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
"pinned", LIVES_INT_TO_POINTER(!state));
133 #if LIVES_HAS_GRID_WIDGET
135 static void clip_area_toggled(LiVESToggleButton * t, livespointer parea) {
136 int area = LIVES_POINTER_TO_INT(parea);
145 #define SPARE_CLIP_BOXES 100
148 #if LIVES_HAS_GRID_WIDGET
150 LiVESWidget *thumb_image = NULL;
151 LiVESWidget *vbox, *vbox2, *vbox3;
152 LiVESWidget *usibl = NULL, *sibl = NULL;
153 LiVESWidget *hbox, *hbox2;
154 LiVESWidget *tscroll, *cscroll;
162 LiVESPixbuf *thumbnail;
165 LiVESList *fxlist = NULL;
167 GSList *rb_fx_areas_group = NULL;
168 GSList *rb_clip_areas_group = NULL;
177 int count = -1, rcount = 0;
212 fxcombos = (LiVESWidget **)
lives_malloc((rte_keys_virtual) * modes *
sizeof(LiVESWidget *));
213 pscrolls = (LiVESWidget **)
lives_malloc((rte_keys_virtual) * modes *
sizeof(LiVESWidget *));
214 combo_entries = (LiVESWidget **)
lives_malloc((rte_keys_virtual) * modes *
sizeof(LiVESWidget *));
215 key_checks = (LiVESWidget **)
lives_malloc((rte_keys_virtual) * modes *
sizeof(LiVESWidget *));
217 rb_fx_areas = (LiVESWidget **)
lives_malloc((n_screen_areas) * modes *
sizeof(LiVESWidget *));
218 rb_clip_areas = (LiVESWidget **)
lives_malloc((n_screen_areas) * modes *
sizeof(LiVESWidget *));
220 clip_boxes = (LiVESWidget **)
lives_malloc((n_clip_boxes) * modes *
sizeof(LiVESWidget *));
227 for (i = 0; i < n_clip_boxes; i++) {
228 clip_boxes[i] = NULL;
231 for (i = 0; i < rte_keys_virtual; i++) {
248 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(key_checks[i]),
"active",
251 ch_fns[i] = lives_signal_sync_connect_after(LIVES_GUI_OBJECT(key_checks[i]), LIVES_WIDGET_TOGGLED_SIGNAL,
267 combo_fns[i] = lives_signal_sync_connect(LIVES_GUI_OBJECT(fxcombos[i]), LIVES_WIDGET_CHANGED_SIGNAL,
268 LIVES_GUI_CALLBACK(ce_thumbs_fx_changed), LIVES_INT_TO_POINTER(i));
310 for (i = 0; i < n_screen_areas; i++) {
327 &rb_clip_areas_group, LIVES_BOX(hbox),
332 rb_clip_fns[i] = lives_signal_sync_connect(LIVES_GUI_OBJECT(rb_clip_areas[i]), LIVES_WIDGET_TOGGLED_SIGNAL,
333 LIVES_GUI_CALLBACK(clip_area_toggled), LIVES_INT_TO_POINTER(i));
366 i = LIVES_POINTER_TO_INT(cliplist->data);
371 cliplist = cliplist->next;
379 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(clip_boxes[count]),
"clipno", LIVES_INT_TO_POINTER(i));
397 if (rcount == cpw - 1) rcount = 0;
400 sibl = clip_boxes[count];
406 sibl = usibl = clip_boxes[count];
421 lives_signal_sync_connect(LIVES_GUI_OBJECT(clip_boxes[count]), LIVES_WIDGET_BUTTON_PRESS_EVENT,
422 LIVES_GUI_CALLBACK(switch_clip_cb), LIVES_INT_TO_POINTER(i));
424 cliplist = cliplist->next;
444 ce_thumbs_remove_param_boxes(
TRUE);
464 LiVESWidget *pin_check;
466 char *fname, *tmp, *tmp2;
470 if (key >= rte_keys_virtual)
return;
474 ce_thumbs_remove_param_boxes(
FALSE);
510 (tmp2 = (
_(
"Pin the parameter box to the window"))));
514 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(pin_check), LIVES_WIDGET_TOGGLED_SIGNAL,
515 LIVES_GUI_CALLBACK(pin_toggled), LIVES_INT_TO_POINTER(key));
522 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
"pinned", LIVES_INT_TO_POINTER(
FALSE));
523 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
"update", LIVES_INT_TO_POINTER(
FALSE));
524 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
RFX_KEY, rfx);
529 static void ce_thumbs_remove_param_box(
int key) {
532 if (key >= rte_keys_virtual)
return;
533 if (!pscrolls[key])
return;
534 rfx = (
lives_rfx_t *)lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
RFX_KEY);
537 pscrolls[key] = NULL;
542 static void ce_thumbs_remove_param_boxes(
boolean remove_pinned) {
544 for (
int i = 0; i < rte_keys_virtual; i++) {
546 if (remove_pinned || !LIVES_POINTER_TO_INT(lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[i]),
"pinned")))
547 ce_thumbs_remove_param_box(i);
555 if (key >= rte_keys_virtual || !pscrolls[key])
return;
556 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
"update", LIVES_INT_TO_POINTER(
TRUE));
564 for (
int i = 0; i < rte_keys_virtual; i++) {
566 if (LIVES_POINTER_TO_INT(lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[i]),
"update"))) {
567 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[i]),
"update", LIVES_INT_TO_POINTER(
FALSE));
568 rfx = (
lives_rfx_t *)lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[i]),
RFX_KEY);
579 if (key >= rte_keys_virtual)
return;
582 rfx = (
lives_rfx_t *)lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
RFX_KEY);
593 if (key >= rte_keys_virtual)
return;
596 rfx = (
lives_rfx_t *)lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
RFX_KEY);
604 for (
int i = 0; i < rte_keys_virtual; i++) {
605 if (pscrolls[i] && i == key &&
606 rfx == (
lives_rfx_t *)lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
RFX_KEY)) {
617 LiVESList *fxlist = NULL;
620 if (key >= rte_keys_virtual)
return;
644 for (
int i = 0; i < rte_keys_virtual; i++) {
675 boolean match =
FALSE;
678 for (
int i = 0; i < n_clip_boxes; i++) {
679 if (!clip_boxes[i])
break;
681 clipno = LIVES_POINTER_TO_INT(lives_widget_object_get_data(LIVES_WIDGET_OBJECT(clip_boxes[i]),
"clipno"));
709 next_screen_area = area;