apply FSL(Flora Software License)
[apps/home/message-app.git] / composer / include / msg-ui-composer-bubble.h
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
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
7  *
8  *    http://www.tizenopensource.org/license
9  *
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.
15  */
16
17 #ifndef __MSG_UI_COMPOSER_BUBBLE_H__
18 #define __MSG_UI_COMPOSER_BUBBLE_H__
19
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <glib.h>
23
24 #include <MsgStorageTypes.h>
25 #include <MsgTransportTypes.h>
26 #include <MapiControl.h>
27 #include <MapiStorage.h>
28 #include <MapiTransport.h>
29 #include <MapiMessage.h>
30
31 #include <libintl.h>
32 #include <bundle.h>
33 #include <appcore-efl.h>
34 #include <Ecore.h>
35 #include <Elementary.h>
36 #include <ui-gadget-module.h>
37 #include <time.h>
38
39 #include "msg-ui-util.h"
40 #include "msg-ui-common-utility.h"
41
42 #include <contacts-svc.h>
43 #include <contacts-ug.h>
44
45 #define MSG_BUBBLE_SIM_MSG_ICON         IMGDIR"/07_message_sim.png"
46 #define MSG_BUBBLE_ATTACH_ICON          IMGDIR"/Seven_IM_clip_nor.png"
47
48 #define MSG_VCONF_KEY_SELECTED_THEME    "db/setting/selected_theme"
49
50 /* STYLE for genlist and entry */
51 #define MSG_BUBBLE_STYLE_SENT   "sentmessage"
52 #define MSG_BUBBLE_STYLE_RECV   "readmessage"
53
54 #define MSG_BUBBLE_CONTENT_H (653)
55 #define MSG_BUBBLE_IMG_MAX_W (75)  //FIXME :: It should be fixed at Entry.edc
56
57 #define MSG_BUBBLE_CONTROLBAR_ITEM_NUM  (4)
58
59 typedef enum {
60         BUBBLE_NORMAL_VIEW = 0,
61         BUBBLE_EDIT_VIEW,
62         BUBBLE_UNLOAD_VIEW,
63 } BubbleViewMode;
64
65 typedef enum {
66         BUBBLE_UG_START = 0,
67         BUBBLE_UG_PAUSE,
68         BUBBLE_UG_RESUME,
69         BUBBLE_UG_DESTROY,
70 } BubbleUGState;
71
72 typedef enum {
73         SCROLL_DEFAULT = 0,
74         SCROLL_FOCUS_IN,
75         SCROLL_FOCUS_OUT,
76         SCROLL_FOCUS_OTHER,
77 } BubbleScrollFocus;
78
79 typedef enum {
80         WORD_TYPE_NONE = 0x00,
81         WORD_TYPE_URL,
82         WORD_TYPE_URL_WITH_PROTC,
83         WORD_TYPE_NUM,
84         WORD_TYPE_EMAIL
85 } BubbleTextType;
86
87 typedef enum {
88         MSG_BOX_PACK_START = 0,
89         MSG_BOX_PACK_END,
90         MSG_BOX_PACK_BEFORE,
91         MSG_BOX_PACK_AFTER,
92 } MsgBoxPackType;
93
94 typedef struct {
95         MSG_MESSAGE_ID_T msgId;
96         int msgType;
97         MSG_STORAGE_ID_T storageId;
98         time_t *msgTime;
99         char displayDate[DEF_BUF_LEN_S];
100         MSG_NETWORK_STATUS_T networkStatus;
101         bool bRead;
102         bool bProtected;
103         int direction;
104         char msgText[DEF_MAX_MSG_TEXT_LEN+1];
105
106         Evas_Object *ly;
107         Evas_Object *entry;
108         Evas_Object *chk;
109         Eina_Bool isCheck;
110
111 } MSG_APP_CONV_DATA_S, *PMSG_APP_CONV_DATA_S;
112
113 typedef struct {
114         PMSG_APP_CONV_DATA_S add_item;
115         Evas_Object *rel_obj;
116         MsgBoxPackType pack_type;
117 }BUBBLE_PACK_INFO;
118
119 typedef struct _MSG_BUBBLE_DATA {
120         Evas_Object *layout_main;
121         Evas_Object *scrl;
122         Evas_Object *toolbar;
123         Evas_Object *box;
124
125         Elm_Object_Item *toolbar_item[MSG_BUBBLE_CONTROLBAR_ITEM_NUM];
126
127         BubbleViewMode viewmode;
128         BubbleUGState ug_state;
129
130         Evas_Object *parent_layout;
131         Evas_Object *bubble_layout;
132         Evas_Object *sel_all_ly;
133         Evas_Object *sel_all_box;
134         Evas_Object *noc_ly;
135
136         Evas_Object *popup;
137         Evas_Object *progressbar;
138         Evas_Object *progresslabel;
139
140         Evas_Object *select_info;
141         Evas_Object *selectioninfo_layout;
142
143         Eina_List *bubble_list;
144         Eina_List *realized_list;
145         Eina_List *chk_list;
146         Eina_List *added_list;
147
148         Eina_Bool sel_all_checked;
149
150         char *time_12h_ptn;
151         char *time_24h_ptn;
152         char *date_ptn;
153         msg_time_format time_fmt;
154         char locale[DEF_BUF_LEN];
155         int noti_fd;
156
157         Ecore_Animator *load_animator;
158         Ecore_Animator *add_animator;
159         Ecore_Idler *scroll_idler;
160         Ecore_Idler *add_idler;
161         Ecore_Idler *resend_idler;
162         Ecore_Idler *retrieve_idler;
163         Ecore_Idler *conformant_idler;
164         Ecore_Thread *del_thread;
165
166         MSG_HANDLE_T msgHandle;
167         MSG_THREAD_ID_T threadId;
168         MSG_CONTACT_ID_T contactId;
169         char threadAddr[DEF_THREAD_ADDR_LEN+1];
170         char threadName[DEF_THREAD_NAME_LEN+1];
171
172         int bubble_count;
173         int bubble_index;
174         int added_count;
175         int msg_type;                   /* type of the latest message in the selected converstaion list*/
176
177         int check_cnt;
178         int del_index;
179         void *callback_data;
180 } MSG_BUBBLE_DATA, *PMSG_BUBBLE_DATA;
181
182
183 /* FUNCTIONS */
184 PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(MSG_HANDLE_T msgHandle, void *callback_data);
185 void msg_ui_bubble_deinit_bubble_data(void *data);
186
187 void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, bundle *b);
188 void msg_ui_bubble_start_bubble_list(PMSG_BUBBLE_DATA bubble_data);
189 void msg_ui_bubble_init_bubble_list(PMSG_BUBBLE_DATA bubble_data);
190
191 Evas_Object *msg_ui_bubble_create_controlbar(Evas_Object *parent, void *user_data);
192 Evas_Object *msg_ui_bubble_create_view(Evas_Object *parent, void *user_data);
193 void msg_ui_bubble_start_view(PMSG_BUBBLE_DATA bubble_data);
194 void msg_ui_bubble_add_normal_control_item(void *user_data);
195
196 void msg_ui_bubble_reg_bubble_cb_func(PMSG_BUBBLE_DATA pData);
197 PMSG_BUBBLE_DATA msg_ui_bubble_get_bubble_data(void);
198
199 void msg_ui_bubble_fill_bubble_contents(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S item_data);
200 Eina_Bool msg_ui_bubble_item_load_cb(void *data);
201 void msg_ui_bubble_list_load(PMSG_BUBBLE_DATA bubble_data);
202 void msg_ui_bubble_list_data_update(PMSG_BUBBLE_DATA bubble_data);
203 void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg);
204 Eina_Bool msg_ui_bubble_item_add_cb(void *data);
205 void msg_ui_bubble_list_append(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg);
206 void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg);
207
208 void msg_ui_bubble_change_normal_navi_control(PMSG_BUBBLE_DATA pData);
209 void msg_ui_bubble_msg_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE_TYPE_T type, MSG_MSGID_LIST_S *pMsgIdList, void *user_param);
210 void msg_ui_bubble_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info);
211 void msg_ui_bubble_ctlbar_call_cb(void *data, Evas_Object *obj, void *event_info);
212 void msg_ui_bubble_ctlbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info);
213 void msg_ui_bubble_ctlbar_view_ct_detail_cb(void *data, Evas_Object *obj, void *event_info);
214 void msg_ui_bubble_ctlbar_delete_cb(void *data, Evas_Object *obj, void *event_info);
215 void msg_ui_bubble_ctlbar_forward_cb(void *data, Evas_Object *obj, void *event_info);
216 void msg_ui_bubble_ctlbar_move_cb(void *data, Evas_Object *obj, void *event_info);
217 void msg_ui_bubble_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_info);
218 void msg_ui_bubble_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_info);
219 void msg_ui_bubble_item_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
220 void msg_ui_bubble_item_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
221 void msg_ui_bubble_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
222 void msg_ui_bubble_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
223 void msg_ui_bubble_list_checked_cb(void *data, Evas_Object *obj, void *event_info);
224 void msg_ui_bubble_timezone_change_cb(void *data);
225 void msg_ui_bubble_scroll_edge_top_cb(void *data, Evas_Object *obj, void *event_info);
226 void msg_ui_bubble_scroll_drag_start_cb(void *data, Evas_Object *obj, void *event_info);
227 void msg_ui_bubble_launch_voice_call(const char *call_num);
228 char *msg_ui_bubble_get_trimmed_number(const char *org_num);
229 void msg_ui_bubble_launch_add_to_contact_ug(PMSG_BUBBLE_DATA pData);
230 void msg_ui_bubble_launch_contact_list_ug(PMSG_BUBBLE_DATA pData, int type, const char *str);
231 void msg_ui_bubble_launch_contact_detail_ug(PMSG_BUBBLE_DATA pData, int ct_id);
232 void msg_ui_bubble_show_notify(PMSG_BUBBLE_DATA bubbleData, char *msg);
233 void msg_ui_bubble_show_notify_with_timeout(PMSG_BUBBLE_DATA pData, char *msg, double timeout);
234 Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData, int count);
235
236 void msg_ui_bubble_show_select_info(PMSG_BUBBLE_DATA pData);
237 void msg_ui_bubble_contact_info_update(PMSG_BUBBLE_DATA pData);
238 void msg_ui_bubble_get_time_format(PMSG_BUBBLE_DATA pData);
239 void msg_ui_bubble_get_locale(PMSG_BUBBLE_DATA pData);
240
241
242 #endif