* limitations under the License.
*/
+#define TITLE_BG_Y2 (104.0 / BASE_RESOLUTION_Y)
+
+#define CONTROLS_X1 0.39
+#define LABELS_X2 0.62
+
+#define GUIDE_LABEL_Y1 0.14
+#define GUIDE_LABEL_Y2 0.18
+
+#define MAIN_LABEL_Y1 0.21
+#define MAIN_LABEL_Y2 0.25
+
+#define MANUAL_SETUP_Y1 0.26
+#define MANUAL_SETUP_Y2 0.31
+#define MANUAL_SETUP_X2 0.62
+
+#define DATE_LABEL_Y1 0.33
+#define DATE_LABEL_Y2 0.37
+
+#define DATE_ITEM_Y1 0.39
+#define DATE_ITEM_Y2 0.53
+#define DATE_ITEM_X2 0.62
+
+#define _24HOUR_LABEL_Y1 0.55
+#define _24HOUR_LABEL_Y2 0.59
+
+#define _24HOUR_ITEM_Y1 0.60
+#define _24HOUR_ITEM_Y2 0.64
+#define _24HOUR_ITEM_X2 0.55
+
+#define TIME_LABEL_Y1 0.65
+#define TIME_LABEL_Y2 0.69
+
+#define TIME_ITEM_Y1 0.70
+#define TIME_ITEM_Y2 0.84
+#define TIME_ITEM_X2 0.62
+
+
group {
name, GRP_VIEW_CLOCK;
scale, 1;
description {
state, "default" 0.0;
- min, 0 104;
- rel2.relative, 1.0 0.0;
- align, 0.5 0.0;
- fixed, 0 1;
- }
- }
-
- part {
- name, PART_TOP_TITLE;
- type, TEXT;
- scale, 1;
- description {
- state, "default" 0.0;
- color, 51 51 51 255;
- rel1.to, "title.bg";
- rel2.to, "title.bg";
- text {
- font, FONT_REGULAR;
- size, 46;
- align, 0.5 0.5;
- }
- }
- }
-
- part {
- name, "padding.guide";
- type, SPACER;
- scale, 1;
- description {
- state, "default" 0.0;
- min, 0 68;
- align, 0.5 0.0;
- rel1 {
- to, "title.bg";
- relative, 0.0 1.0;
- }
- rel2.to, "title.bg";
+ rel1.relative, 0.0 0.0;
+ rel2.relative, 1.0 TITLE_BG_Y2;
}
- }
-
- part {
- name, "part.guide.bg";
- type, SPACER;
- scale, 1;
- description {
- state, "default" 0.0;
- min, 0 32;
- rel1 {
- to, "padding.guide";
- relative, 0.0 1.0;
+ part {
+ name, PART_TOP_TITLE;
+ type, TEXT;
+ scale, 1;
+ description {
+ state, "default" 0.0;
+ color, 51 51 51 255;
+ text {
+ font, FONT_REGULAR;
+ size, 46;
+ align, 0.5 0.5;
+ }
}
- rel2.to, "padding.guide";
- align, 0.5 0.0;
}
}
description {
state, "default" 0.0;
color, 116 116 116 255;
- rel1.to, "part.guide.bg";
- rel2.to, "part.guide.bg";
+ rel1.relative, 0.0 GUIDE_LABEL_Y1;
+ rel2.relative, 1.0 GUIDE_LABEL_Y2;
text {
font, FONT_LIGHT;
size, 32;
}
part {
- name, "padding.main";
- type, SPACER;
- scale, 1;
- description {
- state, "default" 0.0;
- min, 0 74;
- align, 0.5 0.0;
- rel1 {
- to, "part.guide.bg";
- relative, 0.0 1.0;
- }
- rel2.to, "part.guide.bg";
- }
- }
-
- part {
- name, "part.main.bg";
- type, SPACER;
- scale, 1;
- description {
- state, "default" 0.0;
- min, 0 578;
- rel1 {
- to, "padding.main";
- relative, 0.0 1.0;
- }
- rel2.to, "padding.main";
- align, 0.5 0.0;
- }
- }
-
- part {
- name, "part.main";
- type, SPACER;
- scale, 1;
- description {
- state, "default" 0.0;
- max, 446 578;
- fixed, 1 1;
- align, 0.5 0.0;
- rel1.to, "part.main.bg";
- rel2.to, "part.main.bg";
- }
- }
-
- part {
name, PART_MAIN_LABEL_SETUP;
type, TEXT;
scale, 1;
description {
state, "default" 0.0;
color, 116 116 116 255;
- max, 446 32;
- fixed, 1 1;
- align, 0.5 0.0;
- rel1.to, "part.main";
- rel2.to, "part.main";
+ align, 0.0 0.5;
+ rel1.relative, CONTROLS_X1 MAIN_LABEL_Y1;
+ rel2.relative, LABELS_X2 MAIN_LABEL_Y2;
text {
font, FONT_LIGHT;
size, 32;
}
part {
- name, "part.main.item.setup.bg";
- type, SPACER;
- scale, 1;
- description {
- state, "default" 0.0;
- min, 0 122;
- fixed, 1 1;
- align, 0.5 0.0;
- rel1 {
- to, PART_MAIN_LABEL_SETUP;
- relative, 0.0 1.0;
- }
- rel2.to, PART_MAIN_LABEL_SETUP;
- }
- }
-
- part {
name, PART_MAIN_ITEM_SETUP;
type, SWALLOW;
scale, 1;
description {
state, "default" 0.0;
- max, 446 64;
- fixed, 1 1;
align, 0.5 0.5;
- rel1.to, "part.main.item.setup.bg";
- rel2 {
- to, "part.main.item.setup.bg";
- relative, 1.0 1.0;
- }
+ rel1.relative, CONTROLS_X1 MANUAL_SETUP_Y1;
+ rel2.relative, MANUAL_SETUP_X2 MANUAL_SETUP_Y2;
}
}
description {
state, "default" 0.0;
color, 116 116 116 255;
- min, 0 32;
- fixed, 1 1;
- align, 0.5 0.0;
- rel1 {
- to, "part.main.item.setup.bg";
- relative, 0.0 1.0;
- }
- rel2.to, "part.main.item.setup.bg";
+ align, 0.0 0.5;
+ rel1.relative, CONTROLS_X1 DATE_LABEL_Y1;
+ rel2.relative, LABELS_X2 DATE_LABEL_Y2;
text {
font, FONT_LIGHT;
size, 32;
scale, 1;
description {
state, "default" 0.0;
- min, 0 122;
- fixed, 1 1;
- align, 0.5 0.0;
- rel1 {
- to, PART_MAIN_LABEL_DATE;
- relative, 0.0 1.0;
- }
- rel2.to, PART_MAIN_LABEL_DATE;
- }
- }
-
- part {
- name, "part.main.item.date.day";
- type, SWALLOW;
- scale, 1;
- description {
- state, "default" 0.0;
- max, 138 64;
- fixed, 1 1;
- align, 0.5 0.5;
- rel1 {
- to, PART_MAIN_ITEM_DATE;
- relative, 0.5 0.5;
- }
- rel2 {
- to, PART_MAIN_ITEM_DATE;
- relative, 0.5 0.5;
- }
- }
- }
-
- part {
- name, "part.main.item.date.padl";
- type, RECT;
- scale, 1;
- description {
- state, "default" 0.0;
- max, 22 64;
- fixed, 1 1;
- align, 1.0 0.5;
- rel1.to, "part.main.item.date.day";
- rel2 {
- to, "part.main.item.date.day";
- relative, 0.0 1.0;
- }
- color, 100 100 100 255;
- }
- }
-
- part {
- name, "part.main.item.date.padr";
- type, RECT;
- scale, 1;
- description {
- state, "default" 0.0;
- max, 22 64;
- fixed, 1 1;
align, 0.0 0.5;
- rel1 {
- to, "part.main.item.date.day";
- relative, 1.0 0.0;
- }
- rel2.to, "part.main.item.date.day";
- color, 100 100 100 255;
- }
- }
-
- part {
- name, "part.main.item.date.month";
- type, SWALLOW;
- scale, 1;
- description {
- state, "default" 0.0;
- max, 138 64;
- fixed, 1 1;
- align, 1.0 0.5;
- rel1.to, "part.main.item.date.padl";
- rel2 {
- to, "part.main.item.date.padl";
- relative, 0.0 1.0;
- }
- }
- }
-
- part {
- name, "part.main.item.date.year";
- type, SWALLOW;
- scale, 1;
- description {
- state, "default" 0.0;
- max, 138 64;
- fixed, 1 1;
- align, 0.0 0.5;
- rel1 {
- to, "part.main.item.date.padr";
- relative, 1.0 0.0;
- }
- rel2.to, "part.main.item.date.padr";
+ rel1.relative, CONTROLS_X1 DATE_ITEM_Y1;
+ rel2.relative, DATE_ITEM_X2 DATE_ITEM_Y2;
}
}
description {
state, "default" 0.0;
color, 116 116 116 255;
- min, 0 32;
- fixed, 1 1;
- align, 0.5 0.0;
- rel1 {
- to, PART_MAIN_ITEM_DATE;
- relative, 0.0 1.0;
- }
- rel2.to, PART_MAIN_ITEM_DATE;
+ align, 0.0 0.5;
+ rel1.relative, CONTROLS_X1 _24HOUR_LABEL_Y1;
+ rel2.relative, LABELS_X2 _24HOUR_LABEL_Y2;
text {
font, FONT_LIGHT;
size, 32;
scale, 1;
description {
state, "default" 0.0;
- min, 0 122;
- fixed, 1 1;
- align, 0.5 0.0;
- rel1 {
- to, PART_MAIN_LABEL_24HOUR;
- relative, 0.0 1.0;
- }
- rel2.to, PART_MAIN_LABEL_24HOUR;
+ align, 0.0 0.5;
+ rel1.relative, CONTROLS_X1 _24HOUR_ITEM_Y1;
+ rel2.relative, _24HOUR_ITEM_X2 _24HOUR_ITEM_Y2;
}
}
description {
state, "default" 0.0;
color, 116 116 116 255;
- min, 0 32;
- fixed, 1 1;
- align, 0.5 0.0;
- rel1 {
- to, PART_MAIN_ITEM_24HOUR;
- relative, 0.0 1.0;
- }
- rel2.to, PART_MAIN_ITEM_24HOUR;
+ align, 0.0 0.5;
+ rel1.relative, CONTROLS_X1 TIME_LABEL_Y1;
+ rel2.relative, LABELS_X2 TIME_LABEL_Y2;
text {
font, FONT_LIGHT;
size, 32;
scale, 1;
description {
state, "default" 0.0;
- min, 0 84;
- fixed, 1 1;
- align, 0.5 0.0;
- rel1 {
- to, PART_MAIN_LABEL_TIME;
- relative, 0.0 1.0;
- }
- rel2.to, PART_MAIN_LABEL_TIME;
- }
- }
-
- part {
- name, "part.main.item.time.min";
- type, SWALLOW;
- scale, 1;
- description {
- state, "default" 0.0;
- max, 138 64;
- fixed, 1 1;
- align, 0.5 0.5;
- rel1 {
- to, PART_MAIN_ITEM_TIME;
- relative, 0.5 0.5;
- }
- rel2 {
- to, PART_MAIN_ITEM_TIME;
- relative, 0.5 0.5;
- }
- }
- }
-
- part {
- name, "part.main.item.time.padl";
- scale, 1;
- description {
- state, "default" 0.0;
- max, 22 64;
- fixed, 1 1;
- image.normal, IC_ADD_SCHEDULE_COLON_PNG;
- align, 1.0 0.5;
- rel1.to, "part.main.item.time.min";
- rel2 {
- to, "part.main.item.time.min";
- relative, 0.0 1.0;
- }
- }
- }
-
- part {
- name, "part.main.item.time.padr";
- type, RECT;
- scale, 1;
- description {
- state, "default" 0.0;
- max, 22 64;
- fixed, 1 1;
align, 0.0 0.5;
- rel1 {
- to, "part.main.item.time.min";
- relative, 1.0 0.0;
- }
- rel2.to, "part.main.item.time.min";
- color, 100 100 100 255;
- }
- }
-
- part {
- name, "part.main.item.time.hour";
- type, SWALLOW;
- scale, 1;
- description {
- state, "default" 0.0;
- max, 138 64;
- fixed, 1 1;
- align, 1.0 0.5;
- rel1.to, "part.main.item.time.padl";
- rel2 {
- to, "part.main.item.time.padl";
- relative, 0.0 1.0;
- }
- }
- }
-
- part {
- name, "part.main.item.time.ampm";
- type, SWALLOW;
- scale, 1;
- description {
- state, "default" 0.0;
- max, 138 64;
- fixed, 1 1;
- align, 0.0 0.5;
- rel1 {
- to, "part.main.item.time.padr";
- relative, 1.0 0.0;
- }
- rel2.to, "part.main.item.time.padr";
+ rel1.relative, CONTROLS_X1 TIME_ITEM_Y1;
+ rel2.relative, TIME_ITEM_X2 TIME_ITEM_Y2;
}
}
#include <app.h>
#include <Elementary.h>
#include <time.h>
-#include <alarm.h>
#include "viewmgr.h"
#include "inputmgr.h"
#include "define.h"
#include "utils.h"
#include "view_clock.h"
+#include "data/system/settings_clock.h"
+#include "app_string.h"
enum setup_type {
TYPE_MANUAL = 0,
TYPE_AUTO,
+ TYPE_MAX
};
-static int id_setup_type_opt[] = {
+static int id_setup_type_opt[TYPE_MAX] = {
TYPE_MANUAL,
- TYPE_AUTO,
+ TYPE_AUTO
};
-const char *str_setup_type_opt[] = {
+static const char *str_setup_type_opt[] = {
STR_MANUAL,
- STR_AUTO,
+ STR_AUTO
};
-struct _priv {
+typedef struct {
Evas_Object *win;
Evas_Object *base;
- Evas_Object *ly;
Evas_Object *done;
Evas_Object *cancel;
- Evas_Object *clock_setup_btn;
- int *setup_type;
+ Evas_Object *auto_manual_setup_btn;
Evas_Object *setup_type_popup;
+
+ Evas_Object *date_part;
+ Evas_Object *check_24;
+ Evas_Object *time_part;
enum setup_type cur_type;
- Evas_Object *year;
-};
+} clock_view_priv_data;
enum input_handler_type {
INPUT_HANDLER_TYPE_BTN_DONE,
INPUT_HANDLER_TYPE_BTN_CANCEL,
+ INPUT_HANDLER_TYPE_CHECK_H12_24,
};
-static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
- Evas_Event_Mouse_Move *ev)
-{
- if (obj) {
- _ERR("Invalid argument.");
- return;
- }
+/* User has moved mouse over auto/manual setup dropdown: */
+static void _auto_manual_mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Move *ev);
+/*(KEYPAD/REMOTE) User has clicked/pressed auto/manual setup dropdown: */
+static void _auto_manual_setup_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Key_Down *ev);
+/*(MOUSE) User has clicked/pressed auto/manual setup dropdown: */
+static void _auto_manual_setup_mouse_down_cb();
+/* (KEYPAD/REMOTE) User has clicked/pressed one of the options from auto/manual setup dropdown menu: */
+static void _auto_manual_setup_option_key_down_cb(int id, void *data, Evas *e,
+ Evas_Object *obj, Evas_Event_Key_Down *ev);
+/* (MOUSE) User has clicked/pressed one of the options from auto/manual setup dropdown menu: */
+static void _auto_manual_setup_option_mouse_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Down *ev);
+/* User has changed 12/24h hours type selection: */
+static void _h_24_12_changed_cb(int id, void *data, Evas_Object *check_24);
+/* (MOUSE/KEYPAD/REMOTE) User has changed finished edition and clicks Done button: */
+static void _done_mouse_cb(int id, void *data, Evas_Object *obj);
+/* (MOUSE/KEYPAD/REMOTE) User has changed finished edition and clicks Cancel button: */
+static void _cancel_mouse_cb(int id, void *data, Evas_Object *obj);
+/* In automatic time settings some controls should be disabled:*/
+static void _disable_manual_settings(bool disable, const clock_view_priv_data *priv);
+/* Helper to make time out of widgets values: */
+static void _get_time_from_controls(struct tm *result, const clock_view_priv_data *priv);
+
+static input_handler _auto_manual_setup_input_handler = {
+ .mouse_move = _auto_manual_mouse_move_cb,
+ .key_down = _auto_manual_setup_key_down_cb,
+ .mouse_down = _auto_manual_setup_mouse_down_cb
+};
- if (!elm_object_focus_get(obj))
- elm_object_focus_set(obj, EINA_TRUE);
-}
+static input_handler _auto_manual_setup_option_selection_input_handler = {
+ .mouse_move = _auto_manual_mouse_move_cb,
+ .key_down = _auto_manual_setup_option_key_down_cb,
+ .mouse_down = _auto_manual_setup_option_mouse_cb
+};
+
+static input_handler h_12_24_changed = {
+ .changed = _h_24_12_changed_cb
+};
+
+static input_handler done_btn_handler = {
+ .clicked = _done_mouse_cb
+};
+
+static input_handler cancel_btn_handler = {
+ .clicked = _cancel_mouse_cb
+};
-static void _destroy_setup_type_popup(struct _priv *priv)
+static void _destroy_setup_type_popup(clock_view_priv_data *priv)
{
evas_object_hide(priv->setup_type_popup);
evas_object_del(priv->setup_type_popup);
priv->setup_type_popup = NULL;
}
-static void _setup_type_option_selected(struct _priv *priv, int id,
+static void _setup_type_option_selected(clock_view_priv_data *priv, int id,
Evas_Object *obj)
{
+ if (!priv) {
+ _ERR("priv data is NULL");
+ return;
+ }
+
_destroy_setup_type_popup(priv);
- elm_object_text_set(priv->clock_setup_btn, elm_object_text_get(obj));
+ elm_object_text_set(priv->auto_manual_setup_btn, elm_object_text_get(obj));
switch (id) {
case TYPE_AUTO:
- vconf_set_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, TYPE_AUTO);
+ _disable_manual_settings(true, priv);
break;
case TYPE_MANUAL:
- vconf_set_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, TYPE_MANUAL);
+ _disable_manual_settings(false, priv);
break;
default:
_ERR("Unhandled setup type.");
priv->cur_type = id;
}
-static void _setup_type_option_key_down_cb(int id, void *data, Evas *e,
- Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
- struct _priv *priv;
-
- if (!data || !obj || !ev) {
- _ERR("Invalid argument.");
- return;
- }
-
- priv = data;
-
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC))
- _destroy_setup_type_popup(priv);
- else if(!strcmp(ev->keyname, KEY_ENTER))
- _setup_type_option_selected(priv, id, obj);
-}
-
-static void _setup_type_option_mouse_down_cb(int id, void *data, Evas *e,
- Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+static void _draw_setup_type_popup(clock_view_priv_data *priv)
{
- struct _priv *priv;
+ Evas_Object *ctxpopup = NULL;
+ Evas_Coord x = 0, y = 0, w = 0, h = 0;
- if (!data || !obj || !ev) {
- _ERR("Invalid argument.");
+ if (!priv) {
+ _ERR("priv data NULL");
return;
}
- priv = data;
-
- _setup_type_option_selected(priv, id, obj);
-}
-
-static input_handler _setup_type_option_input_handler = {
- .mouse_move = _mouse_move_cb,
- .key_down = _setup_type_option_key_down_cb,
- .mouse_down = _setup_type_option_mouse_down_cb
-};
+ elm_object_signal_emit(priv->auto_manual_setup_btn, SIG_SELECTED, SRC_ELM);
-static void _draw_setup_type_popup(struct _priv *priv)
-{
- Evas_Object *ctxpopup;
- Evas_Coord x, y, w, h;
-
- elm_object_signal_emit(priv->clock_setup_btn, SIG_SELECTED, SRC_ELM);
-
- ctxpopup = utils_add_ctxpopup(priv->base, COUNT_SETUP_TYPE,
+ ctxpopup = utils_add_ctxpopup(priv->base, TYPE_MAX,
id_setup_type_opt, str_setup_type_opt,
- &_setup_type_option_input_handler, priv);
+ &_auto_manual_setup_option_selection_input_handler, priv);
if (!ctxpopup) {
_ERR("Add ctxpopup failed.");
return;
}
- evas_object_geometry_get(priv->clock_setup_btn, &x, &y, &w, &h);
- evas_object_move(ctxpopup,
- ELM_SCALE_SIZE(x + w / 2),
- ELM_SCALE_SIZE(y + h));
- evas_object_size_hint_min_set(ctxpopup, ELM_SCALE_SIZE(SIZE_SETUP_CTXPOPUP_W),
- ELM_SCALE_SIZE(SIZE_SETUP_CTXPOPUP_H));
+ evas_object_geometry_get(priv->auto_manual_setup_btn, &x, &y, &w, &h);
+ evas_object_move(ctxpopup, (x + w / 2), (y + h));
+ evas_object_resize(ctxpopup, w, 0);
priv->setup_type_popup = ctxpopup;
elm_object_focus_set(priv->setup_type_popup, EINA_TRUE);
}
-static void _setup_type_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
- Evas_Event_Key_Down *ev)
-{
- struct _priv *priv;
-
- if (!obj || !ev) {
- _ERR("Invalid argument.");
- return;
- }
-
- priv = data;
-
- if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC)
- || !strcmp(ev->keyname, KEY_UP))
-// viewmgr_update_view(VIEW_BASE, UPDATE_FOCUS, NULL);
- _destroy_setup_type_popup(priv);
- else if (!strcmp(ev->keyname, KEY_ENTER))
- _draw_setup_type_popup(priv);
-}
-
-static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
- Evas_Event_Key_Down *ev)
-{
- struct _priv *priv;
- priv = data;
-
- if (!obj || !ev) {
- _ERR("Invalid argument.");
- return;
- }
-
- struct tm _tm_year;
- elm_datetime_value_get(priv->year, &_tm_year);
- time_t the_time = mktime(&_tm_year);
-
- if (!strcmp(ev->keyname, KEY_ENTER)) {
- switch (id) {
- case INPUT_HANDLER_TYPE_BTN_CANCEL:
- viewmgr_pop_view();
- break;
-
- case INPUT_HANDLER_TYPE_BTN_DONE:
- alarmmgr_set_systime(the_time);
- viewmgr_pop_view();
- break;
-
- default:
- return;
- }
- }
-}
-
-static void _mouse_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
- Evas_Event_Mouse_Down *ev)
+static bool _add_clock_setting(clock_view_priv_data *priv)
{
- if (!obj || !ev) {
- _ERR("Invalid argument.");
- return;
- }
+ Evas_Object *done = NULL;
+ Evas_Object *cancel = NULL;
- switch (id) {
- case INPUT_HANDLER_TYPE_BTN_CANCEL:
- viewmgr_pop_view();
- break;
-
- case INPUT_HANDLER_TYPE_BTN_DONE:
- break;
-
- default:
- return;
- }
-}
-
-static input_handler _setup_type_input_handler = {
- .mouse_move = _mouse_move_cb,
- .key_down = _setup_type_key_down_cb,
-};
-
-static input_handler handler = {
- .key_down = _key_down_cb,
- .mouse_down = _mouse_down_cb,
-};
-
-static bool _add_clock_setting(struct _priv *priv)
-{
if (!priv || !priv->base) {
_ERR("Invalid argument.");
return false;
elm_object_part_text_set(priv->base, PART_MAIN_LABEL_24HOUR, STR_24HOUR);
elm_object_part_text_set(priv->base, PART_MAIN_LABEL_TIME, STR_TIME);
- // Add btns
- Evas_Object *done, *cancel;
-
+ /* Add screen bottom buttons */
done = utils_add_button(priv->base, PART_BOTTOM_BTN_DONE, "elm/button/base/style.normal.button", STR_DONE);
if (!done) {
_ERR("failed to add done btn");
return false;
}
- inputmgr_add_callback(done, INPUT_HANDLER_TYPE_BTN_DONE, &handler, priv);
cancel = utils_add_button(priv->base, PART_BOTTOM_BTN_CANCEL, NULL, STR_CANCEL);
if (!cancel) {
evas_object_del(done);
return false;
}
- inputmgr_add_callback(cancel, INPUT_HANDLER_TYPE_BTN_CANCEL, &handler, priv);
priv->cancel = cancel;
priv->done = done;
- // item - SETUP
- Evas_Object *setup_btn;
- setup_btn = utils_add_button(priv->base, PART_MAIN_ITEM_SETUP, STYLE_OPTION_BTN, str_setup_type_opt[0]);
- inputmgr_add_callback(setup_btn, 0, &_setup_type_input_handler, priv);
- priv->clock_setup_btn = setup_btn;
-
- // item - year
- Evas_Object *year = priv->year;
- year = elm_datetime_add(priv->base);
- elm_datetime_field_visible_set(year, ELM_DATETIME_HOUR, EINA_FALSE);
- elm_datetime_field_visible_set(year, ELM_DATETIME_MINUTE, EINA_FALSE);
- elm_datetime_field_visible_set(year, ELM_DATETIME_AMPM, EINA_FALSE);
- elm_datetime_field_visible_set(year, ELM_DATETIME_MONTH, EINA_FALSE);
- elm_datetime_field_visible_set(year, ELM_DATETIME_DATE, EINA_FALSE);
- elm_object_part_content_set(priv->base, PART_MAIN_ITEM_DATE_YEAR, year);
- priv->year = year;
-
- // item - month
- Evas_Object *month;
- month = elm_datetime_add(priv->base);
- elm_datetime_field_visible_set(month, ELM_DATETIME_HOUR, EINA_FALSE);
- elm_datetime_field_visible_set(month, ELM_DATETIME_MINUTE, EINA_FALSE);
- elm_datetime_field_visible_set(month, ELM_DATETIME_AMPM, EINA_FALSE);
- elm_datetime_field_visible_set(month, ELM_DATETIME_YEAR, EINA_FALSE);
- elm_datetime_field_visible_set(month, ELM_DATETIME_DATE, EINA_FALSE);
- elm_object_part_content_set(priv->base, PART_MAIN_ITEM_DATE_MONTH, month);
-
- // item - day
- Evas_Object *day;
- day = elm_datetime_add(priv->base);
- elm_datetime_field_visible_set(day, ELM_DATETIME_HOUR, EINA_FALSE);
- elm_datetime_field_visible_set(day, ELM_DATETIME_MINUTE, EINA_FALSE);
- elm_datetime_field_visible_set(day, ELM_DATETIME_AMPM, EINA_FALSE);
- elm_datetime_field_visible_set(day, ELM_DATETIME_YEAR, EINA_FALSE);
- elm_datetime_field_visible_set(day, ELM_DATETIME_MONTH, EINA_FALSE);
- elm_object_part_content_set(priv->base, PART_MAIN_ITEM_DATE_DAY, day);
-
- // item - hour
- Evas_Object *hour;
- hour = elm_datetime_add(priv->base);
- elm_datetime_field_visible_set(hour, ELM_DATETIME_MINUTE, EINA_FALSE);
- elm_datetime_field_visible_set(hour, ELM_DATETIME_AMPM, EINA_FALSE);
- elm_datetime_field_visible_set(hour, ELM_DATETIME_YEAR, EINA_FALSE);
- elm_datetime_field_visible_set(hour, ELM_DATETIME_MONTH, EINA_FALSE);
- elm_datetime_field_visible_set(hour, ELM_DATETIME_DATE, EINA_FALSE);
- elm_object_part_content_set(priv->base, PART_MAIN_ITEM_TIME_HOUR, hour);
-
- // item - min
- Evas_Object *min;
- min = elm_datetime_add(priv->base);
- elm_datetime_field_visible_set(min, ELM_DATETIME_HOUR, EINA_FALSE);
- elm_datetime_field_visible_set(min, ELM_DATETIME_AMPM, EINA_FALSE);
- elm_datetime_field_visible_set(min, ELM_DATETIME_YEAR, EINA_FALSE);
- elm_datetime_field_visible_set(min, ELM_DATETIME_MONTH, EINA_FALSE);
- elm_datetime_field_visible_set(min, ELM_DATETIME_DATE, EINA_FALSE);
- elm_object_part_content_set(priv->base, PART_MAIN_ITEM_TIME_MIN, min);
-
- // item - ampm
- Evas_Object *ampm;
- ampm = elm_datetime_add(priv->base);
- elm_datetime_field_visible_set(ampm, ELM_DATETIME_HOUR, EINA_FALSE);
- elm_datetime_field_visible_set(ampm, ELM_DATETIME_MINUTE, EINA_FALSE);
- elm_datetime_field_visible_set(ampm, ELM_DATETIME_YEAR, EINA_FALSE);
- elm_datetime_field_visible_set(ampm, ELM_DATETIME_MONTH, EINA_FALSE);
- elm_datetime_field_visible_set(ampm, ELM_DATETIME_DATE, EINA_FALSE);
- elm_object_part_content_set(priv->base, PART_MAIN_ITEM_TIME_AMPM, ampm);
+ /* item - SETUP (clock auto/manual) */
+ priv->auto_manual_setup_btn = utils_add_button(priv->base, PART_MAIN_ITEM_SETUP, STYLE_OPTION_BTN, _(STR_MANUAL));
+
+ priv->date_part = elm_datetime_add(priv->base);
+ elm_datetime_field_visible_set(priv->date_part, ELM_DATETIME_HOUR, EINA_FALSE);
+ elm_datetime_field_visible_set(priv->date_part, ELM_DATETIME_MINUTE, EINA_FALSE);
+ elm_datetime_field_visible_set(priv->date_part, ELM_DATETIME_AMPM, EINA_FALSE);
+ elm_object_part_content_set(priv->base, PART_MAIN_ITEM_DATE, priv->date_part);
+ elm_object_scale_set(priv->date_part, 1.0 / APP_BASE_SCALE);
+
+ /* 24/12h check: */
+ priv->check_24 = elm_check_add(priv->base);
+ elm_object_part_content_set(priv->base, PART_MAIN_ITEM_24HOUR, priv->check_24);
+ elm_object_scale_set(priv->check_24, 1.0 / APP_BASE_SCALE);
+
+ priv->time_part = elm_datetime_add(priv->base);
+ elm_datetime_field_visible_set(priv->time_part, ELM_DATETIME_YEAR, EINA_FALSE);
+ elm_datetime_field_visible_set(priv->time_part, ELM_DATETIME_MONTH, EINA_FALSE);
+ elm_datetime_field_visible_set(priv->time_part, ELM_DATETIME_DATE, EINA_FALSE);
+ elm_datetime_field_visible_set(priv->time_part, ELM_DATETIME_AMPM, EINA_TRUE);
+ elm_object_part_content_set(priv->base, PART_MAIN_ITEM_TIME, priv->time_part);
+ elm_object_scale_set(priv->time_part, 1.0 / APP_BASE_SCALE);
+
+ inputmgr_add_callback(done, INPUT_HANDLER_TYPE_BTN_DONE, &done_btn_handler, priv);
+ inputmgr_add_callback(cancel, INPUT_HANDLER_TYPE_BTN_CANCEL, &cancel_btn_handler, priv);
+ inputmgr_add_callback(priv->auto_manual_setup_btn, 0, &_auto_manual_setup_input_handler, priv);
+ inputmgr_add_callback(priv->check_24, INPUT_HANDLER_TYPE_CHECK_H12_24, &h_12_24_changed, priv);
return true;
}
static Evas_Object *_create(Evas_Object *win, void *data)
{
- struct _priv *priv;
- Evas_Object *base;
+ clock_view_priv_data *priv = NULL;
+ Evas_Object *base = NULL;
_DBG("Called");
if (!win) {
return NULL;
}
- priv = calloc(1, sizeof(*priv));
+ priv = (clock_view_priv_data *)calloc(1, sizeof(clock_view_priv_data));
if (!priv) {
_ERR("Calloc failed.");
return NULL;
static void _show(void *data)
{
- struct _priv *priv;
+ bool automatic_time = false;
+ bool h24 = true;
+ clock_view_priv_data *priv = NULL;
+ struct tm current_time = {0,};
- if (!data) {
+ priv = (clock_view_priv_data *)data;
+
+ if (!priv) {
_ERR("Get data failed.");
return;
}
- priv = data;
- _DBG("Called");
+ if (!settings_clock_get_current_time(¤t_time))
+ _ERR("Failed to obtain current time");
+
+ if (!settings_clock_is_24h_set(&h24))
+ _ERR("Failed to check if 24h time is set");
+
+ if (!settings_clock_is_time_automatic(&automatic_time))
+ _ERR("Failed to check if time is auto");
+
+ if (automatic_time) {
+ priv->cur_type = TYPE_AUTO;
+ elm_object_domain_translatable_text_set(priv->auto_manual_setup_btn, SETTINGS_PACKAGE, _(STR_AUTO));
+ } else {
+ elm_object_domain_translatable_text_set(priv->auto_manual_setup_btn, SETTINGS_PACKAGE, _(STR_MANUAL));
+ priv->cur_type = TYPE_MANUAL;
+ }
+
+ _disable_manual_settings(automatic_time, priv);
+
+ elm_check_state_set(priv->check_24, h24);
+
+ if (h24) {
+ elm_datetime_format_set(priv->time_part, "%H:%M %P");
+ } else {
+ elm_datetime_format_set(priv->time_part, "%I:%M %P");
+ }
+
+ elm_datetime_value_set(priv->date_part, (Elm_Datetime_Time *)¤t_time);
+ elm_datetime_value_set(priv->time_part, (Elm_Datetime_Time *)¤t_time);
+
if (priv->base)
evas_object_show(priv->base);
}
static void _hide(void *data)
{
- struct _priv *priv;
+ clock_view_priv_data *priv = NULL;
if (!data) {
_ERR("Get data failed.");
return;
}
- priv = data;
+ priv = (clock_view_priv_data *)data;
if (priv->base)
evas_object_hide(priv->base);
static void _destroy(void *data)
{
- struct _priv *priv;
+ clock_view_priv_data *priv = NULL;
if (!data) {
_ERR("Get data failed.");
return;
}
- priv = data;
+ priv = (clock_view_priv_data *)data;
if (priv->base)
evas_object_del(priv->base);
{
return &_vclass;
}
+
+static void _auto_manual_mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Move *ev)
+{
+ if (obj) {
+ _ERR("Invalid argument.");
+ return;
+ }
+
+ if (!elm_object_focus_get(obj))
+ elm_object_focus_set(obj, EINA_TRUE);
+}
+
+static void _auto_manual_setup_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Key_Down *ev)
+{
+ clock_view_priv_data *priv = NULL;
+
+ if (!obj || !ev) {
+ _ERR("Invalid argument.");
+ return;
+ }
+
+ priv = (clock_view_priv_data *)data;
+
+ if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC)
+ || !strcmp(ev->keyname, KEY_UP)) {
+ _destroy_setup_type_popup(priv);
+ } else {
+ if (!strcmp(ev->keyname, KEY_ENTER))
+ _draw_setup_type_popup(priv);
+ }
+}
+
+static void _auto_manual_setup_mouse_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Down *ev)
+{
+ clock_view_priv_data *priv = NULL;
+
+ if (!obj || !ev) {
+ _ERR("Invalid argument.");
+ return;
+ }
+
+ priv = (clock_view_priv_data *)data;
+ _draw_setup_type_popup(priv);
+}
+
+static void _auto_manual_setup_option_key_down_cb(int id, void *data, Evas *e,
+ Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+ clock_view_priv_data *priv = NULL;
+
+ if (!data || !obj || !ev) {
+ _ERR("Invalid argument.");
+ return;
+ }
+
+ priv = (clock_view_priv_data *)data;
+
+ if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC)) {
+ _destroy_setup_type_popup(priv);
+ } else {
+ if(!strcmp(ev->keyname, KEY_ENTER))
+ _setup_type_option_selected(priv, id, obj);
+ }
+}
+
+static void _auto_manual_setup_option_mouse_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Down *ev)
+{
+ clock_view_priv_data *priv = NULL;
+
+ if (!data || !obj) {
+ _ERR("Invalid argument");
+ return;
+ }
+ priv = (clock_view_priv_data *)data;
+
+ _setup_type_option_selected(priv, id, obj);
+}
+
+static void _h_24_12_changed_cb(int id, void *data, Evas_Object *check_24)
+{
+ Eina_Bool state = EINA_FALSE;
+ clock_view_priv_data *priv = NULL;
+
+ priv = (clock_view_priv_data *)data;
+
+ if (!check_24 || !priv)
+ return;
+
+ state = elm_check_state_get(check_24);
+
+ if (state) {/*24h*/
+ elm_datetime_format_set(priv->time_part, "%H:%M %P");
+ } else {/*12h*/
+ elm_datetime_format_set(priv->time_part, "%I:%M %P");
+ }
+}
+
+static void _done_mouse_cb(int id, void *data, Evas_Object *obj)
+{
+ struct tm current_time = {0,};
+ clock_view_priv_data *priv = NULL;
+ priv = (clock_view_priv_data *)data;
+
+ if (!priv) {
+ _ERR("priv is NULL");
+ return;
+ }
+
+ if (priv->cur_type == TYPE_AUTO) {
+ settings_clock_set_time_automatic(true);
+ } else {
+ settings_clock_set_time_automatic(false);
+ if (elm_check_state_get(priv->check_24)) {/*24h*/
+ settings_clock_set_24h(true);
+ } else {/*12h*/
+ settings_clock_set_24h(false);
+ }
+ _get_time_from_controls(¤t_time, priv);
+ if (!settings_clock_set_current_time(¤t_time))
+ _ERR("Date and time set error");
+ }
+
+ viewmgr_pop_view();
+}
+
+static void _cancel_mouse_cb(int id, void *data, Evas_Object *obj)
+{
+ viewmgr_pop_view();
+}
+
+static void _disable_manual_settings(bool disable, const clock_view_priv_data *priv)
+{
+ elm_object_disabled_set(priv->date_part, disable);
+ elm_object_disabled_set(priv->time_part, disable);
+ elm_object_disabled_set(priv->check_24, disable);
+}
+
+static void _get_time_from_controls(struct tm *result, const clock_view_priv_data *priv)
+{
+ struct tm tmp = {0,};
+
+ if (!result || !priv)
+ return;
+
+ elm_datetime_value_get(priv->date_part, &tmp);
+ result->tm_year = tmp.tm_year;
+ result->tm_mon = tmp.tm_mon;
+ result->tm_mday = tmp.tm_year;
+ result->tm_wday = tmp.tm_wday;
+ result->tm_yday = tmp.tm_yday;
+ elm_datetime_value_get(priv->time_part, &tmp);
+ result->tm_hour = tmp.tm_hour;
+ result->tm_min = tmp.tm_min;
+ result->tm_sec = tmp.tm_sec;
+}