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.
17 #include <Elementary.h>
18 #include <ui-gadget.h>
19 #include <ui-gadget-module.h> // ug_destroy_me, ug_send_result
21 #include "ivug-crop-view.h"
22 #include "ivug-crop-ug.h"
24 #include "ivug-debug.h"
25 #include "ivug-string.h"
26 #include "ivug-context.h"
29 #define LOG_LVL DBG_MSG_LVL_MED
32 #define LOG_CAT "IV-CROP-UG"
35 _send_result(ui_gadget_h ug, const char *key1, const char *val1, const char *key2, const char *val2)
40 service_create(&service);
44 MSG_HIGH("Bundle 1 : [%s = %s]", key1, val1);
45 service_add_extra_data(service, key1, val1);
49 MSG_HIGH("Bundle 2 : [%s = %s]", key2, val2);
50 service_add_extra_data(service, key2, val2);
52 ug_send_result(gGetUGHandle(), service);
54 service_destroy(service);
57 static void _ivug_crop_view_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
59 char *path = (char *)event_info;
61 evas_object_smart_callback_del(obj, "ok,clicked", _ivug_crop_view_ok_clicked_cb);
63 _send_result(gGetUGHandle(), "crop_image_path", path, NULL, NULL);
65 MSG_HIGH("Start destroy ug");
66 ug_destroy_me(gGetUGHandle());
69 static void _ivug_crop_view_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
71 //ivug_crop_ug_destroy((IvugCropUG *)data);
73 evas_object_smart_callback_del(obj, "cancel,clicked", _ivug_crop_view_cancel_clicked_cb);
75 _send_result(gGetUGHandle(), "crop_image_path", NULL, NULL, NULL);
77 MSG_HIGH("Start destroy ug");
78 ug_destroy_me(gGetUGHandle());
81 static void _ivug_crop_view_destroyed_cb(void *data, Evas_Object *obj, void *event_info)
83 IvugCropUG *crop_ug = (IvugCropUG *)data;
85 crop_ug->crop_view = NULL;
88 static void on_crop_view_btn_back_clicked(void *data, Evas_Object *obj, void *event_info)
90 IvugCropUG *crop_ug = (IvugCropUG *)data;
92 ivug_crop_view_destroy(crop_ug->crop_view);
94 crop_ug->crop_view = NULL;
96 _send_result(gGetUGHandle(), "crop_image_path", NULL, NULL, NULL);
98 MSG_HIGH("Start destroy ug");
99 ug_destroy_me(gGetUGHandle());
102 static void _ivug_crop_view_clicked_cb(void *data, Evas_Object *obj, void *event_info)
104 IvugCropUG *crop_ug = (IvugCropUG *)data;
105 bool bShowMenu = (bool)event_info;
109 elm_object_item_signal_emit(crop_ug->navi_it, "elm,state,toolbar,open", "");
113 elm_object_item_signal_emit(crop_ug->navi_it, "elm,state,toolbar,close", "");
118 _show_exit_popup( Evas_Object *parent, const char *title, const char *desc, void *data)
120 MSG_SETAS_HIGH( "title: %s, desc %s", title, desc);
122 Evas_Object* style1_popup = elm_popup_add(parent);
123 evas_object_size_hint_weight_set(style1_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
124 elm_popup_timeout_set(style1_popup, (double)2.0);
125 elm_object_text_set(style1_popup, desc);
126 elm_object_part_text_set(style1_popup, "title,text", title);
128 evas_object_smart_callback_add(style1_popup, "timeout", _ivug_crop_view_cancel_clicked_cb, data);
130 evas_object_show(style1_popup);
131 evas_object_layer_set(style1_popup, EVAS_LAYER_MAX);
137 _on_msg_load_failed(void *data, Evas_Object *obj, void *event_info)
139 int error = (int)event_info;
141 const char *szMsg = NULL;
145 case CROP_ERROR_TYPE_INVALID_FILE:
146 szMsg = IDS_INVALID_IMAGE_FILE;
148 case CROP_ERROR_TYPE_PERMISSION_DENIED:
149 szMsg = IDS_PERMISSION_DENIED;
151 case CROP_ERROR_TYPE_UNKNOWN_FORMAT:
152 szMsg = "Unknown format";
154 case CROP_ERROR_TYPE_GENERAL:
160 MSG_ERROR("Load failed : %s", szMsg);
162 _show_exit_popup(obj, IDS_ERROR, szMsg, data);
165 IvugCropUG * ivug_crop_ug_create(Evas_Object *parent, int w, int h, bool bRatioFix, const char *filepath)
167 IvugCropUG *crop_ug = (IvugCropUG *)calloc(1, sizeof(IvugCropUG));
170 MSG_ERROR("crop_ug calloc error");
174 IvugCropView *crop_view = NULL;
175 Evas_Object *layout = NULL;
177 crop_view = ivug_crop_view_create(parent);
178 if(crop_view == NULL)
180 MSG_ERROR("ivug_crop_view_create error");
185 ivug_crop_view_box_size_set(crop_view, w, h);
186 //ivug_crop_view_file_set(crop_view, filepath);
187 ivug_crop_view_box_ratio_fix(crop_view, bRatioFix);
189 layout = ivug_crop_view_get_object(crop_view);
191 evas_object_smart_callback_add(layout, "ok,clicked", _ivug_crop_view_ok_clicked_cb, crop_ug);
192 evas_object_smart_callback_add(layout, "cancel,clicked", _ivug_crop_view_cancel_clicked_cb, crop_ug);
193 evas_object_smart_callback_add(layout, "destroyed", _ivug_crop_view_destroyed_cb, crop_ug);
194 evas_object_smart_callback_add(layout, "download,failed", _on_msg_load_failed, crop_ug);
195 //evas_object_smart_callback_add(layout, "clicked", _ivug_crop_view_clicked_cb, crop_ug);
197 crop_ug->crop_view = crop_view;
198 crop_ug->layout = layout;
199 crop_ug->parent = parent;
200 crop_ug->filepath = strdup(filepath);
202 crop_ug->navi_bar = elm_naviframe_add(parent);
204 #ifdef USE_CUSTOM_STYLE
205 elm_object_theme_set(crop_ug->navi_bar, gGetSystemTheme() );
207 const char *profile = elm_config_profile_get();
208 if (!strcmp(profile,"mobile"))
210 elm_object_style_set(crop_ug->navi_bar, "ivug-main/default");
212 else if (!strcmp(profile,"desktop"))
214 elm_object_style_set(crop_ug->navi_bar, "ivug-main/noindicator");
218 MSG_MAIN_ERROR("Unknown profile : %s", profile);
221 evas_object_name_set(crop_ug->navi_bar, "Crop ug naviframe");
223 // Layout life cycle is controlled by application explictily.
224 elm_naviframe_content_preserve_on_pop_set(crop_ug->navi_bar, EINA_TRUE);
226 Evas_Object *back_btn = ivug_button_add(crop_ug->navi_bar, "naviframe/end_btn/default",
227 IDS_BACK, NULL, on_crop_view_btn_back_clicked, crop_ug);
229 crop_ug->navi_it = elm_naviframe_item_push(crop_ug->navi_bar, IDS_LOADING, back_btn, NULL, crop_ug->layout, NULL);
230 elm_naviframe_item_title_visible_set(crop_ug->navi_it, EINA_FALSE);
232 ivug_crop_view_create_menu(crop_view, crop_ug->navi_bar);
237 Evas_Object * ivug_crop_ug_get_layout(IvugCropUG * crop_ug)
239 IV_ASSERT(crop_ug != NULL);
241 return crop_ug->navi_bar;
244 bool ivug_crop_ug_destroy(IvugCropUG * crop_ug)
246 IV_ASSERT(crop_ug != NULL);
248 if(crop_ug->filepath)
250 free(crop_ug->filepath);
251 crop_ug->filepath = NULL;
254 if(crop_ug->crop_view)
256 ivug_crop_view_destroy(crop_ug->crop_view);
257 crop_ug->crop_view = NULL;
259 crop_ug->layout = NULL;
266 bool ivug_crop_ug_start(IvugCropUG * crop_ug)
268 MSG_HIGH("ivug_crop_ug_start");
269 IV_ASSERT(crop_ug != NULL);
271 ivug_crop_view_file_set(crop_ug->crop_view, crop_ug->filepath);