8eb791aaadce0780e4784f254c1a5061bc31daf1
[framework/uifw/elementary.git] / src / edje_externals / elm_calendar.c
1 #include "private.h"
2
3 typedef struct _Elm_Params_Calendar
4 {
5    Elm_Params base;
6    int year_min;
7    int year_max;
8    Eina_Bool sel_enable;
9    Eina_Bool sel_exists:1;
10 } Elm_Params_Calendar;
11
12 static void
13 external_calendar_state_set(void *data __UNUSED__, Evas_Object *obj,
14                             const void *from_params, const void *to_params,
15                             float pos __UNUSED__)
16 {
17    const Elm_Params_Calendar *p;
18    int min,max;
19
20    if (to_params) p = to_params;
21    else if (from_params) p = from_params;
22    else return;
23
24    if (p->year_min)
25      {
26         elm_calendar_min_max_year_get(obj, NULL, &max);
27         elm_calendar_min_max_year_set(obj, p->year_min, max);
28      }
29    if (p->year_max)
30      {
31         elm_calendar_min_max_year_get(obj, &min, NULL);
32         elm_calendar_min_max_year_set(obj, min, p->year_max);
33      }
34    if (p->sel_exists)
35      elm_calendar_day_selection_disabled_set(obj, !p->sel_enable);
36 }
37
38 static Eina_Bool
39 external_calendar_param_set(void *data __UNUSED__, Evas_Object *obj,
40                             const Edje_External_Param *param)
41 {
42    int min,max;
43
44    if (!strcmp(param->name, "year_min"))
45      {
46         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
47           {
48              elm_calendar_min_max_year_get(obj, NULL, &max);
49              elm_calendar_min_max_year_set(obj, param->i, max);
50              return EINA_TRUE;
51           }
52      }
53    else if (!strcmp(param->name, "year_max"))
54      {
55         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
56           {
57              elm_calendar_min_max_year_get(obj, &min, NULL);
58              elm_calendar_min_max_year_set(obj, min,param->i);
59              return EINA_TRUE;
60           }
61      }
62    else if (!strcmp(param->name, "sel_enable"))
63      {
64         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
65           {
66              elm_calendar_day_selection_disabled_set(obj,!param->i );
67              return EINA_TRUE;
68           }
69      }
70
71    ERR("unknown parameter '%s' of type '%s'",
72        param->name, edje_external_param_type_str(param->type));
73
74    return EINA_FALSE;
75 }
76
77 static Eina_Bool
78 external_calendar_param_get(void *data __UNUSED__, const Evas_Object *obj,
79                             Edje_External_Param *param)
80 {
81    int min, max;
82
83    if (!strcmp(param->name, "year_min"))
84      {
85         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
86           {
87              elm_calendar_min_max_year_get(obj, &(param->i) ,&max);
88              return EINA_TRUE;
89           }
90      }
91    else if (!strcmp(param->name, "year_max"))
92      {
93         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
94           {
95              elm_calendar_min_max_year_get(obj, &min,&(param->i));
96              return EINA_TRUE;
97           }
98      }
99    else if (!strcmp(param->name, "sel_enable"))
100      {
101         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
102           {
103              param->i = !elm_calendar_day_selection_disabled_get(obj);
104              return EINA_TRUE;
105           }
106      }
107
108    ERR("unknown parameter '%s' of type '%s'",
109        param->name, edje_external_param_type_str(param->type));
110
111    return EINA_FALSE;
112 }
113
114 static void *
115 external_calendar_params_parse(void *data __UNUSED__,
116                                Evas_Object *obj __UNUSED__,
117                                const Eina_List *params)
118 {
119    Elm_Params_Calendar *mem;
120    Edje_External_Param *param;
121    const Eina_List *l;
122
123    mem = calloc(1, sizeof(Elm_Params_Calendar));
124    if (!mem)
125      return NULL;
126
127    EINA_LIST_FOREACH(params, l, param)
128      {
129         if (!strcmp(param->name, "year_min"))
130           mem->year_min = param->i;
131
132         else if(!strcmp(param->name, "year_max"))
133           mem->year_max = param->i;
134
135         else if (!strcmp(param->name, "sel_enable"))
136           {
137              mem->sel_enable = param->i;
138              mem->sel_exists = EINA_TRUE;
139           }
140      }
141
142    return mem;
143 }
144
145 static Evas_Object *
146 external_calendar_content_get(void *data __UNUSED__,
147                               const Evas_Object *obj __UNUSED__,
148                               const char *content __UNUSED__)
149 {
150    ERR("No content.");
151    return NULL;
152 }
153
154 static void
155 external_calendar_params_free(void *params)
156 {
157    free(params);
158 }
159
160 static Edje_External_Param_Info external_calendar_params[] = {
161    DEFINE_EXTERNAL_COMMON_PARAMS,
162    EDJE_EXTERNAL_PARAM_INFO_INT("year_min"),
163    EDJE_EXTERNAL_PARAM_INFO_INT("year_max"),
164    EDJE_EXTERNAL_PARAM_INFO_BOOL("sel_enable"),
165    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
166 };
167
168 DEFINE_EXTERNAL_ICON_ADD(calendar, "calendar");
169 DEFINE_EXTERNAL_TYPE_SIMPLE(calendar, "Calendar");