eric6/WebBrowser/Bookmarks/BookmarksModel.py

changeset 8143
2c730d5fd177
parent 7923
91e843545d9a
child 8205
4a0f1f896341
equal deleted inserted replaced
8141:27f636beebad 8143:2c730d5fd177
17 17
18 class BookmarksModel(QAbstractItemModel): 18 class BookmarksModel(QAbstractItemModel):
19 """ 19 """
20 Class implementing the bookmark model. 20 Class implementing the bookmark model.
21 """ 21 """
22 TypeRole = Qt.UserRole + 1 22 TypeRole = Qt.ItemDataRole.UserRole + 1
23 UrlRole = Qt.UserRole + 2 23 UrlRole = Qt.ItemDataRole.UserRole + 2
24 UrlStringRole = Qt.UserRole + 3 24 UrlStringRole = Qt.ItemDataRole.UserRole + 3
25 VisitCountRole = Qt.UserRole + 4 25 VisitCountRole = Qt.ItemDataRole.UserRole + 4
26 SeparatorRole = Qt.UserRole + 5 26 SeparatorRole = Qt.ItemDataRole.UserRole + 5
27 27
28 MIMETYPE = "application/bookmarks.xbel" 28 MIMETYPE = "application/bookmarks.xbel"
29 29
30 def __init__(self, manager, parent=None): 30 def __init__(self, manager, parent=None):
31 """ 31 """
138 self.__bookmarksManager.undoRedoStack().endMacro() 138 self.__bookmarksManager.undoRedoStack().endMacro()
139 self.__endMacro = False 139 self.__endMacro = False
140 140
141 return True 141 return True
142 142
143 def headerData(self, section, orientation, role=Qt.DisplayRole): 143 def headerData(self, section, orientation,
144 role=Qt.ItemDataRole.DisplayRole):
144 """ 145 """
145 Public method to get the header data. 146 Public method to get the header data.
146 147
147 @param section section number (integer) 148 @param section section number (integer)
148 @param orientation header orientation (Qt.Orientation) 149 @param orientation header orientation (Qt.Orientation)
149 @param role data role (integer) 150 @param role data role (Qt.ItemDataRole)
150 @return header data 151 @return header data
151 """ 152 """
152 if orientation == Qt.Horizontal and role == Qt.DisplayRole: 153 if (
154 orientation == Qt.Orientation.Horizontal and
155 role == Qt.ItemDataRole.DisplayRole
156 ):
153 try: 157 try:
154 return self.__headers[section] 158 return self.__headers[section]
155 except IndexError: 159 except IndexError:
156 pass 160 pass
157 return QAbstractItemModel.headerData(self, section, orientation, role) 161 return QAbstractItemModel.headerData(self, section, orientation, role)
158 162
159 def data(self, index, role=Qt.DisplayRole): 163 def data(self, index, role=Qt.ItemDataRole.DisplayRole):
160 """ 164 """
161 Public method to get data from the model. 165 Public method to get data from the model.
162 166
163 @param index index of bookmark to get data for (QModelIndex) 167 @param index index of bookmark to get data for (QModelIndex)
164 @param role data role (integer) 168 @param role data role (integer)
168 return None 172 return None
169 173
170 from .BookmarkNode import BookmarkNode 174 from .BookmarkNode import BookmarkNode
171 175
172 bookmarkNode = self.node(index) 176 bookmarkNode = self.node(index)
173 if role in [Qt.EditRole, Qt.DisplayRole]: 177 if role in [Qt.ItemDataRole.EditRole, Qt.ItemDataRole.DisplayRole]:
174 if bookmarkNode.type() == BookmarkNode.Separator: 178 if bookmarkNode.type() == BookmarkNode.Separator:
175 if index.column() == 0: 179 if index.column() == 0:
176 return 50 * '\xB7' 180 return 50 * '\xB7'
177 elif index.column() == 1: 181 elif index.column() == 1:
178 return "" 182 return ""
195 return bookmarkNode.type() 199 return bookmarkNode.type()
196 200
197 elif role == BookmarksModel.SeparatorRole: 201 elif role == BookmarksModel.SeparatorRole:
198 return bookmarkNode.type() == BookmarkNode.Separator 202 return bookmarkNode.type() == BookmarkNode.Separator
199 203
200 elif role == Qt.DecorationRole: 204 elif role == Qt.ItemDataRole.DecorationRole:
201 if index.column() == 0: 205 if index.column() == 0:
202 if bookmarkNode.type() == BookmarkNode.Folder: 206 if bookmarkNode.type() == BookmarkNode.Folder:
203 return UI.PixmapCache.getIcon("dirOpen") 207 return UI.PixmapCache.getIcon("dirOpen")
204 import WebBrowser.WebBrowserWindow 208 import WebBrowser.WebBrowserWindow
205 return WebBrowser.WebBrowserWindow.WebBrowserWindow.icon( 209 return WebBrowser.WebBrowserWindow.WebBrowserWindow.icon(
317 321
318 @param index index of the node cell (QModelIndex) 322 @param index index of the node cell (QModelIndex)
319 @return flags (Qt.ItemFlags) 323 @return flags (Qt.ItemFlags)
320 """ 324 """
321 if not index.isValid(): 325 if not index.isValid():
322 return Qt.NoItemFlags 326 return Qt.ItemFlag.NoItemFlags
323 327
324 node = self.node(index) 328 node = self.node(index)
325 type_ = node.type() 329 type_ = node.type()
326 flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled 330 flags = Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled
327 331
328 if self.hasChildren(index): 332 if self.hasChildren(index):
329 flags |= Qt.ItemIsDropEnabled 333 flags |= Qt.ItemFlag.ItemIsDropEnabled
330 334
331 if ( 335 if (
332 node == self.__bookmarksManager.menu() or 336 node == self.__bookmarksManager.menu() or
333 node == self.__bookmarksManager.toolbar() 337 node == self.__bookmarksManager.toolbar()
334 ): 338 ):
335 return flags 339 return flags
336 340
337 flags |= Qt.ItemIsDragEnabled 341 flags |= Qt.ItemFlag.ItemIsDragEnabled
338 342
339 from .BookmarkNode import BookmarkNode 343 from .BookmarkNode import BookmarkNode
340 if ( 344 if (
341 (index.column() == 0 and type_ != BookmarkNode.Separator) or 345 (index.column() == 0 and type_ != BookmarkNode.Separator) or
342 (index.column() == 1 and type_ == BookmarkNode.Bookmark) 346 (index.column() == 1 and type_ == BookmarkNode.Bookmark)
343 ): 347 ):
344 flags |= Qt.ItemIsEditable 348 flags |= Qt.ItemFlag.ItemIsEditable
345 349
346 return flags 350 return flags
347 351
348 def supportedDropActions(self): 352 def supportedDropActions(self):
349 """ 353 """
350 Public method to report the supported drop actions. 354 Public method to report the supported drop actions.
351 355
352 @return supported drop actions (Qt.DropAction) 356 @return supported drop actions (Qt.DropAction)
353 """ 357 """
354 return Qt.CopyAction | Qt.MoveAction 358 return Qt.DropAction.CopyAction | Qt.DropAction.MoveAction
355 359
356 def mimeTypes(self): 360 def mimeTypes(self):
357 """ 361 """
358 Public method to report the supported mime types. 362 Public method to report the supported mime types.
359 363
369 @return mime data (QMimeData) 373 @return mime data (QMimeData)
370 """ 374 """
371 from .XbelWriter import XbelWriter 375 from .XbelWriter import XbelWriter
372 376
373 data = QByteArray() 377 data = QByteArray()
374 stream = QDataStream(data, QIODevice.WriteOnly) 378 stream = QDataStream(data, QIODevice.OpenModeFlag.WriteOnly)
375 urls = [] 379 urls = []
376 380
377 for index in indexes: 381 for index in indexes:
378 if index.column() != 0 or not index.isValid(): 382 if index.column() != 0 or not index.isValid():
379 continue 383 continue
380 384
381 encodedData = QByteArray() 385 encodedData = QByteArray()
382 buffer = QBuffer(encodedData) 386 buffer = QBuffer(encodedData)
383 buffer.open(QIODevice.ReadWrite) 387 buffer.open(QIODevice.OpenModeFlag.ReadWrite)
384 writer = XbelWriter() 388 writer = XbelWriter()
385 parentNode = self.node(index) 389 parentNode = self.node(index)
386 writer.write(buffer, parentNode) 390 writer.write(buffer, parentNode)
387 stream << encodedData 391 stream << encodedData
388 urls.append(index.data(self.UrlRole)) 392 urls.append(index.data(self.UrlRole))
401 @param row row number (integer) 405 @param row row number (integer)
402 @param column column number (integer) 406 @param column column number (integer)
403 @param parent index of the parent node (QModelIndex) 407 @param parent index of the parent node (QModelIndex)
404 @return flag indicating successful acceptance of the data (boolean) 408 @return flag indicating successful acceptance of the data (boolean)
405 """ 409 """
406 if action == Qt.IgnoreAction: 410 if action == Qt.DropAction.IgnoreAction:
407 return True 411 return True
408 412
409 if column > 0: 413 if column > 0:
410 return False 414 return False
411 415
426 430
427 self.__bookmarksManager.addBookmark(parentNode, node, row) 431 self.__bookmarksManager.addBookmark(parentNode, node, row)
428 return True 432 return True
429 433
430 ba = data.data(self.MIMETYPE) 434 ba = data.data(self.MIMETYPE)
431 stream = QDataStream(ba, QIODevice.ReadOnly) 435 stream = QDataStream(ba, QIODevice.OpenModeFlag.ReadOnly)
432 if stream.atEnd(): 436 if stream.atEnd():
433 return False 437 return False
434 438
435 undoStack = self.__bookmarksManager.undoRedoStack() 439 undoStack = self.__bookmarksManager.undoRedoStack()
436 undoStack.beginMacro("Move Bookmarks") 440 undoStack.beginMacro("Move Bookmarks")
438 from .XbelReader import XbelReader 442 from .XbelReader import XbelReader
439 while not stream.atEnd(): 443 while not stream.atEnd():
440 encodedData = QByteArray() 444 encodedData = QByteArray()
441 stream >> encodedData 445 stream >> encodedData
442 buffer = QBuffer(encodedData) 446 buffer = QBuffer(encodedData)
443 buffer.open(QIODevice.ReadOnly) 447 buffer.open(QIODevice.OpenModeFlag.ReadOnly)
444 448
445 reader = XbelReader() 449 reader = XbelReader()
446 rootNode = reader.read(buffer) 450 rootNode = reader.read(buffer)
447 for bookmarkNode in rootNode.children(): 451 for bookmarkNode in rootNode.children():
448 rootNode.remove(bookmarkNode) 452 rootNode.remove(bookmarkNode)
451 parentNode, bookmarkNode, row) 455 parentNode, bookmarkNode, row)
452 self.__endMacro = True 456 self.__endMacro = True
453 457
454 return True 458 return True
455 459
456 def setData(self, index, value, role=Qt.EditRole): 460 def setData(self, index, value, role=Qt.ItemDataRole.EditRole):
457 """ 461 """
458 Public method to set the data of a node cell. 462 Public method to set the data of a node cell.
459 463
460 @param index index of the node cell (QModelIndex) 464 @param index index of the node cell (QModelIndex)
461 @param value value to be set 465 @param value value to be set
462 @param role role of the data (integer) 466 @param role role of the data (integer)
463 @return flag indicating success (boolean) 467 @return flag indicating success (boolean)
464 """ 468 """
465 if not index.isValid() or (self.flags(index) & Qt.ItemIsEditable) == 0: 469 if (
470 not index.isValid() or
471 (self.flags(index) & Qt.ItemFlag.ItemIsEditable) == 0
472 ):
466 return False 473 return False
467 474
468 item = self.node(index) 475 item = self.node(index)
469 476
470 if role in (Qt.EditRole, Qt.DisplayRole): 477 if role in (Qt.ItemDataRole.EditRole, Qt.ItemDataRole.DisplayRole):
471 if index.column() == 0: 478 if index.column() == 0:
472 self.__bookmarksManager.setTitle(item, value) 479 self.__bookmarksManager.setTitle(item, value)
473 elif index.column() == 1: 480 elif index.column() == 1:
474 self.__bookmarksManager.setUrl(item, value) 481 self.__bookmarksManager.setUrl(item, value)
475 else: 482 else:

eric ide

mercurial