7 Module implementing the bookmark model class. |
7 Module implementing the bookmark model class. |
8 """ |
8 """ |
9 |
9 |
10 from PyQt4.QtCore import Qt, QAbstractItemModel, QModelIndex, QUrl, QByteArray, \ |
10 from PyQt4.QtCore import Qt, QAbstractItemModel, QModelIndex, QUrl, QByteArray, \ |
11 QDataStream, QIODevice, QBuffer, QMimeData |
11 QDataStream, QIODevice, QBuffer, QMimeData |
12 |
|
13 from .BookmarkNode import BookmarkNode |
|
14 from .XbelWriter import XbelWriter |
|
15 from .XbelReader import XbelReader |
|
16 |
|
17 import Helpviewer.HelpWindow |
|
18 |
12 |
19 import UI.PixmapCache |
13 import UI.PixmapCache |
20 |
14 |
21 |
15 |
22 class BookmarksModel(QAbstractItemModel): |
16 class BookmarksModel(QAbstractItemModel): |
162 @return bookmark data |
156 @return bookmark data |
163 """ |
157 """ |
164 if not index.isValid() or index.model() != self: |
158 if not index.isValid() or index.model() != self: |
165 return None |
159 return None |
166 |
160 |
|
161 from .BookmarkNode import BookmarkNode |
|
162 |
167 bookmarkNode = self.node(index) |
163 bookmarkNode = self.node(index) |
168 if role in [Qt.EditRole, Qt.DisplayRole]: |
164 if role in [Qt.EditRole, Qt.DisplayRole]: |
169 if bookmarkNode.type() == BookmarkNode.Separator: |
165 if bookmarkNode.type() == BookmarkNode.Separator: |
170 if index.column() == 0: |
166 if index.column() == 0: |
171 return 50 * '\xB7' |
167 return 50 * '\xB7' |
191 |
187 |
192 elif role == Qt.DecorationRole: |
188 elif role == Qt.DecorationRole: |
193 if index.column() == 0: |
189 if index.column() == 0: |
194 if bookmarkNode.type() == BookmarkNode.Folder: |
190 if bookmarkNode.type() == BookmarkNode.Folder: |
195 return UI.PixmapCache.getIcon("dirOpen.png") |
191 return UI.PixmapCache.getIcon("dirOpen.png") |
|
192 import Helpviewer.HelpWindow |
196 return Helpviewer.HelpWindow.HelpWindow.icon( |
193 return Helpviewer.HelpWindow.HelpWindow.icon( |
197 QUrl(bookmarkNode.url)) |
194 QUrl(bookmarkNode.url)) |
198 |
195 |
199 return None |
196 return None |
200 |
197 |
274 @return flag indicating the presence of children (boolean) |
271 @return flag indicating the presence of children (boolean) |
275 """ |
272 """ |
276 if not parent.isValid(): |
273 if not parent.isValid(): |
277 return True |
274 return True |
278 |
275 |
|
276 from .BookmarkNode import BookmarkNode |
279 parentNode = self.node(parent) |
277 parentNode = self.node(parent) |
280 return parentNode.type() == BookmarkNode.Folder |
278 return parentNode.type() == BookmarkNode.Folder |
281 |
279 |
282 def flags(self, index): |
280 def flags(self, index): |
283 """ |
281 """ |
300 node == self.__bookmarksManager.toolbar(): |
298 node == self.__bookmarksManager.toolbar(): |
301 return flags |
299 return flags |
302 |
300 |
303 flags |= Qt.ItemIsDragEnabled |
301 flags |= Qt.ItemIsDragEnabled |
304 |
302 |
|
303 from .BookmarkNode import BookmarkNode |
305 if (index.column() == 0 and type_ != BookmarkNode.Separator) or \ |
304 if (index.column() == 0 and type_ != BookmarkNode.Separator) or \ |
306 (index.column() == 1 and type_ == BookmarkNode.Bookmark): |
305 (index.column() == 1 and type_ == BookmarkNode.Bookmark): |
307 flags |= Qt.ItemIsEditable |
306 flags |= Qt.ItemIsEditable |
308 |
307 |
309 return flags |
308 return flags |
329 Public method to return the mime data. |
328 Public method to return the mime data. |
330 |
329 |
331 @param indexes list of indexes (QModelIndexList) |
330 @param indexes list of indexes (QModelIndexList) |
332 @return mime data (QMimeData) |
331 @return mime data (QMimeData) |
333 """ |
332 """ |
|
333 from .XbelWriter import XbelWriter |
|
334 |
334 data = QByteArray() |
335 data = QByteArray() |
335 stream = QDataStream(data, QIODevice.WriteOnly) |
336 stream = QDataStream(data, QIODevice.WriteOnly) |
336 urls = [] |
337 urls = [] |
337 |
338 |
338 for index in indexes: |
339 for index in indexes: |
374 |
375 |
375 if not data.hasFormat(self.MIMETYPE): |
376 if not data.hasFormat(self.MIMETYPE): |
376 if not data.hasUrls(): |
377 if not data.hasUrls(): |
377 return False |
378 return False |
378 |
379 |
|
380 from .BookmarkNode import BookmarkNode |
379 node = BookmarkNode(BookmarkNode.Bookmark, parentNode) |
381 node = BookmarkNode(BookmarkNode.Bookmark, parentNode) |
380 node.url = bytes(data.urls()[0].toEncoded()).decode() |
382 node.url = bytes(data.urls()[0].toEncoded()).decode() |
381 |
383 |
382 if data.hasText(): |
384 if data.hasText(): |
383 node.title = data.text() |
385 node.title = data.text() |
393 return False |
395 return False |
394 |
396 |
395 undoStack = self.__bookmarksManager.undoRedoStack() |
397 undoStack = self.__bookmarksManager.undoRedoStack() |
396 undoStack.beginMacro("Move Bookmarks") |
398 undoStack.beginMacro("Move Bookmarks") |
397 |
399 |
|
400 from .XbelReader import XbelReader |
398 while not stream.atEnd(): |
401 while not stream.atEnd(): |
399 encodedData = QByteArray() |
402 encodedData = QByteArray() |
400 stream >> encodedData |
403 stream >> encodedData |
401 buffer = QBuffer(encodedData) |
404 buffer = QBuffer(encodedData) |
402 buffer.open(QIODevice.ReadOnly) |
405 buffer.open(QIODevice.ReadOnly) |