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.
18 #ifndef BROWSER_VIEW_H
19 #define BROWSER_VIEW_H
21 #include "browser-common-view.h"
23 #include "browser-meta-tag.h"
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"
31 class Browser_Bookmark_DB;
32 class Browser_Context_Menu;
34 class Browser_Find_Word;
36 class Browser_Meta_Tag;
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;
45 /* edit mode state check */
46 typedef enum _edit_mode {
48 BR_URL_ENTRY_EDIT_MODE,
49 BR_URL_ENTRY_EDIT_MODE_WITH_NO_IMF,
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;
60 Browser_View(Evas_Object *win, Evas_Object *navi_bar, Evas_Object *bg, Browser_Class *browser);
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
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);
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);
79 #if defined(HORIZONTAL_UI)
80 void rotate(int degree);
81 Eina_Bool is_available_to_rotate(void);
86 void set_full_sreen(Eina_Bool enable);
88 void suspend_ewk_view(Evas_Object *ewk_view);
89 void resume_ewk_view(Evas_Object *ewk_view);
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);
95 Evas_Object *get_favicon(const char *url);
96 void delete_non_user_created_windows(void);
97 Eina_Bool _is_loading(void);
99 typedef enum _homepage_mode {
100 #if defined(FEATURE_MOST_VISITED_SITES)
101 BR_START_MODE_MOST_VISITED_SITES = 0,
103 BR_START_MODE_RECENTLY_VISITED_SITE,
104 BR_START_MODE_CUSTOMIZED_URL,
105 BR_START_MODE_EMPTY_PAGE,
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);
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);
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);
130 /* evas event callback functions */
131 static void __url_entry_focus_out_cb(void *data, Evas *e, void *event_info);
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);
137 /* idler callback functions */
138 #if defined(HORIZONTAL_UI)
139 static Eina_Bool __rotate_multi_window_cb(void *data);
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);
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);
149 void _update_back_forward_buttons(void);
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);
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);
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,
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,
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);
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);
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);
210 static void __find_word_erase_button_clicked_cb(void *data, Evas_Object *obj,
211 const char *emission, const char *source);
213 /* elm transit callback functions */
214 static void __new_window_transit_finished_cb(void *data, Elm_Transit *transit);
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);
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);
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);
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);
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);
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;
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;
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;
310 Evas_Object *m_multi_window_title_button;
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;
324 edit_mode m_edit_mode;
325 homepage_mode m_homepage_mode;
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;
337 Browser_Settings_Class *m_browser_settings;
339 Elm_Transit *m_new_window_transit;
340 Browser_Window *m_created_new_window;
342 std::string m_last_visited_url;
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)
350 Ecore_Timer *m_multi_window_rotate_timer;
351 Eina_Bool m_is_rotated;
354 Browser_Meta_Tag *m_meta_tag;
356 Eina_Bool m_is_full_screen;
358 Evas_Object *m_zoom_in_button;
359 Evas_Object *m_zoom_out_button;
360 Ecore_Timer *m_zoom_button_timer;
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;
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;
374 Evas_Object *m_brightness_control_bar;
375 Elm_Object_Item *m_brightness_auto_it;
376 Elm_Object_Item *m_brightness_manual_it;
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;
383 int m_vibration_device_handle_id;
385 Eina_Bool m_is_multi_window_grid_mode;
387 #endif /* BROWSER_VIEW_H */