annotate demos/browser/bookmarks.d @ 381:347e4c7a9ba1

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