Task TT-75 Implement "Main page loading UI" view
[profile/tv/apps/web/browser.git] / services / SimpleUI / SimpleUI.h
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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  * SimpleUI.h
19  *
20  *  Created on: Mar 18, 2014
21  *      Author: k.szalilow
22  */
23
24 #ifndef SIMPLEUI_H_
25 #define SIMPLEUI_H_
26
27 #include <Evas.h>
28
29 #include "AbstractMainWindow.h"
30 #include "AbstractService.h"
31 #include "AbstractFavoriteService.h"
32 #include "ServiceFactory.h"
33 #include "service_macros.h"
34
35 // components
36 #include "AbstractWebEngine.h"
37 #if MERGE_ME
38 #include "BookmarkManagerUI.h"
39 #include "MoreMenuUI.h"
40 #include "HistoryUI.h"
41 #include "SettingsUI.h"
42 #endif
43 #include "MainUI.h"
44 #if MERGE_ME
45 #include "TabUI.h"
46 #endif
47 #include "ButtonBar.h"
48 #include "HistoryService.h"
49 #if MERGE_ME
50 #include "BookmarkManagerUI.h"
51 #endif
52 #include "SimpleURI.h"
53 #include "SimpleScroller.h"
54 #include "WebTitleBar.h"
55 #include "PlatformInputManager.h"
56 #include "SessionStorage.h"
57 #include "SqlStorage.h"
58
59 // other
60 #include "Action.h"
61 #include "SimplePopup.h"
62 #include "WebConfirmation.h"
63 #include "ZoomList.h"
64 #include "TabList.h"
65 #include "BookmarksManager.h"
66 #include "Settings.h"
67 #include "HistoryList.h"
68 #include "NetworkErrorHandler.h"
69 #include "CustomPopup.h"
70 #include "Config.h"
71
72 namespace tizen_browser{
73 namespace base_ui{
74
75 template <>
76 void AbstractMainWindow<Evas_Object>::setMainWindow(Evas_Object * rawPtr)
77 {
78     m_window = std::shared_ptr<Evas_Object>(rawPtr, evas_object_del);
79 }
80
81 class BROWSER_EXPORT SimpleUI : public AbstractMainWindow<Evas_Object>
82 {
83 public:
84     SimpleUI(/*Evas_Object *window*/);
85     virtual ~SimpleUI();
86     virtual int exec(const std::string& url);
87     virtual std::string getName();
88
89     void destroyUI();
90 private:
91     void createActions();
92     void connectActions();
93
94     void backEnable(bool enable);
95     void forwardEnable(bool enable);
96     void stopEnable(bool enable);
97     void reloadEnable(bool enable);
98     void addBookmarkEnable(bool enable);
99     void removeBookmarkEnable(bool enable);
100     void zoomEnable(bool enable);
101
102     void settingsButtonEnable(bool enable);
103
104     void loadFinished();
105     void progressChanged(double progress);
106     void loadStarted();
107
108     void loadError();
109     void setErrorButtons();
110     bool isErrorPageActive();
111
112     void bookmarkAdded();
113     void bookmarkDeleted();
114
115     bool isHomePageActive();
116     void switchViewToHomePage();
117     void updateBrowserView();
118     void updateWebView();
119     void updateURIBarView();
120     void updateView();
121
122     void openNewTab(const std::string &uri);
123     void switchToTab(const tizen_browser::basic_webengine::TabId& tabId);
124     void newTabClicked(const std::string &);
125     void tabClicked(const tizen_browser::basic_webengine::TabId& tabId);
126     void tabCreated();
127     void tabClosed(const tizen_browser::basic_webengine::TabId& id);
128
129     void bookmarkCheck();
130     std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarks(int folder_id = 0);
131     std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > getBookmarkFolders();
132     std::vector<std::shared_ptr<tizen_browser::services::HistoryItem> > getHistory();
133     void onBookmarkAdded(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
134
135     void onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
136     void onBookmarkDeleteClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem);
137     void onBookmarkRemoved(const std::string& uri);
138
139     void onHistoryAdded(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem);
140     void onHistoryRemoved(const std::string& uri);
141     void onHistoryClicked(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem);
142     void onMostVisitedClicked(const std::string&);
143     void onBookmarkButtonClicked(const std::string&);
144     void onBookmarkManagerButtonClicked(const std::string&);
145
146     void handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation);
147     void authPopupButtonClicked(PopupButtons button, std::shared_ptr<PopupData> popupData);
148
149     void onActionTriggered(const Action& action);
150
151     void loadThemes();
152
153     void setwvIMEStatus(bool status);
154
155     sharedAction m_back;
156     sharedAction m_forward;
157     sharedAction m_stopLoading;
158     sharedAction m_reload;
159     sharedAction m_bookmark;
160     sharedAction m_unbookmark;
161     sharedAction m_tab;
162     sharedAction m_share;
163     sharedAction m_zoom_in;
164     sharedAction m_showMoreMenu;
165     sharedAction m_showBookmarkManagerUI;
166     sharedAction m_settingPointerMode;
167     sharedAction m_settingPrivateBrowsing;
168     sharedAction m_settingDeleteHistory;
169     sharedAction m_settingDeleteData;
170     sharedAction m_settingDeleteFavorite;
171     sharedAction m_mostvisited;
172     sharedAction m_bookmarksvisited;
173     sharedAction m_bookmarks_manager_Add_NewFolder;
174     sharedAction m_bookmarks_manager_BookmarkBar;
175     sharedAction m_bookmarks_manager_Folder1;
176     sharedAction m_bookmarks_manager_Folder2;
177     sharedAction m_bookmarks_manager_Folder3;
178
179     /**
180      * \brief filters URL before it is passed to WebEngine.
181      *
182      * This function should be connected with m_simpleURI->uriChanged.
183      * it is a good place to check for special urls (like "about:home"),
184      * filter forbidden addresses and to check set favorite icon.
185      */
186     void filterURL(const std::string& url);
187
188     /**
189      * Checks if correct tab is visible to user, and if not, it update browser view
190      * @param id of tab that should be visible to user
191      */
192     void checkTabId(const tizen_browser::basic_webengine::TabId& id);
193
194     /**
195      * \brief check if url comming back from WebEngine should be passed to URI.
196      *
197      * For filtered addresses we need to hide real URI so the user would be confused.
198      * and this is a back function that checks if address emited from browser should be changed.
199      */
200     void webEngineURLChanged(const std::string& url);
201     void onmostHistoryvisitedClicked();
202     void onBookmarkvisitedClicked();
203      /**
204      * @brief Adds current page to bookmarks.
205      *
206      */
207     void addToBookmarks(int);
208     /**
209      * @brief Remove current page from bookmarks
210      *
211      * @param  ...
212      * @return void
213      */
214     void deleteBookmark(void);
215
216     /**
217      * \brief shows Zoom showZoomMenu
218      */
219     void showZoomMenu();
220
221     void zoomLevelChanged(int zoom_level);
222
223     void showHistory();
224     void hideHistory();
225     void AddBookmarkPopup(std::string& str);
226     void AddNewFolderPopup(std::string& str);
227
228     void saveFolder(const char* title, int folder_id, int by_user);
229     void NewFolder(const char* title, int folder_id, int by_user);
230     void showTabUI();
231     void closeTabUI(const std::string& str);
232     void showMoreMenu();
233     void closeMoreMenu(const std::string& str);
234     void showHistoryUI(const std::string& str);
235     void closeHistoryUI(const std::string& str);
236     void showMainUI();
237     void hideMainUI();
238     void showURIBar();
239     void hideURIBar();
240     void hideWebView();
241     void hideSettingsMenu();
242     void showSettingsUI(const std::string&);
243     void closeSettingsUI(const std::string&);
244
245     void showProgressBar();
246     void hideProgressBar();
247
248     void closeBookmarkManagerMenu(std::string& str);
249     void updateBookmakMangaerGenGrid(int folder_id);
250     void showBookmarkManagerMenu();
251
252     void showPopup(Evas_Object *content, char* btn1_text, char* btn2_text);
253
254     void closeTab();
255     void closeTab(const tizen_browser::basic_webengine::TabId& id);
256
257     void settingsPointerModeSwitch(bool newState);
258     void settingsPrivateModeSwitch(bool newState);
259     void settingsDeleteData();
260     void settingsDeleteFavorite();
261     void settingsDeleteSelectedData(const std::string& str);
262     void settingsResetMostVisited(const std::string& str);
263     void settingsResetBrowser(const std::string& str);
264     void onDeleteSelectedDataButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
265     void onDeleteMostVisitedButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
266     void onResetBrowserButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
267     void onDeleteDataButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
268     void onDeleteFavoriteButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
269     void tabLimitPopupButtonClicked(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/);
270     void openLinkFromPopup(const std::string &);
271     void disableHistoryButton(bool flag);
272
273     void onNetworkError();
274     void onNetworkConnected();
275     void onNetErrorButtonPressed(PopupButtons, std::shared_ptr<PopupData>);
276
277     void onReturnPressed(MenuButton *m);
278     void onBackPressed();
279
280     boost::signals2::signal<void ()> hidePopup;
281
282     std::string edjePath(const std::string &);
283
284     Evas_Object *m_mainLayout;
285     Evas_Object *m_progressBar;
286     Evas_Object *m_popup;
287     Evas_Object *m_entry;
288     Evas_Object *m_errorLayout;
289     CustomPopup *m_ownPopup;
290     SimpleScroller *m_scroller;
291
292     std::shared_ptr<basic_webengine::AbstractWebEngine<Evas_Object>>  m_webEngine;
293     std::shared_ptr<tizen_browser::base_ui::SimpleURI> m_simpleURI;
294     std::shared_ptr<ButtonBar> leftButtonBar;
295     std::shared_ptr<ButtonBar> webviewbar;
296
297     std::shared_ptr<ButtonBar> rightButtonBar;
298     std::shared_ptr<tizen_browser::interfaces::AbstractFavoriteService> m_favoriteService;
299     std::shared_ptr<tizen_browser::services::HistoryService> m_historyService;
300 #if MERGE_ME
301     std::shared_ptr<tizen_browser::base_ui::MoreMenuUI> m_moreMenuUI;
302     std::shared_ptr<tizen_browser::base_ui::BookmarkManagerUI> m_bookmarkManagerUI;
303 #endif
304     std::shared_ptr<tizen_browser::base_ui::MainUI> m_mainUI;
305 #if MERGE_ME
306     std::shared_ptr<tizen_browser::base_ui::HistoryUI> m_historyUI;
307     std::shared_ptr<tizen_browser::base_ui::SettingsUI> m_settingsUI;
308     std::shared_ptr<tizen_browser::base_ui::TabUI> m_tabUI;
309 #endif
310     std::shared_ptr<tizen_browser::base_ui::ZoomList> m_zoomList;
311     std::shared_ptr<tizen_browser::base_ui::TabList> m_tabList;
312     std::shared_ptr<tizen_browser::services::PlatformInputManager> m_platformInputManager;
313     std::shared_ptr<tizen_browser::services::SessionStorage> m_sessionService;
314     tizen_browser::Session::Session m_currentSession;
315     std::shared_ptr<BookmarksManager> m_bookmarks_manager;
316     std::shared_ptr<Settings> m_settings;
317     std::shared_ptr<HistoryList> m_historyList;
318     std::shared_ptr<WebTitleBar> webTitleBar;
319     bool m_initialised;
320     bool m_isHomePageActive;
321     zoom_type m_currentZoom;
322     int m_tabLimit;
323     int m_favoritesLimit;
324     bool m_wvIMEStatus;
325
326     std::vector<std::shared_ptr<tizen_browser::services::HistoryItem>> items_vector;
327     std::unique_ptr<tizen_browser::basic_ui::NetworkErrorHandler> m_netErrorHandler;
328     SimplePopup* m_networkErrorPopup;
329
330     void searchWebPage(std::string &text, int flags);
331     static void favicon_clicked(void *data, Evas_Object *obj, const char *emission, const char *source);
332
333 };
334
335 }
336 }
337
338 #endif /* SIMPLEUI_H_ */