3 * Copyright 2012 Samsung Electronics Co., Ltd
5 * Licensed under the Flora License, Version 1.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.tizenopensource.org/license
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
21 #include <Elementary.h>
23 #include <ui-gadget-module.h>
25 #include <memo_string.h>
26 #include <extended-elm.h>
27 #include <supplement.h>
28 #include <memo-assist.h>
29 #include <memo-genlist.h>
30 #include <memo-assist.h>
33 typedef struct __select_view_t {
35 Evas_Object *navigator;
36 Evas_Object *ctrl_bar;
37 Elm_Object_Item *r_btn;
38 Evas_Object *body_main;
40 /* add more variables here */
41 Elm_Genlist_Item_Class itc;
42 Elm_Genlist_Item_Class itc_draw;
46 Evas_Object *selectioninfo;
47 Evas_Object *selectioninfo_layout;
49 Eina_Bool is_textonly;
52 static void memo_data_iterate_cb (memo_data_t *md, void *user_data);
54 static void _on_data_update(void *data)
56 select_view_t *sv = (select_view_t *)data;
57 elm_genlist_clear(sv->genlist);
58 memo_all_data(memo_data_iterate_cb, sv);
60 elm_object_item_disabled_set(sv->r_btn, EINA_TRUE);
63 static void _on_quit(void *data, Evas_Object *obj, void *event_info)
66 select_view_t *sv = (select_view_t *)data;
67 ug_data_t *ugd = sv->ugd;
68 memo_unsubscribe_change(_on_data_update);
69 ug_destroy_me(ugd->ug);
72 static void _on_add(void *data, Evas_Object *obj, void *event_info)
75 select_view_t *sv = (select_view_t *)data;
76 ug_data_t *ugd = sv->ugd;
77 service_h service = NULL;
79 gl_data_t *gld = NULL;
82 char path[MEMO_BUFFER_SIZE] = {0};
83 memo_data_t *md = NULL;
85 service_create(&service);
86 it = elm_genlist_first_item_get(sv->genlist);
88 gld = (gl_data_t *)elm_object_item_data_get(it);
89 md = memo_get_data(gld->index);
91 if (gld->has_doodle) {
93 snprintf(ugd->buf, MEMO_BUFFER_SIZE, "image%d", c_image);
94 snprintf(path, MEMO_BUFFER_SIZE, "/opt/apps/org.tizen.memo/data/doodle/%d.png", gld->index);
95 service_add_extra_data(service, ugd->buf, path);
98 snprintf(ugd->buf, MEMO_BUFFER_SIZE, "text%d", c_text);
99 service_add_extra_data(service, ugd->buf, md->content);
103 it = elm_genlist_item_next_get(it);
106 snprintf(ugd->buf, MEMO_BUFFER_SIZE, "%d", c_image);
107 service_add_extra_data(service, "image", ugd->buf);
108 snprintf(ugd->buf, MEMO_BUFFER_SIZE, "%d", c_text);
109 service_add_extra_data(service, "text", ugd->buf);
110 ug_send_result(ugd->ug, service);
111 service_dump(service);
112 service_destroy(service);
113 memo_unsubscribe_change(_on_data_update);
114 ug_destroy_me(ugd->ug);
117 #pragma GCC diagnostic ignored "-Wformat-extra-args"
118 static void _create_selectioninfo(select_view_t *sv)
120 if (sv->selectioninfo == NULL)
122 sv->selectioninfo = elm_notify_add(sv->body_main);
123 elm_notify_orient_set(sv->selectioninfo, ELM_NOTIFY_ORIENT_BOTTOM);
124 sv->selectioninfo_layout = elm_layout_add(sv->body_main);
125 elm_layout_theme_set(sv->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_12");
126 elm_object_content_set(sv->selectioninfo, sv->selectioninfo_layout);
129 if (sv->selected == 0) {
130 evas_object_hide(sv->selectioninfo);
133 if (sv->selected == 1) {
134 snprintf(text, 128, "%s", MEMO_I18N_1_MEMO_SELECTED);
136 snprintf(text, 128, MEMO_I18N_D_MEMOS_SELECTED, sv->selected);
138 edje_object_part_text_set(_EDJ(sv->selectioninfo_layout), "elm.text", text);
139 evas_object_show(sv->selectioninfo);
142 #pragma GCC diagnostic warning "-Wformat-extra-args"
144 static void _on_item_select_cb(void *data, Evas_Object *obj, void *event_info)
146 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
147 gl_data_t *gld = (gl_data_t *)elm_object_item_data_get(it);
148 select_view_t *sv = (select_view_t *)gld->user_data;
150 gld->check = !gld->check;
151 elm_genlist_item_update(it);
152 gld->check ? sv->selected++ : sv->selected--;
154 /* update add button and selectinfo */
155 if (sv->selected == 0) {
156 elm_object_item_disabled_set(sv->r_btn, EINA_TRUE);
158 elm_object_item_disabled_set(sv->r_btn, EINA_FALSE);
160 _create_selectioninfo(sv);
162 /* reset state, next click event will be triggered as selected */
163 elm_genlist_item_selected_set(it, 0);
166 static void memo_data_iterate_cb (memo_data_t *md, void *user_data)
168 select_view_t *sv = (select_view_t *)user_data;
169 gl_data_t *gld = SMALLOC(gl_data_t);
171 memo_gld_init(gld, md, sv, NULL);
172 if (md->has_doodle) {
173 if (!sv->is_textonly) {
174 elm_genlist_item_append(sv->genlist, &sv->itc_draw,(void *)gld,
175 NULL, ELM_GENLIST_ITEM_NONE, _on_item_select_cb, NULL);
179 elm_genlist_item_append(sv->genlist, &sv->itc,(void *)gld,
180 NULL, ELM_GENLIST_ITEM_NONE, _on_item_select_cb, NULL);
185 static void _create_select_layout(select_view_t *sv)
187 ug_data_t *ugd = sv->ugd;
189 /* add navigationbar */
190 sv->navigator = elm_naviframe_add(ugd->base);
193 sv->body_main = elm_layout_create(sv->navigator, EDJ_FILE, "selector_frame");
195 sv->genlist = elm_genlist_add(sv->body_main);
196 /* apply customized theme */
197 elm_object_theme_set(sv->genlist, sv->ugd->th);
198 elm_genlist_block_count_set(sv->genlist, 10);
199 memo_all_data(memo_data_iterate_cb, sv);
201 elm_object_part_content_set(sv->body_main, "elm.swallow.content", sv->genlist);
202 edje_object_part_text_set(_EDJ(sv->body_main), "text", (sv->total == 0 ? "No item" : ""));
205 Elm_Object_Item *navi_it = elm_naviframe_item_push(sv->navigator, MEMO_I18N_MEMO, NULL, NULL, sv->body_main, NULL);
207 Evas_Object *ctrl_bar = memo_controlbar_add(sv->navigator);
208 elm_toolbar_item_append(ctrl_bar, NULL, MEMO_I18N_CANCEL, _on_quit, sv);
209 sv->r_btn = elm_toolbar_item_append(ctrl_bar, NULL, MEMO_I18N_ADD, _on_add, sv);
210 elm_object_item_part_content_set(navi_it, "controlbar", ctrl_bar);
211 elm_object_item_disabled_set(sv->r_btn, EINA_TRUE); /* disable add defaultly */
214 void *memo_load_select_view(ug_data_t *ugd, service_h service)
216 select_view_t *sv = SMALLOC(select_view_t);
217 RETVIF(sv == NULL, NULL);
219 sv->is_textonly = service_key_check(service, "type", "textonly");
221 /* date update hooker */
222 memo_subscribe_change(_on_data_update, sv);
225 memo_gl_itc_init(&sv->itc, "memo/edit/list");
226 memo_gl_itc_init(&sv->itc_draw, "memo/edit/list_draw");
229 _create_select_layout(sv);
230 elm_object_part_content_set(ugd->base, "elm.swallow.content", sv->navigator);