1 /* gtkiconview.h
2  * Copyright (C) 2002, 2004  Anders Carlsson <andersca@gnome.org>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #include "gtk/gtkiconview.h"
19 #include "gtk/gtkcssnodeprivate.h"
20 
21 #ifndef __GTK_ICON_VIEW_PRIVATE_H__
22 #define __GTK_ICON_VIEW_PRIVATE_H__
23 
24 typedef struct _GtkIconViewItem GtkIconViewItem;
25 struct _GtkIconViewItem
26 {
27   GdkRectangle cell_area;
28 
29   gint index;
30 
31   gint row, col;
32 
33   guint selected : 1;
34   guint selected_before_rubberbanding : 1;
35 
36 };
37 
38 struct _GtkIconViewPrivate
39 {
40   GtkCellArea        *cell_area;
41   GtkCellAreaContext *cell_area_context;
42 
43   gulong              add_editable_id;
44   gulong              remove_editable_id;
45   gulong              context_changed_id;
46 
47   GPtrArray          *row_contexts;
48 
49   gint width, height;
50 
51   GtkSelectionMode selection_mode;
52 
53   GdkWindow *bin_window;
54 
55   GList *children;
56 
57   GtkTreeModel *model;
58 
59   GList *items;
60 
61   GtkAdjustment *hadjustment;
62   GtkAdjustment *vadjustment;
63 
64   gint rubberband_x1, rubberband_y1;
65   gint rubberband_x2, rubberband_y2;
66   GdkDevice *rubberband_device;
67   GtkCssNode *rubberband_node;
68 
69   guint scroll_timeout_id;
70   gint scroll_value_diff;
71   gint event_last_x, event_last_y;
72 
73   GtkIconViewItem *anchor_item;
74   GtkIconViewItem *cursor_item;
75 
76   GtkIconViewItem *last_single_clicked;
77   GtkIconViewItem *last_prelight;
78 
79   GtkOrientation item_orientation;
80 
81   gint columns;
82   gint item_width;
83   gint spacing;
84   gint row_spacing;
85   gint column_spacing;
86   gint margin;
87   gint item_padding;
88 
89   gint text_column;
90   gint markup_column;
91   gint pixbuf_column;
92   gint tooltip_column;
93 
94   GtkCellRenderer *pixbuf_cell;
95   GtkCellRenderer *text_cell;
96 
97   /* Drag-and-drop. */
98   GdkModifierType start_button_mask;
99   gint pressed_button;
100   gint press_start_x;
101   gint press_start_y;
102 
103   GdkDragAction source_actions;
104   GdkDragAction dest_actions;
105 
106   GtkTreeRowReference *dest_item;
107   GtkIconViewDropPosition dest_pos;
108 
109   /* scroll to */
110   GtkTreeRowReference *scroll_to_path;
111   gfloat scroll_to_row_align;
112   gfloat scroll_to_col_align;
113   guint scroll_to_use_align : 1;
114 
115   guint source_set : 1;
116   guint dest_set : 1;
117   guint reorderable : 1;
118   guint empty_view_drop :1;
119   guint activate_on_single_click : 1;
120 
121   guint modify_selection_pressed : 1;
122   guint extend_selection_pressed : 1;
123 
124   guint draw_focus : 1;
125 
126   /* GtkScrollablePolicy needs to be checked when
127    * driving the scrollable adjustment values */
128   guint hscroll_policy : 1;
129   guint vscroll_policy : 1;
130 
131   guint doing_rubberband : 1;
132 
133 };
134 
135 void                 _gtk_icon_view_set_cell_data                  (GtkIconView            *icon_view,
136                                                                     GtkIconViewItem        *item);
137 void                 _gtk_icon_view_set_cursor_item                (GtkIconView            *icon_view,
138                                                                     GtkIconViewItem        *item,
139                                                                     GtkCellRenderer        *cursor_cell);
140 GtkIconViewItem *    _gtk_icon_view_get_item_at_coords             (GtkIconView            *icon_view,
141                                                                     gint                    x,
142                                                                     gint                    y,
143                                                                     gboolean                only_in_cell,
144                                                                     GtkCellRenderer       **cell_at_pos);
145 void                 _gtk_icon_view_select_item                    (GtkIconView            *icon_view,
146                                                                     GtkIconViewItem        *item);
147 void                 _gtk_icon_view_unselect_item                  (GtkIconView            *icon_view,
148                                                                     GtkIconViewItem        *item);
149 
150 G_END_DECLS
151 
152 #endif /* __GTK_ICON_VIEW_PRIVATE_H__ */
153