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 #ifndef BROWSER_VIEW_H
18 #define BROWSER_VIEW_H
20 #include "browser-common-view.h"
21 #include "browser-config.h"
22 class Browser_Bookmark_DB;
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;
34 /* edit mode state check */
35 typedef enum _edit_mode {
37 BR_URL_ENTRY_EDIT_MODE,
38 BR_URL_ENTRY_EDIT_MODE_WITH_NO_IMF,
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;
49 Browser_View(Evas_Object *win, Evas_Object *navi_bar, Evas_Object *bg,
50 Evas_Object *layout, Browser_Class *browser);
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);
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);
70 void suspend_webview(Evas_Object *webview);
71 void resume_webview(Evas_Object *webview);
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; }
80 void stop_and_reload(void);
82 typedef struct _html5_video_data {
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,
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);
108 /* imf event callback functions */
109 static void __url_entry_imf_event_cb(void *data, Ecore_IMF_Context *ctx, int value);
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);
115 /* evas event callback functions */
116 static void __url_entry_focus_out_cb(void *data, Evas *e, void *event_info);
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);
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);
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);
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,
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,
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);
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);
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);
173 /* elm transit callback functions */
174 static void __new_window_transit_finished_cb(void *data, Elm_Transit *transit);
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);
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);
217 void _jump_to_top(void);
218 void _hide_scroller_url_layout(void);
219 static Eina_Bool _activate_url_entry_idler_cb(void *data);
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;
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;
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;
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;
254 Evas_Object *m_add_to_home_control_bar;
257 edit_mode m_edit_mode;
258 homepage_mode m_homepage_mode;
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;
267 Elm_Transit *m_new_window_transit;
268 Browser_Window *m_created_new_window;
270 std::string m_last_visited_url;
272 Elm_Object_Item *m_navi_it;
273 Browser_Find_Word *m_find_word;
275 Eina_Bool m_is_scroll_up;
276 Eina_Bool m_is_multi_touch;
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;
283 Evas_Object *m_zoom_in_button;
284 Evas_Object *m_zoom_out_button;
285 Ecore_Timer *m_zoom_button_timer;
287 #endif /* BROWSER_VIEW_H */