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

more porting
author mandel
date Thu, 28 May 2009 22:11:52 +0000
parents 85c59c4e5f19
children 8636c819ce4d
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 module toolbarsearch;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
42
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
43
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
44 import qt.core.QSettings;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
45 import qt.core.QUrl;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
46
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.QMenu;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
49 import qt.gui.QStringListModel;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
50
94
87bb4e622f9e more porting
mandel
parents: 80
diff changeset
51 import qt.webkit.QWebSettings;
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
52
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
53 import searchlineedit;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
54 import autosaver;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
55
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
56
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
57 class ToolbarSearch : public SearchLineEdit
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
58 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
59 mixin Signal!("search", QUrl /*url*/);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
60
74
37caa90ce503 more porting
mandel
parents: 73
diff changeset
61 public:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
62
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
63 /*
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
64 ToolbarSearch is a very basic search widget that also contains a small history.
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
65 Searches are turned into urls that use Google to perform search
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
66 */
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
67 this(QWidget parent = null)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
68 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
69 super(parent);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
70 m_autosaver = new AutoSaver(this);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
71 m_maxSavedSearches = 10;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
72 m_stringListModel = new QStringListModel(this);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
73
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
74 QMenu m = menu();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
75 m.aboutToShow().connect(&this.aboutToShowMenu);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
76 m.triggered.connect(&this.triggeredMenuAction);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
77
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
78 QCompleter completer = new QCompleter(m_stringListModel, this);
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
79 completer.setCompletionMode(QCompleter.InlineCompletion);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
80 lineEdit().setCompleter(completer);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
81
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
82 lineEdit().returnPressed.connect(&searchNow);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
83 setInactiveText(tr("Google"));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
84 load();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
85 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
86
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
87 ~this()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
88 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
89 m_autosaver.saveIfNeccessary();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
90 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
91
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
92 public:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
93
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
94 void clear()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
95 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
96 m_stringListModel.setStringList(string[]());
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
97 m_autosaver.changeOccurred();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
98 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
99
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
100 void searchNow()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
101 {
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
102 string searchText = lineEdit().text();
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
103 string[] newList = m_stringListModel.stringList();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
104 if (newList.contains(searchText))
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
105 newList.removeAt(newList.indexOf(searchText));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
106 newList.prepend(searchText);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
107 if (newList.size() >= m_maxSavedSearches)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
108 newList.removeLast();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
109
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
110 QWebSettings globalSettings = QWebSettings.globalSettings();
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
111 if (!globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled)) {
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
112 m_stringListModel.setStringList(newList);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
113 m_autosaver.changeOccurred();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
114 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
115
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
116 auto url = new QUrl("http://www.google.com/search");
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
117 url.addQueryItem("q", searchText);
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
118 url.addQueryItem("ie", "UTF-8");
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
119 url.addQueryItem("oe", "UTF-8");
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
120 url.addQueryItem("client", "qtdemobrowser");
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
121 search.emit(url);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
122 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
123
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
124 private:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
125
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
126 void save()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
127 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
128 QSettings settings;
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
129 settings.beginGroup("toolbarsearch");
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
130 settings.setValue("recentSearches", m_stringListModel.stringList());
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
131 settings.setValue("maximumSaved", m_maxSavedSearches);
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
132 settings.endGroup();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
133 }
45
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
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
136 void aboutToShowMenu()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
137 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
138 lineEdit().selectAll();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
139 QMenu m = menu();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
140 m.clear();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
141 string[] list = m_stringListModel.stringList();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
142 if (list.isEmpty()) {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
143 m.addAction(tr("No Recent Searches"));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
144 return;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
145 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
146
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
147 QAction recent = m.addAction(tr("Recent Searches"));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
148 recent.setEnabled(false);
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
149 for (int i = 0; i < list.length; ++i) {
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
150 string text = list[i];
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
151 m.addAction(text).setData(text);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
152 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
153 m.addSeparator();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
154 m.addAction(tr("Clear Recent Searches"), this, SLOT(clear()));
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
155 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
156
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
157 void triggeredMenuAction(QAction action)
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
158 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
159 QVariant v = action.data();
77
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
160 if (v.canConvert!(string)()) {
0654fc9bac95 more porting
mandel
parents: 74
diff changeset
161 string text = v.toString();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
162 lineEdit().setText(text);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
163 searchNow();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
164 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
165 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
166
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
167 private:
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
168
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
169 void load()
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
170 {
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
171 QSettings settings;
80
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
172 settings.beginGroup("toolbarsearch");
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
173 string[] list = settings.value("recentSearches").toStringList();
85c59c4e5f19 remove QLatin1String and other fixes
mandel
parents: 77
diff changeset
174 m_maxSavedSearches = settings.value("maximumSaved", m_maxSavedSearches).toInt();
73
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
175 m_stringListModel.setStringList(list);
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
176 settings.endGroup();
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
177 }
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
178
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
179 AutoSaver m_autosaver;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
180 int m_maxSavedSearches;
7bfd46c330dc more porting
mandel
parents: 45
diff changeset
181 QStringListModel m_stringListModel;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
182 }