summaryrefslogtreecommitdiff
path: root/src/bin
diff options
context:
space:
mode:
authorCarsten Haitzler <raster@rasterman.com>2010-11-18 11:10:58 +0000
committerCarsten Haitzler <raster@rasterman.com>2010-11-18 11:10:58 +0000
commitc88a29cc0a0ff9d89c133815f2180e0b81bb8984 (patch)
treec040ec0f64d259cbae3478bd635b8a57ea0ff8c7 /src/bin
parentd5017be456f5bb8a56a83560e18655507d1fea9d (diff)
ummm fix warnings. merge with my start on generic data -> parts in
item mapping. SVN revision: 54684
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/test_store.c146
1 files changed, 122 insertions, 24 deletions
diff --git a/src/bin/test_store.c b/src/bin/test_store.c
index a010e040c..62ab5b2af 100644
--- a/src/bin/test_store.c
+++ b/src/bin/test_store.c
@@ -29,17 +29,88 @@ typedef struct _Elm_Store_Item Elm_Store_Item;
29typedef struct _Elm_Store_Item_Filesystem Elm_Store_Item_Filesystem; 29typedef struct _Elm_Store_Item_Filesystem Elm_Store_Item_Filesystem;
30typedef struct _Elm_Store_Item_Info Elm_Store_Item_Info; 30typedef struct _Elm_Store_Item_Info Elm_Store_Item_Info;
31typedef struct _Elm_Store_Item_Info_Filesystem Elm_Store_Item_Info_Filesystem; 31typedef struct _Elm_Store_Item_Info_Filesystem Elm_Store_Item_Info_Filesystem;
32typedef struct _Elm_Store_Item_Mapping Elm_Store_Item_Mapping;
33typedef struct _Elm_Store_Item_Mapping_Empty Elm_Store_Item_Mapping_Empty;
34typedef struct _Elm_Store_Item_Mapping_Icon Elm_Store_Item_Mapping_Icon;
35typedef struct _Elm_Store_Item_Mapping_Custom Elm_Store_Item_Mapping_Custom;
32 36
33typedef Eina_Bool (*Elm_Store_Item_List_Cb) (void *data, Elm_Store_Item_Info *info); 37typedef Eina_Bool (*Elm_Store_Item_List_Cb) (void *data, Elm_Store_Item_Info *info);
34typedef void (*Elm_Store_Item_Fetch_Cb) (void *data, Elm_Store_Item *sti); 38typedef void (*Elm_Store_Item_Fetch_Cb) (void *data, Elm_Store_Item *sti);
35typedef void (*Elm_Store_Item_Unfetch_Cb) (void *data, Elm_Store_Item *sti); 39typedef void (*Elm_Store_Item_Unfetch_Cb) (void *data, Elm_Store_Item *sti);
40typedef void *(*Elm_Store_Item_Mapping_Cb) (void *data, Elm_Store_Item *sti, const char *part);
41
42typedef enum
43{
44 ELM_STORE_ITEM_MAPPING_NONE = 0,
45
46 ELM_STORE_ITEM_MAPPING_LABEL, // const char * -> label
47 ELM_STORE_ITEM_MAPPING_STATE, // Eina_Bool -> state
48 ELM_STORE_ITEM_MAPPING_ICON, // char * -> icon path
49 ELM_STORE_ITEM_MAPPING_PHOTO, // char * -> photo path
50 ELM_STORE_ITEM_MAPPING_CUSTOM, // item->custom(it->data, it, part) -> void * (-> any)
51 // can add more here as needed by common apps
52 ELM_STORE_ITEM_MAPPING_LAST
53} Elm_Store_Item_Mapping_Type;
54
55struct _Elm_Store_Item_Mapping_Icon
56{
57 int w, h;
58 Elm_Icon_Lookup_Order lookup_order;
59 Eina_Bool standard_name : 1;
60 Eina_Bool no_scale : 1;
61 Eina_Bool smooth : 1;
62 Eina_Bool scale_up : 1;
63 Eina_Bool scale_down : 1;
64 Eina_Bool preload : 1;
65};
66
67struct _Elm_Store_Item_Mapping_Empty
68{
69 Eina_Bool dummy;
70};
71
72struct _Elm_Store_Item_Mapping_Custom
73{
74 Elm_Store_Item_Mapping_Cb func;
75};
76
77struct _Elm_Store_Item_Mapping
78{
79 Elm_Store_Item_Mapping_Type type;
80 const char *part;
81 int offset;
82 union {
83 Elm_Store_Item_Mapping_Empty empty;
84 Elm_Store_Item_Mapping_Icon icon;
85 Elm_Store_Item_Mapping_Custom custom;
86 // add more types here
87 } details;
88};
89
90struct _Elm_Store_Item_Info
91{
92 Elm_Genlist_Item_Class *item_class;
93 const Elm_Store_Item_Mapping *mapping;
94 void *data;
95 char *sort_id;
96};
97
98struct _Elm_Store_Item_Info_Filesystem
99{
100 Elm_Store_Item_Info base;
101 char *path;
102};
103
104#define ELM_STORE_ITEM_MAPPING_END { ELM_STORE_ITEM_MAPPING_NONE, NULL, 0, { .empty = { EINA_TRUE } } }
105#define ELM_STORE_ITEM_MAPPING_OFFSET(st, it) offsetof(st, it)
106
107EAPI void elm_store_free(Elm_Store *st);
36 108
37EAPI Elm_Store *elm_store_filesystem_new(void); 109EAPI Elm_Store *elm_store_filesystem_new(void);
38EAPI void elm_store_filesystem_directory_set(Elm_Store *st, const char *dir); 110EAPI void elm_store_filesystem_directory_set(Elm_Store *st, const char *dir);
39EAPI const char *elm_store_filesystem_directory_get(const Elm_Store *st); 111EAPI const char *elm_store_filesystem_directory_get(const Elm_Store *st);
40EAPI const char *elm_store_item_filesystem_path_get(const Elm_Store_Item *sti); 112EAPI const char *elm_store_item_filesystem_path_get(const Elm_Store_Item *sti);
41 113
42EAPI void elm_store_free(Elm_Store *st);
43EAPI void elm_store_target_genlist_set(Elm_Store *st, Evas_Object *obj); 114EAPI void elm_store_target_genlist_set(Elm_Store *st, Evas_Object *obj);
44 115
45EAPI void elm_store_cache_set(Elm_Store *st, int max); 116EAPI void elm_store_cache_set(Elm_Store *st, int max);
@@ -58,15 +129,15 @@ EAPI const Elm_Store *elm_store_item_store_get(const Elm_Store_Item *sti)
58EAPI const Elm_Genlist_Item *elm_store_item_genlist_item_get(const Elm_Store_Item *sti); 129EAPI const Elm_Genlist_Item *elm_store_item_genlist_item_get(const Elm_Store_Item *sti);
59 130
60// private 131// private
61#if 1 132#if 0
62#define DBG(f, args...) printf(f, ##args) 133#define DBG(f, args...) printf(f, ##args)
63#else 134#else
64#define DBG(f, args...) 135#define DBG(f, args...)
65#endif 136#endif
66 137
67#define ELM_STORE_MAGIC 0x3f89ea56 138#define ELM_STORE_MAGIC 0x3f89ea56
68#define ELM_STORE_FILESYSTEM_MAGIC 0x3f89ea57 139#define ELM_STORE_FILESYSTEM_MAGIC 0x3f89ea57
69#define ELM_STORE_ITEM_MAGIC 0x5afe8c1d 140#define ELM_STORE_ITEM_MAGIC 0x5afe8c1d
70 141
71struct _Elm_Store 142struct _Elm_Store
72{ 143{
@@ -116,13 +187,6 @@ struct _Elm_Store_Item
116 Eina_Bool fetched : 1; 187 Eina_Bool fetched : 1;
117}; 188};
118 189
119struct _Elm_Store_Item_Info
120{
121 Elm_Genlist_Item_Class *item_class;
122 void *data;
123 char *sort_id;
124};
125
126struct _Elm_Store_Filesystem 190struct _Elm_Store_Filesystem
127{ 191{
128 Elm_Store base; 192 Elm_Store base;
@@ -136,13 +200,6 @@ struct _Elm_Store_Item_Filesystem
136 const char *path; 200 const char *path;
137}; 201};
138 202
139struct _Elm_Store_Item_Info_Filesystem
140{
141 Elm_Store_Item_Info base;
142 char *path;
143};
144
145
146static Elm_Genlist_Item_Class _store_item_class; 203static Elm_Genlist_Item_Class _store_item_class;
147 204
148static void 205static void
@@ -749,7 +806,7 @@ elm_store_item_data_set(Elm_Store_Item *sti, void *data)
749EAPI void * 806EAPI void *
750elm_store_item_data_get(Elm_Store_Item *sti) 807elm_store_item_data_get(Elm_Store_Item *sti)
751{ 808{
752 if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return; 809 if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
753 void *d; 810 void *d;
754 LKL(sti->lock); 811 LKL(sti->lock);
755 d = sti->data; 812 d = sti->data;
@@ -760,7 +817,7 @@ elm_store_item_data_get(Elm_Store_Item *sti)
760EAPI const Elm_Store * 817EAPI const Elm_Store *
761elm_store_item_store_get(const Elm_Store_Item *sti) 818elm_store_item_store_get(const Elm_Store_Item *sti)
762{ 819{
763 if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return; 820 if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
764 // dont need lock 821 // dont need lock
765 return sti->store; 822 return sti->store;
766} 823}
@@ -768,7 +825,7 @@ elm_store_item_store_get(const Elm_Store_Item *sti)
768EAPI const Elm_Genlist_Item * 825EAPI const Elm_Genlist_Item *
769elm_store_item_genlist_item_get(const Elm_Store_Item *sti) 826elm_store_item_genlist_item_get(const Elm_Store_Item *sti)
770{ 827{
771 if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return; 828 if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
772 // dont need lock 829 // dont need lock
773 return sti->item; 830 return sti->item;
774} 831}
@@ -778,11 +835,11 @@ elm_store_item_filesystem_path_get(const Elm_Store_Item *item)
778{ 835{
779 Elm_Store_Item_Filesystem *sti = (Elm_Store_Item_Filesystem *)item; 836 Elm_Store_Item_Filesystem *sti = (Elm_Store_Item_Filesystem *)item;
780 Elm_Store_Filesystem *st; 837 Elm_Store_Filesystem *st;
781 if (!EINA_MAGIC_CHECK(item, ELM_STORE_ITEM_MAGIC)) return; 838 if (!EINA_MAGIC_CHECK(item, ELM_STORE_ITEM_MAGIC)) return NULL;
782 if (!EINA_MAGIC_CHECK(item->store, ELM_STORE_MAGIC)) return; 839 if (!EINA_MAGIC_CHECK(item->store, ELM_STORE_MAGIC)) return NULL;
783 /* ensure we're dealing with filesystem item */ 840 /* ensure we're dealing with filesystem item */
784 st = (Elm_Store_Filesystem *)item->store; 841 st = (Elm_Store_Filesystem *)item->store;
785 if (!EINA_MAGIC_CHECK(st, ELM_STORE_FILESYSTEM_MAGIC)) return; 842 if (!EINA_MAGIC_CHECK(st, ELM_STORE_FILESYSTEM_MAGIC)) return NULL;
786 // dont need lock 843 // dont need lock
787 return sti->path; 844 return sti->path;
788} 845}
@@ -831,6 +888,46 @@ _st_longpress(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in
831// store callbacks to handle loading/parsing/freeing of store items from src 888// store callbacks to handle loading/parsing/freeing of store items from src
832static Elm_Genlist_Item_Class itc1; 889static Elm_Genlist_Item_Class itc1;
833 890
891static const Elm_Store_Item_Mapping it1_mapping[] =
892{
893 {
894 ELM_STORE_ITEM_MAPPING_LABEL,
895 "elm.title.1", ELM_STORE_ITEM_MAPPING_OFFSET(My_Item, from),
896 { .empty = {
897 EINA_TRUE
898 } } },
899 {
900 ELM_STORE_ITEM_MAPPING_LABEL,
901 "elm.title.2", ELM_STORE_ITEM_MAPPING_OFFSET(My_Item, from),
902 { .empty = {
903 EINA_TRUE
904 } } },
905 {
906 ELM_STORE_ITEM_MAPPING_LABEL,
907 "elm.text", ELM_STORE_ITEM_MAPPING_OFFSET(My_Item, from),
908 { .empty = {
909 EINA_TRUE
910 } } },
911 {
912 ELM_STORE_ITEM_MAPPING_ICON,
913 "elm.swallow.icon", 0,
914 { .icon = {
915 48, 48,
916 ELM_ICON_LOOKUP_THEME_FDO,
917 EINA_TRUE, EINA_FALSE,
918 EINA_TRUE,
919 EINA_FALSE, EINA_FALSE,
920 EINA_TRUE
921 } } },
922 {
923 ELM_STORE_ITEM_MAPPING_CUSTOM,
924 "elm.swallow.end", 0,
925 { .custom = {
926 NULL
927 } } },
928 ELM_STORE_ITEM_MAPPING_END
929};
930
834 931
835////// **** WARNING *********************************************************** 932////// **** WARNING ***********************************************************
836//// * This function runs inside a thread outside efl mainloop. Be careful! * 933//// * This function runs inside a thread outside efl mainloop. Be careful! *
@@ -861,6 +958,7 @@ _st_store_list(void *data __UNUSED__, Elm_Store_Item_Info *item_info)
861 // provided by the app, store will fill everything else in, so it also 958 // provided by the app, store will fill everything else in, so it also
862 // has to be writable 959 // has to be writable
863 info->base.item_class = &itc1; // based on item info - return the item class wanted (only style field used - rest reset to internal funcs store sets up to get label/icon etc) 960 info->base.item_class = &itc1; // based on item info - return the item class wanted (only style field used - rest reset to internal funcs store sets up to get label/icon etc)
961 info->base.mapping = it1_mapping;
864 info->base.data = NULL; // if we can already parse and load all of item here and want to - set this 962 info->base.data = NULL; // if we can already parse and load all of item here and want to - set this
865 return EINA_TRUE; // return true to include this, false not to 963 return EINA_TRUE; // return true to include this, false not to
866} 964}