summaryrefslogtreecommitdiff
path: root/src/modules/elementary/datetime_input_ctxpopup/datetime_input_ctxpopup.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/elementary/datetime_input_ctxpopup/datetime_input_ctxpopup.c')
-rw-r--r--src/modules/elementary/datetime_input_ctxpopup/datetime_input_ctxpopup.c406
1 files changed, 0 insertions, 406 deletions
diff --git a/src/modules/elementary/datetime_input_ctxpopup/datetime_input_ctxpopup.c b/src/modules/elementary/datetime_input_ctxpopup/datetime_input_ctxpopup.c
deleted file mode 100644
index 7a15df41cf..0000000000
--- a/src/modules/elementary/datetime_input_ctxpopup/datetime_input_ctxpopup.c
+++ /dev/null
@@ -1,406 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "elementary_config.h"
-#endif
-
-#include <Elementary.h>
-#include "elm_widget.h"
-#include "elm_widget_datetime.h"
-
-#define DATETIME_FIELD_COUNT 6
-#define FIELD_FORMAT_LEN 3
-#define DISKSELECTOR_MIN_ITEMS 4
-#define BUFF_SIZE 1024
-
-typedef struct _Ctxpopup_Module_Data Ctxpopup_Module_Data;
-typedef struct _DiskItem_Data DiskItem_Data;
-
-struct _Ctxpopup_Module_Data
-{
- Elm_Datetime_Module_Data mod_data;
- Evas_Object *ctxpopup;
-};
-
-struct _DiskItem_Data
-{
- Ctxpopup_Module_Data *ctx_mod;
- Elm_Datetime_Field_Type sel_field_type;
- unsigned int sel_field_value;
-};
-
-static void
-_diskselector_item_free_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- free(data);
-}
-
-static void
-_ctxpopup_dismissed_cb(void *data, const Efl_Event *event)
-{
- Ctxpopup_Module_Data *ctx_mod;
- ctx_mod = (Ctxpopup_Module_Data *)data;
- evas_object_del(event->object);
- ctx_mod->ctxpopup = NULL;
-}
-
-static void
-_datetime_resize_cb(void *data, Evas *e EINA_UNUSED,Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- Ctxpopup_Module_Data *ctx_mod;
-
- ctx_mod = (Ctxpopup_Module_Data *)data;
- if (!ctx_mod || !ctx_mod->ctxpopup) return;
-
- evas_object_hide(ctx_mod->ctxpopup);
-}
-
-static void
-_datetime_move_cb(void *data, Evas *e EINA_UNUSED,Evas_Object *obj EINA_UNUSED,
- void *event_info EINA_UNUSED)
-{
- Ctxpopup_Module_Data *ctx_mod;
-
- ctx_mod = (Ctxpopup_Module_Data *)data;
- if (!ctx_mod || !ctx_mod->ctxpopup) return;
-
- evas_object_hide(ctx_mod->ctxpopup);
-}
-
-static void
-_field_value_set(struct tm *tim, Elm_Datetime_Field_Type field_type, int val)
-{
- if (field_type >= (DATETIME_FIELD_COUNT - 1)) return;
-
- int *timearr[]= { &tim->tm_year, &tim->tm_mon, &tim->tm_mday, &tim->tm_hour, &tim->tm_min };
- *timearr[field_type] = val;
-}
-
-static int
-_field_value_get(struct tm *tim, Elm_Datetime_Field_Type field_type)
-{
- if (field_type >= (DATETIME_FIELD_COUNT - 1)) return -1;
-
- int *timearr[]= { &tim->tm_year, &tim->tm_mon, &tim->tm_mday, &tim->tm_hour, &tim->tm_min };
- return (*timearr[field_type]);
-}
-
-static void
-_diskselector_cb(void *data EINA_UNUSED, const Efl_Event *event)
-{
- DiskItem_Data *disk_data;
- struct tm curr_time;
- const char *fmt;
-
- disk_data = (DiskItem_Data *)elm_object_item_data_get(event->info);
- if (!disk_data || !(disk_data->ctx_mod))
- {
- efl_event_callback_stop(event->object);
- return;
- }
-
- elm_datetime_value_get(disk_data->ctx_mod->mod_data.base, &curr_time);
- fmt = disk_data->ctx_mod->mod_data.field_format_get(disk_data->ctx_mod->mod_data.base, disk_data->sel_field_type);
- if ((disk_data->sel_field_type == ELM_DATETIME_HOUR) && ((!strncmp(fmt, "%I", FIELD_FORMAT_LEN)) ||
- (!strncmp(fmt, "%l", FIELD_FORMAT_LEN))) && (curr_time.tm_hour >= 12))
- disk_data->sel_field_value += 12;
- _field_value_set(&curr_time, disk_data->sel_field_type, disk_data->sel_field_value);
- elm_datetime_value_set(disk_data->ctx_mod->mod_data.base, &curr_time);
- evas_object_hide(disk_data->ctx_mod->ctxpopup);
-}
-
-static void
-_ampm_clicked_cb(void *data, const Efl_Event *event EINA_UNUSED)
-{
- Ctxpopup_Module_Data *ctx_mod;
- struct tm curr_time;
-
- ctx_mod = (Ctxpopup_Module_Data *)data;
- if (!ctx_mod)
- {
- efl_event_callback_stop(event->object);
- return;
- }
-
- elm_datetime_value_get(ctx_mod->mod_data.base, &curr_time);
- if (curr_time.tm_hour >= 12) curr_time.tm_hour -= 12;
- else curr_time.tm_hour += 12;
- elm_datetime_value_set(ctx_mod->mod_data.base, &curr_time);
-}
-
-static void
-_field_clicked_cb(void *data, const Efl_Event *event)
-{
- Ctxpopup_Module_Data *ctx_mod;
- Evas_Object *diskselector;
- Elm_Object_Item *item;
- DiskItem_Data *disk_data;
- Elm_Datetime_Field_Type field_type;
- time_t t;
- struct tm time1;
- char buf[BUFF_SIZE], label[BUFF_SIZE];
- const char *fmt;
- int idx, min, max, val;
- unsigned int display_item_num, text_len = 0;
- Evas_Coord x = 0, y = 0, w = 0, h = 0, width;
-
- ctx_mod = (Ctxpopup_Module_Data *)data;
- if (!ctx_mod)
- {
- efl_event_callback_stop(event->object);
- return;
- }
-
- snprintf(buf, sizeof(buf), "datetime/%s", elm_object_style_get(event->object));
-
- if (ctx_mod->ctxpopup)
- evas_object_del(ctx_mod->ctxpopup);
- ctx_mod->ctxpopup = elm_ctxpopup_add(event->object);
- elm_object_style_set(ctx_mod->ctxpopup, buf);
- elm_ctxpopup_horizontal_set(ctx_mod->ctxpopup, EINA_TRUE);
- evas_object_size_hint_weight_set(ctx_mod->ctxpopup, EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(ctx_mod->ctxpopup, EVAS_HINT_FILL, 0.5);
- efl_event_callback_add
- (ctx_mod->ctxpopup, ELM_CTXPOPUP_EVENT_DISMISSED, _ctxpopup_dismissed_cb, ctx_mod);
- elm_ctxpopup_hover_parent_set(ctx_mod->ctxpopup, elm_widget_top_get(event->object));
-
- diskselector = elm_diskselector_add(elm_widget_top_get(ctx_mod->mod_data.base));
- efl_event_callback_add
- (diskselector, EFL_UI_EVENT_CLICKED, _diskselector_cb, NULL);
- elm_object_style_set(diskselector, buf);
- elm_object_content_set(ctx_mod->ctxpopup, diskselector);
-
- t = time(NULL);
- localtime_r(&t, &time1);
-
- field_type = (Elm_Datetime_Field_Type )evas_object_data_get(event->object, "_field_type");
- fmt = ctx_mod->mod_data.field_format_get(ctx_mod->mod_data.base, field_type);
- elm_datetime_value_get(ctx_mod->mod_data.base, &time1);
- val = _field_value_get(&time1, field_type);
- ctx_mod->mod_data.field_limit_get(ctx_mod->mod_data.base, field_type, &min, &max);
-
- time1.tm_mday = 1; // To avoid month wrapping, set the first day of the month to start with.
-
- if ((field_type == ELM_DATETIME_HOUR) && ((!strncmp(fmt, "%I", FIELD_FORMAT_LEN)) ||
- (!strncmp(fmt, "%l", FIELD_FORMAT_LEN))))
- {
- if (max >= 12) max -= 12;
- if (val >= 12) val -= 12;
- if (min >= 12) min -= 12;
- }
- for (idx = min; idx <= max; idx++)
- {
- _field_value_set(&time1, field_type, idx);
- strftime(label, BUFF_SIZE, fmt, &time1);
- if (strlen(label) > text_len) text_len = strlen(label);
- if (idx == val)
- {
- item = elm_diskselector_item_append(diskselector, label, NULL, NULL, NULL);
- elm_diskselector_item_selected_set(item, EINA_TRUE);
- }
- else
- {
- disk_data = (DiskItem_Data *) malloc (sizeof(DiskItem_Data));
- disk_data->ctx_mod = ctx_mod;
- disk_data->sel_field_type = field_type;
- disk_data->sel_field_value = idx;
- item = elm_diskselector_item_append(diskselector, label, NULL, NULL, disk_data);
- elm_object_item_del_cb_set(item, _diskselector_item_free_cb);
- }
- }
- elm_diskselector_side_text_max_length_set(diskselector, text_len);
-
- evas_object_geometry_get(event->object, &x, &y, &w, &h);
- evas_object_geometry_get(elm_widget_top_get(ctx_mod->mod_data.base), NULL, NULL, &width, NULL);
- evas_object_size_hint_min_set(ctx_mod->ctxpopup, width, -1);
- display_item_num = width / (w + elm_config_finger_size_get());
- // always display even number of items to avoid autoselection
- if (display_item_num % 2) display_item_num -= 1;
- if (display_item_num < DISKSELECTOR_MIN_ITEMS)
- display_item_num = DISKSELECTOR_MIN_ITEMS;
- elm_diskselector_display_item_num_set(diskselector, display_item_num);
- elm_diskselector_round_enabled_set(diskselector, EINA_TRUE);
-
- elm_ctxpopup_direction_priority_set(ctx_mod->ctxpopup, ELM_CTXPOPUP_DIRECTION_DOWN,
- ELM_CTXPOPUP_DIRECTION_UP, -1, -1);
- evas_object_move(ctx_mod->ctxpopup, (x+w/2), (y+h));
-
- // if the direction of Ctxpopup is upwards, move it to the top of datetime
- if (elm_ctxpopup_direction_get(ctx_mod->ctxpopup) == ELM_CTXPOPUP_DIRECTION_UP)
- {
- elm_ctxpopup_direction_priority_set(ctx_mod->ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
- ELM_CTXPOPUP_DIRECTION_DOWN, -1, -1);
- evas_object_move(ctx_mod->ctxpopup, (x + w / 2), y);
- }
- evas_object_show(ctx_mod->ctxpopup);
-}
-
-static void
-_access_set(Evas_Object *obj, Elm_Datetime_Field_Type field_type)
-{
- const char* type = NULL;
-
- switch (field_type)
- {
- case ELM_DATETIME_YEAR:
- type = "datetime field, year";
- break;
-
- case ELM_DATETIME_MONTH:
- type = "datetime field, month";
- break;
-
- case ELM_DATETIME_DATE:
- type = "datetime field, date";
- break;
-
- case ELM_DATETIME_HOUR:
- type = "datetime field, hour";
- break;
-
- case ELM_DATETIME_MINUTE:
- type = "datetime field, minute";
- break;
-
- case ELM_DATETIME_AMPM:
- type = "datetime field, AM PM";
- break;
-
- default:
- break;
- }
-
- _elm_access_text_set
- (_elm_access_info_get(obj), ELM_ACCESS_TYPE, type);
- _elm_access_callback_set
- (_elm_access_info_get(obj), ELM_ACCESS_STATE, NULL, NULL);
-}
-
-// module funcs for the specific module type
-EAPI void
-field_value_display(Elm_Datetime_Module_Data *module_data, Evas_Object *obj)
-{
- Ctxpopup_Module_Data *ctx_mod;
- Elm_Datetime_Field_Type field_type;
- struct tm tim;
- char buf[BUFF_SIZE];
- const char *fmt;
-
- ctx_mod = (Ctxpopup_Module_Data *)module_data;
- if (!ctx_mod || !obj) return;
-
- elm_datetime_value_get(ctx_mod->mod_data.base, &tim);
- field_type = (Elm_Datetime_Field_Type )evas_object_data_get(obj, "_field_type");
- fmt = ctx_mod->mod_data.field_format_get(ctx_mod->mod_data.base, field_type);
- buf[0] = 0;
- strftime(buf, sizeof(buf), fmt, &tim);
- if ((!buf[0]) && ((!strcmp(fmt, "%p")) || (!strcmp(fmt, "%P"))))
- {
- // yes BUFF_SIZE is more than 2 bytes!
- if (tim.tm_hour < 12) strcpy(buf, "AM");
- else strcpy(buf, "PM");
- }
- elm_object_text_set(obj, buf);
-}
-
-EAPI Evas_Object *
-field_create(Elm_Datetime_Module_Data *module_data, Elm_Datetime_Field_Type field_type)
-{
- Ctxpopup_Module_Data *ctx_mod;
- Evas_Object *field_obj;
-
- ctx_mod = (Ctxpopup_Module_Data *)module_data;
- if (!ctx_mod) return NULL;
-
- if (field_type == ELM_DATETIME_AMPM)
- {
- field_obj = elm_button_add(ctx_mod->mod_data.base);
- efl_event_callback_add
- (field_obj, EFL_UI_EVENT_CLICKED, _ampm_clicked_cb, ctx_mod);
- }
- else
- {
- field_obj = elm_entry_add(ctx_mod->mod_data.base);
- elm_entry_single_line_set(field_obj, EINA_TRUE);
- elm_entry_editable_set(field_obj, EINA_FALSE);
- elm_entry_input_panel_enabled_set(field_obj, EINA_FALSE);
- elm_entry_context_menu_disabled_set(field_obj, EINA_TRUE);
- efl_event_callback_add
- (field_obj, EFL_UI_EVENT_CLICKED, _field_clicked_cb, ctx_mod);
- }
- evas_object_data_set(field_obj, "_field_type", (void *)field_type);
-
- // ACCESS
- _access_set(field_obj, field_type);
-
- return field_obj;
-}
-
-EAPI Elm_Datetime_Module_Data *
-obj_hook(Evas_Object *obj)
-{
- Ctxpopup_Module_Data *ctx_mod;
- ctx_mod = calloc(1, sizeof(Ctxpopup_Module_Data));
- if (!ctx_mod) return NULL;
-
- evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE,
- _datetime_resize_cb, ctx_mod);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE,
- _datetime_move_cb, ctx_mod);
-
- return ((Elm_Datetime_Module_Data*)ctx_mod);
-}
-
-EAPI void
-obj_unhook(Elm_Datetime_Module_Data *module_data)
-{
- Ctxpopup_Module_Data *ctx_mod;
-
- ctx_mod = (Ctxpopup_Module_Data *)module_data;
- if (!ctx_mod) return;
-
- if (ctx_mod->ctxpopup)
- evas_object_del(ctx_mod->ctxpopup);
-
- free(ctx_mod);
- ctx_mod = NULL;
-}
-
-EAPI void
-obj_hide(Elm_Datetime_Module_Data *module_data)
-{
- Ctxpopup_Module_Data *ctx_mod;
-
- ctx_mod = (Ctxpopup_Module_Data *)module_data;
- if (!ctx_mod) return;
-
- if (ctx_mod->ctxpopup)
- evas_object_hide(ctx_mod->ctxpopup);
-}
-
-// module api funcs needed
-EAPI int
-elm_modapi_init(void *m EINA_UNUSED)
-{
- return 1; // succeed always
-}
-
-EAPI int
-elm_modapi_shutdown(void *m EINA_UNUSED)
-{
- return 1; // succeed always
-}
-
-static Eina_Bool
-_module_init(void)
-{
- return EINA_TRUE;
-}
-
-static void
-_module_shutdown(void)
-{
-}
-
-EINA_MODULE_INIT(_module_init);
-EINA_MODULE_SHUTDOWN(_module_shutdown);