From: Enlightenment S. <no-...@en...> - 2012-07-31 22:07:13
|
Log: [elm] Gengrid inheritable. Author: glima Date: 2012-07-31 15:07:07 -0700 (Tue, 31 Jul 2012) New Revision: 74694 Trac: http://trac.enlightenment.org/e/changeset/74694 Added: trunk/elementary/src/lib/elm_widget_gengrid.h Modified: trunk/elementary/src/lib/Makefile.am trunk/elementary/src/lib/elm_gengrid.c Modified: trunk/elementary/src/lib/Makefile.am =================================================================== --- trunk/elementary/src/lib/Makefile.am 2012-07-31 22:07:02 UTC (rev 74693) +++ trunk/elementary/src/lib/Makefile.am 2012-07-31 22:07:07 UTC (rev 74694) @@ -50,6 +50,7 @@ elm_widget_conform.h \ elm_widget_container.h \ elm_widget_diskselector.h \ +elm_widget_gengrid.h \ elm_widget_genlist.h \ elm_widget_glview.h \ elm_widget_grid.h \ Modified: trunk/elementary/src/lib/elm_gengrid.c =================================================================== --- trunk/elementary/src/lib/elm_gengrid.c 2012-07-31 22:07:02 UTC (rev 74693) +++ trunk/elementary/src/lib/elm_gengrid.c 2012-07-31 22:07:07 UTC (rev 74694) @@ -1,9 +1,7 @@ #include <Elementary.h> #include <Elementary_Cursor.h> #include "elm_priv.h" -#include "elm_interface_scrollable.h" -#include "elm_widget_layout.h" -#include "elm_gen_common.h" +#include "elm_widget_gengrid.h" // internally allocated #define CLASS_ALLOCATED 0x3a70f00f @@ -16,50 +14,9 @@ #define PRELOAD 1 #define REORDER_EFFECT_TIME 0.5 -static const char GENGRID_SMART_NAME[] = "elm_gengrid"; -static const char GENGRID_PAN_SMART_NAME[] = "elm_gengrid_pan"; +EAPI const char ELM_GENGRID_SMART_NAME[] = "elm_gengrid"; +EAPI const char ELM_GENGRID_PAN_SMART_NAME[] = "elm_gengrid_pan"; -#define ELM_GENGRID_DATA_GET(o, sd) \ - Elm_Gengrid_Smart_Data * sd = evas_object_smart_data_get(o) - -#define ELM_GENGRID_PAN_DATA_GET(o, sd) \ - Elm_Gengrid_Pan_Smart_Data * sd = evas_object_smart_data_get(o) - -#define ELM_GENGRID_DATA_GET_OR_RETURN(o, ptr) \ - ELM_GENGRID_DATA_GET(o, ptr); \ - if (!ptr) \ - { \ - CRITICAL("No widget data for object %p (%s)", \ - o, evas_object_type_get(o)); \ - return; \ - } - -#define ELM_GENGRID_DATA_GET_OR_RETURN_VAL(o, ptr, val) \ - ELM_GENGRID_DATA_GET(o, ptr); \ - if (!ptr) \ - { \ - CRITICAL("No widget data for object %p (%s)", \ - o, evas_object_type_get(o)); \ - return val; \ - } - -#define ELM_GENGRID_CHECK(obj) \ - if (!obj || !elm_widget_type_check((obj), GENGRID_SMART_NAME, __func__)) \ - return - -#define ELM_GENGRID_ITEM_CHECK(it) \ - ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item *)it, ); \ - ELM_GENGRID_CHECK(it->base.widget); - -#define ELM_GENGRID_ITEM_CHECK_OR_RETURN(it, ...) \ - ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item *)it, __VA_ARGS__); \ - ELM_GENGRID_CHECK(it->base.widget) __VA_ARGS__; - -#define ELM_GENGRID_ITEM_CHECK_OR_GOTO(it, label) \ - ELM_WIDGET_ITEM_CHECK_OR_GOTO((Elm_Widget_Item *)it, label); \ - if (!it->base.widget || !elm_widget_type_check \ - ((it->base.widget), GENGRID_SMART_NAME, __func__)) goto label; - #define GG_IT(_it) (_it->item) static const Evas_Smart_Interface *_smart_interfaces[] = @@ -67,109 +24,6 @@ (Evas_Smart_Interface *)&ELM_SCROLLABLE_IFACE, NULL }; -typedef struct _Elm_Gengrid_Smart_Data Elm_Gengrid_Smart_Data; -struct _Elm_Gengrid_Smart_Data -{ - Elm_Layout_Smart_Data base; /* base widget smart data as - * first member obligatory, as - * we're inheriting from it */ - - const Elm_Scrollable_Smart_Interface *s_iface; - - Eina_Inlist_Sorted_State *state; - Evas_Object *hit_rect; - Evas_Object *pan_obj; - - Eina_List *selected; /* a list of - * selected - * items */ - Eina_List *group_items; /* a list of - * groups index - * items */ - Eina_Inlist *items; /* an inlist of all items */ - Elm_Gen_Item *reorder_it; /* item currently - * being - * repositioned */ - Elm_Object_Item *last_selected_item; - - Ecore_Job *calc_job; - int walking; - int item_width, item_height; - int group_item_width, group_item_height; - int minw, minh; - unsigned int item_count; - Evas_Coord pan_x, pan_y; - Elm_Object_Select_Mode select_mode; - - Ecore_Cb calc_cb; - Ecore_Cb clear_cb; - - /* longpress timeout. this value comes from _elm_config by - * default. this can be changed by - * elm_gengrid_longpress_timeout_set() */ - double longpress_timeout; - - /* a generation of gengrid. when gengrid is cleared, this value - * will be increased and a new generation will start */ - int generation; - Eina_Compare_Cb item_compare_cb; - - /* The stuff below directly come from gengrid without any thinking */ - unsigned int nmax; - Evas_Coord reorder_item_x, reorder_item_y; - Evas_Coord old_pan_x, old_pan_y; - long items_lost; - double align_x, align_y; - - Eina_Bool reorder_item_changed : 1; - Eina_Bool move_effect_enabled : 1; - - Eina_Bool old_h_bounce; - Eina_Bool old_v_bounce; - - /* a flag for reorder mode enable/disable */ - Eina_Bool reorder_mode : 1; - Eina_Bool was_selected : 1; - - Eina_Bool longpressed : 1; - Eina_Bool pan_changed : 1; - Eina_Bool horizontal : 1; - - /* a flag for items can be highlighted or not. by default this flag - * is true. */ - Eina_Bool highlight : 1; - - Eina_Bool clear_me : 1; /**< a flag whether - * gengrid is marked - * as to be cleared or - * not. if this flag - * is true, gengrid - * clear was already - * deferred. */ - - Eina_Bool on_hold : 1; - - Eina_Bool filled : 1; - Eina_Bool multi : 1; /* a flag for item - * multi - * selection */ -}; - -struct Elm_Gen_Item_Type -{ - Elm_Gen_Item *it; - - Elm_Gengrid_Smart_Data *wsd; - - Ecore_Animator *item_reorder_move_animator; - Evas_Coord gx, gy, ox, oy, tx, ty, rx, ry; - unsigned int moving_effect_start_time; - int prev_group; - - Eina_Bool group_realized : 1; - Eina_Bool moving : 1; -}; - static const char SIG_ACTIVATED[] = "activated"; static const char SIG_CLICKED_DOUBLE[] = "clicked,double"; static const char SIG_LONGPRESSED[] = "longpressed"; @@ -224,22 +78,14 @@ }; EVAS_SMART_SUBCLASS_IFACE_NEW - (GENGRID_SMART_NAME, _elm_gengrid, Elm_Layout_Smart_Class, + (ELM_GENGRID_SMART_NAME, _elm_gengrid, Elm_Gengrid_Smart_Class, Elm_Layout_Smart_Class, elm_layout_smart_class_get, _smart_callbacks, _smart_interfaces); ELM_INTERNAL_SMART_SUBCLASS_NEW - (GENGRID_PAN_SMART_NAME, _elm_gengrid_pan, Elm_Pan_Smart_Class, + (ELM_GENGRID_PAN_SMART_NAME, _elm_gengrid_pan, Elm_Gengrid_Pan_Smart_Class, Elm_Pan_Smart_Class, elm_pan_smart_class_get, NULL); -typedef struct _Elm_Gengrid_Pan_Smart_Data Elm_Gengrid_Pan_Smart_Data; -struct _Elm_Gengrid_Pan_Smart_Data -{ - Elm_Pan_Smart_Data base; - Elm_Gengrid_Smart_Data *wsd; - Ecore_Job *resize_job; -}; - static void _calc_job(void *data) { @@ -1451,7 +1297,7 @@ } static void -_elm_gengrid_pan_smart_set_user(Elm_Pan_Smart_Class *sc) +_elm_gengrid_pan_smart_set_user(Elm_Gengrid_Pan_Smart_Class *sc) { ELM_PAN_CLASS(sc)->base.add = _elm_gengrid_pan_smart_add; ELM_PAN_CLASS(sc)->base.move = _elm_gengrid_pan_smart_move; @@ -2414,7 +2260,7 @@ } static void -_elm_gengrid_smart_set_user(Elm_Layout_Smart_Class *sc) +_elm_gengrid_smart_set_user(Elm_Gengrid_Smart_Class *sc) { ELM_WIDGET_CLASS(sc)->base.add = _elm_gengrid_smart_add; ELM_WIDGET_CLASS(sc)->base.del = _elm_gengrid_smart_del; @@ -2433,6 +2279,24 @@ ELM_LAYOUT_CLASS(sc)->sizing_eval = _elm_gengrid_smart_sizing_eval; } +EAPI const Elm_Gengrid_Smart_Class * +elm_gengrid_smart_class_get(void) +{ + static Elm_Gengrid_Smart_Class _sc = + ELM_GENGRID_SMART_CLASS_INIT_NAME_VERSION(ELM_GENGRID_SMART_NAME); + static const Elm_Gengrid_Smart_Class *class = NULL; + Evas_Smart_Class *esc = (Evas_Smart_Class *)&_sc; + + if (class) + return class; + + _elm_gengrid_smart_set(&_sc); + esc->callbacks = _smart_callbacks; + class = &_sc; + + return class; +} + EAPI Evas_Object * elm_gengrid_add(Evas_Object *parent) { |