34
34
#include "documentlist.h"
36
36
#include "gettext.h"
37
#include "mapchannelsdialog.h"
42
effect_register_rebuild_func rebuild_func;
43
effect_register_get_func get_func;
44
gpointer rebuild_func_data,get_func_data;
49
gchar *name,*title,*location,*author,source_tag;
44
static GSList *effects = NULL;
45
static guint num_effects = 0;
53
static ListObject *effect_list = NULL;
54
static GSList *sources = NULL;
47
56
static GSList *geometry_stack = NULL;
48
57
static gboolean geometry_stack_inited = FALSE;
50
59
static GtkObjectClass *parent_class;
52
static void effect_browser_remove_effect(EffectBrowser *eb);
54
void effect_browser_register_effect(gchar *name, gchar *title,
61
static void list_widget_rebuild(gpointer dummy, gpointer dummy2,
64
void effect_register_add_source(gchar *name, gchar tag,
65
effect_register_rebuild_func rebuild_func,
66
gpointer rebuild_func_data,
67
effect_register_get_func get_func,
68
gpointer get_func_data)
71
s = g_malloc(sizeof(*s));
74
s->rebuild_func = rebuild_func;
75
s->rebuild_func_data = rebuild_func_data;
76
s->get_func = get_func;
77
s->get_func_data = get_func_data;
79
sources = g_slist_append(sources,s);
82
void effect_register_add_effect(gchar source_tag, const gchar *name,
83
const gchar *title, const gchar *author,
84
const gchar *location)
58
87
e = g_malloc(sizeof(*e));
88
e->source_tag = source_tag;
59
89
e->name = g_strdup(name);
60
90
e->title = g_strdup(title);
61
e->dialog_type = dialog_type;
62
effects = g_slist_append(effects,e);
66
void effect_browser_register_default_effects(void)
68
effect_browser_register_effect("volume",_("[B] Volume adjust/fade"),
69
volume_dialog_get_type());
70
effect_browser_register_effect("srate",_("[B] Convert samplerate"),
71
samplerate_dialog_get_type());
72
effect_browser_register_effect("ssize",_("[B] Convert sample format"),
73
samplesize_dialog_get_type());
74
effect_browser_register_effect("combine",_("[B] Combine channels"),
75
combine_channels_dialog_get_type());
76
effect_browser_register_effect("speed",_("[B] Speed"),
77
speed_dialog_get_type());
78
effect_browser_register_effect("pipe",_("[B] Pipe through program"),
79
pipe_dialog_get_type());
91
e->author = g_strdup(author);
92
e->location = g_strdup(location);
93
list_object_add(effect_list, e);
96
static void builtin_rebuild_func(gchar source_tag, gpointer user_data)
98
gchar *author = _("Built-in");
99
static const gchar loc[] = "";
101
effect_register_add_effect(source_tag,"volume",_("Volume adjust/fade"),
103
effect_register_add_effect(source_tag,"srate",_("Convert samplerate"),
105
effect_register_add_effect(source_tag,"ssize",_("Convert sample format"),
107
effect_register_add_effect(source_tag,"mapchannels",_("Map channels"),
109
effect_register_add_effect(source_tag,"combine",_("Combine channels"),
111
effect_register_add_effect(source_tag,"speed",_("Speed"),author,loc);
112
effect_register_add_effect(source_tag,"pipe",_("Pipe through program"),
116
static EffectDialog *builtin_get_func(gchar *name, gchar source_tag,
120
if (!strcmp(name,"volume")) type = volume_dialog_get_type();
121
else if (!strcmp(name,"srate")) type = samplerate_dialog_get_type();
122
else if (!strcmp(name,"ssize")) type = samplesize_dialog_get_type();
123
else if (!strcmp(name,"mapchannels"))
124
type = map_channels_dialog_get_type();
125
else if (!strcmp(name,"combine"))
126
type = combine_channels_dialog_get_type();
127
else if (!strcmp(name,"speed")) type = speed_dialog_get_type();
128
else if (!strcmp(name,"pipe")) type = pipe_dialog_get_type();
130
return EFFECT_DIALOG(gtk_type_new(type));
135
void effect_register_init(void)
137
/* Add built-in effects source */
138
effect_register_add_source("Built-in",'B',builtin_rebuild_func,NULL,
139
builtin_get_func,NULL);
142
static void effect_register_update_list(void)
148
if (effect_list == NULL)
149
effect_list = list_object_new(FALSE);
151
for (s=sources; s!=NULL; s=s->next) {
152
src = (struct source *)s->data;
154
/* TODO: Cache instead of requesting from source each time */
155
src->rebuild_func(src->tag, src->rebuild_func_data);
161
if (b) list_object_notify(effect_list,NULL);
164
void free_effect(struct effect *e)
173
void effect_register_rebuild(void)
177
list_object_foreach(effect_list,(GFunc)free_effect,NULL);
178
list_object_clear(effect_list,FALSE);
179
for (s=sources; s!=NULL; s=s->next) {
180
src = (struct source *)s->data;
183
effect_register_update_list();
186
static void effect_browser_remove_effect(EffectBrowser *eb)
188
if (eb->current_dialog >= 0)
190
(GTK_CONTAINER(eb->dialog_container),
191
GTK_WIDGET(eb->dialogs[eb->current_dialog]));
192
eb->current_dialog = -1;
82
195
static void effect_browser_destroy(GtkObject *obj)
122
233
GTK_WIDGET_CLASS(klass)->delete_event = effect_browser_delete_event;
125
static void apply_click(GtkWidget *widget, EffectBrowser *eb)
127
if (eb->dl->selected == NULL) {
128
user_error(_("You have no open file to apply the effect to!"));
131
effect_dialog_apply(eb->dialogs[eb->current_dialog]);
132
if (!inifile_get_gboolean("mainwinFront",TRUE))
133
gdk_window_raise(GTK_WIDGET(eb)->window);
136
236
static void effect_browser_close(EffectBrowser *eb)
139
239
gtk_widget_destroy(GTK_WIDGET(eb));
142
static void ok_click(GtkWidget *widget, EffectBrowser *eb)
242
static void apply_click(GtkWidget *widget, EffectBrowser *eb)
144
245
if (eb->dl->selected == NULL) {
145
246
user_error(_("You have no open file to apply the effect to!"));
148
gtk_widget_hide(GTK_WIDGET(eb));
149
if (effect_dialog_apply(eb->dialogs[eb->current_dialog]))
150
gtk_widget_show(GTK_WIDGET(eb));
152
effect_browser_close(eb);
155
static void effect_browser_remove_effect(EffectBrowser *eb)
157
if (eb->current_dialog >= 0)
159
(GTK_CONTAINER(eb->dialog_container),
160
GTK_WIDGET(eb->dialogs[eb->current_dialog]));
163
static void effect_browser_set_effect_main(EffectBrowser *eb, struct effect *e,
250
ca = gtk_toggle_button_get_active(eb->close_after);
251
mwf = inifile_get_gboolean("mainwinFront",TRUE);
253
if (ca) gtk_widget_hide(GTK_WIDGET(eb));
255
b = effect_dialog_apply(eb->dialogs[eb->current_dialog]);
259
gtk_widget_show(GTK_WIDGET(eb));
261
effect_browser_close(eb);
263
gdk_window_raise(GTK_WIDGET(eb)->window);
266
static EffectDialog *get_effect_missing_dialog(gchar *name, gchar source_tag)
270
ed = gtk_type_new(effect_dialog_get_type());
271
w = gtk_label_new(_("This effect could not be loaded."));
272
gtk_container_add(ed->input_area,w);
277
static void effect_browser_set_effect_main(EffectBrowser *eb, struct effect *e)
167
285
effect_browser_remove_effect(eb);
287
/* Check dialog cache */
288
for (i=0; i<EFFECT_BROWSER_CACHE_SIZE; i++) {
289
if (eb->dialog_effects[i] == e) break;
292
if (i >= EFFECT_BROWSER_CACHE_SIZE) {
293
/* Dialog not in cache */
295
/* Make room in top of cache */
296
for (i=0; i<EFFECT_BROWSER_CACHE_SIZE; i++) {
297
if (eb->dialog_effects[i] == NULL) break;
299
if (i >= EFFECT_BROWSER_CACHE_SIZE) {
300
/* No room in cache, throw out last element */
301
i = EFFECT_BROWSER_CACHE_SIZE-1;
302
gtk_object_unref(GTK_OBJECT(eb->dialogs[i]));
303
eb->dialogs[i] = NULL;
304
eb->dialog_effects[i] = NULL;
307
eb->dialogs[i] = eb->dialogs[i-1];
308
eb->dialog_effects[i] = eb->dialog_effects[i-1];
311
/* Get the new dialog */
314
for (s=sources; s!=NULL; s=s->next) {
315
src = (struct source *)s->data;
316
if (src->tag == e->source_tag) {
317
ed = src->get_func(e->name, e->source_tag,
319
effect_dialog_setup(ed, e->name, eb);
325
ed = get_effect_missing_dialog(e->name,e->source_tag);
329
gtk_object_ref(GTK_OBJECT(ed));
330
gtk_object_sink(GTK_OBJECT(ed));
331
eb->dialog_effects[i] = e;
168
334
eb->current_dialog = i;
169
if (eb->dialogs[i] == NULL) {
170
w = GTK_WIDGET(gtk_type_new(e->dialog_type));
171
effect_dialog_setup(EFFECT_DIALOG(w),e->name,(gpointer)eb);
172
eb->dialogs[i] = EFFECT_DIALOG(w);
174
gtk_object_sink(GTK_OBJECT(w));
175
inifile_set("lastEffect",e->name);
177
336
gtk_container_add(eb->dialog_container,
178
337
GTK_WIDGET(eb->dialogs[i]));
179
338
gtk_widget_show(GTK_WIDGET(eb->dialogs[i]));
340
c = g_strdup_printf("%c%s",e->source_tag,e->name);
341
inifile_set("lastEffect",c);
182
void effect_browser_invalidate_effect(EffectBrowser *eb, gchar *effect_name)
345
void effect_browser_invalidate_effect(EffectBrowser *eb, gchar *effect_name,
348
gboolean displayed = FALSE;
185
349
struct effect *e;
189
g_assert(sl != NULL);
190
e = (struct effect *)sl->data;
191
if (!strcmp(e->name,effect_name)) break;
195
if (i == eb->current_dialog) {
196
effect_browser_remove_effect(eb);
197
eb->current_dialog = -1;
198
gtk_widget_unref(GTK_WIDGET(eb->dialogs[i]));
199
eb->dialogs[i] = NULL;
200
effect_browser_set_effect_main(eb,e,i);
201
} else if (eb->dialogs[i] != NULL) {
202
gtk_widget_unref(GTK_WIDGET(eb->dialogs[i]));
203
eb->dialogs[i] = NULL;
352
/* Search the cache for the effect */
353
for (i=0; i<EFFECT_BROWSER_CACHE_SIZE; i++) {
354
e = eb->dialog_effects[i];
355
if (e != NULL && e->source_tag == source_tag &&
356
!strcmp(e->name, effect_name))
360
if (i >= EFFECT_BROWSER_CACHE_SIZE) return; /* Not found */
362
displayed = (i == eb->current_dialog);
363
if (displayed) effect_browser_remove_effect(eb);
364
gtk_object_unref(GTK_OBJECT(eb->dialogs[i]));
365
eb->dialogs[i] = NULL;
366
eb->dialog_effects[i] = NULL;
367
if (displayed) effect_browser_set_effect_main(eb,e);
207
370
static void effect_browser_select_child(GtkList *list, GtkWidget *widget,
208
371
gpointer user_data)
210
EffectBrowser *eb = EFFECT_BROWSER(user_data);
213
i = gtk_list_child_position(eb->effect_list,widget);
215
for (sl=effects,j=i; j>0; j--) {
219
effect_browser_set_effect_main(eb,(struct effect *)(sl->data),i);
373
EffectBrowser *eb = EFFECT_BROWSER(user_data);
374
struct effect *effect;
376
effect = gtk_object_get_data(GTK_OBJECT(widget),"effectptr");
377
g_assert(effect != NULL);
378
effect_browser_set_effect_main(eb,effect);
379
eb->list_widget_sel = GTK_LIST_ITEM(widget);
382
static void save_effect_order(EffectBrowser *eb)
387
struct effect *effect;
388
l = gtk_container_get_children(GTK_CONTAINER(eb->list_widget));
389
for (i=0; l!=NULL; l=l->next,i++) {
390
c = g_strdup_printf("effectBrowserOrder%d",i);
391
effect = gtk_object_get_data(GTK_OBJECT(l->data),"effectptr");
392
d = g_strdup_printf("%c%s",effect->source_tag,effect->name);
397
c = g_strdup_printf("effectBrowserOrder%d",i);
403
static void moveup_main(EffectBrowser *eb, GtkListItem *item)
407
i = gtk_list_child_position(GTK_LIST(eb->list_widget),
410
l = g_list_append(NULL, item);
411
gtk_list_remove_items_no_unref(GTK_LIST(eb->list_widget),l);
412
gtk_list_insert_items(GTK_LIST(eb->list_widget),l,i-1);
413
gtk_list_item_select(GTK_LIST_ITEM(eb->list_widget_sel));
414
save_effect_order(eb);
417
static void movedown_main(EffectBrowser *eb, GtkListItem *item)
421
i = gtk_list_child_position(GTK_LIST(eb->list_widget),
423
l = g_list_append(NULL, item);
424
gtk_list_remove_items_no_unref(GTK_LIST(eb->list_widget),l);
425
gtk_list_insert_items(GTK_LIST(eb->list_widget),l,i+1);
426
gtk_list_item_select(GTK_LIST_ITEM(eb->list_widget_sel));
427
save_effect_order(eb);
430
static void movetop_main(EffectBrowser *eb, GtkListItem *item)
433
l = g_list_append(NULL, item);
434
gtk_list_remove_items_no_unref(GTK_LIST(eb->list_widget),l);
435
gtk_list_prepend_items(GTK_LIST(eb->list_widget),l);
436
gtk_list_item_select(GTK_LIST_ITEM(eb->list_widget_sel));
437
save_effect_order(eb);
440
static void movebot_main(EffectBrowser *eb, GtkListItem *item)
443
l = g_list_append(NULL, item);
444
gtk_list_remove_items_no_unref(GTK_LIST(eb->list_widget),l);
445
gtk_list_append_items(GTK_LIST(eb->list_widget),l);
446
gtk_list_item_select(GTK_LIST_ITEM(eb->list_widget_sel));
447
save_effect_order(eb);
450
static EffectBrowser *clicked_eb;
452
static void list_item_moveup(GtkMenuItem *menuitem, gpointer user_data)
454
moveup_main(clicked_eb, clicked_eb->list_widget_clicked);
457
static void list_item_movedown(GtkMenuItem *menuitem, gpointer user_data)
459
movedown_main(clicked_eb, clicked_eb->list_widget_clicked);
462
static void list_item_movetotop(GtkMenuItem *menuitem, gpointer user_data)
464
movetop_main(clicked_eb, clicked_eb->list_widget_clicked);
467
static void list_item_movetobottom(GtkMenuItem *menuitem, gpointer user_data)
469
movebot_main(clicked_eb, clicked_eb->list_widget_clicked);
472
static void list_item_sort_main(EffectBrowser *eb, GCompareFunc compfunc)
474
/* Not the quickest way, but preserves original order if compfunc
475
returns >0 when objects are equal */
480
k = gtk_container_get_children(GTK_CONTAINER(eb->list_widget));
481
for (l=k; l!=NULL; l=l->next) {
482
e = gtk_object_get_data(GTK_OBJECT(l->data),"effectptr");
484
m = g_list_insert_sorted(m,e,compfunc);
487
for (l=m,i=0; l!=NULL; l=l->next,i++) {
488
e = (struct effect *)l->data;
489
c = g_strdup_printf("effectBrowserOrder%d",i);
490
d = g_strdup_printf("%c%s",e->source_tag,e->name);
495
c = g_strdup_printf("effectBrowserOrder%d",i);
499
list_widget_rebuild(NULL,NULL,eb);
502
gint title_sort_func(gconstpointer a, gconstpointer b)
504
struct effect const *ae = a, *be = b;
506
i = strcmp(ae->title,be->title);
507
if (i==0) return 1; else return i;
510
gint auth_sort_func(gconstpointer a, gconstpointer b)
512
struct effect const *ae = a, *be = b;
514
i = strcmp(ae->author,be->author);
515
if (i==0) return 1; else return i;
518
gint type_sort_func(gconstpointer a, gconstpointer b)
520
struct effect const *ae = a, *be = b;
522
i = ae->source_tag - be->source_tag;
523
if (i==0) return 1; else return i;
526
gint loc_sort_func(gconstpointer a, gconstpointer b)
528
struct effect const *ae = a, *be = b;
530
i = strcmp(ae->location,be->location);
531
if (i==0) return 1; else return i;
535
static void list_item_sortbytitle(GtkMenuItem *menuitem, gpointer user_data)
537
list_item_sort_main(clicked_eb, title_sort_func);
540
static void list_item_sortbytype(GtkMenuItem *menuitem, gpointer user_data)
542
list_item_sort_main(clicked_eb, type_sort_func);
545
static void list_item_sortbyloc(GtkMenuItem *menuitem, gpointer user_data)
547
list_item_sort_main(clicked_eb, loc_sort_func);
550
static void list_item_sortbyauth(GtkMenuItem *menuitem, gpointer user_data)
552
list_item_sort_main(clicked_eb, auth_sort_func);
555
static void list_item_unsort(GtkMenuItem *menuitem, gpointer user_data)
557
inifile_set("effectBrowserOrder0",NULL);
558
list_widget_rebuild(NULL,NULL,clicked_eb);
561
static void list_item_rebuild(GtkMenuItem *menuitem, gpointer user_data)
563
effect_register_rebuild();
566
static gchar *translate_menu_path(const gchar *path, gpointer func_data)
571
static gint list_item_button_press(GtkWidget *widget, GdkEventButton *event,
574
EffectBrowser *eb = EFFECT_BROWSER(user_data);
575
static GtkItemFactory *item_factory = NULL;
577
static GtkItemFactoryEntry menu_items[] = {
578
{ N_("/Move Up"), NULL, list_item_moveup, 0, NULL },
579
{ N_("/Move Down"), NULL, list_item_movedown, 0, NULL },
580
{ N_("/Move to Top"), NULL, list_item_movetotop, 0, NULL },
581
{ N_("/Move to Bottom"), NULL, list_item_movetobottom,0, NULL },
582
{ "/sep1", NULL, NULL, 0, "<Separator>" },
583
{ N_("/Sort by Name"), NULL, list_item_sortbytitle, 0, NULL },
584
{ N_("/Sort by Type"), NULL, list_item_sortbytype, 0, NULL },
585
{ N_("/Sort by Location"), NULL, list_item_sortbyloc,0,NULL },
586
{ N_("/Sort by Author"), NULL, list_item_sortbyauth,0, NULL },
587
{ "/sep2", NULL, NULL, 0, "<Separator>" },
588
{ N_("/Restore Order"), NULL, list_item_unsort, 0, NULL },
589
{ N_("/Rebuild Effect List"), NULL, list_item_rebuild,0,NULL }
592
if (event->button == 3) {
593
if (item_factory == NULL) {
594
item_factory = gtk_item_factory_new(GTK_TYPE_MENU,"<popup>",NULL);
596
gtk_item_factory_set_translate_func(item_factory,
597
translate_menu_path, NULL, NULL);
599
gtk_item_factory_create_items(item_factory,
600
ARRAY_LENGTH(menu_items),
604
eb->list_widget_clicked = GTK_LIST_ITEM(widget);
605
w = gtk_item_factory_get_widget(item_factory,"<popup>");
606
gtk_menu_popup(GTK_MENU(w),NULL,NULL,NULL,NULL,event->button,
612
static void add_list_item_main(struct effect *e, GtkList *l, EffectBrowser *eb)
616
c = g_strdup_printf("[%c] %s",e->source_tag,e->title);
618
/* Translate here for keeping compatibility with old translations */
619
/* New translations should translate the title without the prefix */
620
if (e->source_tag == 'B' || e->source_tag == 'S') d = _(c); else d = c;
622
w = gtk_list_item_new_with_label(d);
624
gtk_object_set_data(GTK_OBJECT(w),"effectptr",e);
625
gtk_signal_connect(GTK_OBJECT(w),"button_press_event",
626
GTK_SIGNAL_FUNC(list_item_button_press),eb);
627
gtk_container_add(GTK_CONTAINER(l),w);
631
static void add_list_item(gpointer item, gpointer user_data)
633
EffectBrowser *eb = EFFECT_BROWSER(user_data);
634
struct effect *e = (struct effect *)item;
635
add_list_item_main(e,eb->list_widget,eb);
638
static void top_click(GtkButton *button, gpointer user_data)
640
EffectBrowser *eb = EFFECT_BROWSER(user_data);
641
movetop_main(eb,eb->list_widget_sel);
644
static void bottom_click(GtkButton *button, gpointer user_data)
646
EffectBrowser *eb = EFFECT_BROWSER(user_data);
647
movebot_main(eb,eb->list_widget_sel);
650
static void up_click(GtkButton *button, gpointer user_data)
652
EffectBrowser *eb = EFFECT_BROWSER(user_data);
653
moveup_main(eb, eb->list_widget_sel);
656
static void down_click(GtkButton *button, gpointer user_data)
658
EffectBrowser *eb = EFFECT_BROWSER(user_data);
659
movedown_main(eb, eb->list_widget_sel);
662
static void add_list_widget_items(GtkList *list, EffectBrowser *eb)
668
if (inifile_get("effectBrowserOrder0",NULL) == NULL) {
669
list_object_foreach(effect_list,add_list_item,eb);
671
for (l=effect_list->list; l!=NULL; l=l->next) {
672
e = (struct effect *)l->data;
673
e->process_tag = FALSE;
676
c = g_strdup_printf("effectBrowserOrder%d",i);
677
d = inifile_get(c,NULL);
679
if (d == NULL) break;
680
for (l=effect_list->list; l!=NULL; l=l->next) {
681
e = (struct effect *)l->data;
682
if (e->process_tag) continue;
683
if (e->source_tag != d[0] || strcmp(e->name,d+1)) continue;
684
add_list_item_main(e,list,eb);
685
e->process_tag = TRUE;
689
for (l=effect_list->list; l!=NULL; l=l->next) {
690
e = (struct effect *)l->data;
692
add_list_item_main(e,list,eb);
697
static void list_widget_rebuild(gpointer dummy, gpointer dummy2,
700
gtk_list_clear_items(eb->list_widget,0,-1);
701
add_list_widget_items(eb->list_widget, eb);
222
704
static void effect_browser_init(EffectBrowser *eb)
224
GtkWidget *b,*b1,*b1w,*b2,*b21,*b21w,*b22,*b23,*b24,*b241,*b242;
706
GtkWidget *b,*b1,*b11,*b11w,*b12,*b121,*b122,*b123,*b124,*b2,*b21;
707
GtkWidget *b21w,*b22,*b23,*b24,*b25,*b251,*b252;
227
708
GtkAccelGroup* ag;
712
eb->list_widget_sel = NULL;
232
714
ag = gtk_accel_group_new();
234
eb->dialogs = g_malloc0(num_effects * sizeof(eb->dialogs[0]));
716
memset(eb->dialogs,0,sizeof(eb->dialogs));
717
memset(eb->dialog_effects,0,sizeof(eb->dialog_effects));
235
718
eb->current_dialog = -1;
237
b1w = gtk_list_new();
238
eb->effect_list = GTK_LIST(b1w);
239
gtk_list_set_selection_mode(GTK_LIST(b1w),GTK_SELECTION_SINGLE);
241
for (sl=effects; sl!=NULL; sl=sl->next) {
242
e = (struct effect *)sl->data;
243
w = gtk_list_item_new_with_label(e->title);
244
gtk_container_add(GTK_CONTAINER(b1w),w);
248
b1 = gtk_scrolled_window_new(NULL,NULL);
249
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(b1),
720
b11w = gtk_list_new();
721
eb->list_widget = GTK_LIST(b11w);
722
gtk_list_set_selection_mode(GTK_LIST(b11w),GTK_SELECTION_SINGLE);
724
effect_register_update_list();
725
add_list_widget_items(eb->list_widget,eb);
727
gtk_signal_connect(GTK_OBJECT(effect_list),"item-notify",
728
GTK_SIGNAL_FUNC(list_widget_rebuild),eb);
730
b11 = gtk_scrolled_window_new(NULL,NULL);
731
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(b11),
250
732
GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
251
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(b1),b1w);
252
gtk_widget_set_usize(GTK_WIDGET(b1),150,150);
253
eb->effect_list_container = GTK_CONTAINER(b1);
733
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(b11),b11w);
734
gtk_widget_set_usize(GTK_WIDGET(b11),150,150);
735
eb->effect_list_container = GTK_CONTAINER(b11);
737
#ifdef GTK_STOCK_GOTO_TOP
738
b121 = gtk_button_new_from_stock(GTK_STOCK_GOTO_TOP);
740
b121 = gtk_button_new_with_label(_("Top"));
742
gtk_signal_connect(GTK_OBJECT(b121),"clicked",
743
GTK_SIGNAL_FUNC(top_click),eb);
744
#ifdef GTK_STOCK_GO_UP
745
b122 = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
747
b122 = gtk_button_new_with_label(_("Up"));
749
gtk_signal_connect(GTK_OBJECT(b122),"clicked",
750
GTK_SIGNAL_FUNC(up_click),eb);
751
#ifdef GTK_STOCK_GO_DOWN
752
b123 = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
754
b123 = gtk_button_new_with_label(_("Down"));
756
gtk_signal_connect(GTK_OBJECT(b123),"clicked",
757
GTK_SIGNAL_FUNC(down_click),eb);
758
#ifdef GTK_STOCK_GOTO_BOTTOM
759
b124 = gtk_button_new_from_stock(GTK_STOCK_GOTO_BOTTOM);
761
b124 = gtk_button_new_with_label(_("Bottom"));
763
gtk_signal_connect(GTK_OBJECT(b124),"clicked",
764
GTK_SIGNAL_FUNC(bottom_click),eb);
766
b12 = gtk_hbox_new(FALSE,5);
767
gtk_box_pack_start(GTK_BOX(b12),b121,FALSE,FALSE,0);
768
gtk_box_pack_start(GTK_BOX(b12),b122,FALSE,FALSE,0);
769
gtk_box_pack_start(GTK_BOX(b12),b123,FALSE,FALSE,0);
770
gtk_box_pack_start(GTK_BOX(b12),b124,FALSE,FALSE,0);
772
b1 = gtk_vbox_new(FALSE,5);
773
gtk_box_pack_start(GTK_BOX(b1),b11,TRUE,TRUE,0);
774
gtk_box_pack_start(GTK_BOX(b1),b12,FALSE,FALSE,0);
255
776
b21w = gtk_alignment_new(0.5,0.5,1.0,1.0);
256
777
eb->dialog_container = GTK_CONTAINER(b21w);