Dooble
dooble_page.h
1 /*
2 ** Copyright (c) 2008 - present, Alexis Megas.
3 ** All rights reserved.
4 **
5 ** Redistribution and use in source and binary forms, with or without
6 ** modification, are permitted provided that the following conditions
7 ** are met:
8 ** 1. Redistributions of source code must retain the above copyright
9 ** notice, this list of conditions and the following disclaimer.
10 ** 2. Redistributions in binary form must reproduce the above copyright
11 ** notice, this list of conditions and the following disclaimer in the
12 ** documentation and/or other materials provided with the distribution.
13 ** 3. The name of the author may not be used to endorse or promote products
14 ** derived from Dooble without specific prior written permission.
15 **
16 ** DOOBLE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 ** DOOBLE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27 
28 #ifndef dooble_page_h
29 #define dooble_page_h
30 
31 #include <QPointer>
32 #include <QTimer>
33 #include <QWebEnginePage>
34 #include <QWebEngineSettings>
35 
36 #include "dooble_settings.h"
37 #include "ui_dooble_page.h"
38 
39 class QPrinter;
40 class QShortcut;
41 class QWebEngineSettings;
42 class QWebEngineView;
43 class dooble;
45 class dooble_javascript;
46 class dooble_popup_menu;
48 
49 class dooble_page: public QWidget
50 {
51  Q_OBJECT
52 
53  public:
54  enum class ConstantsEnum
55  {
56  MAXIMUM_HISTORY_ITEMS = 10,
57  MAXIMUM_JAVASCRIPT_POPUPS = 100
58  };
59 
60  dooble_page(QWebEngineProfile *web_engine_profile,
62  QWidget *parent);
63  ~dooble_page();
64  QAction *action_close_tab(void) const;
65  QAction *full_screen_action(void) const;
66  QFrame *frame(void) const;
67  QIcon icon(void) const;
68  QMenu *menu(void);
69  QString title(void) const;
70  QUrl url(void) const;
71  QWebEngineProfile *web_engine_profile(void) const;
72  QWebEngineSettings *web_engine_settings(void) const;
73  bool can_go_back(void) const;
74  bool can_go_forward(void) const;
75  bool is_location_frame_hidden(void) const;
76  bool is_location_frame_user_hidden(void) const;
77  bool is_private(void) const;
78  dooble_address_widget *address_widget(void) const;
79  dooble_popup_menu *popup_menu(void) const;
80  dooble_web_engine_view *view(void) const;
81  int reload_periodically_seconds(void) const;
82  void download(const QString &file_name, const QUrl &url);
83  void enable_web_setting(QWebEngineSettings::WebAttribute setting,
84  bool state);
85  void hide_location_frame(bool state);
86  void hide_status_bar(bool state);
87  void inject_custom_css(void);
88  void javascript_console(void);
89  void load(const QUrl &url);
90  void prepare_export_as_png(const QString &file_name);
91  void print_page(QPrinter *printer);
92 #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
93  void print_page(QPrinter *printer,
94  const QWebEngineCallback<bool> &result_callback);
95 #endif
96  void reload(void);
97  void reload_periodically(int seconds);
98  void save(const QString &file_name);
99  void show_menu(void);
100  void stop(void);
101  void user_hide_location_frame(bool state);
102 
103  protected:
104  void resizeEvent(QResizeEvent *event);
105 
106  private:
107  QLabel *m_progress_label;
108  QList<QPixmap> m_pixmaps;
109  QList<QShortcut *> m_shortcuts;
110  QMenu *m_menu;
111  QPointer<QAction> m_action_close_tab;
112  QPointer<QAction> m_authentication_action;
113  QPointer<QAction> m_find_action;
114  QPointer<QAction> m_full_screen_action;
115  QPointer<QAction> m_settings_action;
116  QPointer<QProgressDialog> m_export_as_png_progress_dialog;
117  QPointer<dooble_javascript> m_javascript_console;
118  QString m_export_png_file_name;
119  QTimer m_export_png_timer;
120  QTimer m_reload_timer;
121  QVector<QPointer<dooble_web_engine_view> > m_last_javascript_popups;
122  Ui_dooble_page m_ui;
123  bool m_export_as_png;
124  bool m_is_location_frame_user_hidden;
125  bool m_is_private;
126  dooble *find_parent_dooble(void) const;
127  dooble_popup_menu *m_popup_menu;
128  dooble_web_engine_view *m_view;
129  int m_reload_periodically_seconds;
130  void find_text(QWebEnginePage::FindFlags find_flags, const QString &text);
131  void go_to_backward_item(int index);
132  void go_to_forward_item(int index);
133  void prepare_icons(void);
134  void prepare_progress_label_position(bool process_events = true);
135  void prepare_shortcuts(void);
136  void prepare_standard_menus(void);
137  void prepare_style_sheets(void);
138  void prepare_tool_buttons(void);
139  void prepare_zoom_toolbutton(qreal zoom_factor);
140  void reset_url(void);
141  void show_popup_menu(void);
142 
143  private slots:
144  void slot_about_to_show_standard_menus(void);
145  void slot_about_to_show_view_menu(void);
146  void slot_accepted_or_blocked_add_exception(void);
147  void slot_accepted_or_blocked_clicked(void);
148  void slot_always_allow_javascript_popup(void);
149  void slot_authentication_required(const QUrl &url,
150  QAuthenticator *authenticator);
151  void slot_clear_visited_links(void);
152  void slot_close_javascript_popup_exception_frame(void);
153  void slot_create_dialog_request(dooble_web_engine_view *view);
154  void slot_current_url_executable(void);
155  void slot_dooble_credentials_authenticated(bool state);
156  void slot_dooble_credentials_created(void);
157  void slot_downloads_finished(void);
158  void slot_downloads_started(void);
159  void slot_enable_javascript(void);
160  void slot_escape(void);
161  void slot_export_as_png_timer_timeout(void);
162  void slot_favorite_changed(const QUrl &url, bool state);
163  void slot_feature_permission_allow(void);
164  void slot_feature_permission_deny(void);
165  void slot_feature_permission_request_canceled
166  (const QUrl &security_origin, QWebEnginePage::Feature feature);
167  void slot_feature_permission_requested(const QUrl &security_origin,
168  QWebEnginePage::Feature feature);
169  void slot_find_next(void);
170  void slot_find_previous(void);
171  void slot_find_text_edited(const QString &text);
172  void slot_go_backward(void);
173  void slot_go_forward(void);
174  void slot_go_home(void);
175  void slot_go_to_backward_item(void);
176  void slot_go_to_forward_item(void);
177  void slot_icon_changed(const QIcon &icon);
178  void slot_inject_custom_css(void);
179  void slot_javascript_allow_popup_exception(void);
180  void slot_javascript_console(void);
181  void slot_link_hovered(const QString &url);
182  void slot_load_finished(bool ok);
183  void slot_load_page(void);
184  void slot_load_progress(int progress);
185  void slot_load_started(void);
186  void slot_loading(const QUrl &url);
187 #if (QT_VERSION >= QT_VERSION_CHECK(6, 2, 0))
188  void slot_loading_changed(const QWebEngineLoadingInfo &info);
189 #endif
190  void slot_only_now_allow_javascript_popup(void);
191  void slot_open_link(const QUrl &url);
192  void slot_open_link(void);
193  void slot_prepare_backward_menu(void);
194  void slot_prepare_forward_menu(void);
195  void slot_proxy_authentication_required(const QUrl &url,
196  QAuthenticator *authenticator,
197  const QString &proxy_host);
198  void slot_reload(void);
199  void slot_reload_or_stop(void);
200  void slot_reload_periodically(void);
201  void slot_render_pixmap(void);
202  void slot_scroll_position_changed(const QPointF &position);
203  void slot_scroll_to_top_finished(void);
204  void slot_settings_applied(void);
205  void slot_show_certificate_exception(void);
206  void slot_show_favorites_popup(void);
207  void slot_show_find(void);
208  void slot_show_popup(void);
209  void slot_show_popup_menu(void);
210  void slot_show_pull_down_menu(void);
211  void slot_show_status_bar(bool state);
212  void slot_show_web_settings_panel(void);
213  void slot_url_changed(const QUrl &url);
214  void slot_zoom_in(void);
215  void slot_zoom_out(void);
216  void slot_zoom_reset(void);
217  void slot_zoomed(void);
218 
219  signals:
220  void authenticate(void);
221  void clear_downloads(void);
222  void close_tab(void);
223  void close_window(void);
224  void create_dialog(dooble_web_engine_view *view);
225  void create_tab(dooble_web_engine_view *view);
226  void create_window(dooble_web_engine_view *view);
227  void dooble_credentials_authenticated(bool state);
228  void export_as_png(void);
229  void iconChanged(const QIcon &icon);
230  void javascript_allow_popup_exception(const QUrl &url);
231  void loadFinished(bool ok);
232  void loadStarted(void);
233  void new_private_window(void);
234  void new_tab(void);
235  void new_window(void);
236  void open_link_in_new_private_window(const QUrl &url);
237  void open_link_in_new_tab(const QUrl &url);
238  void open_link_in_new_window(const QUrl &url);
239  void open_local_file(void);
240  void peekaboo_text(const QString &text);
241  void print(void);
242  void print_preview(void);
243  void quit_dooble(void);
244  void save(void);
245  void show_about(void);
246  void show_accepted_or_blocked_domains(void);
247  void show_certificate_exceptions(void);
248  void show_chart_xyseries(void);
249  void show_clear_items(void);
250  void show_cookies(void);
251  void show_documentation(void);
252  void show_downloads(void);
253  void show_favorites(void);
254  void show_floating_digital_clock(void);
255  void show_floating_history_popup(void);
256  void show_floating_menu(void);
257  void show_full_screen(bool state);
258  void show_full_screen(void);
259  void show_history(void);
260  void show_release_notes(void);
261  void show_search_engines(void);
262  void show_settings(void);
263  void show_settings_panel(dooble_settings::Panels panel);
264  void show_site_cookies(void);
265  void titleChanged(const QString &title);
266  void translate_page(void);
267  void vacuum_databases(void);
268  void windowCloseRequested(void);
269  void zoomed(qreal zoom_factor);
270 };
271 
272 #endif
Definition: dooble_address_widget.h:43
Definition: dooble_javascript.h:39
Definition: dooble_page.h:50
Definition: dooble_popup_menu.h:36
Definition: dooble_web_engine_view.h:37
Definition: dooble.h:76