annotate demos/browser/bookmarks.d @ 72:b149ef2cb18b

more porting
author mandel
date Wed, 20 May 2009 22:44:31 +0000
parents 71b382c10ef6
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
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
42 module bookmarks;
45
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
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
45 import qt.core.QObject;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
46 import qt.core.QAbstractItemModel;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
47
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
48 import qt.gui.QUndoCommand;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
49
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
50 import qt.core.QBuffer;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
51 import qt.core.QFile;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
52 import qt.core.QMimeData;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
53
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
54 import qt.gui.QDesktopServices;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
55 import qt.gui.QDragEnterEvent;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
56 import qt.gui.QFileDialog;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
57 import qt.gui.QHeaderView;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
58 import qt.gui.QIcon;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
59 import qt.gui.QMessageBox;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
60 import qt.gui.QToolButton;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
61
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
62 import QtWebKit.QWebSettings;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
63
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
64 import qt.core.QDebug;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
65
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
66 import bookmarks;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
67 import autosaver;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
68 import browserapplication;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
69 import history;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
70 import xbel;
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
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
73 const char[] BOOKMARKBAR = "Bookmarks Bar";
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
74 const char[] BOOKMARKMENU = "Bookmarks Menu";
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
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 Bookmark manager, owner of the bookmarks, loads, saves and basic tasks
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
79 */
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
80
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
81 class BookmarksManager : public QObject
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
82 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
83
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
84 mixin Signal!("entryAdded", BookmarkNode item);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
85 mixin Signal!("entryRemoved", BookmarkNode parent, int row, BookmarkNode item);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
86 mixin Signal!("entryChanged", BookmarkNode item);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
87
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
88 public:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
89 BookmarksManager(QObject parent = null)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
90 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
91 super(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
92 m_loaded = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
93 m_saveTimer = new AutoSaver(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
94 m_bookmarkRootNode = null;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
95 m_bookmarkModel = null;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
96 this.entryAdded.connect(&m_saveTimer.changeOccurred);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
97 this.entryRemoved.connect(&m_saveTimer.changeOccurred);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
98 this.entryChanged.connect(&m_saveTimer.changeOccurred);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
99 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
100
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
101
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
102 ~this()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
103 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
104 m_saveTimer.saveIfNeccessary();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
105 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
106
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
107
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
108 void addBookmark(BookmarkNode parent, BookmarkNode node, int row = -1)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
109 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
110 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
111 return;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
112 assert(parent);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
113 InsertBookmarksCommand command = new InsertBookmarksCommand(this, parent, node, row);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
114 m_commands.push(command);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
115 }
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
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
118 void removeBookmark(BookmarkNode node);
45
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 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
121 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
122
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
123 assert(node);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
124 BookmarkNode parent = node.parent();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
125 int row = parent.children().indexOf(node);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
126 RemoveBookmarksCommand command = new RemoveBookmarksCommand(this, parent, row);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
127 m_commands.push(command);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
128 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
129
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
130 void setTitle(BookmarkNode node, QString newTitle);
45
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 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
133 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
134
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
135 assert(node);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
136 ChangeBookmarkCommand command = new ChangeBookmarkCommand(this, node, newTitle, true);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
137 m_commands.push(command);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
138 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
139
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
140
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
141 void setUrl(BookmarkNode node, QString newUrl);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
142 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
143 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
144 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
145
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
146 assert(node);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
147 ChangeBookmarkCommand command = new ChangeBookmarkCommand(this, node, newUrl, false);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
148 m_commands.push(command);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
149 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
150
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
151
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
152 void changeExpanded()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
153 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
154 m_saveTimer.changeOccurred();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
155 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
156
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
157 BookmarkNode bookmarks();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
158 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
159 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
160 load();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
161 return m_bookmarkRootNode;
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
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
164 BookmarkNode menu();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
165 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
166 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
167 load();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
168
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
169 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
170 BookmarkNode node = m_bookmarkRootNode.children().at(i);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
171 if (node.title == tr(BOOKMARKMENU))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
172 return node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
173 }
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
174 assert(false);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
175 return 0;
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
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
178 BookmarkNode toolbar();
45
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 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
181 load();
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 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
184 BookmarkNode node = m_bookmarkRootNode.children().at(i);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
185 if (node.title == tr(BOOKMARKBAR))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
186 return node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
187 }
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
188 assert(false);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
189 return 0;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
190 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
191
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
192 BookmarksModel bookmarksModel()
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
193 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
194 if (!m_bookmarkModel)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
195 m_bookmarkModel = new BookmarksModel(this, this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
196 return m_bookmarkModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
197 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
198
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
199 QUndoStack undoRedoStack() { return m_commands; };
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
200
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
201 public slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
202 void importBookmarks()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
203 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
204 QString fileName = QFileDialog.getOpenFileName(0, tr("Open File"),
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
205 QString(),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
206 tr("XBEL (*.xbel *.xml)"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
207 if (fileName.isEmpty())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
208 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
209
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
210 XbelReader reader;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
211 BookmarkNode importRootNode = reader.read(fileName);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
212 if (reader.error() != QXmlStreamReader.NoError) {
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
213 QMessageBox.warning(0, QLatin1String("Loading Bookmark"),
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
214 tr("Error when loading bookmarks on line %1, column %2:\n"
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
215 "%3").arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
216 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
217
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
218 importRootNode.setType(BookmarkNode.Folder);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
219 importRootNode.title = (tr("Imported %1").arg(QDate.currentDate().toString(Qt.SystemLocaleShortDate)));
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
220 addBookmark(menu(), importRootNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
221 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
222
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 void exportBookmarks()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
225 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
226 QString fileName = QFileDialog.getSaveFileName(0, tr("Save File"),
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
227 tr("%1 Bookmarks.xbel").arg(QCoreApplication.applicationName()),
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
228 tr("XBEL (*.xbel *.xml)"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
229 if (fileName.isEmpty())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
230 return;
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 XbelWriter writer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
233 if (!writer.write(fileName, m_bookmarkRootNode))
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
234 QMessageBox.critical(0, tr("Export error"), tr("error saving bookmarks"));
45
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
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
237 private slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
238 void save()
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 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
241 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
242
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
243 XbelWriter writer;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
244 QString dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
245 QString bookmarkFile = dir + QLatin1String("/bookmarks.xbel");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
246 if (!writer.write(bookmarkFile, m_bookmarkRootNode))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
247 qWarning() << "BookmarkManager: error saving to" << bookmarkFile;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
248 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
249
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
250 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
251 void load()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
252 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
253 if (m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
254 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
255 m_loaded = true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
256
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
257 QString dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
258 QString bookmarkFile = dir + QLatin1String("/bookmarks.xbel");
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
259 if (!QFile.exists(bookmarkFile))
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
260 bookmarkFile = QLatin1String(":defaultbookmarks.xbel");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
261
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
262 XbelReader reader;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
263 m_bookmarkRootNode = reader.read(bookmarkFile);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
264 if (reader.error() != QXmlStreamReader.NoError) {
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
265 QMessageBox.warning(0, QLatin1String("Loading Bookmark"),
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
266 tr("Error when loading bookmarks on line %1, column %2:\n"
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
267 "%3").arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString()));
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
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
270 BookmarkNode toolbar = null;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
271 BookmarkNode menu = null;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
272 QList<BookmarkNode> others;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
273 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
274 BookmarkNode node = m_bookmarkRootNode.children().at(i);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
275 if (node.type() == BookmarkNode.Folder) {
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
276 // Automatically convert
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
277 if (node.title == tr("Toolbar Bookmarks") && !toolbar) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
278 node.title = tr(BOOKMARKBAR);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
279 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
280 if (node.title == tr(BOOKMARKBAR) && !toolbar) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
281 toolbar = node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
282 }
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 // Automatically convert
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
285 if (node.title == tr("Menu") && !menu) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
286 node.title = tr(BOOKMARKMENU);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
287 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
288 if (node.title == tr(BOOKMARKMENU) && !menu) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
289 menu = node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
290 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
291 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
292 others.append(node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
293 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
294 m_bookmarkRootNode.remove(node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
295 }
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
296 assert(m_bookmarkRootNode.children().count() == 0);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
297 if (!toolbar) {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
298 toolbar = new BookmarkNode(BookmarkNode.Folder, m_bookmarkRootNode);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
299 toolbar.title = tr(BOOKMARKBAR);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
300 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
301 m_bookmarkRootNode.add(toolbar);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
302 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
303
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
304 if (!menu) {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
305 menu = new BookmarkNode(BookmarkNode.Folder, m_bookmarkRootNode);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
306 menu.title = tr(BOOKMARKMENU);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
307 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
308 m_bookmarkRootNode.add(menu);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
309 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
310
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
311 for (int i = 0; i < others.count(); ++i)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
312 menu.add(others.at(i));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
313 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
314
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 bool m_loaded;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
317 AutoSaver m_saveTimer;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
318 BookmarkNode m_bookmarkRootNode;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
319 BookmarksModel m_bookmarkModel;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
320 QUndoStack m_commands;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
321
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
322 friend class RemoveBookmarksCommand;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
323 friend class ChangeBookmarkCommand;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
324 }
45
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 class RemoveBookmarksCommand : public QUndoCommand
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
327 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
328
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
329 public:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
330 this(BookmarksManager m_bookmarkManagaer, BookmarkNode parent, int row)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
331 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
332 super(BookmarksManager.tr("Remove Bookmark"))
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
333 m_row = row;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
334 m_bookmarkManagaer = m_bookmarkManagaer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
335 m_node = parent.children().value(row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
336 m_parent = parent;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
337 m_done = false;
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 ~this()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
341 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
342 if (m_done && !m_node.parent()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
343 delete m_node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
344 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
345 }
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 void undo()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
348 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
349 m_parent.add(m_node, m_row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
350 emit m_bookmarkManagaer.entryAdded(m_node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
351 m_done = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
352 }
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 void redo()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
355 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
356 m_parent.remove(m_node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
357 emit m_bookmarkManagaer.entryRemoved(m_parent, m_row, m_node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
358 m_done = true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
359 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
360
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
361 protected:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
362 int m_row;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
363 BookmarksManager m_bookmarkManagaer;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
364 BookmarkNode m_node;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
365 BookmarkNode m_parent;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
366 bool m_done;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
367 };
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
368
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
369 class InsertBookmarksCommand : public RemoveBookmarksCommand
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
370 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
371
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
372 public:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
373 this(BookmarksManager m_bookmarkManagaer,
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
374 BookmarkNode parent, BookmarkNode node, int row)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
375 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
376 super(m_bookmarkManagaer, parent, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
377
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
378 setText(BookmarksManager.tr("Insert Bookmark"));
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
379 m_node = node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
380 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
381
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
382 void undo() { RemoveBookmarksCommand.redo(); }
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
383 void redo() { RemoveBookmarksCommand.undo(); }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
384 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
385
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
386 class ChangeBookmarkCommand : public QUndoCommand
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
387 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
388
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
389 public:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
390 this(BookmarksManager m_bookmarkManagaer,
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
391 BookmarkNode node, QString newValue, bool title)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
392 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
393 super();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
394 m_bookmarkManagaer = m_bookmarkManagaer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
395 m_title = title;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
396 m_newValue = newValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
397 m_node = node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
398 if (m_title) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
399 m_oldValue = m_node.title;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
400 setText(BookmarksManager.tr("Name Change"));
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
401 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
402 m_oldValue = m_node.url;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
403 setText(BookmarksManager.tr("Address Change"));
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
404 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
405 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
406
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
407 void undo()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
408 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
409 if (m_title)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
410 m_node.title = m_oldValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
411 else
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
412 m_node.url = m_oldValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
413 emit m_bookmarkManagaer.entryChanged(m_node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
414 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
415
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
416 void redo()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
417 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
418 if (m_title)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
419 m_node.title = m_newValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
420 else
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
421 m_node.url = m_newValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
422 emit m_bookmarkManagaer.entryChanged(m_node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
423 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
424
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
425 private:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
426 BookmarksManager m_bookmarkManagaer;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
427 bool m_title;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
428 QString m_oldValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
429 QString m_newValue;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
430 BookmarkNode m_node;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
431 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
432
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
433 /*!
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
434 BookmarksModel is a QAbstractItemModel wrapper around the BookmarkManager
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
435 */
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
436 import qt.gui.QIcon;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
437
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
438 class BookmarksModel : public QAbstractItemModel
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
439 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
440
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
441 public:
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
442 void entryAdded(BookmarkNode item)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
443 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
444 assert(item && item.parent());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
445 int row = item.parent().children().indexOf(item);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
446 BookmarkNode parent = item.parent();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
447 // item was already added so remove beore beginInsertRows is called
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
448 parent.remove(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
449 beginInsertRows(index(parent), row, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
450 parent.add(item, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
451 endInsertRows();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
452 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
453
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
454
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
455 void entryRemoved(BookmarkNode parent, int row, BookmarkNode item);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
456 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
457 // item was already removed, re-add so beginRemoveRows works
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
458 parent.add(item, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
459 beginRemoveRows(index(parent), row, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
460 parent.remove(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
461 endRemoveRows();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
462 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
463
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
464 void entryChanged(BookmarkNode item);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
465 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
466 QModelIndex idx = index(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
467 emit dataChanged(idx, idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
468 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
469 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
470 enum Roles {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
471 TypeRole = Qt.UserRole + 1,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
472 UrlRole = Qt.UserRole + 2,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
473 UrlStringRole = Qt.UserRole + 3,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
474 SeparatorRole = Qt.UserRole + 4
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
475 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
476
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
477 BookmarksModel(BookmarksManager bookmarkManager, QObject parent = null)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
478 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
479 super(parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
480 m_endMacro = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
481 m_bookmarksManager = bookmarkManager;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
482 bookmarkManager.entryAdded.connect(&this.entryAdded);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
483 bookmarkManager.entryRemoved.connect(&this.entryRemoved);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
484 bookmarkManager.entryChanged.connect(&this.entryChanged);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
485 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
486
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
487
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
488 inline BookmarksManager bookmarksManager() { return m_bookmarksManager; }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
489
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
490 QVariant headerData(int section, Qt.Orientation orientation, int role = Qt.DisplayRole);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
491 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
492 if (orientation == Qt.Horizontal && role == Qt.DisplayRole) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
493 switch (section) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
494 case 0: return tr("Title");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
495 case 1: return tr("Address");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
496 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
497 }
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
498 return QAbstractItemModel.headerData(section, orientation, role);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
499 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
500
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
501
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
502 QVariant data(QModelIndex index, int role = Qt.DisplayRole)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
503 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
504 if (!index.isValid() || index.model() != this)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
505 return QVariant();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
506
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
507 BookmarkNode bookmarkNode = node(index);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
508 switch (role) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
509 case Qt.EditRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
510 case Qt.DisplayRole:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
511 if (bookmarkNode.type() == BookmarkNode.Separator) {
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
512 switch (index.column()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
513 case 0: return QString(50, 0xB7);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
514 case 1: return QString();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
515 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
516 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
517
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
518 switch (index.column()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
519 case 0: return bookmarkNode.title;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
520 case 1: return bookmarkNode.url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
521 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
522 break;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
523 case BookmarksModel.UrlRole:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
524 return QUrl(bookmarkNode.url);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
525 break;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
526 case BookmarksModel.UrlStringRole:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
527 return bookmarkNode.url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
528 break;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
529 case BookmarksModel.TypeRole:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
530 return bookmarkNode.type();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
531 break;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
532 case BookmarksModel.SeparatorRole:
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
533 return (bookmarkNode.type() == BookmarkNode.Separator);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
534 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
535 case Qt.DecorationRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
536 if (index.column() == 0) {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
537 if (bookmarkNode.type() == BookmarkNode.Folder)
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
538 return QApplication.style().standardIcon(QStyle.SP_DirIcon);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
539 return BrowserApplication.instance().icon(bookmarkNode.url);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
540 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
541 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
542
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
543 return QVariant();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
544 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
545
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
546 int columnCount(QModelIndex parent = QModelIndex())
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
547 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
548 return (parent.column() > 0) ? 0 : 2;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
549 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
550
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
551 int rowCount(QModelIndex parent = QModelIndex())
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
552 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
553 if (parent.column() > 0)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
554 return 0;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
555
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
556 if (!parent.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
557 return m_bookmarksManager.bookmarks().children().count();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
558
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
559 const BookmarkNode item = static_cast<BookmarkNode>(parent.internalPointer());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
560 return item.children().count();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
561 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
562
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
563 QModelIndex index(int, int, QModelIndex& = QModelIndex())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
564 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
565 if (row < 0 || column < 0 || row >= rowCount(parent) || column >= columnCount(parent))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
566 return QModelIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
567
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
568 // get the parent node
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
569 BookmarkNode parentNode = node(parent);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
570 return createIndex(row, column, parentNode.children().at(row));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
571 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
572
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
573 QModelIndex parent(QModelIndex& index= QModelIndex())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
574 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
575 if (!index.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
576 return QModelIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
577
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
578 BookmarkNode itemNode = node(index);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
579 BookmarkNode parentNode = (itemNode ? itemNode.parent() : 0);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
580 if (!parentNode || parentNode == m_bookmarksManager.bookmarks())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
581 return QModelIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
582
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
583 // get the parent's row
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
584 BookmarkNode grandParentNode = parentNode.parent();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
585 int parentRow = grandParentNode.children().indexOf(parentNode);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
586 assert(parentRow >= 0);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
587 return createIndex(parentRow, 0, parentNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
588 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
589
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
590
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
591 Qt.ItemFlags flags(QModelIndex index)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
592 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
593 if (!index.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
594 return Qt.NoItemFlags;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
595
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
596 Qt.ItemFlags flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
597
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
598 BookmarkNode bookmarkNode = node(index);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
599
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
600 if (bookmarkNode != m_bookmarksManager.menu() && bookmarkNode != m_bookmarksManager.toolbar()) {
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
601 flags |= Qt.ItemIsDragEnabled;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
602 if (bookmarkNode.type() != BookmarkNode.Separator)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
603 flags |= Qt.ItemIsEditable;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
604 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
605 if (hasChildren(index))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
606 flags |= Qt.ItemIsDropEnabled;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
607 return flags;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
608 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
609
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
610 Qt.DropActions supportedDropActions ();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
611 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
612 return Qt.CopyAction | Qt.MoveAction;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
613 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
614
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
615
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
616 bool removeRows(int row, int count, QModelIndex parent = QModelIndex());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
617 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
618 if (row < 0 || count <= 0 || row + count > rowCount(parent))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
619 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
620
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
621 BookmarkNode bookmarkNode = node(parent);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
622 for (int i = row + count - 1; i >= row; --i) {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
623 BookmarkNode node = bookmarkNode.children().at(i);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
624 if (node == m_bookmarksManager.menu()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
625 || node == m_bookmarksManager.toolbar())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
626 continue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
627
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
628 m_bookmarksManager.removeBookmark(node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
629 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
630 if (m_endMacro) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
631 m_bookmarksManager.undoRedoStack().endMacro();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
632 m_endMacro = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
633 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
634 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
635 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
636
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
637 bool setData(QModelIndex index, QVariant value, int role = Qt.EditRole)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
638 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
639 if (!index.isValid() || (flags(index) & Qt.ItemIsEditable) == 0)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
640 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
641
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
642 BookmarkNode item = node(index);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
643
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
644 switch (role) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
645 case Qt.EditRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
646 case Qt.DisplayRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
647 if (index.column() == 0) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
648 m_bookmarksManager.setTitle(item, value.toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
649 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
650 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
651 if (index.column() == 1) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
652 m_bookmarksManager.setUrl(item, value.toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
653 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
654 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
655 return false;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
656 case BookmarksModel.UrlRole:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
657 m_bookmarksManager.setUrl(item, value.toUrl().toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
658 break;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
659 case BookmarksModel.UrlStringRole:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
660 m_bookmarksManager.setUrl(item, value.toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
661 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
662 default:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
663 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
664 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
665 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
666
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
667 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
668 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
669
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
670
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
671 QMimeData mimeData(QModelIndexList indexes);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
672 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
673 QMimeData mimeData = new QMimeData();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
674 QByteArray data;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
675 QDataStream stream(&data, QIODevice.WriteOnly);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
676 foreach (QModelIndex index, indexes) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
677 if (index.column() != 0 || !index.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
678 continue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
679 QByteArray encodedData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
680 QBuffer buffer(&encodedData);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
681 buffer.open(QBuffer.ReadWrite);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
682 XbelWriter writer;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
683 const BookmarkNode parentNode = node(index);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
684 writer.write(&buffer, parentNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
685 stream << encodedData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
686 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
687 mimeData.setData(MIMETYPE, data);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
688 return mimeData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
689 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
690
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
691
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
692 const char[] MIMETYPE = QLatin1String("application/bookmarks.xbel")
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
693
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
694 QStringList mimeTypes()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
695 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
696 QStringList types;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
697 types << MIMETYPE;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
698 return types;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
699 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
700
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
701 bool dropMimeData(QMimeData data, Qt.DropAction action, int row, int column, QModelIndex parent)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
702 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
703 if (action == Qt.IgnoreAction)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
704 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
705
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
706 if (!data.hasFormat(MIMETYPE) || column > 0)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
707 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
708
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
709 QByteArray ba = data.data(MIMETYPE);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
710 QDataStream stream(&ba, QIODevice.ReadOnly);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
711 if (stream.atEnd())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
712 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
713
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
714 QUndoStack undoStack = m_bookmarksManager.undoRedoStack();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
715 undoStack.beginMacro(QLatin1String("Move Bookmarks"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
716
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
717 while (!stream.atEnd()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
718 QByteArray encodedData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
719 stream >> encodedData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
720 QBuffer buffer(&encodedData);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
721 buffer.open(QBuffer.ReadOnly);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
722
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
723 XbelReader reader;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
724 BookmarkNode rootNode = reader.read(&buffer);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
725 QList<BookmarkNode> children = rootNode.children();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
726 for (int i = 0; i < children.count(); ++i) {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
727 BookmarkNode bookmarkNode = children.at(i);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
728 rootNode.remove(bookmarkNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
729 row = qMax(0, row);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
730 BookmarkNode parentNode = node(parent);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
731 m_bookmarksManager.addBookmark(parentNode, bookmarkNode, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
732 m_endMacro = true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
733 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
734 delete rootNode;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
735 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
736 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
737 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
738
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
739
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
740 bool hasChildren(QModelIndex parent = QModelIndex())
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
741 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
742 if (!parent.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
743 return true;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
744 const BookmarkNode parentNode = node(parent);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
745 return (parentNode.type() == BookmarkNode.Folder);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
746 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
747
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
748 BookmarkNode node(QModelIndex index)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
749 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
750 BookmarkNode itemNode = static_cast<BookmarkNode>(index.internalPointer());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
751 if (!itemNode)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
752 return m_bookmarksManager.bookmarks();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
753 return itemNode;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
754 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
755
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
756 QModelIndex index(BookmarkNode node)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
757 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
758 BookmarkNode parent = node.parent();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
759 if (!parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
760 return QModelIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
761 return createIndex(parent.children().indexOf(node), 0, node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
762 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
763
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
764 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
765
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
766 bool m_endMacro;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
767 BookmarksManager m_bookmarksManager;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
768 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
769
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
770 // Menu that is dynamically populated from the bookmarks
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
771 import modelmenu;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
772 class BookmarksMenu : public ModelMenu
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
773 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
774 mixin Signal!("openUrl", QUrl url);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
775
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
776 public:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
777 BookmarksMenu(QWidget parent = null)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
778 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
779 super(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
780 m_bookmarksManager = 0;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
781 this.activated.connect(&this.activated);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
782 setMaxRows(-1);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
783 setHoverRole(BookmarksModel.UrlStringRole);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
784 setSeparatorRole(BookmarksModel.SeparatorRole);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
785 }
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
786 void setInitialActions(QList<QAction> actions);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
787 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
788 m_initialActions = actions;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
789 for (int i = 0; i < m_initialActions.count(); ++i)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
790 addAction(m_initialActions.at(i));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
791 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
792 protected:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
793 bool prePopulated()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
794 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
795 m_bookmarksManager = BrowserApplication.bookmarksManager();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
796 setModel(m_bookmarksManager.bookmarksModel());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
797 setRootIndex(m_bookmarksManager.bookmarksModel().index(1, 0));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
798 // initial actions
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
799 for (int i = 0; i < m_initialActions.count(); ++i)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
800 addAction(m_initialActions.at(i));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
801 if (!m_initialActions.isEmpty())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
802 addSeparator();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
803 createMenu(model().index(0, 0), 1, this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
804 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
805 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
806
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
807 private slots:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
808 void activated(QModelIndex index)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
809 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
810 emit openUrl(index.data(BookmarksModel.UrlRole).toUrl());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
811 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
812
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
813 private:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
814 BookmarksManager m_bookmarksManager;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
815 QList<QAction> m_initialActions;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
816 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
817
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
818 /*
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
819 Proxy model that filters out the bookmarks so only the folders
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
820 are left behind. Used in the add bookmark dialog combobox.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
821 */
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
822 import qt.gui.QSortFilterProxyModel;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
823
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
824 class AddBookmarkProxyModel : public QSortFilterProxyModel
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
825 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
826 Q_OBJECT
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
827 public:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
828 this(QObject parent = null)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
829 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
830 super(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
831 }
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
832 int columnCount(QModelIndex parent = QModelIndex())
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
833 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
834 return qMin(1, QSortFilterProxyModel.columnCount(parent));
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
835 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
836 protected:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
837 bool filterAcceptsRow(int source_row, QModelIndex source_parent)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
838 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
839 QModelIndex idx = sourceModel().index(source_row, 0, source_parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
840 return sourceModel().hasChildren(idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
841 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
842 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
843
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
844 /*!
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
845 Add bookmark dialog
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
846 */
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
847
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
848 import ui_addbookmarkdialog;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
849
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
850 class AddBookmarkDialog : public QDialog, public Ui_AddBookmarkDialog
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
851 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
852
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
853 public:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
854 this(QString url, QString title, QWidget parent = null, BookmarksManager bookmarkManager = null)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
855 : QDialog(parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
856 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
857 m_url = url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
858 m_bookmarksManager = bookmarkManager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
859
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
860 setWindowFlags(Qt.Sheet);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
861 if (!m_bookmarksManager)
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
862 m_bookmarksManager = BrowserApplication.bookmarksManager();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
863 setupUi(this);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
864 QTreeView view = new QTreeView(this);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
865 m_proxyModel = new AddBookmarkProxyModel(this);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
866 BookmarksModel model = m_bookmarksManager.bookmarksModel();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
867 m_proxyModel.setSourceModel(model);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
868 view.setModel(m_proxyModel);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
869 view.expandAll();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
870 view.header().setStretchLastSection(true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
871 view.header().hide();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
872 view.setItemsExpandable(false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
873 view.setRootIsDecorated(false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
874 view.setIndentation(10);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
875 location.setModel(m_proxyModel);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
876 view.show();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
877 location.setView(view);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
878 BookmarkNode menu = m_bookmarksManager.menu();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
879 QModelIndex idx = m_proxyModel.mapFromSource(model.index(menu));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
880 view.setCurrentIndex(idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
881 location.setCurrentIndex(idx.row());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
882 name.setText(title);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
883 }
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
884
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
885 private:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
886
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
887 void accept()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
888 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
889 QModelIndex index = location.view().currentIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
890 index = m_proxyModel.mapToSource(index);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
891 if (!index.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
892 index = m_bookmarksManager.bookmarksModel().index(0, 0);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
893 BookmarkNode parent = m_bookmarksManager.bookmarksModel().node(index);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
894 BookmarkNode bookmark = new BookmarkNode(BookmarkNode.Bookmark);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
895 bookmark.url = m_url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
896 bookmark.title = name.text();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
897 m_bookmarksManager.addBookmark(parent, bookmark);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
898 QDialog.accept();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
899 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
900
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
901 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
902 QString m_url;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
903 BookmarksManager m_bookmarksManager;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
904 AddBookmarkProxyModel m_proxyModel;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
905 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
906
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
907 import ui_bookmarks;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
908
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
909 //class TreeProxyModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
910 class BookmarksDialog : public QDialog, public Ui_BookmarksDialog
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
911 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
912
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
913 mixin Signal!("openUrl", QUrl url);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
914
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
915 public:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
916 this(QWidget parent = null, BookmarksManager manager = null)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
917 : QDialog(parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
918 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
919 m_bookmarksManager = manager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
920 if (!m_bookmarksManager)
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
921 m_bookmarksManager = BrowserApplication.bookmarksManager();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
922 setupUi(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
923
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
924 tree.setUniformRowHeights(true);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
925 tree.setSelectionBehavior(QAbstractItemView.SelectRows);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
926 tree.setSelectionMode(QAbstractItemView.ContiguousSelection);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
927 tree.setTextElideMode(Qt.ElideMiddle);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
928 m_bookmarksModel = m_bookmarksManager.bookmarksModel();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
929 m_proxyModel = new TreeProxyModel(this);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
930 search.textChanged.connect(&m_proxyModel.setFilterFixedString);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
931 removeButton.clicked.connect(&tree.removeOne);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
932 m_proxyModel.setSourceModel(m_bookmarksModel);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
933 tree.setModel(m_proxyModel);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
934 tree.setDragDropMode(QAbstractItemView.InternalMove);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
935 tree.setExpanded(m_proxyModel.index(0, 0), true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
936 tree.setAlternatingRowColors(true);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
937 auto fm = new QFontMetrics(font());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
938 int header = fm.width(QLatin1Char('m')) * 40;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
939 tree.header().resizeSection(0, header);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
940 tree.header().setStretchLastSection(true);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
941 tree.activated.connect(&this.open);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
942 tree.setContextMenuPolicy(Qt.CustomContextMenu);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
943 tree.customContextMenuRequested.connect(&this.customContextMenuRequested);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
944 addFolderButton.clicked.connect(&this.newFolder);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
945 expandNodes(m_bookmarksManager.bookmarks());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
946 setAttribute(Qt.WA_DeleteOnClose);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
947 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
948 ~this()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
949 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
950 if (saveExpandedNodes(tree.rootIndex()))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
951 m_bookmarksManager.changeExpanded();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
952 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
953
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
954 private slots:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
955 void customContextMenuRequested(QPoint pos)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
956 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
957 QMenu menu;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
958 QModelIndex index = tree.indexAt(pos);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
959 index = index.sibling(index.row(), 0);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
960 if (index.isValid() && !tree.model().hasChildren(index)) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
961 menu.addAction(tr("Open"), this, SLOT(open()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
962 menu.addSeparator();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
963 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
964 menu.addAction(tr("Delete"), tree, SLOT(removeOne()));
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
965 menu.exec(QCursor.pos());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
966 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
967 void open()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
968 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
969 QModelIndex index = tree.currentIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
970 if (!index.parent().isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
971 return;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
972 emit openUrl(index.sibling(index.row(), 1).data(BookmarksModel.UrlRole).toUrl());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
973 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
974
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
975 void newFolder()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
976 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
977 QModelIndex currentIndex = tree.currentIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
978 QModelIndex idx = currentIndex;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
979 if (idx.isValid() && !idx.model().hasChildren(idx))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
980 idx = idx.parent();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
981 if (!idx.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
982 idx = tree.rootIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
983 idx = m_proxyModel.mapToSource(idx);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
984 BookmarkNode parent = m_bookmarksManager.bookmarksModel().node(idx);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
985 BookmarkNode node = new BookmarkNode(BookmarkNode.Folder);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
986 node.title = tr("New Folder");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
987 m_bookmarksManager.addBookmark(parent, node, currentIndex.row() + 1);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
988 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
989
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
990 private:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
991 void expandNodes(BookmarkNode node)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
992 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
993 for (int i = 0; i < node.children().count(); ++i) {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
994 BookmarkNode childNode = node.children()[i];
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
995 if (childNode.expanded) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
996 QModelIndex idx = m_bookmarksModel.index(childNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
997 idx = m_proxyModel.mapFromSource(idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
998 tree.setExpanded(idx, true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
999 expandNodes(childNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1000 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1001 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1002 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1003
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1004 bool saveExpandedNodes(QModelIndex parent)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1005 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1006 bool changed = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1007 for (int i = 0; i < m_proxyModel.rowCount(parent); ++i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1008 QModelIndex child = m_proxyModel.index(i, 0, parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1009 QModelIndex sourceIndex = m_proxyModel.mapToSource(child);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1010 BookmarkNode childNode = m_bookmarksModel.node(sourceIndex);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1011 bool wasExpanded = childNode.expanded;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1012 if (tree.isExpanded(child)) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1013 childNode.expanded = true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1014 changed |= saveExpandedNodes(child);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1015 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1016 childNode.expanded = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1017 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1018 changed |= (wasExpanded != childNode.expanded);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1019 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1020 return changed;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1021 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1022
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1023 BookmarksManager m_bookmarksManager;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1024 BookmarksModel m_bookmarksModel;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1025 TreeProxyModel m_proxyModel;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1026 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1027
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1028 import qt.gui.QToolBar;
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1029
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1030 class BookmarksToolBar : public QToolBar
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1031 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1032 mixin Signal!("openUrl", QUrl url);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1033
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1034 public:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1035 BookmarksToolBar(BookmarksModel model, QWidget parent = null)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1036 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1037 super(tr("Bookmark"), parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1038 m_bookmarksModel = model;
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1039 this.actionTriggered.connect(&this.triggered);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1040 setRootIndex(model.index(0, 0));
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1041 m_bookmarksModel.modelReset.connect(&this.build);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1042 m_bookmarksModel.rowsInserted.connect(&this.build);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1043 m_bookmarksModel.rowsRemoved.connect(&this.build);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1044 m_bookmarksModel.dataChanged.connect(&this.build);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1045 setAcceptDrops(true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1046 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1047
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1048 void setRootIndex(QModelIndex index);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1049 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1050 m_root = index;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1051 build();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1052 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1053
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1054 QModelIndex rootIndex()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1055 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1056 return m_root;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1057 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1058
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1059 protected:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1060 void dragEnterEvent(QDragEnterEvent event)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1061 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1062 const QMimeData mimeData = event.mimeData();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1063 if (mimeData.hasUrls())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1064 event.acceptProposedAction();
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1065 QToolBar.dragEnterEvent(event);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1066 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1067
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1068 void dropEvent(QDropEvent event)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1069 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1070 const QMimeData mimeData = event.mimeData();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1071 if (mimeData.hasUrls() && mimeData.hasText()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1072 QList<QUrl> urls = mimeData.urls();
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1073 QAction action = actionAt(event.pos());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1074 QString dropText;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1075 if (action)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1076 dropText = action.text();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1077 int row = -1;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1078 QModelIndex parentIndex = m_root;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1079 for (int i = 0; i < m_bookmarksModel.rowCount(m_root); ++i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1080 QModelIndex idx = m_bookmarksModel.index(i, 0, m_root);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1081 QString title = idx.data().toString();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1082 if (title == dropText) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1083 row = i;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1084 if (m_bookmarksModel.hasChildren(idx)) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1085 parentIndex = idx;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1086 row = -1;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1087 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1088 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1089 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1090 }
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1091 BookmarkNode bookmark = new BookmarkNode(BookmarkNode.Bookmark);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1092 bookmark.url = urls.at(0).toString();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1093 bookmark.title = mimeData.text();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1094
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1095 BookmarkNode parent = m_bookmarksModel.node(parentIndex);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1096 BookmarksManager bookmarksManager = m_bookmarksModel.bookmarksManager();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1097 bookmarksManager.addBookmark(parent, bookmark, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1098 event.acceptProposedAction();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1099 }
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1100 QToolBar.dropEvent(event);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1101 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1102
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1103 private slots:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1104 void triggered(QAction action)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1105 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1106 QVariant v = action.data();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1107 if (v.canConvert<QUrl>()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1108 emit openUrl(v.toUrl());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1109 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1110 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1111
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1112 void activated(QModelIndex index)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1113 {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1114 emit openUrl(index.data(BookmarksModel.UrlRole).toUrl());
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1115 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1116
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1117
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1118 void build()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1119 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1120 clear();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1121 for (int i = 0; i < m_bookmarksModel.rowCount(m_root); ++i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1122 QModelIndex idx = m_bookmarksModel.index(i, 0, m_root);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1123 if (m_bookmarksModel.hasChildren(idx)) {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1124 QToolButton button = new QToolButton(this);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1125 button.setPopupMode(QToolButton.InstantPopup);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1126 button.setArrowType(Qt.DownArrow);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1127 button.setText(idx.data().toString());
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1128 ModelMenu menu = new ModelMenu(this);
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1129 menu.activated.connect(&this.activated);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1130 menu.setModel(m_bookmarksModel);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1131 menu.setRootIndex(idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1132 menu.addAction(new QAction(menu));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1133 button.setMenu(menu);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1134 button.setToolButtonStyle(Qt.ToolButtonTextOnly);
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1135 QAction a = addWidget(button);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1136 a.setText(idx.data().toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1137 } else {
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1138 QAction action = addAction(idx.data().toString());
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1139 action.setData(idx.data(BookmarksModel.UrlRole));
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1140 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1141 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1142 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1143
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1144 private:
72
b149ef2cb18b more porting
mandel
parents: 45
diff changeset
1145 BookmarksModel m_bookmarksModel;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1146 QPersistentModelIndex m_root;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1147 }