106
115
static GimpRGB black_color;
110
gimp_container_grid_view_get_type (void)
112
static GType view_type = 0;
116
static const GTypeInfo view_info =
118
sizeof (GimpContainerGridViewClass),
119
NULL, /* base_init */
120
NULL, /* base_finalize */
121
(GClassInitFunc) gimp_container_grid_view_class_init,
122
NULL, /* class_finalize */
123
NULL, /* class_data */
124
sizeof (GimpContainerGridView),
126
(GInstanceInitFunc) gimp_container_grid_view_init,
129
static const GInterfaceInfo view_iface_info =
131
(GInterfaceInitFunc) gimp_container_grid_view_view_iface_init,
132
NULL, /* iface_finalize */
133
NULL /* iface_data */
136
view_type = g_type_register_static (GIMP_TYPE_CONTAINER_BOX,
137
"GimpContainerGridView",
140
g_type_add_interface_static (view_type, GIMP_TYPE_CONTAINER_VIEW,
148
119
gimp_container_grid_view_class_init (GimpContainerGridViewClass *klass)
150
121
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
151
122
GtkBindingSet *binding_set;
153
parent_class = g_type_class_peek_parent (klass);
154
124
binding_set = gtk_binding_set_by_class (klass);
156
126
widget_class->focus = gimp_container_grid_view_focus;
172
142
gtk_binding_entry_add_signal (binding_set, GDK_Home, 0,
174
144
G_TYPE_ENUM, GTK_MOVEMENT_BUFFER_ENDS,
176
146
gtk_binding_entry_add_signal (binding_set, GDK_End, 0,
178
148
G_TYPE_ENUM, GTK_MOVEMENT_BUFFER_ENDS,
180
150
gtk_binding_entry_add_signal (binding_set, GDK_Page_Up, 0,
182
152
G_TYPE_ENUM, GTK_MOVEMENT_PAGES,
184
154
gtk_binding_entry_add_signal (binding_set, GDK_Page_Down, 0,
186
156
G_TYPE_ENUM, GTK_MOVEMENT_PAGES,
200
185
grid_view->visible_rows = 0;
201
186
grid_view->selected_item = NULL;
188
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (box->scrolled_win),
203
190
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (box->scrolled_win),
204
191
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
206
grid_view->name_label = gtk_label_new (_("(None)"));
207
gtk_misc_set_alignment (GTK_MISC (grid_view->name_label), 0.0, 0.5);
208
gimp_label_set_attributes (GTK_LABEL (grid_view->name_label),
209
PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC,
211
gtk_box_pack_start (GTK_BOX (grid_view), grid_view->name_label,
213
gtk_box_reorder_child (GTK_BOX (grid_view), grid_view->name_label, 0);
214
gtk_widget_show (grid_view->name_label);
193
gimp_editor_set_show_name (GIMP_EDITOR (grid_view), TRUE);
216
195
grid_view->wrap_box = gtk_hwrap_box_new (FALSE);
217
196
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (box->scrolled_win),
218
197
grid_view->wrap_box);
198
gtk_viewport_set_shadow_type (GTK_VIEWPORT (grid_view->wrap_box->parent),
219
200
gtk_widget_show (grid_view->wrap_box);
221
g_signal_connect (grid_view->wrap_box->parent, "size_allocate",
202
g_signal_connect (grid_view->wrap_box->parent, "size-allocate",
222
203
G_CALLBACK (gimp_container_grid_view_viewport_resized),
205
g_signal_connect (grid_view->wrap_box->parent, "button-press-event",
206
G_CALLBACK (gimp_container_grid_view_button_press),
225
209
GTK_WIDGET_SET_FLAGS (grid_view, GTK_CAN_FOCUS);
229
gimp_container_grid_view_view_iface_init (GimpContainerViewInterface *view_iface)
231
parent_view_iface = g_type_interface_peek_parent (view_iface);
233
view_iface->insert_item = gimp_container_grid_view_insert_item;
234
view_iface->remove_item = gimp_container_grid_view_remove_item;
235
view_iface->reorder_item = gimp_container_grid_view_reorder_item;
236
view_iface->rename_item = gimp_container_grid_view_rename_item;
237
view_iface->select_item = gimp_container_grid_view_select_item;
238
view_iface->clear_items = gimp_container_grid_view_clear_items;
239
view_iface->set_preview_size = gimp_container_grid_view_set_preview_size;
243
213
gimp_container_grid_view_new (GimpContainer *container,
244
214
GimpContext *context,
404
387
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (widget);
406
if (grid_view->selected_item)
389
return gimp_editor_popup_menu (GIMP_EDITOR (widget),
390
gimp_container_grid_view_menu_position,
395
gimp_container_grid_view_set_context (GimpContainerView *view,
396
GimpContext *context)
398
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (view);
399
GtkWrapBoxChild *child;
401
parent_view_iface->set_context (view, context);
403
for (child = GTK_WRAP_BOX (grid_view->wrap_box)->children;
408
return gimp_editor_popup_menu (GIMP_EDITOR (grid_view),
409
gimp_container_grid_view_menu_position,
410
grid_view->selected_item);
407
GimpView *view = GIMP_VIEW (child->widget);
409
gimp_view_renderer_set_context (view->renderer, context);
417
gimp_container_grid_view_insert_item (GimpContainerView *view,
414
gimp_container_grid_view_insert_item (GimpContainerView *container_view,
418
415
GimpViewable *viewable,
421
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (view);
425
preview_size = gimp_container_view_get_preview_size (view, NULL);
427
preview = gimp_view_new_full (viewable,
432
gimp_view_renderer_set_border_type (GIMP_VIEW (preview)->renderer,
418
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (container_view);
422
view_size = gimp_container_view_get_view_size (container_view, NULL);
424
view = gimp_view_new_full (gimp_container_view_get_context (container_view),
426
view_size, view_size, 1,
428
gimp_view_renderer_set_border_type (GIMP_VIEW (view)->renderer,
433
429
GIMP_VIEW_BORDER_WHITE);
434
gimp_view_renderer_remove_idle (GIMP_VIEW (preview)->renderer);
430
gimp_view_renderer_remove_idle (GIMP_VIEW (view)->renderer);
436
gtk_wrap_box_pack (GTK_WRAP_BOX (grid_view->wrap_box), preview,
432
gtk_wrap_box_pack (GTK_WRAP_BOX (grid_view->wrap_box), view,
437
433
FALSE, FALSE, FALSE, FALSE);
440
436
gtk_wrap_box_reorder_child (GTK_WRAP_BOX (grid_view->wrap_box),
443
gtk_widget_show (preview);
445
g_signal_connect (preview, "button_press_event",
439
gtk_widget_show (view);
441
g_signal_connect (view, "button-press-event",
446
442
G_CALLBACK (gimp_container_grid_view_item_selected),
448
g_signal_connect (preview, "double_clicked",
444
g_signal_connect (view, "double-clicked",
449
445
G_CALLBACK (gimp_container_grid_view_item_activated),
451
g_signal_connect (preview, "context",
447
g_signal_connect (view, "context",
452
448
G_CALLBACK (gimp_container_grid_view_item_context),
455
return (gpointer) preview;
451
return (gpointer) view;
459
gimp_container_grid_view_remove_item (GimpContainerView *view,
455
gimp_container_grid_view_remove_item (GimpContainerView *container_view,
460
456
GimpViewable *viewable,
461
457
gpointer insert_data)
463
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (view);
464
GtkWidget *preview = GTK_WIDGET (insert_data);
459
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (container_view);
460
GtkWidget *view = GTK_WIDGET (insert_data);
466
if (preview == (GtkWidget *) grid_view->selected_item)
462
if (view == (GtkWidget *) grid_view->selected_item)
467
463
grid_view->selected_item = NULL;
469
gtk_container_remove (GTK_CONTAINER (grid_view->wrap_box), preview);
465
gtk_container_remove (GTK_CONTAINER (grid_view->wrap_box), view);
473
gimp_container_grid_view_reorder_item (GimpContainerView *view,
469
gimp_container_grid_view_reorder_item (GimpContainerView *container_view,
474
470
GimpViewable *viewable,
476
472
gpointer insert_data)
478
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (view);
479
GtkWidget *preview = GTK_WIDGET (insert_data);
474
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (container_view);
475
GtkWidget *view = GTK_WIDGET (insert_data);
481
477
gtk_wrap_box_reorder_child (GTK_WRAP_BOX (grid_view->wrap_box),
486
gimp_container_grid_view_rename_item (GimpContainerView *view,
482
gimp_container_grid_view_rename_item (GimpContainerView *container_view,
487
483
GimpViewable *viewable,
488
484
gpointer insert_data)
490
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (view);
491
GtkWidget *preview = GTK_WIDGET (insert_data);
486
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (container_view);
487
GtkWidget *view = GTK_WIDGET (insert_data);
493
if (preview == (GtkWidget *) grid_view->selected_item)
489
if (view == (GtkWidget *) grid_view->selected_item)
495
491
gchar *name = gimp_viewable_get_description (viewable, NULL);
497
gtk_label_set_text (GTK_LABEL (grid_view->name_label), name);
493
gimp_editor_set_name (GIMP_EDITOR (container_view), name);
595
gimp_container_grid_view_highlight_item (GimpContainerView *view,
590
gimp_container_grid_view_highlight_item (GimpContainerView *container_view,
596
591
GimpViewable *viewable,
597
592
gpointer insert_data)
599
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (view);
600
GimpContainerBox *box = GIMP_CONTAINER_BOX (view);
594
GimpContainerGridView *grid_view = GIMP_CONTAINER_GRID_VIEW (container_view);
595
GimpContainerBox *box = GIMP_CONTAINER_BOX (container_view);
601
596
GimpContainer *container;
602
GimpView *preview = NULL;
597
GimpView *view = NULL;
604
container = gimp_container_view_get_container (view);
599
container = gimp_container_view_get_container (container_view);
607
preview = GIMP_VIEW (insert_data);
602
view = GIMP_VIEW (insert_data);
609
if (grid_view->selected_item && grid_view->selected_item != preview)
604
if (grid_view->selected_item && grid_view->selected_item != view)
611
606
gimp_view_renderer_set_border_type (grid_view->selected_item->renderer,
612
607
GIMP_VIEW_BORDER_WHITE);
613
608
gimp_view_renderer_update (grid_view->selected_item->renderer);
618
GtkRequisition preview_requisition;
613
GtkRequisition view_requisition;
619
614
GtkAdjustment *adj;
620
615
gint item_height;
644
639
(row + 1) * item_height - adj->page_size);
647
gimp_view_renderer_set_border_type (preview->renderer,
642
gimp_view_renderer_set_border_type (view->renderer,
648
643
GIMP_VIEW_BORDER_BLACK);
649
gimp_view_renderer_update (preview->renderer);
644
gimp_view_renderer_update (view->renderer);
651
name = gimp_viewable_get_description (preview->renderer->viewable, NULL);
652
gtk_label_set_text (GTK_LABEL (grid_view->name_label), name);
646
name = gimp_viewable_get_description (view->renderer->viewable, NULL);
647
gimp_editor_set_name (GIMP_EDITOR (grid_view), name);
657
gtk_label_set_text (GTK_LABEL (grid_view->name_label), _("(None)"));
652
gimp_editor_set_name (GIMP_EDITOR (grid_view), NULL);
660
grid_view->selected_item = preview;
655
grid_view->selected_item = view;
699
694
grid_view->columns = columns;
701
696
gtk_widget_set_size_request (grid_view->wrap_box,
702
columns * preview_requisition.width,
703
rows * preview_requisition.height);
697
columns * view_requisition.width,
698
rows * view_requisition.height);
707
702
grid_view->visible_rows = (allocation->height /
708
preview_requisition.height);
703
view_requisition.height);
711
706
if (grid_view->selected_item)
713
GimpView *preview = grid_view->selected_item;
708
GimpView *view = grid_view->selected_item;
715
gimp_container_grid_view_highlight_item (view,
710
gimp_container_grid_view_highlight_item (container_view,
718
gimp_container_grid_view_button_press (GtkWidget *widget,
719
GdkEventButton *bevent,
720
GimpContainerGridView *grid_view)
722
switch (bevent->button)
725
gimp_editor_popup_menu (GIMP_EDITOR (grid_view), NULL, NULL);