Mercurial > projects > qtd
comparison demos/browser/bookmarks.d @ 77:0654fc9bac95
more porting
author | mandel |
---|---|
date | Sun, 24 May 2009 13:46:32 +0000 |
parents | 37caa90ce503 |
children | 85c59c4e5f19 |
comparison
equal
deleted
inserted
replaced
76:454e4b4beb59 | 77:0654fc9bac95 |
---|---|
68 import browserapplication; | 68 import browserapplication; |
69 import history; | 69 import history; |
70 import xbel; | 70 import xbel; |
71 | 71 |
72 | 72 |
73 const char[] BOOKMARKBAR = "Bookmarks Bar"; | 73 const string BOOKMARKBAR = "Bookmarks Bar"; |
74 const char[] BOOKMARKMENU = "Bookmarks Menu"; | 74 const string BOOKMARKMENU = "Bookmarks Menu"; |
75 | 75 |
76 | 76 |
77 /*! | 77 /*! |
78 Bookmark manager, owner of the bookmarks, loads, saves and basic tasks | 78 Bookmark manager, owner of the bookmarks, loads, saves and basic tasks |
79 */ | 79 */ |
121 int row = parent.children().indexOf(node); | 121 int row = parent.children().indexOf(node); |
122 RemoveBookmarksCommand command = new RemoveBookmarksCommand(this, parent, row); | 122 RemoveBookmarksCommand command = new RemoveBookmarksCommand(this, parent, row); |
123 m_commands.push(command); | 123 m_commands.push(command); |
124 } | 124 } |
125 | 125 |
126 void setTitle(BookmarkNode node, QString newTitle) | 126 void setTitle(BookmarkNode node, string newTitle) |
127 { | 127 { |
128 if (!m_loaded) | 128 if (!m_loaded) |
129 return; | 129 return; |
130 | 130 |
131 assert(node); | 131 assert(node); |
132 ChangeBookmarkCommand command = new ChangeBookmarkCommand(this, node, newTitle, true); | 132 ChangeBookmarkCommand command = new ChangeBookmarkCommand(this, node, newTitle, true); |
133 m_commands.push(command); | 133 m_commands.push(command); |
134 } | 134 } |
135 | 135 |
136 void setUrl(BookmarkNode node, QString newUrl) | 136 void setUrl(BookmarkNode node, string newUrl) |
137 { | 137 { |
138 if (!m_loaded) | 138 if (!m_loaded) |
139 return; | 139 return; |
140 | 140 |
141 assert(node); | 141 assert(node); |
159 { | 159 { |
160 if (!m_loaded) | 160 if (!m_loaded) |
161 load(); | 161 load(); |
162 | 162 |
163 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) { | 163 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) { |
164 BookmarkNode node = m_bookmarkRootNode.children().at(i); | 164 BookmarkNode node = m_bookmarkRootNode.children()[i]; |
165 if (node.title == tr(BOOKMARKMENU)) | 165 if (node.title == tr(BOOKMARKMENU)) |
166 return node; | 166 return node; |
167 } | 167 } |
168 assert(false); | 168 assert(false); |
169 return 0; | 169 return 0; |
173 { | 173 { |
174 if (!m_loaded) | 174 if (!m_loaded) |
175 load(); | 175 load(); |
176 | 176 |
177 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) { | 177 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) { |
178 BookmarkNode node = m_bookmarkRootNode.children().at(i); | 178 BookmarkNode node = m_bookmarkRootNode.children()[i]; |
179 if (node.title == tr(BOOKMARKBAR)) | 179 if (node.title == tr(BOOKMARKBAR)) |
180 return node; | 180 return node; |
181 } | 181 } |
182 assert(false); | 182 assert(false); |
183 return 0; | 183 return 0; |
194 | 194 |
195 public: | 195 public: |
196 | 196 |
197 void importBookmarks() | 197 void importBookmarks() |
198 { | 198 { |
199 QString fileName = QFileDialog.getOpenFileName(0, tr("Open File"), QString(), tr("XBEL (*.xbel *.xml)")); | 199 string fileName = QFileDialog.getOpenFileName(0, tr("Open File"), null, tr("XBEL (*.xbel *.xml)")); |
200 if (fileName.isEmpty()) | 200 if (fileName.isEmpty()) |
201 return; | 201 return; |
202 | 202 |
203 XbelReader reader; | 203 XbelReader reader; |
204 BookmarkNode importRootNode = reader.read(fileName); | 204 BookmarkNode importRootNode = reader.read(fileName); |
214 } | 214 } |
215 | 215 |
216 | 216 |
217 void exportBookmarks() | 217 void exportBookmarks() |
218 { | 218 { |
219 QString fileName = QFileDialog.getSaveFileName(0, tr("Save File"), | 219 string fileName = QFileDialog.getSaveFileName(0, tr("Save File"), |
220 tr("%1 Bookmarks.xbel").arg(QCoreApplication.applicationName()), | 220 tr("%1 Bookmarks.xbel").arg(QCoreApplication.applicationName()), |
221 tr("XBEL (*.xbel *.xml)")); | 221 tr("XBEL (*.xbel *.xml)")); |
222 if (fileName.isEmpty()) | 222 if (fileName.isEmpty()) |
223 return; | 223 return; |
224 | 224 |
233 { | 233 { |
234 if (!m_loaded) | 234 if (!m_loaded) |
235 return; | 235 return; |
236 | 236 |
237 XbelWriter writer; | 237 XbelWriter writer; |
238 QString dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation); | 238 string dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation); |
239 QString bookmarkFile = dir + QLatin1String("/bookmarks.xbel"); | 239 string bookmarkFile = dir + QLatin1String("/bookmarks.xbel"); |
240 if (!writer.write(bookmarkFile, m_bookmarkRootNode)) | 240 if (!writer.write(bookmarkFile, m_bookmarkRootNode)) |
241 qWarning() << "BookmarkManager: error saving to" << bookmarkFile; | 241 qWarning() << "BookmarkManager: error saving to" << bookmarkFile; |
242 } | 242 } |
243 | 243 |
244 private: | 244 private: |
247 { | 247 { |
248 if (m_loaded) | 248 if (m_loaded) |
249 return; | 249 return; |
250 m_loaded = true; | 250 m_loaded = true; |
251 | 251 |
252 QString dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation); | 252 string dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation); |
253 QString bookmarkFile = dir + QLatin1String("/bookmarks.xbel"); | 253 string bookmarkFile = dir ~ QLatin1String("/bookmarks.xbel"); |
254 if (!QFile.exists(bookmarkFile)) | 254 if (!QFile.exists(bookmarkFile)) |
255 bookmarkFile = QLatin1String(":defaultbookmarks.xbel"); | 255 bookmarkFile = QLatin1String(":defaultbookmarks.xbel"); |
256 | 256 |
257 XbelReader reader; | 257 XbelReader reader; |
258 m_bookmarkRootNode = reader.read(bookmarkFile); | 258 m_bookmarkRootNode = reader.read(bookmarkFile); |
264 | 264 |
265 BookmarkNode toolbar = null; | 265 BookmarkNode toolbar = null; |
266 BookmarkNode menu = null; | 266 BookmarkNode menu = null; |
267 BookmarkNode[] others; | 267 BookmarkNode[] others; |
268 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) { | 268 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) { |
269 BookmarkNode node = m_bookmarkRootNode.children().at(i); | 269 BookmarkNode node = m_bookmarkRootNode.children()[i]; |
270 if (node.type() == BookmarkNode.Folder) { | 270 if (node.type() == BookmarkNode.Folder) { |
271 // Automatically convert | 271 // Automatically convert |
272 if (node.title == tr("Toolbar Bookmarks") && !toolbar) { | 272 if (node.title == tr("Toolbar Bookmarks") && !toolbar) { |
273 node.title = tr(BOOKMARKBAR); | 273 node.title = tr(BOOKMARKBAR); |
274 } | 274 } |
282 } | 282 } |
283 if (node.title == tr(BOOKMARKMENU) && !menu) { | 283 if (node.title == tr(BOOKMARKMENU) && !menu) { |
284 menu = node; | 284 menu = node; |
285 } | 285 } |
286 } else { | 286 } else { |
287 others.append(node); | 287 others ~= node; |
288 } | 288 } |
289 m_bookmarkRootNode.remove(node); | 289 m_bookmarkRootNode.remove(node); |
290 } | 290 } |
291 assert(m_bookmarkRootNode.children().count() == 0); | 291 assert(m_bookmarkRootNode.children().count() == 0); |
292 if (!toolbar) { | 292 if (!toolbar) { |
301 menu.title = tr(BOOKMARKMENU); | 301 menu.title = tr(BOOKMARKMENU); |
302 } else { | 302 } else { |
303 m_bookmarkRootNode.add(menu); | 303 m_bookmarkRootNode.add(menu); |
304 } | 304 } |
305 | 305 |
306 for (int i = 0; i < others.count(); ++i) | 306 for (int i = 0; i < others.length; ++i) |
307 menu.add(others.at(i)); | 307 menu.add(others[i]); |
308 } | 308 } |
309 | 309 |
310 bool m_loaded; | 310 bool m_loaded; |
311 AutoSaver m_saveTimer; | 311 AutoSaver m_saveTimer; |
312 BookmarkNode m_bookmarkRootNode; | 312 BookmarkNode m_bookmarkRootNode; |
375 | 375 |
376 class ChangeBookmarkCommand : public QUndoCommand | 376 class ChangeBookmarkCommand : public QUndoCommand |
377 { | 377 { |
378 public: | 378 public: |
379 | 379 |
380 this(BookmarksManager m_bookmarkManagaer, BookmarkNode node, QString newValue, bool title) | 380 this(BookmarksManager m_bookmarkManagaer, BookmarkNode node, string newValue, bool title) |
381 { | 381 { |
382 super(); | 382 super(); |
383 m_bookmarkManagaer = m_bookmarkManagaer; | 383 m_bookmarkManagaer = m_bookmarkManagaer; |
384 m_title = title; | 384 m_title = title; |
385 m_newValue = newValue; | 385 m_newValue = newValue; |
413 | 413 |
414 private: | 414 private: |
415 | 415 |
416 BookmarksManager m_bookmarkManagaer; | 416 BookmarksManager m_bookmarkManagaer; |
417 bool m_title; | 417 bool m_title; |
418 QString m_oldValue; | 418 string m_oldValue; |
419 QString m_newValue; | 419 string m_newValue; |
420 BookmarkNode m_node; | 420 BookmarkNode m_node; |
421 } | 421 } |
422 | 422 |
423 /*! | 423 /*! |
424 BookmarksModel is a QAbstractItemModel wrapper around the BookmarkManager | 424 BookmarksModel is a QAbstractItemModel wrapper around the BookmarkManager |
492 } | 492 } |
493 | 493 |
494 QVariant data(QModelIndex index, int role = Qt.DisplayRole) | 494 QVariant data(QModelIndex index, int role = Qt.DisplayRole) |
495 { | 495 { |
496 if (!index.isValid() || index.model() != this) | 496 if (!index.isValid() || index.model() != this) |
497 return QVariant(); | 497 return QVariant(); |
498 | 498 |
499 BookmarkNode bookmarkNode = node(index); | 499 BookmarkNode bookmarkNode = node(index); |
500 switch (role) { | 500 switch (role) { |
501 case Qt.EditRole: | 501 case Qt.EditRole: |
502 case Qt.DisplayRole: | 502 case Qt.DisplayRole: |
557 if (row < 0 || column < 0 || row >= rowCount(parent) || column >= columnCount(parent)) | 557 if (row < 0 || column < 0 || row >= rowCount(parent) || column >= columnCount(parent)) |
558 return QModelIndex(); | 558 return QModelIndex(); |
559 | 559 |
560 // get the parent node | 560 // get the parent node |
561 BookmarkNode parentNode = node(parent); | 561 BookmarkNode parentNode = node(parent); |
562 return createIndex(row, column, parentNode.children().at(row)); | 562 return createIndex(row, column, parentNode.children()[row]); |
563 } | 563 } |
564 | 564 |
565 QModelIndex parent(QModelIndex index = QModelIndex()) | 565 QModelIndex parent(QModelIndex index = QModelIndex()) |
566 { | 566 { |
567 if (!index.isValid()) | 567 if (!index.isValid()) |
608 if (row < 0 || count <= 0 || row + count > rowCount(parent)) | 608 if (row < 0 || count <= 0 || row + count > rowCount(parent)) |
609 return false; | 609 return false; |
610 | 610 |
611 BookmarkNode bookmarkNode = node(parent); | 611 BookmarkNode bookmarkNode = node(parent); |
612 for (int i = row + count - 1; i >= row; --i) { | 612 for (int i = row + count - 1; i >= row; --i) { |
613 BookmarkNode node = bookmarkNode.children().at(i); | 613 BookmarkNode node = bookmarkNode.children()[i]; |
614 if (node == m_bookmarksManager.menu() || node == m_bookmarksManager.toolbar()) | 614 if (node == m_bookmarksManager.menu() || node == m_bookmarksManager.toolbar()) |
615 continue; | 615 continue; |
616 | 616 |
617 m_bookmarksManager.removeBookmark(node); | 617 m_bookmarksManager.removeBookmark(node); |
618 } | 618 } |
674 } | 674 } |
675 mimeData.setData(MIMETYPE, data); | 675 mimeData.setData(MIMETYPE, data); |
676 return mimeData; | 676 return mimeData; |
677 } | 677 } |
678 | 678 |
679 const char[] MIMETYPE = QLatin1String("application/bookmarks.xbel"); | 679 const string MIMETYPE = QLatin1String("application/bookmarks.xbel"); |
680 | 680 |
681 QStringList mimeTypes() | 681 string[] mimeTypes() |
682 { | 682 { |
683 QStringList types; | 683 return [ MIMETYPE ]; |
684 types << MIMETYPE; | |
685 return types; | |
686 } | 684 } |
687 | 685 |
688 bool dropMimeData(QMimeData data, Qt.DropAction action, int row, int column, QModelIndex parent) | 686 bool dropMimeData(QMimeData data, Qt.DropAction action, int row, int column, QModelIndex parent) |
689 { | 687 { |
690 if (action == Qt.IgnoreAction) | 688 if (action == Qt.IgnoreAction) |
709 | 707 |
710 XbelReader reader; | 708 XbelReader reader; |
711 BookmarkNode rootNode = reader.read(&buffer); | 709 BookmarkNode rootNode = reader.read(&buffer); |
712 BookmarkNode[] children = rootNode.children(); | 710 BookmarkNode[] children = rootNode.children(); |
713 for (int i = 0; i < children.count(); ++i) { | 711 for (int i = 0; i < children.count(); ++i) { |
714 BookmarkNode bookmarkNode = children.at(i); | 712 BookmarkNode bookmarkNode = children[i]; |
715 rootNode.remove(bookmarkNode); | 713 rootNode.remove(bookmarkNode); |
716 row = qMax(0, row); | 714 row = qMax(0, row); |
717 BookmarkNode parentNode = node(parent); | 715 BookmarkNode parentNode = node(parent); |
718 m_bookmarksManager.addBookmark(parentNode, bookmarkNode, row); | 716 m_bookmarksManager.addBookmark(parentNode, bookmarkNode, row); |
719 m_endMacro = true; | 717 m_endMacro = true; |
774 | 772 |
775 void setInitialActions(QAction[] actions) | 773 void setInitialActions(QAction[] actions) |
776 { | 774 { |
777 m_initialActions = actions; | 775 m_initialActions = actions; |
778 for (int i = 0; i < m_initialActions.count(); ++i) | 776 for (int i = 0; i < m_initialActions.count(); ++i) |
779 addAction(m_initialActions.at(i)); | 777 addAction(m_initialActions[i]); |
780 } | 778 } |
781 | 779 |
782 protected: | 780 protected: |
783 | 781 |
784 bool prePopulated() | 782 bool prePopulated() |
786 m_bookmarksManager = BrowserApplication.bookmarksManager(); | 784 m_bookmarksManager = BrowserApplication.bookmarksManager(); |
787 setModel(m_bookmarksManager.bookmarksModel()); | 785 setModel(m_bookmarksManager.bookmarksModel()); |
788 setRootIndex(m_bookmarksManager.bookmarksModel().index(1, 0)); | 786 setRootIndex(m_bookmarksManager.bookmarksModel().index(1, 0)); |
789 // initial actions | 787 // initial actions |
790 for (int i = 0; i < m_initialActions.count(); ++i) | 788 for (int i = 0; i < m_initialActions.count(); ++i) |
791 addAction(m_initialActions.at(i)); | 789 addAction(m_initialActions[i]); |
792 if (!m_initialActions.isEmpty()) | 790 if (!m_initialActions.isEmpty()) |
793 addSeparator(); | 791 addSeparator(); |
794 createMenu(model().index(0, 0), 1, this); | 792 createMenu(model().index(0, 0), 1, this); |
795 return true; | 793 return true; |
796 } | 794 } |
845 | 843 |
846 class AddBookmarkDialog : public QDialog, public Ui_AddBookmarkDialog | 844 class AddBookmarkDialog : public QDialog, public Ui_AddBookmarkDialog |
847 { | 845 { |
848 public: | 846 public: |
849 | 847 |
850 this(QString url, QString title, QWidget parent = null, BookmarksManager bookmarkManager = null) | 848 this(string url, string title, QWidget parent = null, BookmarksManager bookmarkManager = null) |
851 //: QDialog(parent) | 849 //: QDialog(parent) |
852 { | 850 { |
853 m_url = url; | 851 m_url = url; |
854 m_bookmarksManager = bookmarkManager; | 852 m_bookmarksManager = bookmarkManager; |
855 | 853 |
894 QDialog.accept(); | 892 QDialog.accept(); |
895 } | 893 } |
896 | 894 |
897 private: | 895 private: |
898 | 896 |
899 QString m_url; | 897 string m_url; |
900 BookmarksManager m_bookmarksManager; | 898 BookmarksManager m_bookmarksManager; |
901 AddBookmarkProxyModel m_proxyModel; | 899 AddBookmarkProxyModel m_proxyModel; |
902 } | 900 } |
903 | 901 |
904 import ui_bookmarks; | 902 import ui_bookmarks; |
951 | 949 |
952 private: | 950 private: |
953 | 951 |
954 void customContextMenuRequested(QPoint pos) | 952 void customContextMenuRequested(QPoint pos) |
955 { | 953 { |
956 QMenu menu; | 954 auto menu = new QMenu; |
957 QModelIndex index = tree.indexAt(pos); | 955 QModelIndex index = tree.indexAt(pos); |
958 index = index.sibling(index.row(), 0); | 956 index = index.sibling(index.row(), 0); |
959 if (index.isValid() && !tree.model().hasChildren(index)) { | 957 if (index.isValid() && !tree.model().hasChildren(index)) { |
960 menu.addAction(tr("Open"), this, SLOT(open())); | 958 menu.addAction(tr("Open"), this, SLOT(open())); |
961 menu.addSeparator(); | 959 menu.addSeparator(); |
1061 | 1059 |
1062 protected: | 1060 protected: |
1063 | 1061 |
1064 void dragEnterEvent(QDragEnterEvent event) | 1062 void dragEnterEvent(QDragEnterEvent event) |
1065 { | 1063 { |
1066 const QMimeData mimeData = event.mimeData(); | 1064 QMimeData mimeData = event.mimeData(); |
1067 if (mimeData.hasUrls()) | 1065 if (mimeData.hasUrls()) |
1068 event.acceptProposedAction(); | 1066 event.acceptProposedAction(); |
1069 QToolBar.dragEnterEvent(event); | 1067 QToolBar.dragEnterEvent(event); |
1070 } | 1068 } |
1071 | 1069 |
1072 void dropEvent(QDropEvent event) | 1070 void dropEvent(QDropEvent event) |
1073 { | 1071 { |
1074 const QMimeData mimeData = event.mimeData(); | 1072 QMimeData mimeData = event.mimeData(); |
1075 if (mimeData.hasUrls() && mimeData.hasText()) { | 1073 if (mimeData.hasUrls() && mimeData.hasText()) { |
1076 QUrl[] urls = mimeData.urls(); | 1074 QUrl[] urls = mimeData.urls(); |
1077 QAction action = actionAt(event.pos()); | 1075 QAction action = actionAt(event.pos()); |
1078 QString dropText; | 1076 string dropText; |
1079 if (action) | 1077 if (action) |
1080 dropText = action.text(); | 1078 dropText = action.text(); |
1081 int row = -1; | 1079 int row = -1; |
1082 QModelIndex parentIndex = m_root; | 1080 QModelIndex parentIndex = m_root; |
1083 for (int i = 0; i < m_bookmarksModel.rowCount(m_root); ++i) { | 1081 for (int i = 0; i < m_bookmarksModel.rowCount(m_root); ++i) { |
1084 QModelIndex idx = m_bookmarksModel.index(i, 0, m_root); | 1082 QModelIndex idx = m_bookmarksModel.index(i, 0, m_root); |
1085 QString title = idx.data().toString(); | 1083 string title = idx.data().toString(); |
1086 if (title == dropText) { | 1084 if (title == dropText) { |
1087 row = i; | 1085 row = i; |
1088 if (m_bookmarksModel.hasChildren(idx)) { | 1086 if (m_bookmarksModel.hasChildren(idx)) { |
1089 parentIndex = idx; | 1087 parentIndex = idx; |
1090 row = -1; | 1088 row = -1; |
1091 } | 1089 } |
1092 break; | 1090 break; |
1093 } | 1091 } |
1094 } | 1092 } |
1095 BookmarkNode bookmark = new BookmarkNode(BookmarkNode.Bookmark); | 1093 BookmarkNode bookmark = new BookmarkNode(BookmarkNode.Bookmark); |
1096 bookmark.url = urls.at(0).toString(); | 1094 bookmark.url = urls[0].toString(); |
1097 bookmark.title = mimeData.text(); | 1095 bookmark.title = mimeData.text(); |
1098 | 1096 |
1099 BookmarkNode parent = m_bookmarksModel.node(parentIndex); | 1097 BookmarkNode parent = m_bookmarksModel.node(parentIndex); |
1100 BookmarksManager bookmarksManager = m_bookmarksModel.bookmarksManager(); | 1098 BookmarksManager bookmarksManager = m_bookmarksModel.bookmarksManager(); |
1101 bookmarksManager.addBookmark(parent, bookmark, row); | 1099 bookmarksManager.addBookmark(parent, bookmark, row); |