annotate demos/browser/tabwidget.d @ 94:87bb4e622f9e

more porting
author mandel
date Thu, 28 May 2009 22:11:52 +0000
parents 85c59c4e5f19
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 ****************************************************************************/
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
41
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
42 module tabwidget;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
43
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
44 import qt.gui.QTabBar;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
45 import qt.gui.QShortcut;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
46 import qt.gui.QClipboard;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
47 import qt.gui.QCompleter;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
48 import qt.gui.QListView;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
49 import qt.gui.QMenu;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
50 import qt.gui.QMessageBox;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
51 import qt.gui.QMouseEvent;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
52 import qt.gui.QStackedWidget;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
53 import qt.gui.QStyle;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
54 import qt.gui.QToolButton;
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
55 import qt.gui.QLineEdit;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
56
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
57 //import qt.core.QDebug;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
58
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
59 import browserapplication;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
60 import browsermainwindow;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
61 import history;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
62 import urllineedit;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
63 import webview;
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 Tab bar with a few more features such as a context menu and shortcuts
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
67 */
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
68 class TabBar : public QTabBar
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
69 {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
70 mixin Signal!("newTab");
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
71 mixin Signal!("cloneTab", int /*index*);
37caa90ce503 more porting
mandel
parents: 73
diff changeset
72 mixin Signal!("closeTab", int index*/);
37caa90ce503 more porting
mandel
parents: 73
diff changeset
73 mixin Signal!("closeOtherTabs", int /*index*/);
37caa90ce503 more porting
mandel
parents: 73
diff changeset
74 mixin Signal!("reloadTab", int /*index*/);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
75 mixin Signal!("reloadAllTabs");
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
76 mixin Signal!("tabMoveRequested", int /*fromIndex*/, int /*toIndex*/);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
77
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
78 public:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
79
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
80 this(QWidget parent = null)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
81 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
82 super(parent);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
83 setContextMenuPolicy(Qt.CustomContextMenu);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
84 setAcceptDrops(true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
85 this.customContextMenuRequested.connect(&this.contextMenuRequested);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
86
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
87 string alt = "Alt+%1";
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
88 for (int i = 1; i <= 10; ++i) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
89 int key = i;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
90 if (key == 10)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
91 key = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
92 QShortcut shortCut = new QShortcut(alt.arg(key), this);
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
93 m_tabShortcuts ~= shortCut;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
94 shortCut.activated.connect(&this.selectTabAction);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
95 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
96 setTabsClosable(true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
97 this.tabCloseRequested.connect(&this.closeTab);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
98 setSelectionBehaviorOnRemove(QTabBar.SelectPreviousTab);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
99 setMovable(true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
100 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
101
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
102 protected:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
103
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
104 void mousePressEvent(QMouseEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
105 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
106 if (event.button() == Qt.LeftButton)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
107 m_dragStartPos = event.pos();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
108 QTabBar.mousePressEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
109 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
110
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
111 void mouseMoveEvent(QMouseEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
112 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
113 if (event.buttons() == Qt.LeftButton) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
114 int diffX = event.pos().x() - m_dragStartPos.x();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
115 int diffY = event.pos().y() - m_dragStartPos.y();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
116 if ((event.pos() - m_dragStartPos).manhattanLength() > QApplication.startDragDistance() && diffX < 3 && diffX > -3 && diffY < -10) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
117 QDrag drag = new QDrag(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
118 QMimeData mimeData = new QMimeData;
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
119 QUrl[] urls;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
120 int index = tabAt(event.pos());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
121 QUrl url = tabData(index).toUrl();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
122 urls ~= url;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
123 mimeData.setUrls(urls);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
124 mimeData.setText(tabText(index));
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
125 mimeData.setData("action", "tab-reordering");
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
126 drag.setMimeData(mimeData);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
127 drag.exec();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
128 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
129 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
130 QTabBar.mouseMoveEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
131 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
132
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
133 private:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
134
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
135 void selectTabAction()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
136 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
137 if (QShortcut shortCut = cast(QShortcut) signalSender()) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
138 int index = m_tabShortcuts.indexOf(shortCut);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
139 if (index == 0)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
140 index = 10;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
141 setCurrentIndex(index);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
142 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
143 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
144
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
145 void cloneTab()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
146 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
147 if (QAction action = cast(QAction) signalSender()) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
148 int index = action.data().toInt();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
149 cloneTab.emit(index);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
150 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
151 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
152
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
153 void closeTab()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
154 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
155 if (QAction action = cast(QAction) signalSender()) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
156 int index = action.data().toInt();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
157 closeTab.emit(index);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
158 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
159 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
160
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
161 void closeOtherTabs()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
162 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
163 if (QAction action = cast(QAction) signalSender()) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
164 int index = action.data().toInt();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
165 closeOtherTabs.emit(index);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
166 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
167 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
168
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
169 void reloadTab()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
170 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
171 if (QAction action = cast(QAction) signalSender()) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
172 int index = action.data().toInt();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
173 reloadTab.emit(index);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
174 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
175 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
176
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
177 void contextMenuRequested(QPoint position)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
178 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
179 QMenu menu;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
180 menu.addAction(tr("New &Tab"), this, SIGNAL(newTab()), QKeySequence.AddTab);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
181 int index = tabAt(position);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
182 if (-1 != index) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
183 QAction action = menu.addAction(tr("Clone Tab"), this, SLOT(cloneTab()));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
184 action.setData(index);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
185
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
186 menu.addSeparator();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
187
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
188 action = menu.addAction(tr("&Close Tab"), this, SLOT(closeTab()), QKeySequence.Close);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
189 action.setData(index);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
190
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
191 action = menu.addAction(tr("Close &Other Tabs"), this, SLOT(closeOtherTabs()));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
192 action.setData(index);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
193
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
194 menu.addSeparator();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
195
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
196 action = menu.addAction(tr("Reload Tab"), this, SLOT(reloadTab()), QKeySequence.Refresh);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
197 action.setData(index);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
198 } else {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
199 menu.addSeparator();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
200 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
201 menu.addAction(tr("Reload All Tabs"), this, SIGNAL(reloadAllTabs()));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
202 menu.exec(QCursor.pos());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
203 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
204
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
205 private:
37caa90ce503 more porting
mandel
parents: 73
diff changeset
206
37caa90ce503 more porting
mandel
parents: 73
diff changeset
207 QShortcut[] m_tabShortcuts;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
208
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
209 QPoint m_dragStartPos;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
210 int m_dragCurrentIndex;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
211 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
212
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
213 import qt.webkit.QWebPage;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
214
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
215 /*!
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
216 A proxy object that connects a single browser action
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
217 to one child webpage action at a time.
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
218
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
219 Example usage: used to keep the main window stop action in sync with
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
220 the current tabs webview's stop action.
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
221 */
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
222 class WebActionMapper : public QObject
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
223 {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
224 public:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
225
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
226 this(QAction root, QWebPage.WebAction webAction, QObject parent)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
227 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
228 super(parent);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
229 m_currentParent = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
230 m_root = root;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
231 m_webAction = webAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
232 if (!m_root)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
233 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
234 m_root.triggered.connect(&this.rootTriggered);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
235 root.destroyed.connect(&this.rootDestroyed);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
236 root.setEnabled(false);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
237 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
238
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
239 QWebPage.WebAction webAction()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
240 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
241 return m_webAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
242 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
243
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
244 void addChild(QAction action)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
245 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
246 if (!action)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
247 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
248 action.changed.connect(&this.childChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
249 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
250
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
251 void updateCurrent(QWebPage currentParent)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
252 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
253 if (m_currentParent)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
254 m_currentParent.destroyed.disconnect(&this.currentDestroyed);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
255
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
256 m_currentParent = currentParent;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
257 if (!m_root)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
258 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
259 if (!m_currentParent) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
260 m_root.setEnabled(false);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
261 m_root.setChecked(false);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
262 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
263 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
264 QAction source = m_currentParent.action(m_webAction);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
265 m_root.setChecked(source.isChecked());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
266 m_root.setEnabled(source.isEnabled());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
267 m_currentParent.destroyed.connect(&this.currentDestroyed);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
268 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
269
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
270 private:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
271
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
272 void rootTriggered()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
273 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
274 if (m_currentParent) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
275 QAction gotoAction = m_currentParent.action(m_webAction);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
276 gotoAction.trigger();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
277 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
278 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
279
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
280 void childChanged()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
281 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
282 if (QAction source = cast(QAction) signalSender()) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
283 if (m_root && m_currentParent && source.parent() == m_currentParent) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
284 m_root.setChecked(source.isChecked());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
285 m_root.setEnabled(source.isEnabled());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
286 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
287 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
288 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
289
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
290 void rootDestroyed()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
291 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
292 m_root = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
293 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
294
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
295 void currentDestroyed()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
296 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
297 updateCurrent(0);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
298 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
299
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 QWebPage m_currentParent;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
303 QAction m_root;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
304 QWebPage.WebAction m_webAction;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
305 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
306
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
307
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
308 import qt.core.QUrl;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
309 import qt.gui.QTabWidget;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
310
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
311
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
312 /*!
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
313 TabWidget that contains WebViews and a stack widget of associated line edits.
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
314
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
315 Connects up the current tab's signals to this class's signal and uses WebActionMapper
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
316 to proxy the actions.
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
317 */
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
318 class TabWidget : public QTabWidget
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
319 {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
320 // tab widget signals
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
321 mixin Signal!("loadPage", string /*url*/);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
322 mixin Signal!("tabsChanged");
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
323 mixin Signal!("lastTabClosed");
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
324
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
325 // current tab signals
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
326 mixin Signal!("setCurrentTitle", string /*url*/);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
327 mixin Signal!("showStatusBarMessage", string /*message*/);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
328 mixin Signal!("linkHovered", string /*link*/);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
329 mixin Signal!("loadProgress", int /*progress*/);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
330 mixin Signal!("geometryChangeRequested", QRect /*geometry*/);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
331 mixin Signal!("menuBarVisibilityChangeRequested", bool /*visible*/);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
332 mixin Signal!("statusBarVisibilityChangeRequested", bool /*visible*/);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
333 mixin Signal!("toolBarVisibilityChangeRequested", bool /*visible*/);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
334 mixin Signal!("printRequested", QWebFrame /*frame*/);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
335
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
336 public:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
337
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
338 this(QWidget parent = null)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
339 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
340 super(parent);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
341 m_recentlyClosedTabsAction = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
342 m_newTabAction = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
343 m_closeTabAction = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
344 m_nextTabAction = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
345 m_previousTabAction = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
346 m_recentlyClosedTabsMenu = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
347 m_lineEditCompleter = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
348 m_lineEdits = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
349 m_tabBar = new TabBar(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
350
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
351 setElideMode(Qt.ElideRight);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
352
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
353 m_tabBar.newTab.connect(&this.newTab);
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
354 m_tabBar.closeTab.connect(&this.closeTab);
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
355 m_tabBar.cloneTab.connect(&this.cloneTab);
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
356 m_tabBar.closeOtherTabs.connect(&this.closeOtherTabs);
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
357 m_tabBar.reloadTab.connect(&this.reloadTab);
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
358 m_tabBar.reloadAllTabs.connect(&this.reloadAllTabs);
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
359 m_tabBar.tabMoved.connect(&this.moveTab);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
360 setTabBar(m_tabBar);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
361 setDocumentMode(true);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
362
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
363 // Actions
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
364 m_newTabAction = new QAction(new QIcon(":addtab.png"), tr("New &Tab"), this);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
365 m_newTabAction.setShortcuts(QKeySequence.AddTab);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
366 m_newTabAction.setIconVisibleInMenu(false);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
367 m_newTabAction.triggered.connect(&this.newTab);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
368
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
369 m_closeTabAction = new QAction(new QIcon(":closetab.png"), tr("&Close Tab"), this);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
370 m_closeTabAction.setShortcuts(QKeySequence.Close);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
371 m_closeTabAction.setIconVisibleInMenu(false);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
372 m_closeTabAction.triggered.connect(&this.closeTab);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
373
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
374 m_nextTabAction = new QAction(tr("Show Next Tab"), this);
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
375 QKeySequence[] shortcuts;
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
376 shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_BraceRight);
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
377 shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_PageDown);
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
378 shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_BracketRight);
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
379 shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_Less);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
380 m_nextTabAction.setShortcuts(shortcuts);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
381 m_nextTabAction.triggered.connect(&this.nextTab);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
382
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
383 m_previousTabAction = new QAction(tr("Show Previous Tab"), this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
384 shortcuts.clear();
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
385 shortcuts ~= QKeySequence(Qt_Modifier.CTRL | Qt_Key.Key_BraceLeft);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
386 shortcuts ~= QKeySequence(Qt_Modifier.CTRL | Qt_Key.Key_PageUp);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
387 shortcuts ~= QKeySequence(Qt_Modifier.CTRL | Qt_Key.Key_BracketLeft);
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
388 shortcuts ~= QKeySequence(Qt_Modifier.CTRL | Qt_Key.Key_Greater);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
389 m_previousTabAction.setShortcuts(shortcuts);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
390 m_previousTabAction.triggered.connect(&this.previousTab);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
391
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
392 m_recentlyClosedTabsMenu = new QMenu(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
393 m_recentlyClosedTabsMenu.aboutToShow.connect(&this.aboutToShowRecentTabsMenu);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
394 m_recentlyClosedTabsMenu.triggered.connect(&this.aboutToShowRecentTriggeredAction);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
395 m_recentlyClosedTabsAction = new QAction(tr("Recently Closed Tabs"), this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
396 m_recentlyClosedTabsAction.setMenu(m_recentlyClosedTabsMenu);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
397 m_recentlyClosedTabsAction.setEnabled(false);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
398
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
399 this.currentChanged.connect(&this.currentChanged);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
400
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
401 m_lineEdits = new QStackedWidget(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
402 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
403
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
404 void clearTabs()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
405 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
406 // clear the recently closed tabs
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
407 m_recentlyClosedTabs.length = 0;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
408 // clear the line edit history
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
409 for (int i = 0; i < m_lineEdits.count(); ++i) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
410 QLineEdit qLineEdit = lineEdit(i);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
411 qLineEdit.setText(qLineEdit.text());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
412 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
413 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
414
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
415 void addWebAction(QAction action, QWebPage.WebAction webAction)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
416 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
417 if (!action)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
418 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
419 m_actions.append(new WebActionMapper(action, webAction, this));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
420 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
421
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
422 QAction newTabAction()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
423 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
424 return m_newTabAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
425 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
426
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
427 QAction closeTabAction()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
428 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
429 return m_closeTabAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
430 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
431
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
432 QAction recentlyClosedTabsAction()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
433 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
434 return m_recentlyClosedTabsAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
435 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
436
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
437 QAction nextTabAction()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
438 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
439 return m_nextTabAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
440 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
441
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
442 QAction previousTabAction()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
443 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
444 return m_previousTabAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
445 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
446
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
447 QWidget lineEditStack()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
448 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
449 return m_lineEdits;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
450 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
451
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
452 QLineEdit currentLineEdit()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
453 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
454 return lineEdit(m_lineEdits.currentIndex());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
455 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
456
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
457 WebView currentWebView()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
458 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
459 return webView(currentIndex());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
460 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
461
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
462 WebView webView(int index)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
463 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
464 QWidget widget = this.widget(index);
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
465 if (WebView webView = cast(WebView) widget) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
466 return webView;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
467 } else {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
468 // optimization to delay creating the first webview
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
469 if (count() == 1) {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
470 TabWidget that = cast(TabWidget) this;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
471 that.setUpdatesEnabled(false);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
472 that.newTab();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
473 that.closeTab(0);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
474 that.setUpdatesEnabled(true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
475 return currentWebView();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
476 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
477 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
478 return 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
479 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
480
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
481 QLineEdit lineEdit(int index)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
482 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
483 UrlLineEdit urlLineEdit = cast(UrlLineEdit) m_lineEdits.widget(index);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
484 if (urlLineEdit)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
485 return urlLineEdit.lineEdit();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
486 return 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
487 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
488
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
489 int webViewIndex(WebView webView)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
490 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
491 int index = indexOf(webView);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
492 return index;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
493 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
494
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
495
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
496 static const int TabWidgetMagic = 0xaa;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
497
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
498 QByteArray saveState()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
499 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
500 int version_ = 1;
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
501 auto data = new QByteArray;
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
502 auto stream = new QDataStream(data, QIODevice.WriteOnly);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
503
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
504 stream << cast(int) TabWidgetMagic;
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
505 stream << cast(int) version_;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
506
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
507 string[] tabs;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
508 for (int i = 0; i < count(); ++i) {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
509 if (WebView tab = cast(WebView) widget(i)) {
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
510 tabs ~= tab.getUrl().toString();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
511 } else {
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
512 tabs ~= null; //QString.null);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
513 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
514 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
515 stream << tabs;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
516 stream << currentIndex();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
517 return data;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
518 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
519
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
520 bool restoreState(QByteArray state)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
521 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
522 int version_ = 1;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
523 QByteArray sd = state;
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
524 auto stream = new QDataStream(sd, QIODevice.ReadOnly);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
525 if (stream.atEnd())
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
526 return false;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
527
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
528 int marker;
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
529 int v;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
530 stream >> marker;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
531 stream >> v;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
532 if (marker != TabWidgetMagic || v != version_)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
533 return false;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
534
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
535 string[] openTabs;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
536 stream >> openTabs;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
537
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
538 for (int i = 0; i < openTabs.length; ++i) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
539 if (i != 0)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
540 newTab();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
541 loadPage(openTabs[i]);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
542 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
543
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
544 int currentTab;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
545 stream >> currentTab;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
546 setCurrentIndex(currentTab);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
547
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
548 return true;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
549 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
550
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
551 protected:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
552
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
553 void mouseDoubleClickEvent(QMouseEvent event)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
554 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
555 if (!childAt(event.pos())
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
556 // Remove the line below when QTabWidget does not have a one pixel frame
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
557 && event.pos().y() < (tabBar().y() + tabBar().height())) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
558 newTab();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
559 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
560 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
561 QTabWidget.mouseDoubleClickEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
562 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
563
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
564
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
565 void contextMenuEvent(QContextMenuEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
566 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
567 if (!childAt(event.pos())) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
568 m_tabBar.contextMenuRequested(event.pos());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
569 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
570 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
571 QTabWidget.contextMenuEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
572 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
573
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
574 void mouseReleaseEvent(QMouseEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
575 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
576 if (event.button() == Qt.MidButton && !childAt(event.pos())
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
577 // Remove the line below when QTabWidget does not have a one pixel frame
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
578 && event.pos().y() < (tabBar().y() + tabBar().height())) {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
579 auto url = new QUrl(QApplication.clipboard().text(QClipboard.Selection));
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
580 if (!url.isEmpty() && url.isValid() && !url.scheme().isEmpty()) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
581 WebView webView = newTab();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
582 webView.setUrl(url);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
583 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
584 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
585 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
586
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
587 public:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
588
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
589 void loadUrlInCurrentTab(QUrl url)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
590 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
591 WebView webView = currentWebView();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
592 if (webView) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
593 webView.loadUrl(url);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
594 webView.setFocus();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
595 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
596 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
597
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
598 WebView newTab(bool makeCurrent = true)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
599 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
600 // line edit
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
601 UrlLineEdit urlLineEdit = new UrlLineEdit;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
602 QLineEdit lineEdit = urlLineEdit.lineEdit();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
603 if (!m_lineEditCompleter && count() > 0) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
604 HistoryCompletionModel completionModel = new HistoryCompletionModel(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
605 completionModel.setSourceModel(BrowserApplication.historyManager().historyFilterModel());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
606 m_lineEditCompleter = new QCompleter(completionModel, this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
607 // Should this be in Qt by default?
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
608 QAbstractItemView popup = m_lineEditCompleter.popup();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
609 QListView listView = cast(QListView) popup;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
610 if (listView)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
611 listView.setUniformItemSizes(true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
612 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
613 lineEdit.setCompleter(m_lineEditCompleter);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
614 lineEdit.returnPressed.connect(&this.lineEditReturnPressed);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
615 m_lineEdits.addWidget(urlLineEdit);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
616 m_lineEdits.setSizePolicy(lineEdit.sizePolicy());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
617
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
618 // optimization to delay creating the more expensive WebView, history, etc
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
619 if (count() == 0) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
620 QWidget emptyWidget = new QWidget;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
621 QPalette p = emptyWidget.palette();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
622 p.setColor(QPalette.Window, palette().color(QPalette.Base));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
623 emptyWidget.setPalette(p);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
624 emptyWidget.setAutoFillBackground(true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
625 this.currentChanged.disconnect(&this.currentChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
626 addTab(emptyWidget, tr("(Untitled)"));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
627 this.currentChanged.connect(&this.currentChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
628 return 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
629 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
630
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
631 // webview
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
632 WebView webView = new WebView;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
633 urlLineEdit.setWebView(webView);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
634 webView.loadStarted().connect(&this.webViewLoadStarted);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
635 webView.loadFinished.connect(&this.webViewIconChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
636 webView.iconChanged.connect(&this.webViewIconChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
637 webView.titleChanged.connect(&this.webViewTitleChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
638 webView.urlChanged.connect(&this.webViewUrlChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
639 webView.page().windowCloseRequested.connect(&this.windowCloseRequested);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
640 webView.page().geometryChangeRequested.connect(&this.geometryChangeRequested);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
641 webView.page().printRequested.connect(&this.printRequested);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
642 webView.page().menuBarVisibilityChangeRequested.connect(&this.menuBarVisibilityChangeRequested);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
643 webView.page().statusBarVisibilityChangeRequested.connect(&this.statusBarVisibilityChangeRequested);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
644 webView.page().toolBarVisibilityChangeRequested.connect(&this.toolBarVisibilityChangeRequested);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
645 addTab(webView, tr("(Untitled)"));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
646 if (makeCurrent)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
647 setCurrentWidget(webView);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
648
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
649 // webview actions
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
650 for (int i = 0; i < m_actions.count(); ++i) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
651 WebActionMapper mapper = m_actions[i];
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
652 mapper.addChild(webView.page().action(mapper.webAction()));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
653 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
654
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
655 if (count() == 1)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
656 currentChanged(currentIndex());
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
657 tabsChanged.emit();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
658 return webView;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
659 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
660
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
661 // When index is -1 index chooses the current tab
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
662 void cloneTab(int index = -1)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
663 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
664 if (index < 0)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
665 index = currentIndex();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
666 if (index < 0 || index >= count())
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
667 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
668 WebView tab = newTab(false);
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
669 tab.setUrl(webView(index).getUrl());
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
670 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
671
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
672 // When index is -1 index chooses the current tab
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
673 void closeTab(int index = -1)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
674 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
675 if (index < 0)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
676 index = currentIndex();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
677 if (index < 0 || index >= count())
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
678 return;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
679
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
680 bool hasFocus = false;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
681 if (WebView tab = webView(index)) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
682 if (tab.isModified()) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
683 QMessageBox closeConfirmation(tab);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
684 closeConfirmation.setWindowFlags(Qt.Sheet);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
685 closeConfirmation.setWindowTitle(tr("Do you really want to close this page?"));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
686 closeConfirmation.setInformativeText(tr("You have modified this page and when closing it you would lose the modification.\n"
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
687 "Do you really want to close this page?\n"));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
688 closeConfirmation.setIcon(QMessageBox.Question);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
689 closeConfirmation.addButton(QMessageBox.Yes);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
690 closeConfirmation.addButton(QMessageBox.No);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
691 closeConfirmation.setEscapeButton(QMessageBox.No);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
692 if (closeConfirmation.exec() == QMessageBox.No)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
693 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
694 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
695 hasFocus = tab.hasFocus();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
696
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
697 m_recentlyClosedTabsAction.setEnabled(true);
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
698 m_recentlyClosedTabs = [tab.getUrl()] ~ m_recentlyClosedTabs;
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
699 if (m_recentlyClosedTabs.length >= TabWidget.m_recentlyClosedTabsSize)
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
700 m_recentlyClosedTabs = m_recentlyClosedTabs[0..$-1];
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
701 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
702 QWidget lineEdit = m_lineEdits.widget(index);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
703 m_lineEdits.removeWidget(lineEdit);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
704 lineEdit.deleteLater();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
705 QWidget webView = widget(index);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
706 removeTab(index);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
707 webView.deleteLater();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
708 tabsChanged.emit();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
709 if (hasFocus && count() > 0)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
710 currentWebView().setFocus();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
711 if (count() == 0)
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
712 lastTabClosed.emit();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
713 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
714
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
715 void closeOtherTabs(int index)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
716 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
717 if (-1 == index)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
718 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
719 for (int i = count() - 1; i > index; --i)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
720 closeTab(i);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
721 for (int i = index - 1; i >= 0; --i)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
722 closeTab(i);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
723 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
724
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
725 // When index is -1 index chooses the current tab
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
726 void reloadTab(int index = -1)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
727 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
728 if (index < 0)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
729 index = currentIndex();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
730 if (index < 0 || index >= count())
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
731 return;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
732
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
733 QWidget widget = this.widget(index);
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
734 if (WebView tab = cast(WebView) widget)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
735 tab.reload();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
736 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
737
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
738 void reloadAllTabs()
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
739 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
740 for (int i = 0; i < count(); ++i) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
741 QWidget tabWidget = widget(i);
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
742 if (WebView tab = cast(WebView) tabWidget) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
743 tab.reload();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
744 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
745 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
746 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
747
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
748 void nextTab()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
749 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
750 int next = currentIndex() + 1;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
751 if (next == count())
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
752 next = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
753 setCurrentIndex(next);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
754 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
755
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
756 void previousTab()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
757 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
758 int next = currentIndex() - 1;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
759 if (next < 0)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
760 next = count() - 1;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
761 setCurrentIndex(next);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
762 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
763
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
764 private:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
765
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
766 void currentChanged(int index)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
767 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
768 WebView webView = this.webView(index);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
769 if (!webView)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
770 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
771
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
772 assert(m_lineEdits.count() == count());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
773
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
774 WebView oldWebView = this.webView(m_lineEdits.currentIndex());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
775 if (oldWebView) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
776 oldWebView.statusBarMessage.disconnect(&this.showStatusBarMessage);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
777 oldWebView.page().linkHovered.disconnect(&this.linkHovered);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
778 oldWebView.loadProgress().disconnect(&this.loadProgress);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
779 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
780
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
781 webView.statusBarMessage.connect(&this.showStatusBarMessage);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
782 webView.page().linkHovered.connect(&this.linkHovered);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
783 webView.loadProgress.connect(&this.loadProgress);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
784
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
785 for (int i = 0; i < m_actions.count(); ++i) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
786 WebActionMapper mapper = m_actions[i];
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
787 mapper.updateCurrent(webView.page());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
788 }
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
789 setCurrentTitle.emit(webView.title());
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
790 m_lineEdits.setCurrentIndex(index);
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
791 loadProgress.emit(webView.progress());
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
792 showStatusBarMessage.emit(webView.lastStatusBarText());
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
793 if (webView.getUrl().isEmpty())
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
794 m_lineEdits.currentWidget().setFocus();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
795 else
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
796 webView.setFocus();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
797 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
798
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
799 void aboutToShowRecentTabsMenu()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
800 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
801 m_recentlyClosedTabsMenu.clear();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
802 for (int i = 0; i < m_recentlyClosedTabs.length; ++i) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
803 QAction action = new QAction(m_recentlyClosedTabsMenu);
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
804 action.setData(m_recentlyClosedTabs[i]);
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
805 QIcon icon = BrowserApplication.instance().icon(m_recentlyClosedTabs[i]);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
806 action.setIcon(icon);
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
807 action.setText(m_recentlyClosedTabs[i].toString());
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
808 m_recentlyClosedTabsMenu.addAction(action);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
809 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
810 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
811
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
812 void aboutToShowRecentTriggeredAction(QAction action)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
813 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
814 QUrl url = action.data().toUrl();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
815 loadUrlInCurrentTab(url);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
816 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
817
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
818 void webViewLoadStarted()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
819 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
820 WebView webView = cast(WebView) signalSender();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
821 int index = webViewIndex(webView);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
822 if (-1 != index) {
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
823 auto icon = new QIcon(":loading.gif");
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
824 setTabIcon(index, icon);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
825 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
826 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
827
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
828 void webViewIconChanged()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
829 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
830 WebView webView = cast(WebView) signalSender();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
831 int index = webViewIndex(webView);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
832 if (-1 != index) {
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
833 QIcon icon = BrowserApplication.instance().icon(webView.getUrl());
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
834 setTabIcon(index, icon);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
835 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
836 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
837
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
838 void webViewTitleChanged(string title)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
839 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
840 WebView webView = cast(WebView) signalSender();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
841 int index = webViewIndex(webView);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
842 if (-1 != index) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
843 setTabText(index, title);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
844 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
845 if (currentIndex() == index)
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
846 setCurrentTitle.emit(title);
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
847 BrowserApplication.historyManager().updateHistoryItem(webView.getUrl(), title);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
848 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
849
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
850 void webViewUrlChanged(QUrl url)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
851 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
852 WebView webView = cast(WebView) signalSender();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
853 int index = webViewIndex(webView);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
854 if (-1 != index) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
855 m_tabBar.setTabData(index, url);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
856 }
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
857 tabsChanged.emit();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
858 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
859
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
860 void lineEditReturnPressed()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
861 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
862 if (QLineEdit lineEdit = cast(QLineEdit) signalSender()) {
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
863 loadPage.emit(lineEdit.text());
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
864 if (m_lineEdits.currentWidget() == lineEdit)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
865 currentWebView().setFocus();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
866 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
867 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
868
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
869 void windowCloseRequested()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
870 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
871 WebPage webPage = cast(WebPage) signalSender();
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
872 WebView webView = cast(WebView) webPage.view();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
873 int index = webViewIndex(webView);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
874 if (index >= 0) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
875 if (count() == 1)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
876 webView.webPage().mainWindow().close();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
877 else
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
878 closeTab(index);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
879 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
880 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
881
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
882 void moveTab(int fromIndex, int toIndex)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
883 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
884 QWidget lineEdit = m_lineEdits.widget(fromIndex);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
885 m_lineEdits.removeWidget(lineEdit);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
886 m_lineEdits.insertWidget(toIndex, lineEdit);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
887 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
888
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
889 private:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
890
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
891 QAction m_recentlyClosedTabsAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
892 QAction m_newTabAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
893 QAction m_closeTabAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
894 QAction m_nextTabAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
895 QAction m_previousTabAction;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
896
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
897 QMenu m_recentlyClosedTabsMenu;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
898 static const int m_recentlyClosedTabsSize = 10;
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
899 QUrl[] m_recentlyClosedTabs;
37caa90ce503 more porting
mandel
parents: 73
diff changeset
900 WebActionMapper[] m_actions;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
901
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
902 QCompleter m_lineEditCompleter;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
903 QStackedWidget m_lineEdits;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
904 TabBar m_tabBar;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
905 }