Mercurial > projects > qtd
comparison demos/browser/bookmarks.d @ 113:8636c819ce4d
more porting
author | mandel |
---|---|
date | Wed, 03 Jun 2009 14:35:25 +0000 |
parents | dcd36d8db2da |
children | 4320ed0343dd |
comparison
equal
deleted
inserted
replaced
112:e416c5215366 | 113:8636c819ce4d |
---|---|
55 import qt.gui.QFileDialog; | 55 import qt.gui.QFileDialog; |
56 import qt.gui.QHeaderView; | 56 import qt.gui.QHeaderView; |
57 import qt.gui.QIcon; | 57 import qt.gui.QIcon; |
58 import qt.gui.QMessageBox; | 58 import qt.gui.QMessageBox; |
59 import qt.gui.QToolButton; | 59 import qt.gui.QToolButton; |
60 import qt.gui.QTreeView; | |
60 import qt.xml.QXmlStreamReader; | 61 import qt.xml.QXmlStreamReader; |
61 import qt.webkit.QWebSettings; | 62 import qt.webkit.QWebSettings; |
62 | 63 |
63 import tango.text.convert.Format; | 64 import tango.text.convert.Format; |
64 | 65 |
65 //import qt.core.QDebug; | 66 //import qt.core.QDebug; |
66 | 67 |
67 import bookmarks; | |
68 import autosaver; | 68 import autosaver; |
69 import browserapplication; | 69 import browserapplication; |
70 import history; | 70 import history; |
71 import xbel; | 71 import xbel; |
72 | 72 |
538 case BookmarksModel.Roles.SeparatorRole: | 538 case BookmarksModel.Roles.SeparatorRole: |
539 return new QVariant(bookmarkNode.type() == BookmarkNode.Type.Separator); | 539 return new QVariant(bookmarkNode.type() == BookmarkNode.Type.Separator); |
540 break; | 540 break; |
541 case Qt_ItemDataRole.DecorationRole: | 541 case Qt_ItemDataRole.DecorationRole: |
542 if (index.column() == 0) { | 542 if (index.column() == 0) { |
543 //TODO: is cast(void*) ok? | |
543 if (bookmarkNode.type() == BookmarkNode.Type.Folder) | 544 if (bookmarkNode.type() == BookmarkNode.Type.Folder) |
544 return new QVariant(QApplication.style().standardIcon(QStyle.SP_DirIcon)); | 545 return new QVariant(cast(void*) QApplication.style().standardIcon(QStyle.SP_DirIcon)); |
545 return new QVariant(BrowserApplication.instance().icon(bookmarkNode.url)); | 546 return new QVariant(cast(void*) BrowserApplication.instance().icon(new QUrl(bookmarkNode.url))); |
546 } | 547 } |
547 } | 548 } |
548 | 549 |
549 return new QVariant(); | 550 return new QVariant(); |
550 } | 551 } |
714 QUndoStack undoStack = m_bookmarksManager.undoRedoStack(); | 715 QUndoStack undoStack = m_bookmarksManager.undoRedoStack(); |
715 undoStack.beginMacro("Move Bookmarks"); | 716 undoStack.beginMacro("Move Bookmarks"); |
716 | 717 |
717 while (!stream.atEnd()) { | 718 while (!stream.atEnd()) { |
718 auto encodedData = new QByteArray; | 719 auto encodedData = new QByteArray; |
719 stream >> encodedData; | 720 //stream >> encodedData; //TODO |
720 | 721 |
721 auto buffer = new QBuffer(encodedData); | 722 auto buffer = new QBuffer(encodedData); |
722 buffer.open(QBuffer.ReadOnly); | 723 buffer.open(QBuffer.ReadOnly); |
723 | 724 |
724 auto reader = new XbelReader; | 725 auto reader = new XbelReader; |
739 | 740 |
740 bool hasChildren(QModelIndex parent = QModelIndex()) | 741 bool hasChildren(QModelIndex parent = QModelIndex()) |
741 { | 742 { |
742 if (!parent.isValid()) | 743 if (!parent.isValid()) |
743 return true; | 744 return true; |
744 const BookmarkNode parentNode = node(parent); | 745 BookmarkNode parentNode = node(parent); |
745 return (parentNode.type() == BookmarkNode.Type.Folder); | 746 return (parentNode.type() == BookmarkNode.Type.Folder); |
746 } | 747 } |
747 | 748 |
748 BookmarkNode node(QModelIndex index) | 749 BookmarkNode node(QModelIndex index) |
749 { | 750 { |
778 | 779 |
779 this(QWidget parent = null) | 780 this(QWidget parent = null) |
780 { | 781 { |
781 super(parent); | 782 super(parent); |
782 m_bookmarksManager = null; | 783 m_bookmarksManager = null; |
783 this.activated.connect(&this.activated); | 784 this.activated.connect(&this.activatedIndex); |
784 setMaxRows(-1); | 785 setMaxRows(-1); |
785 setHoverRole(BookmarksModel.Roles.UrlStringRole); | 786 setHoverRole(BookmarksModel.Roles.UrlStringRole); |
786 setSeparatorRole(BookmarksModel.Roles.SeparatorRole); | 787 setSeparatorRole(BookmarksModel.Roles.SeparatorRole); |
787 } | 788 } |
788 | 789 |
809 return true; | 810 return true; |
810 } | 811 } |
811 | 812 |
812 private: | 813 private: |
813 | 814 |
814 void activated(QModelIndex index) | 815 void activatedIndex(QModelIndex index) |
815 { | 816 { |
816 openUrl.emit(index.data(BookmarksModel.Roles.UrlRole).toUrl()); | 817 openUrl.emit(index.data(BookmarksModel.Roles.UrlRole).toUrl()); |
817 } | 818 } |
818 | 819 |
819 private: | 820 private: |
857 | 858 |
858 import ui_addbookmarkdialog; | 859 import ui_addbookmarkdialog; |
859 | 860 |
860 class AddBookmarkDialog : public QDialog //, public Ui_AddBookmarkDialog | 861 class AddBookmarkDialog : public QDialog //, public Ui_AddBookmarkDialog |
861 { | 862 { |
862 AddBookmarkDialog ui; | 863 mixin Ui_AddBookmarkDialog; |
863 | 864 |
864 public: | 865 public: |
865 | 866 |
866 this(string url, string title, QWidget parent = null, BookmarksManager bookmarkManager = null) | 867 this(string url, string title, QWidget parent = null, BookmarksManager bookmarkManager = null) |
867 { | 868 { |
870 m_bookmarksManager = bookmarkManager; | 871 m_bookmarksManager = bookmarkManager; |
871 | 872 |
872 setWindowFlags(Qt.Sheet); | 873 setWindowFlags(Qt.Sheet); |
873 if (!m_bookmarksManager) | 874 if (!m_bookmarksManager) |
874 m_bookmarksManager = BrowserApplication.bookmarksManager(); | 875 m_bookmarksManager = BrowserApplication.bookmarksManager(); |
875 ui.setupUi(this); | 876 setupUi(this); |
876 QTreeView view = new QTreeView(this); | 877 auto view = new QTreeView(this); |
877 m_proxyModel = new AddBookmarkProxyModel(this); | 878 m_proxyModel = new AddBookmarkProxyModel(this); |
878 BookmarksModel model = m_bookmarksManager.bookmarksModel(); | 879 BookmarksModel model = m_bookmarksManager.bookmarksModel(); |
879 m_proxyModel.setSourceModel(model); | 880 m_proxyModel.setSourceModel(model); |
880 view.setModel(m_proxyModel); | 881 view.setModel(m_proxyModel); |
881 view.expandAll(); | 882 view.expandAll(); |
901 QModelIndex index = location.view().currentIndex(); | 902 QModelIndex index = location.view().currentIndex(); |
902 index = m_proxyModel.mapToSource(index); | 903 index = m_proxyModel.mapToSource(index); |
903 if (!index.isValid()) | 904 if (!index.isValid()) |
904 index = m_bookmarksManager.bookmarksModel().index(0, 0); | 905 index = m_bookmarksManager.bookmarksModel().index(0, 0); |
905 BookmarkNode parent = m_bookmarksManager.bookmarksModel().node(index); | 906 BookmarkNode parent = m_bookmarksManager.bookmarksModel().node(index); |
906 BookmarkNode bookmark = new BookmarkNode(BookmarkNode.Bookmark); | 907 BookmarkNode bookmark = new BookmarkNode(BookmarkNode.Type.Bookmark); |
907 bookmark.url = m_url; | 908 bookmark.url = m_url; |
908 bookmark.title = name.text(); | 909 bookmark.title = name.text(); |
909 m_bookmarksManager.addBookmark(parent, bookmark); | 910 m_bookmarksManager.addBookmark(parent, bookmark); |
910 QDialog.accept(); | 911 QDialog.accept(); |
911 } | 912 } |
920 import ui_bookmarks; | 921 import ui_bookmarks; |
921 | 922 |
922 //class TreeProxyModel; | 923 //class TreeProxyModel; |
923 class BookmarksDialog : public QDialog //, public Ui_BookmarksDialog | 924 class BookmarksDialog : public QDialog //, public Ui_BookmarksDialog |
924 { | 925 { |
925 BookmarksDialog ui; | 926 mixin Ui_BookmarksDialog; |
926 | 927 |
927 mixin Signal!("openUrl", QUrl /*url*/); | 928 mixin Signal!("openUrl", QUrl /*url*/); |
928 | 929 |
929 public: | 930 public: |
930 | 931 |
932 { | 933 { |
933 super(parent); | 934 super(parent); |
934 m_bookmarksManager = manager; | 935 m_bookmarksManager = manager; |
935 if (!m_bookmarksManager) | 936 if (!m_bookmarksManager) |
936 m_bookmarksManager = BrowserApplication.bookmarksManager(); | 937 m_bookmarksManager = BrowserApplication.bookmarksManager(); |
937 ui.setupUi(this); | 938 setupUi(this); |
938 | 939 |
939 tree.setUniformRowHeights(true); | 940 tree.setUniformRowHeights(true); |
940 tree.setSelectionBehavior(QAbstractItemView.SelectRows); | 941 tree.setSelectionBehavior(QAbstractItemView.SelectRows); |
941 tree.setSelectionMode(QAbstractItemView.ContiguousSelection); | 942 tree.setSelectionMode(QAbstractItemView.ContiguousSelection); |
942 tree.setTextElideMode(Qt.ElideMiddle); | 943 tree.setTextElideMode(Qt.ElideMiddle); |
948 tree.setModel(m_proxyModel); | 949 tree.setModel(m_proxyModel); |
949 tree.setDragDropMode(QAbstractItemView.InternalMove); | 950 tree.setDragDropMode(QAbstractItemView.InternalMove); |
950 tree.setExpanded(m_proxyModel.index(0, 0), true); | 951 tree.setExpanded(m_proxyModel.index(0, 0), true); |
951 tree.setAlternatingRowColors(true); | 952 tree.setAlternatingRowColors(true); |
952 auto fm = new QFontMetrics(font()); | 953 auto fm = new QFontMetrics(font()); |
953 int header = fm.width(QLatin1Char('m')) * 40; | 954 int header = fm.width("m") * 40; |
954 tree.header().resizeSection(0, header); | 955 tree.header().resizeSection(0, header); |
955 tree.header().setStretchLastSection(true); | 956 tree.header().setStretchLastSection(true); |
956 tree.activated.connect(&this.open); | 957 tree.activated.connect(&this.open); |
957 tree.setContextMenuPolicy(Qt.CustomContextMenu); | 958 tree.setContextMenuPolicy(Qt.CustomContextMenu); |
958 tree.customContextMenuRequested.connect(&this.customContextMenuRequested); | 959 tree.customContextMenuRequested.connect(&this.customContextMenuRequested); |
973 { | 974 { |
974 auto menu = new QMenu; | 975 auto menu = new QMenu; |
975 QModelIndex index = tree.indexAt(pos); | 976 QModelIndex index = tree.indexAt(pos); |
976 index = index.sibling(index.row(), 0); | 977 index = index.sibling(index.row(), 0); |
977 if (index.isValid() && !tree.model().hasChildren(index)) { | 978 if (index.isValid() && !tree.model().hasChildren(index)) { |
978 menu.addAction(tr("Open"), this, SLOT(open())); | 979 auto action = new QAction(tr("Open"), this); |
980 action.triggered.connect(&this.open); | |
981 menu.addAction(action); | |
979 menu.addSeparator(); | 982 menu.addSeparator(); |
980 } | 983 } |
981 menu.addAction(tr("Delete"), tree, SLOT(removeOne())); | 984 auto action = new QAction(tr("Delete"), this); |
985 action.triggered.connect(&tree.removeOne); | |
986 menu.addAction(action); | |
982 menu.exec(QCursor.pos()); | 987 menu.exec(QCursor.pos()); |
983 } | 988 } |
984 | 989 |
985 void open() | 990 void open() |
986 { | 991 { |
1006 } | 1011 } |
1007 | 1012 |
1008 private: | 1013 private: |
1009 void expandNodes(BookmarkNode node) | 1014 void expandNodes(BookmarkNode node) |
1010 { | 1015 { |
1011 for (int i = 0; i < node.children().count(); ++i) { | 1016 for (int i = 0; i < node.children().length; ++i) { |
1012 BookmarkNode childNode = node.children()[i]; | 1017 BookmarkNode childNode = node.children()[i]; |
1013 if (childNode.expanded) { | 1018 if (childNode.expanded) { |
1014 QModelIndex idx = m_bookmarksModel.index(childNode); | 1019 QModelIndex idx = m_bookmarksModel.index(childNode); |
1015 idx = m_proxyModel.mapFromSource(idx); | 1020 idx = m_proxyModel.mapFromSource(idx); |
1016 tree.setExpanded(idx, true); | 1021 tree.setExpanded(idx, true); |
1047 import qt.gui.QToolBar; | 1052 import qt.gui.QToolBar; |
1048 | 1053 |
1049 | 1054 |
1050 class BookmarksToolBar : public QToolBar | 1055 class BookmarksToolBar : public QToolBar |
1051 { | 1056 { |
1052 mixin Signal!("openUrl", QUrl /*url*/); | 1057 mixin Signal!("openUrl", QUrl /*url*/); |
1053 | 1058 |
1054 public: | 1059 public: |
1055 | 1060 |
1056 this(BookmarksModel model, QWidget parent = null) | 1061 this(BookmarksModel model, QWidget parent = null) |
1057 { | 1062 { |
1082 void dragEnterEvent(QDragEnterEvent event) | 1087 void dragEnterEvent(QDragEnterEvent event) |
1083 { | 1088 { |
1084 QMimeData mimeData = event.mimeData(); | 1089 QMimeData mimeData = event.mimeData(); |
1085 if (mimeData.hasUrls()) | 1090 if (mimeData.hasUrls()) |
1086 event.acceptProposedAction(); | 1091 event.acceptProposedAction(); |
1087 QToolBar.dragEnterEvent(event); | 1092 super.dragEnterEvent(event); |
1088 } | 1093 } |
1089 | 1094 |
1090 void dropEvent(QDropEvent event) | 1095 void dropEvent(QDropEvent event) |
1091 { | 1096 { |
1092 QMimeData mimeData = event.mimeData(); | 1097 QMimeData mimeData = event.mimeData(); |
1108 row = -1; | 1113 row = -1; |
1109 } | 1114 } |
1110 break; | 1115 break; |
1111 } | 1116 } |
1112 } | 1117 } |
1113 BookmarkNode bookmark = new BookmarkNode(BookmarkNode.Bookmark); | 1118 BookmarkNode bookmark = new BookmarkNode(BookmarkNode.Type.Bookmark); |
1114 bookmark.url = urls[0].toString(); | 1119 bookmark.url = urls[0].toString(); |
1115 bookmark.title = mimeData.text(); | 1120 bookmark.title = mimeData.text(); |
1116 | 1121 |
1117 BookmarkNode parent = m_bookmarksModel.node(parentIndex); | 1122 BookmarkNode parent = m_bookmarksModel.node(parentIndex); |
1118 BookmarksManager bookmarksManager = m_bookmarksModel.bookmarksManager(); | 1123 BookmarksManager bookmarksManager = m_bookmarksModel.bookmarksManager(); |
1125 private: | 1130 private: |
1126 | 1131 |
1127 void triggered(QAction action) | 1132 void triggered(QAction action) |
1128 { | 1133 { |
1129 QVariant v = action.data(); | 1134 QVariant v = action.data(); |
1130 if (v.canConvert!(QUrl)()) { | 1135 if (v.canConvert(QVariant.Type.Url)) { |
1131 openUrl.emit(v.toUrl()); | 1136 openUrl.emit(v.toUrl()); |
1132 } | 1137 } |
1133 } | 1138 } |
1134 | 1139 |
1135 void activated(QModelIndex index) | 1140 void activated(QModelIndex index) |
1164 } | 1169 } |
1165 | 1170 |
1166 private: | 1171 private: |
1167 | 1172 |
1168 BookmarksModel m_bookmarksModel; | 1173 BookmarksModel m_bookmarksModel; |
1169 QPersistentModelIndex m_root; | 1174 /*TODO: needed? QPersistentModelIndex*/ QModelIndex m_root; |
1170 } | 1175 } |