annotate demos/browser/urllineedit.d @ 45:71b382c10ef6

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