annotate demos/browser/webview.d @ 100:dcd36d8db2da

more porting
author mandel
date Fri, 29 May 2009 11:36:51 +0000
parents 87bb4e622f9e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1 /****************************************************************************
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
2 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
4 ** Contact: Qt Software Information (qt-info@nokia.com)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
5 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
6 ** This file is part of the demonstration applications of the Qt Toolkit.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
7 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
8 ** $QT_BEGIN_LICENSE:LGPL$
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
9 ** Commercial Usage
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
10 ** Licensees holding valid Qt Commercial licenses may use this file in
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
11 ** accordance with the Qt Commercial License Agreement provided with the
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
12 ** Software or, alternatively, in accordance with the terms contained in
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
13 ** a written agreement between you and Nokia.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
14 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
15 ** GNU Lesser General Public License Usage
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
16 ** Alternatively, this file may be used under the terms of the GNU Lesser
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
17 ** General Public License version 2.1 as published by the Free Software
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
18 ** Foundation and appearing in the file LICENSE.LGPL included in the
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
19 ** packaging of this file. Please review the following information to
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
20 ** ensure the GNU Lesser General Public License version 2.1 requirements
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
22 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
23 ** In addition, as a special exception, Nokia gives you certain
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
24 ** additional rights. These rights are described in the Nokia Qt LGPL
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
26 ** package.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
27 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
28 ** GNU General Public License Usage
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
29 ** Alternatively, this file may be used under the terms of the GNU
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
30 ** General Public License version 3.0 as published by the Free Software
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
31 ** Foundation and appearing in the file LICENSE.GPL included in the
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
32 ** packaging of this file. Please review the following information to
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
33 ** ensure the GNU General Public License version 3.0 requirements will be
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
34 ** met: http://www.gnu.org/copyleft/gpl.html.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
35 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
36 ** If you are unsure which license is appropriate for your use, please
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
37 ** contact the sales department at qt-sales@nokia.com.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
38 ** $QT_END_LICENSE$
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
39 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
40 ****************************************************************************/
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
41 module webview;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
42
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
43 import qt.gui.QClipboard;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
44 import qt.gui.QMenu;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
45 import qt.gui.QMessageBox;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
46 import qt.gui.QMouseEvent;
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
47 //import qt.core.QDebug;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
48 import qt.core.QBuffer;
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
49 import qt.webkit.QWebView;
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
50 import qt.webkit.QWebHitTestResult;
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
51 version(QT_NO_UITOOLS) {} else
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
52 {
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
53 import qt.uitools.QUiLoader;
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
54 }
100
dcd36d8db2da more porting
mandel
parents: 94
diff changeset
55
dcd36d8db2da more porting
mandel
parents: 94
diff changeset
56 import tango.text.convert.Format;
dcd36d8db2da more porting
mandel
parents: 94
diff changeset
57
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
58 import browserapplication;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
59 import browsermainwindow;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
60 import cookiejar;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
61 import downloadmanager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
62 import networkaccessmanager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
63 import tabwidget;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
64
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
65
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
66 class WebPage : public QWebPage
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
67 {
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
68 mixin Signal!("loadingUrl", QUrl /*url*/);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
69
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
70 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
71
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
72 this(QObject parent = null)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
73 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
74 super(parent);
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
75 m_keyboardModifiers = Qt_KeyboardModifier.NoModifier;
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
76 m_pressedButtons = Qt_MouseButton.NoButton;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
77 m_openInNewTab = false;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
78 setNetworkAccessManager(BrowserApplication.networkAccessManager());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
79 this.unsupportedContent.connect(&this.handleUnsupportedContent);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
80 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
81
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
82 BrowserMainWindow mainWindow()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
83 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
84 QObject w = this.parent();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
85 while (w) {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
86 if (BrowserMainWindow mw = cast(BrowserMainWindow) w)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
87 return mw;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
88 w = w.parent();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
89 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
90 return BrowserApplication.instance().mainWindow();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
91 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
92
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
93 protected:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
94
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
95 bool acceptNavigationRequest(QWebFrame frame, QNetworkRequest request, NavigationType type)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
96 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
97 // ctrl open in new tab
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
98 // ctrl-shift open in new tab and select
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
99 // ctrl-alt open in new window
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
100 if (type == QWebPage.NavigationTypeLinkClicked
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
101 && (m_keyboardModifiers & Qt_KeyboardModifier.ControlModifier
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
102 || m_pressedButtons == Qt_MouseButton.MidButton)) {
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
103 bool newWindow = (m_keyboardModifiers & Qt_KeyboardModifier.AltModifier);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
104 WebView webView;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
105 if (newWindow) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
106 BrowserApplication.instance().newMainWindow();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
107 BrowserMainWindow newMainWindow = BrowserApplication.instance().mainWindow();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
108 webView = newMainWindow.currentTab();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
109 newMainWindow.raise();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
110 newMainWindow.activateWindow();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
111 webView.setFocus();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
112 } else {
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
113 bool selectNewTab = (m_keyboardModifiers & Qt_KeyboardModifier.ShiftModifier);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
114 webView = mainWindow().tabWidget().newTab(selectNewTab);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
115 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
116 webView.load(request);
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
117 m_keyboardModifiers = Qt_KeyboardModifier.NoModifier;
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
118 m_pressedButtons = Qt_MouseButton.NoButton;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
119 return false;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
120 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
121 if (frame == mainFrame()) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
122 m_loadingUrl = request.url();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
123 loadingUrl.emit(m_loadingUrl);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
124 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
125 return QWebPage.acceptNavigationRequest(frame, request, type);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
126 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
127
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
128 QWebPage createWindow(QWebPage.WebWindowType type)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
129 {
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
130 if (m_keyboardModifiers & Qt_KeyboardModifier.ControlModifier || m_pressedButtons == Qt_MouseButton.MidButton)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
131 m_openInNewTab = true;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
132 if (m_openInNewTab) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
133 m_openInNewTab = false;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
134 return mainWindow().tabWidget().newTab().page();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
135 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
136 BrowserApplication.instance().newMainWindow();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
137 BrowserMainWindow mainWindow = BrowserApplication.instance().mainWindow();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
138 return mainWindow.currentTab().page();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
139 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
140
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
141 version(QT_NO_UITOOLS) {} else
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
142 {
85
5c8c9c5d9ee1 more porting
mandel
parents: 80
diff changeset
143 QObject createPlugin(string classId, QUrl url, string[] paramNames, string[] paramValues)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
144 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
145 auto loader = new QUiLoader;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
146 return loader.createWidget(classId, view());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
147 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
148 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
149
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
150 private:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
151
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
152 void handleUnsupportedContent(QNetworkReply reply)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
153 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
154 if (reply.error() == QNetworkReply.NoError) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
155 BrowserApplication.downloadManager().handleUnsupportedContent(reply);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
156 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
157 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
158
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
159 auto file = new QFile(":/notfound.html");
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
160 bool isOpened = file.open(QIODevice.ReadOnly);
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
161 assert(isOpened);
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
162 string title = Format(tr("Error loading page: {}"), reply.url().toString());
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
163 string html = Format(file.readAll(),
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
164 title,
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
165 reply.errorString(),
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
166 reply.url().toString());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
167
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
168 QBuffer imageBuffer;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
169 imageBuffer.open(QBuffer.ReadWrite);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
170 QIcon icon = view().style().standardIcon(QStyle.SP_MessageBoxWarning, 0, view());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
171 QPixmap pixmap = icon.pixmap(QSize(32,32));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
172 if (pixmap.save(&imageBuffer, "PNG")) {
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
173 html.replace("IMAGE_BINARY_DATA_HERE",
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
174 imageBuffer.buffer().toBase64());
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
175 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
176
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
177 QWebFrame[] frames;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
178 frames.append(mainFrame());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
179 while (!frames.isEmpty()) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
180 QWebFrame frame = frames.takeFirst();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
181 if (frame.url() == reply.url()) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
182 frame.setHtml(html, reply.url());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
183 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
184 }
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
185 QWebFrame[] children = frame.childFrames();
37caa90ce503 more porting
mandel
parents: 73
diff changeset
186 foreach(QWebFrame frame; children)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
187 frames.append(frame);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
188 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
189 if (m_loadingUrl == reply.url()) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
190 mainFrame().setHtml(html, reply.url());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
191 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
192 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
193
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
194 private:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
195
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
196 // set the webview mousepressedevent
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
197 Qt_KeyboardModifier m_keyboardModifiers;
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
198 Qt_MouseButton m_pressedButtons;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
199 bool m_openInNewTab;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
200 QUrl m_loadingUrl;
85
5c8c9c5d9ee1 more porting
mandel
parents: 80
diff changeset
201 }
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
202
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
203 class WebView : public QWebView
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
204 {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
205 public:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
206
85
5c8c9c5d9ee1 more porting
mandel
parents: 80
diff changeset
207 this(QWidget parent = null)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
208 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
209 super(parent);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
210 m_progress = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
211 m_page = new WebPage(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
212 setPage(m_page);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
213 page().statusBarMessage.connect(&setStatusBarText);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
214 this.loadProgress.connect(&this.setProgress);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
215 this.loadFinished.connect(&this.loadFinished);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
216 page().loadingUrl.connect(&this.urlChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
217 page().downloadRequested.connect(&this.downloadRequested);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
218 page().setForwardUnsupportedContent(true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
219 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
220
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
221 WebPage webPage() { return m_page; }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
222
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
223 void loadUrl(QUrl url)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
224 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
225 m_initialUrl = url;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
226 load(url);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
227 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
228
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
229 QUrl getUrl()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
230 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
231 QUrl url = QWebView.url();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
232 if (!url.isEmpty())
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
233 return url;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
234 return m_initialUrl;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
235 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
236
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
237 string lastStatusBarText()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
238 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
239 return m_statusBarText;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
240 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
241
85
5c8c9c5d9ee1 more porting
mandel
parents: 80
diff changeset
242 int progress()
5c8c9c5d9ee1 more porting
mandel
parents: 80
diff changeset
243 {
5c8c9c5d9ee1 more porting
mandel
parents: 80
diff changeset
244 return m_progress;
5c8c9c5d9ee1 more porting
mandel
parents: 80
diff changeset
245 }
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
246
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
247 protected:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
248
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
249 void mousePressEvent(QMouseEvent event)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
250 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
251 m_page.m_pressedButtons = event.buttons();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
252 m_page.m_keyboardModifiers = event.modifiers();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
253 QWebView.mousePressEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
254 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
255
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
256 void mouseReleaseEvent(QMouseEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
257 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
258 QWebView.mouseReleaseEvent(event);
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
259 if (!event.isAccepted() && (m_page.m_pressedButtons & Qt_MouseButton.MidButton)) {
85
5c8c9c5d9ee1 more porting
mandel
parents: 80
diff changeset
260 auto url = new QUrl(QApplication.clipboard().text(QClipboard.Selection));
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
261 if (!url.isEmpty() && url.isValid() && !url.scheme().isEmpty()) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
262 setUrl(url);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
263 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
264 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
265 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
266
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
267 void contextMenuEvent(QContextMenuEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
268 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
269 QWebHitTestResult r = page().mainFrame().hitTestContent(event.pos());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
270 if (!r.linkUrl().isEmpty()) {
85
5c8c9c5d9ee1 more porting
mandel
parents: 80
diff changeset
271 auto menu = new QMenu(this);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
272 menu.addAction(pageAction(QWebPage.OpenLinkInNewWindow));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
273 menu.addAction(tr("Open in New Tab"), this, SLOT(openLinkInNewTab()));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
274 menu.addSeparator();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
275 menu.addAction(pageAction(QWebPage.DownloadLinkToDisk));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
276 // Add link to bookmarks...
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
277 menu.addSeparator();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
278 menu.addAction(pageAction(QWebPage.CopyLinkToClipboard));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
279 if (page().settings().testAttribute(QWebSettings.DeveloperExtrasEnabled))
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
280 menu.addAction(pageAction(QWebPage.InspectElement));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
281 menu.exec(mapToGlobal(event.pos()));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
282 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
283 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
284 QWebView.contextMenuEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
285 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
286
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
287 void wheelEvent(QWheelEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
288 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
289 if (QApplication.keyboardModifiers() & Qt.ControlModifier) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
290 int numDegrees = event.delta() / 8;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
291 int numSteps = numDegrees / 15;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
292 setTextSizeMultiplier(textSizeMultiplier() + numSteps * 0.1);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
293 event.accept();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
294 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
295 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
296 QWebView.wheelEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
297 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
298
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
299
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
300 private:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
301
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
302 void setProgress(int progress)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
303 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
304 m_progress = progress;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
305 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
306
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
307 void loadFinished()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
308 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
309 if (100 != m_progress) {
94
87bb4e622f9e more porting
mandel
parents: 85
diff changeset
310 qWarning("Received finished signal while progress is still:" ~ progress() ~ "Url:" ~ url());
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
311 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
312 m_progress = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
313 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
314
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
315 void setStatusBarText(string str)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
316 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
317 m_statusBarText = str;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
318 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
319
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
320 void downloadRequested(QNetworkRequest request)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
321 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
322 BrowserApplication.downloadManager().download(request);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
323 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
324
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
325 void openLinkInNewTab()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
326 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
327 m_page.m_openInNewTab = true;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
328 pageAction(QWebPage.OpenLinkInNewWindow).trigger();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
329 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
330
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
331 private:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
332
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
333 string m_statusBarText;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
334 QUrl m_initialUrl;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
335 int m_progress;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
336 WebPage m_page;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
337 }