23e0330f94f3a8eee928c5467b5d48913ec785d6
[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 #ifndef BROWSER_VIEW_H
18 #define BROWSER_VIEW_H
19
20 #include "browser-common-view.h"
21 #include "browser-config.h"
22 class Browser_Bookmark_DB;
23 class Browser_Class;
24 class Browser_Context_Menu;
25 class Browser_Exscheme_Handler;
26 class Browser_Find_Word;
27 class Browser_Multi_Window_View;
28 class Browser_Personal_Data_Manager;
29 class Browser_Picker_Handler;
30 class Browser_Predictive_History;
31 class Browser_Settings_Class;
32 class Browser_Window;
33
34 /* edit mode state check */
35 typedef enum _edit_mode {
36         BR_NO_EDIT_MODE         = 0,
37         BR_URL_ENTRY_EDIT_MODE,
38         BR_URL_ENTRY_EDIT_MODE_WITH_NO_IMF,
39         BR_FIND_WORD_MODE
40 } edit_mode;
41
42 class Browser_View : public Browser_Common_View {
43         friend class Browser_Class;
44         friend class Browser_Context_Menu;
45         friend class Browser_Find_Word;
46         friend class Browser_Multi_Window_View;
47         friend class Browser_Predictive_History;
48 public:
49         Browser_View(Evas_Object *win, Evas_Object *navi_bar, Evas_Object *bg,
50                                                 Evas_Object *layout, Browser_Class *browser);
51         ~Browser_View(void);
52
53         Eina_Bool init(void);
54         void launch(const char *url);
55         void set_focused_window(Browser_Window *window, Eina_Bool show_most_visited_sites = EINA_TRUE);
56         Browser_Window *get_focused_window(void) { return m_focused_window; }
57         Evas_Object *get_focused_webview(void);
58         void load_url(const char *url);
59         string get_title(Browser_Window *window);
60         string get_title(void);
61         string get_url(void);
62         string get_url(Browser_Window *window);
63         void return_to_browser_view(Eina_Bool saved_most_visited_sites_item = EINA_FALSE);
64         void unset_navigationbar_title_object(Eina_Bool is_unset);
65
66         void pause(void);
67         void resume(void);
68         void reset(void);
69
70         void suspend_webview(Evas_Object *webview);
71         void resume_webview(Evas_Object *webview);
72
73         void set_edit_mode(edit_mode mode) { m_edit_mode = mode; }
74         Evas_Object *get_favicon(const char *url);
75         void delete_non_user_created_windows(void);
76         void init_personal_data_manager(Evas_Object *webview);
77         void deinit_personal_data_manager(void);
78         Browser_Personal_Data_Manager *get_personal_data_manager(void) { return m_personal_data_manager; }
79
80         void stop_and_reload(void);
81
82         typedef struct _html5_video_data {
83                 const char* path;
84                 const char* cookie;
85         } html5_video_data;
86 private:
87         typedef enum _homepage_mode {
88                 BR_START_MODE_MOST_VISITED_SITES        = 0,
89                 BR_START_MODE_RECENTLY_VISITED_SITE,
90                 BR_START_MODE_CUSTOMIZED_URL,
91                 BR_START_MODE_EMPTY_PAGE,
92                 BR_START_MODE_UNKOWN
93         } homepage_mode;
94
95         /* ewk view event callback functions. */
96         static void __uri_changed_cb(void *data, Evas_Object *obj, void *event_info);
97         static void __load_started_cb(void *data, Evas_Object *obj, void *event_info);
98         static void __load_progress_cb(void *data, Evas_Object *obj, void *event_info);
99         static void __load_finished_cb(void *data, Evas_Object *obj, void *event_info);
100         static void __load_nonempty_layout_finished_cb(void *data, Evas_Object *obj, void *event_info);
101         static void __create_webview_cb(void *data, Evas_Object *obj, void *event_info);
102         static void __window_close_cb(void *data, Evas_Object *obj, void *event_info);
103         static void __html_boundary_reached_cb(void *data, Evas_Object *obj, void *event_info);
104         static void __html5_video_request_cb(void *data, Evas_Object *obj, void *event_info);
105         static void __vibrator_vibrate_cb(void *data, Evas_Object *obj, void *event_info);
106         static void __vibrator_cancel_cb(void *data, Evas_Object *obj, void *event_info);
107
108         /* imf event callback functions */
109         static void __url_entry_imf_event_cb(void *data, Ecore_IMF_Context *ctx, int value);
110
111         /* edje object event callback functions */
112         static void __url_entry_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
113         static void __refresh_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
114
115         /* evas event callback functions */
116         static void __url_entry_focus_out_cb(void *data, Evas *e, void *event_info);
117
118         /* ewk view evas object event callback functions */
119         static void __ewk_view_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *ev);
120         static void __ewk_view_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *ev);
121         static void __ewk_view_multi_down_cb(void *data, Evas *evas, Evas_Object *obj, void *ev);
122         static void __ewk_view_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *ev);
123         static void __scroller_edge_bottom_cb(void *data, Evas_Object *obj, void *event_info);
124
125         /* idler callback functions */
126         static Eina_Bool __webview_layout_resize_idler_cb(void *data);
127         static Eina_Bool __close_window_idler_cb(void *data);
128         static Eina_Bool __scroller_bring_in_idler_cb(void *data);
129
130         /* evas object smart callback functions */
131         static void __ewk_view_edge_top_cb(void *data, Evas_Object *obj, void *event_info);
132         static void __ewk_view_scroll_down_cb(void *data, Evas_Object *obj, void *event_info);
133         static void __ewk_view_scroll_up_cb(void *data, Evas_Object *obj, void *event_info);
134
135         static void __scoller_resize_cb(void* data, Evas* evas, Evas_Object* obj, void* ev);
136         static void __url_layout_mouse_down_cb(void *data, Evas* evas, Evas_Object *obj,
137                                                                                 void *event_info);
138
139         /* elementary event callback functions */
140         static void __title_back_button_clicked_cb(void *data , Evas_Object *obj, void *event_info);
141         static void __url_entry_enter_key_cb(void *data, Evas_Object *obj, void *event_info);
142         static void __cancel_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
143         static void __go_to_bookmark_cb(void *data, Evas_Object *obj, void *event_info);
144         static void __backward_cb(void *data, Evas_Object *obj, void *event_info);
145         static void __forward_cb(void *data, Evas_Object *obj, void *event_info);
146         static void __add_to_home_cb(void *data, Evas_Object *obj, void *event_info);
147         static void __add_bookmark_cb(void *data, Evas_Object *obj, void *event_info);
148         static void __multi_window_cb(void *data, Evas_Object *obj, void *event_info);
149         static void __more_cb(void *data, Evas_Object *obj, void *event_info);
150         static void __scroller_scroll_cb(void *data, Evas_Object *obj, void *event_info);
151         static void __download_manager_cb(void *data, Evas_Object *obj, void *event_info);
152         static void __more_context_popup_dismissed_cb(void *data, Evas_Object *obj,
153                                                                         void *event_info);
154         static void __url_entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
155         static void __internet_settings_cb(void *data, Evas_Object *obj, void *event_info);
156         static void __find_word_cb(void *data, Evas_Object *obj, void *event_info);
157
158         static void __zoom_in_clicked_cb(void *data, Evas_Object *obj, void *event_info);
159         static void __zoom_out_clicked_cb(void *data, Evas_Object *obj, void *event_info);
160         static Eina_Bool __zoom_button_timeout_cb(void *data);
161         Eina_Bool _create_zoom_buttons(void);
162
163         static void __expand_option_header_cb(void *data, Evas_Object *obj, void *event_info);
164         static void __share_cb(void *data, Evas_Object *obj, void *event_info);
165         static void __option_header_url_layout_mouse_down_cb(void *data, Evas* evas,
166                                                                 Evas_Object *obj, void *event_info);
167         static void __add_to_home_cancel_cb(void *data, Evas_Object *obj, void *event_info);
168         static void __add_to_home_done_cb(void *data, Evas_Object *obj, void *event_info);
169         static void __add_to_send_cb(void *data, Evas_Object *obj, void *event_info);
170         static void __naviframe_pop_finished_cb(void *data , Evas_Object *obj, void *event_info);
171         static void __dim_area_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
172
173         /* elm transit callback functions */
174         static void __new_window_transit_finished_cb(void *data, Elm_Transit *transit);
175
176         /* normal member functions */
177         Eina_Bool _create_main_layout(void);
178         Evas_Object *_create_url_layout(void);
179         Evas_Object *_create_option_header_url_layout(void);
180         Evas_Object *_create_control_bar(void);
181         Eina_Bool _show_more_context_popup(void);
182         void _stop_loading(void);
183         void _reload(void);
184         void _set_navigationbar_title(const char *title);
185         void _set_url_entry(const char *url, Eina_Bool set_secrue_icon = EINA_TRUE);
186         Eina_Bool _is_option_header_expanded(void);
187         void _set_controlbar_back_forward_status(void);
188         void _navigationbar_title_clicked(void);
189         void _load_start(void);
190         void _load_finished(void);
191         void _set_multi_window_controlbar_text(int count);
192         /* get activated url entry, if the option header is expanded, return url entry in option header */
193         Evas_Object *_get_activated_url_entry(void);
194         void _set_edit_mode(edit_mode mode);
195         edit_mode _get_edit_mode(void) { return m_edit_mode; }
196         homepage_mode _get_homepage_mode(void) { return m_homepage_mode; }
197         /* set homepage from homepage vconf */
198         void _set_homepage_mode(void);
199         void _set_secure_icon(void);
200         Eina_Bool _set_favicon(void);
201         Eina_Bool _call_download_manager(void);
202         Eina_Bool _call_internet_settings(void);
203         void _pop_other_views(void);
204         Eina_Bool _show_new_window_effect(Evas_Object *current_ewk_view,
205                                                         Evas_Object *new_ewk_view);
206         Eina_Bool _is_loading(void);
207         Eina_Bool _search_keyword_from_search_engine(const char *keyword);
208         Eina_Bool _call_html5_video_streaming_player(const char *url, const char *cookie);
209         void _destroy_more_context_popup(void);
210         void _enable_browser_scroller_scroll(void);
211         void _enable_webview_scroll(void);
212         void _navigationbar_visible_set_signal(Eina_Bool visible);
213         void _navigationbar_visible_set(Eina_Bool visible);
214         Eina_Bool _navigationbar_visible_get(void);
215         Evas_Object *_create_add_to_home_control_bar(void);
216
217         void _jump_to_top(void);
218         void _hide_scroller_url_layout(void);
219         static Eina_Bool _activate_url_entry_idler_cb(void *data);
220
221         Evas_Object *m_main_layout;
222         Evas_Object *m_scroller;
223         Evas_Object *m_content_box;
224         Evas_Object *m_dummy_loading_progressbar;
225         Evas_Object *m_conformant;
226         Evas_Object *m_title_back_button;
227
228         /* url layout member variables */
229         Evas_Object *m_url_layout;
230         Evas_Object *m_url_entry_layout;
231         Evas_Object *m_url_edit_field;
232         Evas_Object *m_cancel_button;
233         Evas_Object *m_url_progressbar;
234         Evas_Object *m_url_progresswheel;
235
236         Evas_Object *m_option_header_layout;
237         /* url layout which is inserted to navigation bar option header member variables */
238         Evas_Object *m_option_header_url_layout;
239         Evas_Object *m_option_header_url_entry_layout;
240         Evas_Object *m_option_header_url_edit_field;
241         Evas_Object *m_option_header_cancel_button;
242         Evas_Object *m_option_header_url_progressbar;
243         Evas_Object *m_option_header_url_progresswheel;
244
245         /* control bar member variables */
246         Evas_Object *m_control_bar;
247         Elm_Object_Item *m_backward_button;
248         Elm_Object_Item *m_forward_button;
249         Elm_Object_Item *m_add_bookmark_button;
250         Elm_Object_Item *m_more_button;
251         Elm_Object_Item *m_multi_window_button;
252         Elm_Object_Item *m_share_controlbar_button;
253
254         Evas_Object *m_add_to_home_control_bar;
255
256         /* state check */
257         edit_mode m_edit_mode;
258         homepage_mode m_homepage_mode;
259
260         Browser_Window *m_focused_window;
261         Eina_Bool m_is_scrolling;
262         int m_scroller_region_y;
263         Evas_Object *m_more_context_popup;
264         Browser_Predictive_History *m_predictive_history;
265         Browser_Settings_Class *m_browser_settings;
266
267         Elm_Transit *m_new_window_transit;
268         Browser_Window *m_created_new_window;
269
270         std::string m_last_visited_url;
271
272         Elm_Object_Item *m_navi_it;
273         Browser_Find_Word *m_find_word;
274
275         Eina_Bool m_is_scroll_up;
276         Eina_Bool m_is_multi_touch;
277
278         Browser_Context_Menu *m_context_menu;
279         Browser_Exscheme_Handler *m_exscheme_handler;
280         Browser_Personal_Data_Manager *m_personal_data_manager;
281         Browser_Picker_Handler *m_picker_handler;
282
283         Evas_Object *m_zoom_in_button;
284         Evas_Object *m_zoom_out_button;
285         Ecore_Timer *m_zoom_button_timer;
286 };
287 #endif /* BROWSER_VIEW_H */
288