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