bc4718b3de2c4dd63366109f5ff9bb9ecb987c0a
[profile/ivi/org.tizen.browser.git] / src / browser-view / browser-view.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
18 #ifndef BROWSER_VIEW_H
19 #define BROWSER_VIEW_H
20
21 #include "browser-common-view.h"
22 #ifdef USE_META_TAG
23 #include "browser-meta-tag.h"
24 #endif
25 #include "browser-config.h"
26 #if defined(FEATURE_MOST_VISITED_SITES)
27 #include "browser-most-visited.h"
28 #include "most-visited-sites-db.h"
29 #endif
30
31 class Browser_Bookmark_DB;
32 class Browser_Context_Menu;
33 class Browser_Class;
34 class Browser_Find_Word;
35 #ifdef USE_META_TAG
36 class Browser_Meta_Tag;
37 #endif
38 class Browser_Multi_Window_View;
39 class Browser_Scissorbox_View;
40 class Browser_Settings_Class;
41 class Most_Visited_Sites;
42 class Most_Visited_Sites_DB;
43 class Browser_Window;
44
45 /* edit mode state check */
46 typedef enum _edit_mode {
47         BR_NO_EDIT_MODE         = 0,
48         BR_URL_ENTRY_EDIT_MODE,
49         BR_URL_ENTRY_EDIT_MODE_WITH_NO_IMF,
50         BR_FIND_WORD_MODE
51 } edit_mode;
52
53 class Browser_View : public Browser_Common_View {
54         friend class Browser_Class;
55         friend class Browser_Find_Word;
56         friend class Browser_Multi_Window_View;
57         friend class Most_Visited_Sites;
58         friend class Browser_Scissorbox_View;
59 public:
60         Browser_View(Evas_Object *win, Evas_Object *navi_bar, Evas_Object *bg, Browser_Class *browser);
61         ~Browser_View(void);
62
63         Eina_Bool init(void);
64         void launch(const char *url);
65         void set_focused_window(Browser_Window *window
66 #if defined(FEATURE_MOST_VISITED_SITES)
67                 , Eina_Bool show_most_visited_sites = EINA_TRUE
68 #endif
69                 );
70         Browser_Window *get_focused_window(void) { return m_focused_window; }
71         void load_url(const char *url);
72         string get_title(Browser_Window *window);
73         string get_title(void);
74         string get_url(void);
75         string get_url(Browser_Window *window);
76         void return_to_browser_view(Eina_Bool saved_most_visited_sites_item = EINA_FALSE);
77         void unset_navigationbar_title_object(Eina_Bool is_unset);
78
79 #if defined(HORIZONTAL_UI)
80         void rotate(int degree);
81         Eina_Bool is_available_to_rotate(void);
82 #endif
83         void pause(void);
84         void resume(void);
85         void reset(void);
86         void set_full_sreen(Eina_Bool enable);
87
88         void suspend_ewk_view(Evas_Object *ewk_view);
89         void resume_ewk_view(Evas_Object *ewk_view);
90
91         void set_edit_mode(edit_mode mode) { m_edit_mode = mode; }
92 #if defined(FEATURE_MOST_VISITED_SITES)
93         Eina_Bool is_most_visited_sites_running(void);
94 #endif
95         Evas_Object *get_favicon(const char *url);
96         void delete_non_user_created_windows(void);
97         Eina_Bool _is_loading(void);
98 private:
99         typedef enum _homepage_mode {
100 #if defined(FEATURE_MOST_VISITED_SITES)
101                 BR_START_MODE_MOST_VISITED_SITES        = 0,
102 #endif
103                 BR_START_MODE_RECENTLY_VISITED_SITE,
104                 BR_START_MODE_CUSTOMIZED_URL,
105                 BR_START_MODE_EMPTY_PAGE,
106                 BR_START_MODE_UNKOWN
107         } homepage_mode;
108
109         /* ewk view event callback functions. */
110         static void __create_window_cb(void *data, Evas_Object *obj, void *event_info);
111         static void __close_window_cb(void *data, Evas_Object *obj, void *event_info);
112         static void __load_started_cb(void *data, Evas_Object *obj, void *event_info);
113         static void __load_progress_cb(void *data, Evas_Object *obj, void *event_info);
114         static void __load_finished_cb(void *data, Evas_Object *obj, void *event_info);
115         static void __did_finish_load_for_frame_cb(void *data, Evas_Object *obj, void *event_info);
116         static void __process_crashed_cb(void *data, Evas_Object *obj, void *event_info);
117         static void __load_committed_cb(void *data, Evas_Object *obj, void *event_info);
118         static void __title_changed_cb(void *data, Evas_Object *obj, void *event_info);
119         static void __load_nonempty_layout_finished_cb(void *data, Evas_Object *obj, void *event_info);
120
121         /* imf event callback functions */
122         static void __url_entry_imf_event_cb(void *data, Ecore_IMF_Context *ctx, int value);
123         static void __find_word_entry_imf_event_cb(void *data, Ecore_IMF_Context *ctx, int value);
124
125         /* edje object event callback functions */
126         static void __url_entry_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
127         static void __refresh_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
128         static void __context_menu_bg_mouse_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
129
130         /* evas event callback functions */
131         static void __url_entry_focus_out_cb(void *data, Evas *e, void *event_info);
132
133         /* ewk view evas object event callback functions */
134         static void __ewk_view_mouse_down_cb(void* data, Evas* evas, Evas_Object* obj, void* ev);
135         static void __ewk_view_mouse_up_cb(void* data, Evas* evas, Evas_Object* obj, void* ev);
136
137         /* idler callback functions */
138 #if defined(HORIZONTAL_UI)
139         static Eina_Bool __rotate_multi_window_cb(void *data);
140 #endif
141         static Eina_Bool __webview_layout_resize_idler_cb(void *data);
142 #if defined(FEATURE_MOST_VISITED_SITES)
143         static Eina_Bool __capture_most_visited_sites_screen_shot_idler_cb(void *data);
144 #endif
145         static Eina_Bool __close_window_idler_cb(void *data);
146         static Eina_Bool __scroller_bring_in_idler_cb(void *data);
147         static Eina_Bool __show_scissorbox_view_idler_cb(void *data);
148
149         void _update_back_forward_buttons(void);
150
151         static void __backward_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
152         static void __forward_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
153
154         /* evas object smart callback functions */
155         static void __ewk_view_edge_top_cb(void *data, Evas_Object *obj, void *event_info);
156         static void __ewk_view_scroll_down_cb(void *data, Evas_Object *obj, void *event_info);
157         static void __ewk_view_scroll_up_cb(void *data, Evas_Object *obj, void *event_info);
158         static void __ewk_view_enter_full_screen_cb(void *data, Evas_Object *obj, void *event_info);
159         static void __ewk_view_exit_full_screen_cb(void *data, Evas_Object *obj, void *event_info);
160         static void __ewk_view_vibration_vibrate_cb(void *data, Evas_Object *obj, void *event_info);
161         static void __ewk_view_vibration_cancel_cb(void *data, Evas_Object *obj, void *event_info);
162
163         static void __scroller_resize_cb(void* data, Evas* evas, Evas_Object* obj, void* ev);
164         static void __url_layout_mouse_down_cb(void *data, Evas* evas, Evas_Object *obj,
165                                                                                 void *event_info);
166
167         /* elementary event callback functions */
168         static void __title_back_button_clicked_cb(void *data , Evas_Object *obj, void *event_info);
169         static void __url_entry_enter_key_cb(void *data, Evas_Object *obj, void *event_info);
170         static void __find_word_entry_enter_key_cb(void *data, Evas_Object *obj, void *event_info);
171         static void __find_word_entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
172         static void __cancel_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
173         static void __go_to_bookmark_cb(void *data, Evas_Object *obj, void *event_info);
174         static void __backward_cb(void *data, Evas_Object *obj, void *event_info);
175         static void __forward_cb(void *data, Evas_Object *obj, void *event_info);
176         static void __add_bookmark_cb(void *data, Evas_Object *obj, void *event_info);
177         static void __multi_window_cb(void *data, Evas_Object *obj, void *event_info);
178         static void __new_window_cb(void *data, Evas_Object *obj, void *event_info);
179         static void __more_cb(void *data, Evas_Object *obj, void *event_info);
180         static void __scroller_scroll_cb(void *data, Evas_Object *obj, void *event_info);
181         static void __send_via_message_cb(void *data, Evas_Object *obj, void *event_info);
182         static void __download_manager_cb(void *data, Evas_Object *obj, void *event_info);
183         static void __send_via_email_cb(void *data, Evas_Object *obj, void *event_info);
184         static void __post_to_sns_cb(void *data, Evas_Object *obj, void *event_info);
185         static void __more_context_popup_dismissed_cb(void *data, Evas_Object *obj,
186                                                                         void *event_info);
187         static void __url_entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
188         static void __internet_settings_cb(void *data, Evas_Object *obj, void *event_info);
189         static void __find_word_cb(void *data, Evas_Object *obj, void *event_info);
190         static void __find_word_cancel_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
191         static void __find_word_prev_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
192         static void __find_word_next_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
193         static void __clean_up_windows_test_cb(void *data, Evas_Object *obj, void *event_info);
194 #ifdef ZOOM_BUTTON
195         static void __zoom_in_clicked_cb(void *data, Evas_Object *obj, void *event_info);
196         static void __zoom_out_clicked_cb(void *data, Evas_Object *obj, void *event_info);
197         static Eina_Bool __zoom_button_timeout_cb(void *data);
198         Eina_Bool _create_zoom_buttons(void);
199 #endif
200         static void __expand_option_header_cb(void *data, Evas_Object *obj, void *event_info);
201         static void __private_cb(void *data, Evas_Object *obj, void *event_info);
202         static void __private_check_change_cb(void *data, Evas_Object *obj, void *event_info);
203         static void __bookmark_cb(void *data, Evas_Object *obj, void *event_info);
204         static void __bookmark_icon_changed_cb(void *data, Evas_Object *obj, void *event_info);
205         static void __option_header_url_layout_mouse_down_cb(void *data, Evas* evas,
206                                                                 Evas_Object *obj, void *event_info);
207         static void __naviframe_pop_finished_cb(void *data , Evas_Object *obj, void *event_info);
208         static void __dim_area_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
209
210         static void __find_word_erase_button_clicked_cb(void *data, Evas_Object *obj,
211                                                                 const char *emission, const char *source);
212
213         /* elm transit callback functions */
214         static void __new_window_transit_finished_cb(void *data, Elm_Transit *transit);
215
216 #ifdef USE_META_TAG
217         static void __web_app_capable_get_cb(Eina_Bool capable, void* user_data);
218         static void __web_app_icon_url_get_cb(const char* icon_url, void* user_data);
219
220 #endif
221
222         /* normal member functions */
223         Eina_Bool _create_main_layout(void);
224         Evas_Object *_create_url_layout(void);
225         Evas_Object *_create_option_header_url_layout(void);
226         Evas_Object *_create_control_bar(void);
227         Eina_Bool _show_more_context_popup(void);
228         void _stop_loading(void);
229         void _reload(void);
230         void _set_navigationbar_title(const char *title);
231         void _set_url_entry(const char *url, Eina_Bool set_secrue_icon = EINA_TRUE);
232         Eina_Bool _is_option_header_expanded(void);
233         void _set_controlbar_back_forward_status(void);
234         void _navigationbar_title_clicked(void);
235         void _load_start(void);
236         void _load_finished(void);
237         void _set_multi_window_controlbar_text(int count);
238         /* get activated url entry, if the option header is expanded, return url entry in option header */
239         Evas_Object *_get_activated_url_entry(void);
240         void _set_edit_mode(edit_mode mode);
241         edit_mode _get_edit_mode(void) { return m_edit_mode; }
242         homepage_mode _get_homepage_mode(void) { return m_homepage_mode; }
243         /* set homepage from homepage vconf */
244         void _set_homepage_mode(void);
245         void _set_secure_icon(void);
246         Eina_Bool _set_favicon(void);
247         Eina_Bool _show_brightness_popup(void);
248         Eina_Bool _call_download_manager(void);
249         Eina_Bool _call_internet_settings(void);
250         void _pop_other_views(void);
251 #if defined(FEATURE_MOST_VISITED_SITES)
252         Eina_Bool _show_most_visited_sites(Eina_Bool is_show);
253         Eina_Bool _capture_most_visited_sites_item_screen_shot(void);
254 #endif
255         Eina_Bool _show_new_window_effect(Evas_Object *current_ewk_view,
256                                                         Evas_Object *new_ewk_view);
257 #if defined(HORIZONTAL_UI)
258         void _rotate_multi_window(void);
259 #endif
260         void _destroy_more_context_popup(void);
261         void _enable_browser_scroller_scroll(void);
262         void _enable_webview_scroll(void);
263         void _navigationbar_visible_set_signal(Eina_Bool visible);
264         void _navigationbar_visible_set(Eina_Bool visible);
265         Eina_Bool _navigationbar_visible_get(void);
266         Evas_Object *_create_find_word_layout(void);
267         void _update_find_word_index_text(const char *index_text);
268         void _jump_to_top(void);
269         void _hide_scroller_url_layout(void);
270         Eina_Bool _show_scissorbox_view(void);
271         void _destroy_scissorbox_view(void);
272         Eina_Bool _haptic_device_init(void);
273         Eina_Bool _haptic_device_play(long haptic_play_time);
274         Eina_Bool _haptic_device_stop(void);
275         Eina_Bool _haptic_device_close(void);
276         Evas_Object *_create_brightness_control_bar(void);
277         Eina_Bool _show_brightness_layout(void);
278         void _destroy_brightness_layout(void);
279
280         Evas_Object *m_main_layout;
281         Evas_Object *m_scroller;
282         Evas_Object *m_content_box;
283         Evas_Object *m_dummy_loading_progressbar;
284         Evas_Object *m_conformant;
285         Evas_Object *m_title_back_button;
286
287         /* url layout member variables */
288         Evas_Object *m_url_layout;
289         Evas_Object *m_url_entry_layout;
290         Evas_Object *m_url_edit_field;
291         Evas_Object *m_cancel_button;
292         Evas_Object *m_url_progressbar;
293         Evas_Object *m_url_progresswheel;
294         Evas_Object *m_option_header_layout;
295         Evas_Object *m_find_word_entry_layout;
296         Evas_Object *m_find_word_edit_field;
297         Evas_Object *m_find_word_cancel_button;
298         Evas_Object *m_find_word_prev_button;
299         Evas_Object *m_find_word_next_button;
300         Evas_Object *m_option_header_find_word_layout;
301
302         /* url layout which is inserted to navigation bar option header member variables */
303         Evas_Object *m_option_header_url_layout;
304         Evas_Object *m_option_header_url_entry_layout;
305         Evas_Object *m_option_header_url_edit_field;
306         Evas_Object *m_option_header_cancel_button;
307         Evas_Object *m_option_header_url_progressbar;
308         Evas_Object *m_option_header_url_progresswheel;
309
310         Evas_Object *m_multi_window_title_button;
311
312         /* control bar member variables */
313         Evas_Object *m_control_bar;
314 //      Elm_Object_Item *m_backward_button;
315         Elm_Object_Item *m_forward_button;
316         Elm_Object_Item *m_add_bookmark_button;
317         Elm_Object_Item *m_more_button;
318         Elm_Object_Item *m_multi_window_button;
319         Elm_Object_Item *m_share_controlbar_button;
320         Elm_Object_Item *m_new_window_button;
321         Evas_Object *m_back_button;
322
323         /* state check */
324         edit_mode m_edit_mode;
325         homepage_mode m_homepage_mode;
326
327         Browser_Window *m_focused_window;
328         Eina_Bool m_is_scrolling;
329         int m_scroller_region_y;
330         Evas_Object *m_more_context_popup;
331 #if defined(FEATURE_MOST_VISITED_SITES)
332         Most_Visited_Sites *m_most_visited_sites;
333         Most_Visited_Sites_DB *m_most_visited_sites_db;
334         /* To update the clicked most visited sites item info such as snapshot, url, title. */
335         Most_Visited_Sites_DB::most_visited_sites_entry m_selected_most_visited_sites_item_info;
336 #endif
337         Browser_Settings_Class *m_browser_settings;
338
339         Elm_Transit *m_new_window_transit;
340         Browser_Window *m_created_new_window;
341
342         std::string m_last_visited_url;
343
344         Elm_Object_Item *m_navi_it;
345         Browser_Find_Word *m_find_word;
346         Browser_Context_Menu *m_context_menu;
347         Browser_Scissorbox_View *m_scissorbox_view;
348 #if defined(HORIZONTAL_UI)
349         int m_rotate_degree;
350         Ecore_Timer *m_multi_window_rotate_timer;
351         Eina_Bool m_is_rotated;
352 #endif
353 #ifdef USE_META_TAG
354         Browser_Meta_Tag *m_meta_tag;
355 #endif
356         Eina_Bool m_is_full_screen;
357 #ifdef ZOOM_BUTTON
358         Evas_Object *m_zoom_in_button;
359         Evas_Object *m_zoom_out_button;
360         Ecore_Timer *m_zoom_button_timer;
361 #endif
362
363         Evas_Object *m_title_backward_button;
364         Evas_Object *m_title_forward_button;
365         Evas_Object *m_option_header_title_backward_button;
366         Evas_Object *m_option_header_title_forward_button;
367
368         Ecore_Idler *m_resize_idler;
369         Eina_Bool m_is_private;
370         Eina_Bool m_is_private_item_pressed;
371         Evas_Object *m_private_check;
372         Evas_Object *m_bookmark_on_off_icon;
373
374         Evas_Object *m_brightness_control_bar;
375         Elm_Object_Item *m_brightness_auto_it;
376         Elm_Object_Item *m_brightness_manual_it;
377
378         Elm_Object_Item *m_default_seg_it;
379         Elm_Object_Item *m_low_seg_it;
380         Elm_Object_Item *m_medium_seg_it;
381         Elm_Object_Item *m_high_seg_it;
382
383         int m_vibration_device_handle_id;
384
385         Eina_Bool m_is_multi_window_grid_mode;
386 };
387 #endif /* BROWSER_VIEW_H */
388