4 #include <Elementary.h>
5 #include <Elementary_Cursor.h>
8 #define ELM_GEN_ITEM_FROM_INLIST(it) \
9 ((it) ? EINA_INLIST_CONTAINER_GET(it, Elm_Gen_Item) : NULL)
11 #define SWIPE_MOVES 12
13 typedef struct Elm_Gen_Item_Type Elm_Gen_Item_Type;
14 typedef struct Elm_Gen_Item_Tooltip Elm_Gen_Item_Tooltip;
15 typedef struct _Widget_Data Widget_Data;
17 struct Elm_Gen_Item_Tooltip
20 Elm_Tooltip_Item_Content_Cb content_cb;
23 Eina_Bool free_size : 1;
31 Elm_Gen_Item_Type *item;
32 const Elm_Gen_Item_Class *itc;
33 Evas_Coord x, y, dx, dy;
36 Eina_List *labels, *contents, *states, *content_objs;
37 Ecore_Timer *long_timer;
40 int generation; /* a generation of an item. when the item is created, this value is set to the value of genlist generation. this value will be decreased when the item is going to be deleted */
41 const char *mouse_cursor;
49 Elm_Gen_Item_Tooltip tooltip;
50 Ecore_Cb del_cb, sel_cb, highlight_cb;
51 Ecore_Cb unsel_cb, unhighlight_cb, unrealize_cb;
53 Eina_Bool want_unrealize : 1;
54 Eina_Bool display_only : 1;
55 Eina_Bool realized : 1;
56 Eina_Bool selected : 1;
57 Eina_Bool highlighted : 1;
58 Eina_Bool disabled : 1;
59 Eina_Bool dragging : 1;
62 Eina_Bool reorder : 1;
63 Eina_Bool mode_set : 1; /* item uses style mode for highlight/select */
66 typedef struct _Pan Pan;
69 Evas_Object_Smart_Clipped_Data __clipped_data;
71 Ecore_Job *resize_job;
76 Eina_Inlist_Sorted_State *state;
77 Evas_Object *obj; /* the genlist object */
78 Evas_Object *scr; /* a smart scroller object which is used internally in genlist */
79 Evas_Object *pan_smart; /* "elm_genlist_pan" evas smart object. this is an extern pan of smart scroller(scr). */
81 Eina_List *group_items; /* list of groups index items */
82 Eina_Inlist *items; /* inlist of all items */
83 Elm_Gen_Item *reorder_it; /* item currently being repositioned */
84 Elm_Gen_Item *last_selected_item;
85 Pan *pan; /* pan_smart object's smart data */
88 int item_width, item_height;
89 int group_item_width, group_item_height;
92 Evas_Coord pan_x, pan_y;
93 Eina_Bool reorder_mode : 1; /* a flag for reorder mode enable/disable */
94 Eina_Bool on_hold : 1;
95 Eina_Bool multi : 1; /* a flag for item multi selection */
96 Eina_Bool no_select : 1;
97 Eina_Bool wasselected : 1;
98 Eina_Bool always_select : 1;
99 Eina_Bool clear_me : 1; /* a flag whether genlist is marked as to be cleared or not. if this flag is true, genlist clear was already deferred. */
100 Eina_Bool h_bounce : 1;
101 Eina_Bool v_bounce : 1;
102 Ecore_Cb del_cb, calc_cb, sizing_cb;
104 ////////////////////////////////////
105 Eina_Inlist *blocks; /* inlist of all blocks. a block consists of a certain number of items. maximum number of items in a block is 'max_items_per_block'. */
106 Evas_Coord reorder_old_pan_y, w, h, realminw, prev_viewport_w;
107 Ecore_Job *update_job;
108 Ecore_Idle_Enterer *queue_idle_enterer;
109 Ecore_Idler *must_recalc_idler;
111 Elm_Gen_Item *show_item, *anchor_item, *mode_item, *reorder_rel, *expanded_item;
112 Eina_Inlist *item_cache; /* an inlist of edje object it cache. */
114 Evas_Coord reorder_start_y; /* reorder it's initial y coordinate in the pan. */
116 Ecore_Timer *multi_timer, *scr_hold_timer;
117 Ecore_Animator *reorder_move_animator;
118 const char *mode_type;
119 const char *mode_item_style;
120 unsigned int start_time;
121 Evas_Coord prev_x, prev_y, prev_mx, prev_my;
122 Evas_Coord cur_x, cur_y, cur_mx, cur_my;
123 Eina_Bool mouse_down : 1;
124 Eina_Bool multi_down : 1;
125 Eina_Bool multi_timeout : 1;
126 Eina_Bool multitouched : 1;
127 Eina_Bool longpressed : 1;
128 Eina_Bool bring_in : 1;
129 Eina_Bool compress : 1;
130 Eina_Bool height_for_width : 1;
131 Eina_Bool homogeneous : 1;
133 Eina_Bool reorder_pan_move : 1;
134 Eina_Bool auto_scroll_enabled : 1;
135 Eina_Bool pan_resized : 1;
139 } history[SWIPE_MOVES];
141 int item_cache_count;
142 int item_cache_max; /* maximum number of cached items */
144 int max_items_per_block; /* maximum number of items per block */
145 double longpress_timeout; /* longpress timeout. this value comes from _elm_config by default. this can be changed by elm_genlist_longpress_timeout_set() */
146 int generation; /* a generation of genlist. when genlist is cleared, this value will be increased and a new generation will start */
148 Eina_Bool requeue : 1;
150 /* The stuff below directly come from gengrid without any thinking */
152 Evas_Coord reorder_item_x, reorder_item_y;
153 Evas_Coord old_pan_x, old_pan_y;
155 double align_x, align_y;
157 Eina_Bool horizontal : 1;
158 Eina_Bool move_effect_enabled : 1;
159 Eina_Bool reorder_item_changed : 1;
163 _elm_genlist_item_new(Widget_Data *wd,
164 const Elm_Gen_Item_Class *itc,
166 Elm_Gen_Item *parent,
168 const void *func_data);
171 _elm_genlist_item_widget_get(const Elm_Gen_Item *it);
174 _elm_genlist_page_relative_set(Evas_Object *obj,
179 _elm_genlist_page_relative_get(const Evas_Object *obj,
184 _elm_genlist_page_size_set(Evas_Object *obj,
185 Evas_Coord h_pagesize,
186 Evas_Coord v_pagesize);
189 _elm_genlist_current_page_get(const Evas_Object *obj,
194 _elm_genlist_last_page_get(const Evas_Object *obj,
199 _elm_genlist_page_show(const Evas_Object *obj,
204 _elm_genlist_page_bring_in(const Evas_Object *obj,
209 _elm_genlist_item_unrealize(Elm_Gen_Item *it,
212 _elm_genlist_item_del_serious(Elm_Gen_Item *it);
215 _elm_genlist_item_del_notserious(Elm_Gen_Item *it);