Mercurial > projects > qtd
comparison demos/browser/bookmarks.d @ 100:dcd36d8db2da
more porting
author | mandel |
---|---|
date | Fri, 29 May 2009 11:36:51 +0000 |
parents | 87bb4e622f9e |
children | 8636c819ce4d |
comparison
equal
deleted
inserted
replaced
99:e252fcf214c5 | 100:dcd36d8db2da |
---|---|
42 module bookmarks; | 42 module bookmarks; |
43 | 43 |
44 | 44 |
45 import qt.core.QObject; | 45 import qt.core.QObject; |
46 import qt.core.QAbstractItemModel; | 46 import qt.core.QAbstractItemModel; |
47 | |
48 | |
49 import qt.core.QBuffer; | 47 import qt.core.QBuffer; |
50 import qt.core.QFile; | 48 import qt.core.QFile; |
51 import qt.core.QMimeData; | 49 import qt.core.QMimeData; |
52 import qt.core.QPersistentModelIndex; | 50 import qt.core.QPersistentModelIndex; |
53 | |
54 import qt.gui.QUndoStack; | 51 import qt.gui.QUndoStack; |
55 import qt.gui.QUndoCommand; | 52 import qt.gui.QUndoCommand; |
56 import qt.gui.QDesktopServices; | 53 import qt.gui.QDesktopServices; |
57 import qt.gui.QDragEnterEvent; | 54 import qt.gui.QDragEnterEvent; |
58 import qt.gui.QFileDialog; | 55 import qt.gui.QFileDialog; |
59 import qt.gui.QHeaderView; | 56 import qt.gui.QHeaderView; |
60 import qt.gui.QIcon; | 57 import qt.gui.QIcon; |
61 import qt.gui.QMessageBox; | 58 import qt.gui.QMessageBox; |
62 import qt.gui.QToolButton; | 59 import qt.gui.QToolButton; |
63 | 60 import qt.xml.QXmlStreamReader; |
64 import qt.webkit.QWebSettings; | 61 import qt.webkit.QWebSettings; |
62 | |
63 import tango.text.convert.Format; | |
65 | 64 |
66 //import qt.core.QDebug; | 65 //import qt.core.QDebug; |
67 | 66 |
68 import bookmarks; | 67 import bookmarks; |
69 import autosaver; | 68 import autosaver; |
73 | 72 |
74 | 73 |
75 const string BOOKMARKBAR = "Bookmarks Bar"; | 74 const string BOOKMARKBAR = "Bookmarks Bar"; |
76 const string BOOKMARKMENU = "Bookmarks Menu"; | 75 const string BOOKMARKMENU = "Bookmarks Menu"; |
77 | 76 |
77 // workaround for QList implementation | |
78 int indexOf(T)(T[] items, T item) | |
79 { | |
80 for(auto i = 0; i < items.length; ++i) | |
81 { | |
82 if(items[i] == item) | |
83 return i; | |
84 } | |
85 return -1; | |
86 } | |
78 | 87 |
79 /*! | 88 /*! |
80 Bookmark manager, owner of the bookmarks, loads, saves and basic tasks | 89 Bookmark manager, owner of the bookmarks, loads, saves and basic tasks |
81 */ | 90 */ |
82 class BookmarksManager : public QObject | 91 class BookmarksManager : public QObject |
118 if (!m_loaded) | 127 if (!m_loaded) |
119 return; | 128 return; |
120 | 129 |
121 assert(node); | 130 assert(node); |
122 BookmarkNode parent = node.parent(); | 131 BookmarkNode parent = node.parent(); |
123 int row = parent.children().indexOf(node); | 132 int row = indexOf(parent.children(), node); |
124 RemoveBookmarksCommand command = new RemoveBookmarksCommand(this, parent, row); | 133 RemoveBookmarksCommand command = new RemoveBookmarksCommand(this, parent, row); |
125 m_commands.push(command); | 134 m_commands.push(command); |
126 } | 135 } |
127 | 136 |
128 void setTitle(BookmarkNode node, string newTitle) | 137 void setTitle(BookmarkNode node, string newTitle) |
160 BookmarkNode menu() | 169 BookmarkNode menu() |
161 { | 170 { |
162 if (!m_loaded) | 171 if (!m_loaded) |
163 load(); | 172 load(); |
164 | 173 |
165 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) { | 174 for (int i = m_bookmarkRootNode.children().length - 1; i >= 0; --i) { |
166 BookmarkNode node = m_bookmarkRootNode.children()[i]; | 175 BookmarkNode node = m_bookmarkRootNode.children()[i]; |
167 if (node.title == tr(BOOKMARKMENU)) | 176 if (node.title == tr(BOOKMARKMENU)) |
168 return node; | 177 return node; |
169 } | 178 } |
170 assert(false); | 179 assert(false); |
171 return 0; | 180 return null; |
172 } | 181 } |
173 | 182 |
174 BookmarkNode toolbar() | 183 BookmarkNode toolbar() |
175 { | 184 { |
176 if (!m_loaded) | 185 if (!m_loaded) |
177 load(); | 186 load(); |
178 | 187 |
179 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) { | 188 for (int i = m_bookmarkRootNode.children().length - 1; i >= 0; --i) { |
180 BookmarkNode node = m_bookmarkRootNode.children()[i]; | 189 BookmarkNode node = m_bookmarkRootNode.children()[i]; |
181 if (node.title == tr(BOOKMARKBAR)) | 190 if (node.title == tr(BOOKMARKBAR)) |
182 return node; | 191 return node; |
183 } | 192 } |
184 assert(false); | 193 assert(false); |
185 return 0; | 194 return null; |
186 } | 195 } |
187 | 196 |
188 BookmarksModel bookmarksModel() | 197 BookmarksModel bookmarksModel() |
189 { | 198 { |
190 if (!m_bookmarkModel) | 199 if (!m_bookmarkModel) |
196 | 205 |
197 public: | 206 public: |
198 | 207 |
199 void importBookmarks() | 208 void importBookmarks() |
200 { | 209 { |
201 string fileName = QFileDialog.getOpenFileName(0, tr("Open File"), null, tr("XBEL (*.xbel *.xml)")); | 210 string fileName = QFileDialog.getOpenFileName(null, tr("Open File"), null, tr("XBEL (*.xbel *.xml)")); |
202 if (fileName.isEmpty()) | 211 if (fileName.length == 0) |
203 return; | 212 return; |
204 | 213 |
205 XbelReader reader; | 214 auto reader = new XbelReader; |
206 BookmarkNode importRootNode = reader.read(fileName); | 215 BookmarkNode importRootNode = reader.read(fileName); |
207 if (reader.error() != QXmlStreamReader.NoError) { | 216 if (reader.error() != QXmlStreamReader.NoError) { |
208 QMessageBox.warning(0, "Loading Bookmark", | 217 QMessageBox.warning(null, "Loading Bookmark", |
209 tr("Error when loading bookmarks on line %1, column %2:\n" | 218 Format(tr("Error when loading bookmarks on line %1, column %2:\n" |
210 "%3").arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString())); | 219 "%3"), reader.lineNumber(), reader.columnNumber(), reader.errorString())); |
211 } | 220 } |
212 | 221 |
213 importRootNode.setType(BookmarkNode.Folder); | 222 importRootNode.setType(BookmarkNode.Type.Folder); |
214 importRootNode.title = (tr("Imported %1").arg(QDate.currentDate().toString(Qt.SystemLocaleShortDate))); | 223 importRootNode.title = Format(tr("Imported %1"), QDate.currentDate().toString(Qt_DateFormat.SystemLocaleShortDate)); |
215 addBookmark(menu(), importRootNode); | 224 addBookmark(menu(), importRootNode); |
216 } | 225 } |
217 | 226 |
218 | |
219 void exportBookmarks() | 227 void exportBookmarks() |
220 { | 228 { |
221 string fileName = QFileDialog.getSaveFileName(0, tr("Save File"), | 229 string fileName = QFileDialog.getSaveFileName(null, tr("Save File"), |
222 tr("%1 Bookmarks.xbel").arg(QCoreApplication.applicationName()), | 230 Format(tr("%1 Bookmarks.xbel"), QCoreApplication.applicationName()), |
223 tr("XBEL (*.xbel *.xml)")); | 231 tr("XBEL (*.xbel *.xml)")); |
224 if (fileName.isEmpty()) | 232 if (fileName.length == 0) |
225 return; | 233 return; |
226 | 234 |
227 XbelWriter writer; | 235 auto writer = new XbelWriter; |
228 if (!writer.write(fileName, m_bookmarkRootNode)) | 236 if (!writer.write(fileName, m_bookmarkRootNode)) |
229 QMessageBox.critical(0, tr("Export error"), tr("error saving bookmarks")); | 237 QMessageBox.critical(null, tr("Export error"), tr("error saving bookmarks")); |
230 } | 238 } |
231 | 239 |
232 private: | 240 private: |
233 | 241 |
234 void save() | 242 void save() |
235 { | 243 { |
236 if (!m_loaded) | 244 if (!m_loaded) |
237 return; | 245 return; |
238 | 246 |
239 XbelWriter writer; | 247 auto writer = new XbelWriter; |
240 string dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation); | 248 string dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation); |
241 string bookmarkFile = dir ~ "/bookmarks.xbel"; | 249 string bookmarkFile = dir ~ "/bookmarks.xbel"; |
242 if (!writer.write(bookmarkFile, m_bookmarkRootNode)) | 250 if (!writer.write(bookmarkFile, m_bookmarkRootNode)) |
243 qWarning("BookmarkManager: error saving to" ~ bookmarkFile); | 251 qWarning("BookmarkManager: error saving to" ~ bookmarkFile); |
244 } | 252 } |
257 bookmarkFile = ":defaultbookmarks.xbel"; | 265 bookmarkFile = ":defaultbookmarks.xbel"; |
258 | 266 |
259 XbelReader reader; | 267 XbelReader reader; |
260 m_bookmarkRootNode = reader.read(bookmarkFile); | 268 m_bookmarkRootNode = reader.read(bookmarkFile); |
261 if (reader.error() != QXmlStreamReader.NoError) { | 269 if (reader.error() != QXmlStreamReader.NoError) { |
262 QMessageBox.warning(0, "Loading Bookmark", | 270 QMessageBox.warning(null, "Loading Bookmark", |
263 tr("Error when loading bookmarks on line %1, column %2:\n" | 271 Format(tr("Error when loading bookmarks on line %1, column %2:\n" |
264 "%3").arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString())); | 272 "%3"), reader.lineNumber(), reader.columnNumber(), reader.errorString())); |
265 } | 273 } |
266 | 274 |
267 BookmarkNode toolbar = null; | 275 BookmarkNode toolbar = null; |
268 BookmarkNode menu = null; | 276 BookmarkNode menu = null; |
269 BookmarkNode[] others; | 277 BookmarkNode[] others; |
270 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) { | 278 for (int i = m_bookmarkRootNode.children().length - 1; i >= 0; --i) { |
271 BookmarkNode node = m_bookmarkRootNode.children()[i]; | 279 BookmarkNode node = m_bookmarkRootNode.children()[i]; |
272 if (node.type() == BookmarkNode.Folder) { | 280 if (node.type() == BookmarkNode.Type.Folder) { |
273 // Automatically convert | 281 // Automatically convert |
274 if (node.title == tr("Toolbar Bookmarks") && !toolbar) { | 282 if (node.title == tr("Toolbar Bookmarks") && !toolbar) { |
275 node.title = tr(BOOKMARKBAR); | 283 node.title = tr(BOOKMARKBAR); |
276 } | 284 } |
277 if (node.title == tr(BOOKMARKBAR) && !toolbar) { | 285 if (node.title == tr(BOOKMARKBAR) && !toolbar) { |
288 } else { | 296 } else { |
289 others ~= node; | 297 others ~= node; |
290 } | 298 } |
291 m_bookmarkRootNode.remove(node); | 299 m_bookmarkRootNode.remove(node); |
292 } | 300 } |
293 assert(m_bookmarkRootNode.children().count() == 0); | 301 assert(m_bookmarkRootNode.children().length == 0); |
294 if (!toolbar) { | 302 if (!toolbar) { |
295 toolbar = new BookmarkNode(BookmarkNode.Folder, m_bookmarkRootNode); | 303 toolbar = new BookmarkNode(BookmarkNode.Type.Folder, m_bookmarkRootNode); |
296 toolbar.title = tr(BOOKMARKBAR); | 304 toolbar.title = tr(BOOKMARKBAR); |
297 } else { | 305 } else { |
298 m_bookmarkRootNode.add(toolbar); | 306 m_bookmarkRootNode.add(toolbar); |
299 } | 307 } |
300 | 308 |
301 if (!menu) { | 309 if (!menu) { |
302 menu = new BookmarkNode(BookmarkNode.Folder, m_bookmarkRootNode); | 310 menu = new BookmarkNode(BookmarkNode.Type.Folder, m_bookmarkRootNode); |
303 menu.title = tr(BOOKMARKMENU); | 311 menu.title = tr(BOOKMARKMENU); |
304 } else { | 312 } else { |
305 m_bookmarkRootNode.add(menu); | 313 m_bookmarkRootNode.add(menu); |
306 } | 314 } |
307 | 315 |
318 | 326 |
319 class RemoveBookmarksCommand : public QUndoCommand | 327 class RemoveBookmarksCommand : public QUndoCommand |
320 { | 328 { |
321 public: | 329 public: |
322 | 330 |
323 this(BookmarksManager m_bookmarkManagaer, BookmarkNode parent, int row) | 331 this(BookmarksManager m_bookmarkManager, BookmarkNode parent, int row) |
324 { | 332 { |
325 super(BookmarksManager.tr("Remove Bookmark")); | 333 super(tr("Remove Bookmark")); |
326 m_row = row; | 334 m_row = row; |
327 m_bookmarkManagaer = m_bookmarkManagaer; | 335 m_bookmarkManager = m_bookmarkManager; |
328 m_node = parent.children().value(row); | 336 m_node = (row < parent.children().length) ? parent.children()[row] : null; |
329 m_parent = parent; | 337 m_parent = parent; |
330 m_done = false; | 338 m_done = false; |
331 } | 339 } |
332 | 340 |
333 ~this() | 341 ~this() |
338 } | 346 } |
339 | 347 |
340 void undo() | 348 void undo() |
341 { | 349 { |
342 m_parent.add(m_node, m_row); | 350 m_parent.add(m_node, m_row); |
343 m_bookmarkManagaer.entryAdded.emit(m_node); | 351 m_bookmarkManager.entryAdded.emit(m_node); |
344 m_done = false; | 352 m_done = false; |
345 } | 353 } |
346 | 354 |
347 void redo() | 355 void redo() |
348 { | 356 { |
349 m_parent.remove(m_node); | 357 m_parent.remove(m_node); |
350 m_bookmarkManagaer.entryRemoved.emit(m_parent, m_row, m_node); | 358 m_bookmarkManager.entryRemoved.emit(m_parent, m_row, m_node); |
351 m_done = true; | 359 m_done = true; |
352 } | 360 } |
353 | 361 |
354 protected: | 362 protected: |
355 | 363 |
356 int m_row; | 364 int m_row; |
357 BookmarksManager m_bookmarkManagaer; | 365 BookmarksManager m_bookmarkManager; |
358 BookmarkNode m_node; | 366 BookmarkNode m_node; |
359 BookmarkNode m_parent; | 367 BookmarkNode m_parent; |
360 bool m_done; | 368 bool m_done; |
361 } | 369 } |
362 | 370 |
363 class InsertBookmarksCommand : public RemoveBookmarksCommand | 371 class InsertBookmarksCommand : public RemoveBookmarksCommand |
364 { | 372 { |
365 public: | 373 public: |
366 this(BookmarksManager m_bookmarkManagaer, BookmarkNode parent, BookmarkNode node, int row) | 374 |
367 { | 375 this(BookmarksManager m_bookmarkManager, BookmarkNode parent, BookmarkNode node, int row) |
368 super(m_bookmarkManagaer, parent, row); | 376 { |
369 | 377 super(m_bookmarkManager, parent, row); |
370 setText(BookmarksManager.tr("Insert Bookmark")); | 378 |
379 setText(tr("Insert Bookmark")); | |
371 m_node = node; | 380 m_node = node; |
372 } | 381 } |
373 | 382 |
374 void undo() { RemoveBookmarksCommand.redo(); } | 383 void undo() { RemoveBookmarksCommand.redo(); } |
375 void redo() { RemoveBookmarksCommand.undo(); } | 384 void redo() { RemoveBookmarksCommand.undo(); } |
377 | 386 |
378 class ChangeBookmarkCommand : public QUndoCommand | 387 class ChangeBookmarkCommand : public QUndoCommand |
379 { | 388 { |
380 public: | 389 public: |
381 | 390 |
382 this(BookmarksManager m_bookmarkManagaer, BookmarkNode node, string newValue, bool title) | 391 this(BookmarksManager m_bookmarkManager, BookmarkNode node, string newValue, bool title) |
383 { | 392 { |
384 super(); | 393 super(); |
385 m_bookmarkManagaer = m_bookmarkManagaer; | 394 m_bookmarkManager = m_bookmarkManager; |
386 m_title = title; | 395 m_title = title; |
387 m_newValue = newValue; | 396 m_newValue = newValue; |
388 m_node = node; | 397 m_node = node; |
389 if (m_title) { | 398 if (m_title) { |
390 m_oldValue = m_node.title; | 399 m_oldValue = m_node.title; |
391 setText(BookmarksManager.tr("Name Change")); | 400 setText(tr("Name Change")); |
392 } else { | 401 } else { |
393 m_oldValue = m_node.url; | 402 m_oldValue = m_node.url; |
394 setText(BookmarksManager.tr("Address Change")); | 403 setText(tr("Address Change")); |
395 } | 404 } |
396 } | 405 } |
397 | 406 |
398 void undo() | 407 void undo() |
399 { | 408 { |
400 if (m_title) | 409 if (m_title) |
401 m_node.title = m_oldValue; | 410 m_node.title = m_oldValue; |
402 else | 411 else |
403 m_node.url = m_oldValue; | 412 m_node.url = m_oldValue; |
404 m_bookmarkManagaer.entryChanged.emit(m_node); | 413 m_bookmarkManager.entryChanged.emit(m_node); |
405 } | 414 } |
406 | 415 |
407 void redo() | 416 void redo() |
408 { | 417 { |
409 if (m_title) | 418 if (m_title) |
410 m_node.title = m_newValue; | 419 m_node.title = m_newValue; |
411 else | 420 else |
412 m_node.url = m_newValue; | 421 m_node.url = m_newValue; |
413 m_bookmarkManagaer.entryChanged.emit(m_node); | 422 m_bookmarkManager.entryChanged.emit(m_node); |
414 } | 423 } |
415 | 424 |
416 private: | 425 private: |
417 | 426 |
418 BookmarksManager m_bookmarkManagaer; | 427 BookmarksManager m_bookmarkManager; |
419 bool m_title; | 428 bool m_title; |
420 string m_oldValue; | 429 string m_oldValue; |
421 string m_newValue; | 430 string m_newValue; |
422 BookmarkNode m_node; | 431 BookmarkNode m_node; |
423 } | 432 } |
432 public: | 441 public: |
433 | 442 |
434 void entryAdded(BookmarkNode item) | 443 void entryAdded(BookmarkNode item) |
435 { | 444 { |
436 assert(item && item.parent()); | 445 assert(item && item.parent()); |
437 int row = item.parent().children().indexOf(item); | 446 int row = indexOf(item.parent().children(), item); |
438 BookmarkNode parent = item.parent(); | 447 BookmarkNode parent = item.parent(); |
439 // item was already added so remove beore beginInsertRows is called | 448 // item was already added so remove beore beginInsertRows is called |
440 parent.remove(item); | 449 parent.remove(item); |
441 beginInsertRows(index(parent), row, row); | 450 beginInsertRows(index(parent), row, row); |
442 parent.add(item, row); | 451 parent.add(item, row); |
484 | 493 |
485 QVariant headerData(int section, Qt.Orientation orientation, int role = Qt.DisplayRole) | 494 QVariant headerData(int section, Qt.Orientation orientation, int role = Qt.DisplayRole) |
486 { | 495 { |
487 if (orientation == Qt.Horizontal && role == Qt.DisplayRole) { | 496 if (orientation == Qt.Horizontal && role == Qt.DisplayRole) { |
488 switch (section) { | 497 switch (section) { |
489 case 0: return tr("Title"); | 498 case 0: return new QVariant(tr("Title")); |
490 case 1: return tr("Address"); | 499 case 1: return QVariant(tr("Address")); |
491 } | 500 } |
492 } | 501 } |
493 return QAbstractItemModel.headerData(section, orientation, role); | 502 return QAbstractItemModel.headerData(section, orientation, role); |
494 } | 503 } |
495 | 504 |
496 QVariant data(QModelIndex index, int role = Qt.DisplayRole) | 505 QVariant data(QModelIndex index, int role = Qt.DisplayRole) |
497 { | 506 { |
498 if (!index.isValid() || index.model() != this) | 507 if (!index.isValid() || index.model() != this) |
499 return QVariant(); | 508 return new QVariant(); |
500 | 509 |
501 BookmarkNode bookmarkNode = node(index); | 510 BookmarkNode bookmarkNode = node(index); |
502 switch (role) { | 511 switch (role) { |
503 case Qt.EditRole: | 512 case Qt_ItemDataRole.EditRole: |
504 case Qt.DisplayRole: | 513 case Qt_ItemDataRole.DisplayRole: |
505 if (bookmarkNode.type() == BookmarkNode.Separator) { | 514 if (bookmarkNode.type() == BookmarkNode.Type.Separator) { |
506 switch (index.column()) { | 515 switch (index.column()) { |
507 case 0: return QString(50, 0xB7); | 516 case 0: |
517 char[] tmp = new char[](50); | |
518 tmp[] = 0xB7; | |
519 return new QVariant(tmp); | |
508 case 1: return null; | 520 case 1: return null; |
509 } | 521 } |
510 } | 522 } |
511 | 523 |
512 switch (index.column()) { | 524 switch (index.column()) { |
513 case 0: return bookmarkNode.title; | 525 case 0: return new QVariant(bookmarkNode.title); |
514 case 1: return bookmarkNode.url; | 526 case 1: return new QVariant(bookmarkNode.url); |
515 } | 527 } |
516 break; | 528 break; |
517 case BookmarksModel.UrlRole: | 529 case BookmarksModel.Roles.UrlRole: |
518 return new QUrl(bookmarkNode.url); | 530 return new QVariant(new QUrl(bookmarkNode.url)); |
519 break; | 531 break; |
520 case BookmarksModel.UrlStringRole: | 532 case BookmarksModel.Roles.UrlStringRole: |
521 return bookmarkNode.url; | 533 return new QVariant(bookmarkNode.url); |
522 break; | 534 break; |
523 case BookmarksModel.TypeRole: | 535 case BookmarksModel.Roles.TypeRole: |
524 return bookmarkNode.type(); | 536 return new QVariant(cast(ulong) bookmarkNode.type()); |
525 break; | 537 break; |
526 case BookmarksModel.SeparatorRole: | 538 case BookmarksModel.Roles.SeparatorRole: |
527 return (bookmarkNode.type() == BookmarkNode.Separator); | 539 return new QVariant(bookmarkNode.type() == BookmarkNode.Type.Separator); |
528 break; | 540 break; |
529 case Qt.DecorationRole: | 541 case Qt_ItemDataRole.DecorationRole: |
530 if (index.column() == 0) { | 542 if (index.column() == 0) { |
531 if (bookmarkNode.type() == BookmarkNode.Folder) | 543 if (bookmarkNode.type() == BookmarkNode.Type.Folder) |
532 return QApplication.style().standardIcon(QStyle.SP_DirIcon); | 544 return new QVariant(QApplication.style().standardIcon(QStyle.SP_DirIcon)); |
533 return BrowserApplication.instance().icon(bookmarkNode.url); | 545 return new QVariant(BrowserApplication.instance().icon(bookmarkNode.url)); |
534 } | 546 } |
535 } | 547 } |
536 | 548 |
537 return QVariant(); | 549 return new QVariant(); |
538 } | 550 } |
539 | 551 |
540 int columnCount(QModelIndex parent = QModelIndex()) | 552 int columnCount(QModelIndex parent = QModelIndex()) |
541 { | 553 { |
542 return (parent.column() > 0) ? 0 : 2; | 554 return (parent.column() > 0) ? 0 : 2; |
546 { | 558 { |
547 if (parent.column() > 0) | 559 if (parent.column() > 0) |
548 return 0; | 560 return 0; |
549 | 561 |
550 if (!parent.isValid()) | 562 if (!parent.isValid()) |
551 return m_bookmarksManager.bookmarks().children().count(); | 563 return m_bookmarksManager.bookmarks().children().length; |
552 | 564 |
553 BookmarkNode item = cast(BookmarkNode) parent.internalPointer(); | 565 BookmarkNode item = cast(BookmarkNode) parent.internalPointer(); |
554 return item.children().count(); | 566 return item.children().length; |
555 } | 567 } |
556 | 568 |
557 QModelIndex index(int row, int column, QModelIndex parent = QModelIndex()) | 569 QModelIndex index(int row, int column, QModelIndex parent = QModelIndex()) |
558 { | 570 { |
559 if (row < 0 || column < 0 || row >= rowCount(parent) || column >= columnCount(parent)) | 571 if (row < 0 || column < 0 || row >= rowCount(parent) || column >= columnCount(parent)) |
560 return QModelIndex(); | 572 return QModelIndex(); |
561 | 573 |
562 // get the parent node | 574 // get the parent node |
563 BookmarkNode parentNode = node(parent); | 575 BookmarkNode parentNode = node(parent); |
564 return createIndex(row, column, parentNode.children()[row]); | 576 return createIndex(row, column, cast(void*) parentNode.children()[row]); |
565 } | 577 } |
566 | 578 |
567 QModelIndex parent(QModelIndex index = QModelIndex()) | 579 QModelIndex parent(QModelIndex index = QModelIndex()) |
568 { | 580 { |
569 if (!index.isValid()) | 581 if (!index.isValid()) |
570 return QModelIndex(); | 582 return QModelIndex(); |
571 | 583 |
572 BookmarkNode itemNode = node(index); | 584 BookmarkNode itemNode = node(index); |
573 BookmarkNode parentNode = (itemNode ? itemNode.parent() : 0); | 585 BookmarkNode parentNode = (itemNode ? itemNode.parent() : null); |
574 if (!parentNode || parentNode == m_bookmarksManager.bookmarks()) | 586 if (!parentNode || parentNode == m_bookmarksManager.bookmarks()) |
575 return QModelIndex(); | 587 return QModelIndex(); |
576 | 588 |
577 // get the parent's row | 589 // get the parent's row |
578 BookmarkNode grandParentNode = parentNode.parent(); | 590 BookmarkNode grandParentNode = parentNode.parent(); |
579 int parentRow = grandParentNode.children().indexOf(parentNode); | 591 int parentRow = grandParentNode.children().indexOf(parentNode); |
580 assert(parentRow >= 0); | 592 assert(parentRow >= 0); |
581 return createIndex(parentRow, 0, parentNode); | 593 return createIndex(parentRow, 0, cast(void*) parentNode); |
582 } | 594 } |
583 | 595 |
584 int flags(QModelIndex index) | 596 int flags(QModelIndex index) |
585 { | 597 { |
586 if (!index.isValid()) | 598 if (!index.isValid()) |
590 | 602 |
591 BookmarkNode bookmarkNode = node(index); | 603 BookmarkNode bookmarkNode = node(index); |
592 | 604 |
593 if (bookmarkNode != m_bookmarksManager.menu() && bookmarkNode != m_bookmarksManager.toolbar()) { | 605 if (bookmarkNode != m_bookmarksManager.menu() && bookmarkNode != m_bookmarksManager.toolbar()) { |
594 flags |= Qt_ItemFlag.ItemIsDragEnabled; | 606 flags |= Qt_ItemFlag.ItemIsDragEnabled; |
595 if (bookmarkNode.type() != BookmarkNode.Separator) | 607 if (bookmarkNode.type() != BookmarkNode.Type.Separator) |
596 flags |= Qt_ItemFlag.ItemIsEditable; | 608 flags |= Qt_ItemFlag.ItemIsEditable; |
597 } | 609 } |
598 if (hasChildren(index)) | 610 if (hasChildren(index)) |
599 flags |= Qt_ItemFlag.ItemIsDropEnabled; | 611 flags |= Qt_ItemFlag.ItemIsDropEnabled; |
600 return flags; | 612 return flags; |
601 } | 613 } |
602 | 614 |
603 int supportedDropActions() | 615 int supportedDropActions() |
604 { | 616 { |
605 return Qt_DropActiont.CopyAction | Qt_DropAction.MoveAction; | 617 return Qt_DropAction.CopyAction | Qt_DropAction.MoveAction; |
606 } | 618 } |
607 | 619 |
608 bool removeRows(int row, int count, QModelIndex parent = QModelIndex()) | 620 bool removeRows(int row, int count, QModelIndex parent = QModelIndex()) |
609 { | 621 { |
610 if (row < 0 || count <= 0 || row + count > rowCount(parent)) | 622 if (row < 0 || count <= 0 || row + count > rowCount(parent)) |
631 return false; | 643 return false; |
632 | 644 |
633 BookmarkNode item = node(index); | 645 BookmarkNode item = node(index); |
634 | 646 |
635 switch (role) { | 647 switch (role) { |
636 case Qt_ItemFlag.EditRole: | 648 case Qt_ItemDataRole.EditRole: |
637 case Qt_ItemFlag.DisplayRole: | 649 case Qt_ItemDataRole.DisplayRole: |
638 if (index.column() == 0) { | 650 if (index.column() == 0) { |
639 m_bookmarksManager.setTitle(item, value.toString()); | 651 m_bookmarksManager.setTitle(item, value.toString()); |
640 break; | 652 break; |
641 } | 653 } |
642 if (index.column() == 1) { | 654 if (index.column() == 1) { |
643 m_bookmarksManager.setUrl(item, value.toString()); | 655 m_bookmarksManager.setUrl(item, value.toString()); |
644 break; | 656 break; |
645 } | 657 } |
646 return false; | 658 return false; |
647 case BookmarksModel.UrlRole: | 659 case BookmarksModel.Roles.UrlRole: |
648 m_bookmarksManager.setUrl(item, value.toUrl().toString()); | 660 m_bookmarksManager.setUrl(item, value.toUrl().toString()); |
649 break; | 661 break; |
650 case BookmarksModel.UrlStringRole: | 662 case BookmarksModel.Roles.UrlStringRole: |
651 m_bookmarksManager.setUrl(item, value.toString()); | 663 m_bookmarksManager.setUrl(item, value.toString()); |
652 break; | 664 break; |
653 default: | 665 default: |
654 break; | 666 break; |
655 return false; | 667 return false; |
670 auto buffer = new QBuffer(encodedData); | 682 auto buffer = new QBuffer(encodedData); |
671 buffer.open(QBuffer.ReadWrite); | 683 buffer.open(QBuffer.ReadWrite); |
672 auto writer = new XbelWriter; | 684 auto writer = new XbelWriter; |
673 BookmarkNode parentNode = node(index); | 685 BookmarkNode parentNode = node(index); |
674 writer.write(buffer, parentNode); | 686 writer.write(buffer, parentNode); |
675 stream << encodedData; | 687 foreach(b; encodedData.data()[0..encodedData.size()]) |
688 stream.writeByte(cast(byte) b); | |
676 } | 689 } |
677 mimeData.setData(MIMETYPE, data); | 690 mimeData.setData(MIMETYPE, data); |
678 return mimeData; | 691 return mimeData; |
679 } | 692 } |
680 | 693 |
702 undoStack.beginMacro("Move Bookmarks"); | 715 undoStack.beginMacro("Move Bookmarks"); |
703 | 716 |
704 while (!stream.atEnd()) { | 717 while (!stream.atEnd()) { |
705 auto encodedData = new QByteArray; | 718 auto encodedData = new QByteArray; |
706 stream >> encodedData; | 719 stream >> encodedData; |
720 | |
707 auto buffer = new QBuffer(encodedData); | 721 auto buffer = new QBuffer(encodedData); |
708 buffer.open(QBuffer.ReadOnly); | 722 buffer.open(QBuffer.ReadOnly); |
709 | 723 |
710 auto reader = new XbelReader; | 724 auto reader = new XbelReader; |
711 BookmarkNode rootNode = reader.read(buffer); | 725 BookmarkNode rootNode = reader.read(buffer); |
712 BookmarkNode[] children = rootNode.children(); | 726 BookmarkNode[] children = rootNode.children(); |
713 for (int i = 0; i < children.count(); ++i) { | 727 for (int i = 0; i < children.length; ++i) { |
714 BookmarkNode bookmarkNode = children[i]; | 728 BookmarkNode bookmarkNode = children[i]; |
715 rootNode.remove(bookmarkNode); | 729 rootNode.remove(bookmarkNode); |
716 row = qMax(0, row); | 730 row = qMax(0, row); |
717 BookmarkNode parentNode = node(parent); | 731 BookmarkNode parentNode = node(parent); |
718 m_bookmarksManager.addBookmark(parentNode, bookmarkNode, row); | 732 m_bookmarksManager.addBookmark(parentNode, bookmarkNode, row); |
726 bool hasChildren(QModelIndex parent = QModelIndex()) | 740 bool hasChildren(QModelIndex parent = QModelIndex()) |
727 { | 741 { |
728 if (!parent.isValid()) | 742 if (!parent.isValid()) |
729 return true; | 743 return true; |
730 const BookmarkNode parentNode = node(parent); | 744 const BookmarkNode parentNode = node(parent); |
731 return (parentNode.type() == BookmarkNode.Folder); | 745 return (parentNode.type() == BookmarkNode.Type.Folder); |
732 } | 746 } |
733 | 747 |
734 BookmarkNode node(QModelIndex index) | 748 BookmarkNode node(QModelIndex index) |
735 { | 749 { |
736 BookmarkNode itemNode = cast(BookmarkNode) index.internalPointer(); | 750 BookmarkNode itemNode = cast(BookmarkNode) index.internalPointer(); |
742 QModelIndex index(BookmarkNode node) | 756 QModelIndex index(BookmarkNode node) |
743 { | 757 { |
744 BookmarkNode parent = node.parent(); | 758 BookmarkNode parent = node.parent(); |
745 if (!parent) | 759 if (!parent) |
746 return QModelIndex(); | 760 return QModelIndex(); |
747 return createIndex(parent.children().indexOf(node), 0, node); | 761 return createIndex(indexOf(parent.children(), node), 0, cast(void*) node); |
748 } | 762 } |
749 | 763 |
750 private: | 764 private: |
751 | 765 |
752 bool m_endMacro; | 766 bool m_endMacro; |
763 public: | 777 public: |
764 | 778 |
765 this(QWidget parent = null) | 779 this(QWidget parent = null) |
766 { | 780 { |
767 super(parent); | 781 super(parent); |
768 m_bookmarksManager = 0; | 782 m_bookmarksManager = null; |
769 this.activated.connect(&this.activated); | 783 this.activated.connect(&this.activated); |
770 setMaxRows(-1); | 784 setMaxRows(-1); |
771 setHoverRole(BookmarksModel.UrlStringRole); | 785 setHoverRole(BookmarksModel.Roles.UrlStringRole); |
772 setSeparatorRole(BookmarksModel.SeparatorRole); | 786 setSeparatorRole(BookmarksModel.Roles.SeparatorRole); |
773 } | 787 } |
774 | 788 |
775 void setInitialActions(QAction[] actions) | 789 void setInitialActions(QAction[] actions) |
776 { | 790 { |
777 m_initialActions = actions; | 791 m_initialActions = actions; |
778 for (int i = 0; i < m_initialActions.count(); ++i) | 792 for (int i = 0; i < m_initialActions.length; ++i) |
779 addAction(m_initialActions[i]); | 793 addAction(m_initialActions[i]); |
780 } | 794 } |
781 | 795 |
782 protected: | 796 protected: |
783 | 797 |
785 { | 799 { |
786 m_bookmarksManager = BrowserApplication.bookmarksManager(); | 800 m_bookmarksManager = BrowserApplication.bookmarksManager(); |
787 setModel(m_bookmarksManager.bookmarksModel()); | 801 setModel(m_bookmarksManager.bookmarksModel()); |
788 setRootIndex(m_bookmarksManager.bookmarksModel().index(1, 0)); | 802 setRootIndex(m_bookmarksManager.bookmarksModel().index(1, 0)); |
789 // initial actions | 803 // initial actions |
790 for (int i = 0; i < m_initialActions.count(); ++i) | 804 for (int i = 0; i < m_initialActions.length; ++i) |
791 addAction(m_initialActions[i]); | 805 addAction(m_initialActions[i]); |
792 if (!m_initialActions.isEmpty()) | 806 if (m_initialActions.length) |
793 addSeparator(); | 807 addSeparator(); |
794 createMenu(model().index(0, 0), 1, this); | 808 createMenu(model().index(0, 0), 1, this); |
795 return true; | 809 return true; |
796 } | 810 } |
797 | 811 |
798 private: | 812 private: |
799 | 813 |
800 void activated(QModelIndex index) | 814 void activated(QModelIndex index) |
801 { | 815 { |
802 openUrl.emit(index.data(BookmarksModel.UrlRole).toUrl()); | 816 openUrl.emit(index.data(BookmarksModel.Roles.UrlRole).toUrl()); |
803 } | 817 } |
804 | 818 |
805 private: | 819 private: |
806 | 820 |
807 BookmarksManager m_bookmarksManager; | 821 BookmarksManager m_bookmarksManager; |
971 void open() | 985 void open() |
972 { | 986 { |
973 QModelIndex index = tree.currentIndex(); | 987 QModelIndex index = tree.currentIndex(); |
974 if (!index.parent().isValid()) | 988 if (!index.parent().isValid()) |
975 return; | 989 return; |
976 openUrl.emit(index.sibling(index.row(), 1).data(BookmarksModel.UrlRole).toUrl()); | 990 openUrl.emit(index.sibling(index.row(), 1).data(BookmarksModel.Roles.UrlRole).toUrl()); |
977 } | 991 } |
978 | 992 |
979 void newFolder() | 993 void newFolder() |
980 { | 994 { |
981 QModelIndex currentIndex = tree.currentIndex(); | 995 QModelIndex currentIndex = tree.currentIndex(); |
984 idx = idx.parent(); | 998 idx = idx.parent(); |
985 if (!idx.isValid()) | 999 if (!idx.isValid()) |
986 idx = tree.rootIndex(); | 1000 idx = tree.rootIndex(); |
987 idx = m_proxyModel.mapToSource(idx); | 1001 idx = m_proxyModel.mapToSource(idx); |
988 BookmarkNode parent = m_bookmarksManager.bookmarksModel().node(idx); | 1002 BookmarkNode parent = m_bookmarksManager.bookmarksModel().node(idx); |
989 BookmarkNode node = new BookmarkNode(BookmarkNode.Folder); | 1003 BookmarkNode node = new BookmarkNode(BookmarkNode.Type.Folder); |
990 node.title = tr("New Folder"); | 1004 node.title = tr("New Folder"); |
991 m_bookmarksManager.addBookmark(parent, node, currentIndex.row() + 1); | 1005 m_bookmarksManager.addBookmark(parent, node, currentIndex.row() + 1); |
992 } | 1006 } |
993 | 1007 |
994 private: | 1008 private: |
1103 BookmarkNode parent = m_bookmarksModel.node(parentIndex); | 1117 BookmarkNode parent = m_bookmarksModel.node(parentIndex); |
1104 BookmarksManager bookmarksManager = m_bookmarksModel.bookmarksManager(); | 1118 BookmarksManager bookmarksManager = m_bookmarksModel.bookmarksManager(); |
1105 bookmarksManager.addBookmark(parent, bookmark, row); | 1119 bookmarksManager.addBookmark(parent, bookmark, row); |
1106 event.acceptProposedAction(); | 1120 event.acceptProposedAction(); |
1107 } | 1121 } |
1108 QToolBar.dropEvent(event); | 1122 super.dropEvent(event); |
1109 } | 1123 } |
1110 | 1124 |
1111 private: | 1125 private: |
1112 | 1126 |
1113 void triggered(QAction action) | 1127 void triggered(QAction action) |
1118 } | 1132 } |
1119 } | 1133 } |
1120 | 1134 |
1121 void activated(QModelIndex index) | 1135 void activated(QModelIndex index) |
1122 { | 1136 { |
1123 openUrl.emit(index.data(BookmarksModel.UrlRole).toUrl()); | 1137 openUrl.emit(index.data(BookmarksModel.Roles.UrlRole).toUrl()); |
1124 } | 1138 } |
1125 | 1139 |
1126 void build() | 1140 void build() |
1127 { | 1141 { |
1128 clear(); | 1142 clear(); |
1137 menu.activated.connect(&this.activated); | 1151 menu.activated.connect(&this.activated); |
1138 menu.setModel(m_bookmarksModel); | 1152 menu.setModel(m_bookmarksModel); |
1139 menu.setRootIndex(idx); | 1153 menu.setRootIndex(idx); |
1140 menu.addAction(new QAction(menu)); | 1154 menu.addAction(new QAction(menu)); |
1141 button.setMenu(menu); | 1155 button.setMenu(menu); |
1142 button.setToolButtonStyle(Qt.ToolButtonTextOnly); | 1156 button.setToolButtonStyle(Qt_ToolButtonStyle.ToolButtonTextOnly); |
1143 QAction a = addWidget(button); | 1157 QAction a = addWidget(button); |
1144 a.setText(idx.data().toString()); | 1158 a.setText(idx.data().toString()); |
1145 } else { | 1159 } else { |
1146 QAction action = addAction(idx.data().toString()); | 1160 QAction action = addAction(idx.data().toString()); |
1147 action.setData(idx.data(BookmarksModel.UrlRole)); | 1161 action.setData(idx.data(BookmarksModel.Roles.UrlRole)); |
1148 } | 1162 } |
1149 } | 1163 } |
1150 } | 1164 } |
1151 | 1165 |
1152 private: | 1166 private: |