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

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