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);