annotate demos/browser/urllineedit.d @ 77:0654fc9bac95

more porting
author mandel
date Sun, 24 May 2009 13:46:32 +0000
parents 37caa90ce503
children 85c59c4e5f19
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
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
42 module urllineedit;
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.core.QUrl;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
45 import qt.core.QEvent;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
46 import qt.core.QDebug;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
47
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
48 import qt.gui.QWidget;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
49 import qt.gui.QStyleOptionFrame;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
50 import qt.gui.QApplication;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
51 import qt.gui.QCompleter;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
52 import qt.gui.QFocusEvent;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
53 import qt.gui.QHBoxLayout;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
54 import qt.gui.QLabel;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
55 import qt.gui.QLineEdit;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
56 import qt.gui.QPainter;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
57 import qt.gui.QStyle;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
58 import qt.gui.QStyleOptionFrameV2;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
59
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
60 import browserapplication;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
61 import searchlineedit;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
62 import webview;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
63
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 class ExLineEdit : public QWidget
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
66 {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
67 public:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
68
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
69 this(QWidget parent = null)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
70 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
71 super(parent);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
72
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
73 m_leftWidget = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
74 m_lineEdit = new QLineEdit(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
75 m_clearButton = 0;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
76
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
77 setFocusPolicy(m_lineEdit.focusPolicy());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
78 setAttribute(Qt.WA_InputMethodEnabled);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
79 setSizePolicy(m_lineEdit.sizePolicy());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
80 setBackgroundRole(m_lineEdit.backgroundRole());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
81 setMouseTracking(true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
82 setAcceptDrops(true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
83 setAttribute(Qt.WA_MacShowFocusRect, true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
84 QPalette p = m_lineEdit.palette();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
85 setPalette(p);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
86
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
87 // line edit
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
88 m_lineEdit.setFrame(false);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
89 m_lineEdit.setFocusProxy(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
90 m_lineEdit.setAttribute(Qt.WA_MacShowFocusRect, false);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
91 QPalette clearPalette = m_lineEdit.palette();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
92 clearPalette.setBrush(QPalette.Base, QBrush(Qt.transparent));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
93 m_lineEdit.setPalette(clearPalette);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
94
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
95 // clearButton
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
96 m_clearButton = new ClearButton(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
97 m_clearButton.clicked.connect(&m_lineEdit.clear);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
98 m_lineEdit.textChanged.connect(&m_clearButton.textChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
99 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
100
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
101 QLineEdit lineEdit() { return m_lineEdit; }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
102
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
103 void setLeftWidget(QWidget widget)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
104 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
105 m_leftWidget = widget;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
106 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
107
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
108 QWidget leftWidget()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
109 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
110 return m_leftWidget;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
111 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
112
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
113 QSize sizeHint()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
114 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
115 m_lineEdit.setFrame(true);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
116 QSize size = m_lineEdit.sizeHint();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
117 m_lineEdit.setFrame(false);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
118 return size;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
119 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
120
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
121 QVariant inputMethodQuery(Qt.InputMethodQuery property)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
122 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
123 return m_lineEdit.inputMethodQuery(property);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
124 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
125
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
126 protected:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
127
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
128 void focusInEvent(QFocusEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
129 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
130 m_lineEdit.event(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
131 QWidget.focusInEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
132 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
133
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
134 void focusOutEvent(QFocusEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
135 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
136 m_lineEdit.event(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
137
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
138 if (m_lineEdit.completer()) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
139 m_lineEdit.completer().activated.connect(& m_lineEdit.setText);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
140 m_lineEdit.completer().highlighted.connect(&m_lineEdit._q_completionHighlighted);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
141 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
142 QWidget.focusOutEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
143 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
144
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
145 void keyPressEvent(QKeyEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
146 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
147 m_lineEdit.event(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
148 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
149
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
150 void paintEvent(QPaintEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
151 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
152 QPainter p(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
153 QStyleOptionFrameV2 panel;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
154 initStyleOption(&panel);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
155 style().drawPrimitive(QStyle.PE_PanelLineEdit, &panel, &p, this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
156 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
157
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
158 void resizeEvent(QResizeEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
159 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
160 assert(m_leftWidget);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
161 updateGeometries();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
162 QWidget.resizeEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
163 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
164
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
165 void inputMethodEvent(QInputMethodEvent e)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
166 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
167 m_lineEdit.event(e);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
168 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
169
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
170 bool event(QEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
171 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
172 if (event.type() == QEvent.ShortcutOverride)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
173 return m_lineEdit.event(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
174 return QWidget.event(event);
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 protected:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
178
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
179 void updateGeometries()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
180 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
181 QStyleOptionFrameV2 panel;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
182 initStyleOption(&panel);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
183 QRect rect = style().subElementRect(QStyle.SE_LineEditContents, &panel, this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
184
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
185 int height = rect.height();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
186 int width = rect.width();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
187
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
188 int m_leftWidgetHeight = m_leftWidget.height();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
189 m_leftWidget.setGeometry(rect.x() + 2, rect.y() + (height - m_leftWidgetHeight)/2,
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
190 m_leftWidget.width(), m_leftWidget.height());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
191
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
192 int clearButtonWidth = this.height();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
193 m_lineEdit.setGeometry(m_leftWidget.x() + m_leftWidget.width(), 0,
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
194 width - clearButtonWidth - m_leftWidget.width(), this.height());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
195
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
196 m_clearButton.setGeometry(this.width() - clearButtonWidth, 0,
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
197 clearButtonWidth, this.height());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
198 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
199
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
200 void initStyleOption(QStyleOptionFrameV2 option)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
201 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
202 option.initFrom(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
203 option.rect = contentsRect();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
204 option.lineWidth = style().pixelMetric(QStyle.PM_DefaultFrameWidth, option, this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
205 option.midLineWidth = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
206 option.state |= QStyle.State_Sunken;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
207 if (m_lineEdit.isReadOnly())
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
208 option.state |= QStyle.State_ReadOnly;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
209 version(QT_KEYPAD_NAVIGATION)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
210 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
211 if (hasEditFocus())
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
212 option.state |= QStyle.State_HasEditFocus;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
213 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
214 else
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
215 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
216 option.features = QStyleOptionFrameV2.None;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
217 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
218 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
219
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
220 QWidget m_leftWidget;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
221 QLineEdit m_lineEdit;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
222 ClearButton m_clearButton;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
223 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
224
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
225
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
226 class UrlIconLabel : public QLabel
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
227 {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
228 public:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
229
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
230 this(QWidget parent)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
231 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
232 super(parent);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
233 m_webView = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
234 setMinimumWidth(16);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
235 setMinimumHeight(16);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
236 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
237
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
238 WebView m_webView;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
239
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
240 protected:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
241
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
242 void mousePressEvent(QMouseEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
243 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
244 if (event.button() == Qt.LeftButton)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
245 m_dragStartPos = event.pos();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
246 QLabel.mousePressEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
247 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
248
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
249 void mouseMoveEvent(QMouseEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
250 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
251 if (event.buttons() == Qt.LeftButton
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
252 && (event.pos() - m_dragStartPos).manhattanLength() > QApplication.startDragDistance()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
253 && m_webView) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
254 QDrag drag = new QDrag(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
255 QMimeData mimeData = new QMimeData;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
256 mimeData.setText(QString.fromUtf8(m_webView.url().toEncoded()));
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
257 QUrl[] urls;
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
258 urls ~= m_webView.url();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
259 mimeData.setUrls(urls);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
260 drag.setMimeData(mimeData);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
261 drag.exec();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
262 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
263 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
264
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
265 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
266
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
267 QPoint m_dragStartPos;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
268 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
269
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
270
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
271 class UrlLineEdit : public ExLineEdit
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
272 {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
273 public:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
274
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
275 this(QWidget parent = null)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
276 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
277 super(parent);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
278 m_webView = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
279 m_iconLabel = 0;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
280 // icon
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
281 m_iconLabel = new UrlIconLabel(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
282 m_iconLabel.resize(16, 16);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
283 setLeftWidget(m_iconLabel);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
284 m_defaultBaseColor = palette().color(QPalette.Base);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
285
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
286 webViewIconChanged();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
287 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
288
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
289 void setWebView(WebView webView)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
290 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
291 assert(!m_webView);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
292 m_webView = webView;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
293 m_iconLabel.m_webView = webView;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
294 webView.urlChanged.connect(&this.webViewUrlChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
295 webView.loadFinished.connect(&this.webViewIconChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
296 webView.iconChanged.connect(&this.webViewIconChanged);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
297 webView.loadProgress.connect(&this.update);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
298 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
299
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
300 protected:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
301
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
302 void paintEvent(QPaintEvent event)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
303 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
304 QPalette p = palette();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
305 if (m_webView && m_webView.url().scheme() == QLatin1String("https")) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
306 QColor lightYellow(248, 248, 210);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
307 p.setBrush(QPalette.Base, generateGradient(lightYellow));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
308 } else {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
309 p.setBrush(QPalette.Base, m_defaultBaseColor);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
310 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
311 setPalette(p);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
312 ExLineEdit.paintEvent(event);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
313
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
314 QPainter painter(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
315 QStyleOptionFrameV2 panel;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
316 initStyleOption(&panel);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
317 QRect backgroundRect = style().subElementRect(QStyle.SE_LineEditContents, &panel, this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
318 if (m_webView && !hasFocus()) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
319 int progress = m_webView.progress();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
320 QColor loadingColor = QColor(116, 192, 250);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
321 painter.setBrush(generateGradient(loadingColor));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
322 painter.setPen(Qt.transparent);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
323 int mid = backgroundRect.width() / 100 * progress;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
324 QRect progressRect(backgroundRect.x(), backgroundRect.y(), mid, backgroundRect.height());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
325 painter.drawRect(progressRect);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
326 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
327 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
328
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
329 void focusOutEvent(QFocusEvent event)
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
330 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
331 if (m_lineEdit.text().isEmpty() && m_webView)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
332 m_lineEdit.setText(QString.fromUtf8(m_webView.url().toEncoded()));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
333 ExLineEdit.focusOutEvent(event);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
334 }
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 private:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
337
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
338 void webViewUrlChanged(QUrl url)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
339 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
340 m_lineEdit.setText(QString.fromUtf8(url.toEncoded()));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
341 m_lineEdit.setCursorPosition(0);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
342 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
343
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
344 void webViewIconChanged()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
345 {
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
346 QUrl url = (m_webView) ? m_webView.url() : new QUrl();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
347 QIcon icon = BrowserApplication.instance().icon(url);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
348 QPixmap pixmap(icon.pixmap(16, 16));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
349 m_iconLabel.setPixmap(pixmap);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
350 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
351
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
352 private:
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
353
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
354 QLinearGradient generateGradient(QColor color)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
355 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
356 QLinearGradient gradient(0, 0, 0, height());
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
357 gradient.setColorAt(0, m_defaultBaseColor);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
358 gradient.setColorAt(0.15, color.lighter(120));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
359 gradient.setColorAt(0.5, color);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
360 gradient.setColorAt(0.85, color.lighter(120));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
361 gradient.setColorAt(1, m_defaultBaseColor);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
362 return gradient;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
363 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
364
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
365 WebView m_webView;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
366 UrlIconLabel m_iconLabel;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
367 QColor m_defaultBaseColor;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
368 }