2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <Elementary.h>
21 #include <ui-gadget-module.h>
23 #include <memo_string.h>
24 #include <extended-elm.h>
25 #include <supplement.h>
26 #include <memo-assist.h>
27 #include <memo-genlist.h>
28 #include <memo-assist.h>
31 typedef struct __select_view_t {
33 Evas_Object *navigator;
34 Evas_Object *ctrl_bar;
35 Elm_Object_Item *r_btn;
36 Evas_Object *body_main;
38 /* add more variables here */
39 Elm_Genlist_Item_Class itc;
40 Elm_Genlist_Item_Class itc_draw;
44 Evas_Object *selectioninfo;
45 Evas_Object *selectioninfo_layout;
48 static void memo_data_iterate_cb (memo_data_t *md, void *user_data);
50 static void _on_data_update(void *data)
52 select_view_t *sv = (select_view_t *)data;
53 elm_genlist_clear(sv->genlist);
54 memo_all_data(memo_data_iterate_cb, sv);
56 elm_object_item_disabled_set(sv->r_btn, EINA_TRUE);
59 static void _on_quit(void *data, Evas_Object *obj, void *event_info)
62 select_view_t *sv = (select_view_t *)data;
63 ug_data_t *ugd = sv->ugd;
64 memo_unsubscribe_change(_on_data_update);
65 ug_destroy_me(ugd->ug);
68 static void _on_add(void *data, Evas_Object *obj, void *event_info)
71 select_view_t *sv = (select_view_t *)data;
72 ug_data_t *ugd = sv->ugd;
75 gl_data_t *gld = NULL;
78 char path[MEMO_BUFFER_SIZE] = {0};
79 memo_data_t *md = NULL;
82 it = elm_genlist_first_item_get(sv->genlist);
84 gld = (gl_data_t *)elm_object_item_data_get(it);
85 md = memo_get_data(gld->index);
87 if (gld->has_doodle) {
89 snprintf(ugd->buf, MEMO_BUFFER_SIZE, "image%d", c_image);
90 snprintf(path, MEMO_BUFFER_SIZE, DOODLEDIR"/%d.png", gld->index);
91 bundle_add(b, ugd->buf, path);
94 snprintf(ugd->buf, MEMO_BUFFER_SIZE, "text%d", c_text);
95 bundle_add(b, ugd->buf, md->content);
99 it = elm_genlist_item_next_get(it);
102 snprintf(ugd->buf, MEMO_BUFFER_SIZE, "%d", c_image);
103 bundle_add(b, "image", ugd->buf);
104 snprintf(ugd->buf, MEMO_BUFFER_SIZE, "%d", c_text);
105 bundle_add(b, "text", ugd->buf);
106 ug_send_result(ugd->ug, b);
109 memo_unsubscribe_change(_on_data_update);
110 ug_destroy_me(ugd->ug);
113 #pragma GCC diagnostic ignored "-Wformat-extra-args"
114 static void _create_selectioninfo(select_view_t *sv)
116 if (sv->selectioninfo == NULL)
118 sv->selectioninfo = elm_notify_add(sv->body_main);
119 elm_notify_orient_set(sv->selectioninfo, ELM_NOTIFY_ORIENT_BOTTOM);
120 sv->selectioninfo_layout = elm_layout_add(sv->body_main);
121 elm_layout_theme_set(sv->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_12");
122 elm_object_content_set(sv->selectioninfo, sv->selectioninfo_layout);
125 if (sv->selected == 0) {
126 evas_object_hide(sv->selectioninfo);
129 if (sv->selected == 1) {
130 snprintf(text, 128, "%s", MEMO_I18N_1_MEMO_SELECTED);
132 snprintf(text, 128, MEMO_I18N_D_MEMOS_SELECTED, sv->selected);
134 edje_object_part_text_set(_EDJ(sv->selectioninfo_layout), "elm.text", text);
135 evas_object_show(sv->selectioninfo);
138 #pragma GCC diagnostic warning "-Wformat-extra-args"
140 static void _on_item_select_cb(void *data, Evas_Object *obj, void *event_info)
142 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
143 gl_data_t *gld = (gl_data_t *)elm_object_item_data_get(it);
144 select_view_t *sv = (select_view_t *)gld->user_data;
146 gld->check = !gld->check;
147 elm_genlist_item_update(it);
148 gld->check ? sv->selected++ : sv->selected--;
150 /* update add button and selectinfo */
151 if (sv->selected == 0) {
152 elm_object_item_disabled_set(sv->r_btn, EINA_TRUE);
154 elm_object_item_disabled_set(sv->r_btn, EINA_FALSE);
156 _create_selectioninfo(sv);
158 /* reset state, next click event will be triggered as selected */
159 elm_genlist_item_selected_set(it, 0);
162 static void memo_data_iterate_cb (memo_data_t *md, void *user_data)
164 select_view_t *sv = (select_view_t *)user_data;
165 gl_data_t *gld = SMALLOC(gl_data_t);
167 memo_gld_init(gld, md, sv, NULL);
168 if (md->has_doodle) {
169 elm_genlist_item_append(sv->genlist, &sv->itc_draw,(void *)gld,
170 NULL, ELM_GENLIST_ITEM_NONE, _on_item_select_cb, NULL);
172 elm_genlist_item_append(sv->genlist, &sv->itc,(void *)gld,
173 NULL, ELM_GENLIST_ITEM_NONE, _on_item_select_cb, NULL);
178 static void _create_select_layout(select_view_t *sv)
180 ug_data_t *ugd = sv->ugd;
182 /* add navigationbar */
183 sv->navigator = elm_naviframe_add(ugd->base);
186 sv->body_main = elm_layout_create(sv->navigator, EDJ_FILE, "selector_frame");
188 sv->genlist = elm_genlist_add(sv->body_main);
189 /* apply customized theme */
190 elm_object_theme_set(sv->genlist, sv->ugd->th);
191 elm_genlist_block_count_set(sv->genlist, 10);
192 memo_all_data(memo_data_iterate_cb, sv);
194 elm_object_part_content_set(sv->body_main, "elm.swallow.content", sv->genlist);
195 edje_object_part_text_set(_EDJ(sv->body_main), "text", (sv->total == 0 ? "No item" : ""));
198 Elm_Object_Item *navi_it = elm_naviframe_item_push(sv->navigator, MEMO_I18N_MEMO, NULL, NULL, sv->body_main, NULL);
200 Evas_Object *ctrl_bar = memo_controlbar_add(sv->navigator);
201 elm_toolbar_item_append(ctrl_bar, NULL, MEMO_I18N_CANCEL, _on_quit, sv);
202 sv->r_btn = elm_toolbar_item_append(ctrl_bar, NULL, MEMO_I18N_ADD, _on_add, sv);
203 elm_object_item_part_content_set(navi_it, "controlbar", ctrl_bar);
204 elm_object_item_disabled_set(sv->r_btn, EINA_TRUE); /* disable add defaultly */
207 void *memo_load_select_view(ug_data_t *ugd, bundle *data)
209 select_view_t *sv = SMALLOC(select_view_t);
210 RETVIF(sv == NULL, NULL);
213 /* date update hooker */
214 memo_subscribe_change(_on_data_update, sv);
217 memo_gl_itc_init(&sv->itc, "memo/edit/list");
218 memo_gl_itc_init(&sv->itc_draw, "memo/edit/list_draw");
221 _create_select_layout(sv);
222 elm_object_part_content_set(ugd->base, "elm.swallow.content", sv->navigator);