summaryrefslogtreecommitdiff
path: root/src/memo-efl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/memo-efl.c')
-rw-r--r--src/memo-efl.c270
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);
+}