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;
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;
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() */
148 /* The stuff below directly come from gengrid without any thinking */
150 Evas_Coord reorder_item_x, reorder_item_y;
151 Evas_Coord old_pan_x, old_pan_y;
153 double align_x, align_y;
155 Eina_Bool horizontal : 1;
156 Eina_Bool move_effect_enabled : 1;
157 Eina_Bool reorder_item_changed : 1;
161 _elm_genlist_item_new(Widget_Data *wd,
162 const Elm_Gen_Item_Class *itc,
164 Elm_Gen_Item *parent,
166 const void *func_data);
169 _elm_genlist_item_widget_get(const Elm_Gen_Item *it);
172 _elm_genlist_page_relative_set(Evas_Object *obj,
177 _elm_genlist_page_relative_get(const Evas_Object *obj,
182 _elm_genlist_page_size_set(Evas_Object *obj,
183 Evas_Coord h_pagesize,
184 Evas_Coord v_pagesize);
187 _elm_genlist_current_page_get(const Evas_Object *obj,
192 _elm_genlist_last_page_get(const Evas_Object *obj,
197 _elm_genlist_page_show(const Evas_Object *obj,
202 _elm_genlist_page_bring_in(const Evas_Object *obj,
207 _elm_genlist_item_unrealize(Elm_Gen_Item *it,
210 _elm_genlist_item_del_serious(Elm_Gen_Item *it);
213 _elm_genlist_item_del_notserious(Elm_Gen_Item *it);