diff options
Diffstat (limited to 'src/memo-efl.c')
-rw-r--r-- | src/memo-efl.c | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/src/memo-efl.c b/src/memo-efl.c new file mode 100644 index 0000000..47ab308 --- /dev/null +++ b/src/memo-efl.c @@ -0,0 +1,270 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#ifndef UG_MODULE_API +#define UG_MODULE_API __attribute__ ((visibility("default"))) +#endif + +#include <Elementary.h> +#include <ui-gadget-module.h> +#include <supplement.h> +#include <memo_ug.h> +#include "memo-efl.h" +#include "gravel.h" + + +static Evas_Object *create_fullview(Evas_Object *parent, struct ug_data *ugd) +{ + Evas_Object *base; + + base = elm_layout_add(parent); + if (!base) + return NULL; + elm_layout_theme_set(base, "layout", "application", "default"); + + /* set bg */ + Evas_Object *bg = elm_bg_add(base); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_part_content_set(base, "elm.swallow.bg", bg); + + return base; +} + +static Evas_Object *create_frameview(Evas_Object *parent, struct ug_data *ugd) +{ + Evas_Object *base; + + base = elm_layout_add(parent); + if (!base) + return NULL; + elm_layout_theme_set(base, "layout", "application", "default"); + + return base; +} + +static Evas_Object *create_error_popup_layout(Evas_Object *parent, bool is_fullview) +{ + Evas_Object *base; + + base = elm_layout_add(parent); + if (!base) + return NULL; + + if (is_fullview) + elm_layout_theme_set(base, "layout", "application", "default"); + else + elm_layout_theme_set(base, "layout", "application", "noindicator"); + + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + return base; +} + +void memo_ug_hide_cb(void *data, Evas_Object *obj, void *event_info) +{ + ug_destroy_me(data); +} + +static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service, void *priv) +{ + Evas_Object *parent; + struct ug_data *ugd; + char *index = NULL; + + if (!ug || !priv) + return NULL; + + ugd = priv; + ugd->ug = ug; + + service_dump(service); + + /* theme extension */ + ugd->th = elm_theme_new(); + elm_theme_ref_set(ugd->th, NULL); + elm_theme_extension_add(ugd->th, EDJ_FILE); + + /* open database */ + memo_init(NULL); + + /* i18n */ + bindtextdomain("memo", LOCALEDIR); + + parent = ug_get_parent_layout(ug); + if (!parent) + return NULL; + + service_get_extra_data(service, "index", &index); + if (index != NULL) {/* legitimacy check of memo record */ + memo_data_t *md = memo_get_data(atoi(index)); + if (md == NULL) { + if (mode == UG_MODE_FULLVIEW) + ugd->base = create_error_popup_layout(parent, TRUE); + else + ugd->base = create_error_popup_layout(parent, FALSE); + + Evas_Object *popup; + popup = elm_popup_add(ugd->base); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(popup, dgettext("sys_string", "IDS_COM_POP_FILE_NOT_FOUND")); + elm_popup_timeout_set(popup, 1.5); + evas_object_show(popup); + ugd->ug = ug; + evas_object_smart_callback_add(popup, "timeout", memo_ug_hide_cb, ugd->ug); + SFREE(index); + return ugd->base; + } else { + memo_free_data(md); + } + } + + if (mode == UG_MODE_FULLVIEW) + ugd->base = create_fullview(parent, ugd); + else + ugd->base = create_frameview(parent, ugd); + + if (ugd->base) { + if (edit_view_pre_condition_check(service)) { + ugd->h_ug = memo_load_edit_view(ugd, service); + } else if (service_key_check(service, "type", "select")) { + memo_load_select_view(ugd, service); + } else if (index != NULL) { + SFREE(index); + memo_load_detail_view(ugd, service); + } else { + memo_load_select_view(ugd, service); + } + } + SFREE(index); + return ugd->base; +} + +static void on_start(ui_gadget_h ug, service_h service, void *priv) +{ +} + +static void on_pause(ui_gadget_h ug, service_h service, void *priv) +{ + +} + +static void on_resume(ui_gadget_h ug, service_h service, void *priv) +{ + +} + +static void on_destroy(ui_gadget_h ug, service_h service, void *priv) +{ + struct ug_data *ugd; + + if (!ug || !priv) + return; + + /* close database */ + memo_fini(); + + ugd = priv; + + /* free theme */ + elm_theme_extension_del(ugd->th, EDJ_FILE); + elm_theme_free(ugd->th); + ugd->th = NULL; + + if (ugd->h_ug != NULL) { + memo_del_edit_view(ugd->h_ug); + ugd->h_ug = NULL; + } + evas_object_del(ugd->base); + ugd->base = NULL; +} + +static void on_message(ui_gadget_h ug, service_h msg, service_h service, void *priv) +{ +} + +static void on_event(ui_gadget_h ug, enum ug_event event, service_h service, void *priv) +{ + switch (event) { + case UG_EVENT_LOW_MEMORY: + break; + case UG_EVENT_LOW_BATTERY: + break; + case UG_EVENT_LANG_CHANGE: + break; + case UG_EVENT_ROTATE_PORTRAIT: + break; + case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN: + break; + case UG_EVENT_ROTATE_LANDSCAPE: + break; + case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN: + break; + default: + break; + } +} + +static void on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h service, void *priv) +{ + if (!ug) + return; + + switch (event) { + case UG_KEY_EVENT_END: + ug_destroy_me(ug); + break; + default: + break; + } +} + +UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) +{ + struct ug_data *ugd; + + if (!ops) + return -1; + + ugd = calloc(1, sizeof(struct ug_data)); + if (!ugd) + return -1; + + ops->create = on_create; + ops->start = on_start; + ops->pause = on_pause; + ops->resume = on_resume; + ops->destroy = on_destroy; + ops->message = on_message; + ops->event = on_event; + ops->key_event = on_key_event; + ops->priv = ugd; + ops->opt = UG_OPT_INDICATOR_ENABLE; + + return 0; +} + +UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops) +{ + struct ug_data *ugd; + + if (!ops) + return; + + ugd = ops->priv; + if (ugd) + free(ugd); +} |