40 |
40 |
41 def __init__(self, manager, parent=None): |
41 def __init__(self, manager, parent=None): |
42 """ |
42 """ |
43 Constructor |
43 Constructor |
44 |
44 |
45 @param manager reference to the bookmark manager object |
45 @param manager reference to the bookmarks manager object |
46 (BookmarksManager) |
46 @type BookmarksManager |
47 @param parent reference to the parent object (QObject) |
47 @param parent reference to the parent object |
|
48 @type QObject |
48 """ |
49 """ |
49 super().__init__(parent) |
50 super().__init__(parent) |
50 |
51 |
51 self.__endMacro = False |
52 self.__endMacro = False |
52 self.__bookmarksManager = manager |
53 self.__bookmarksManager = manager |
62 |
63 |
63 def bookmarksManager(self): |
64 def bookmarksManager(self): |
64 """ |
65 """ |
65 Public method to get a reference to the bookmarks manager. |
66 Public method to get a reference to the bookmarks manager. |
66 |
67 |
67 @return reference to the bookmarks manager object (BookmarksManager) |
68 @return reference to the bookmarks manager object |
|
69 @rtype BookmarksManager |
68 """ |
70 """ |
69 return self.__bookmarksManager |
71 return self.__bookmarksManager |
70 |
72 |
71 def nodeIndex(self, node): |
73 def nodeIndex(self, node): |
72 """ |
74 """ |
73 Public method to get a model index. |
75 Public method to get a model index. |
74 |
76 |
75 @param node reference to the node to get the index for (BookmarkNode) |
77 @param node reference to the node to get the index for |
76 @return model index (QModelIndex) |
78 @type BookmarkNode |
|
79 @return model index |
|
80 @rtype QModelIndex |
77 """ |
81 """ |
78 parent = node.parent() |
82 parent = node.parent() |
79 if parent is None: |
83 if parent is None: |
80 return QModelIndex() |
84 return QModelIndex() |
81 return self.createIndex(parent.children().index(node), 0, node) |
85 return self.createIndex(parent.children().index(node), 0, node) |
82 |
86 |
83 def entryAdded(self, node): |
87 def entryAdded(self, node): |
84 """ |
88 """ |
85 Public slot to add a bookmark node. |
89 Public slot to add a bookmark node. |
86 |
90 |
87 @param node reference to the bookmark node to add (BookmarkNode) |
91 @param node reference to the bookmark node to add |
|
92 @type BookmarkNode |
88 """ |
93 """ |
89 if node is None or node.parent() is None: |
94 if node is None or node.parent() is None: |
90 return |
95 return |
91 |
96 |
92 parent = node.parent() |
97 parent = node.parent() |
99 |
104 |
100 def entryRemoved(self, parent, row, node): |
105 def entryRemoved(self, parent, row, node): |
101 """ |
106 """ |
102 Public slot to remove a bookmark node. |
107 Public slot to remove a bookmark node. |
103 |
108 |
104 @param parent reference to the parent bookmark node (BookmarkNode) |
109 @param parent reference to the parent bookmark node |
105 @param row row number of the node (integer) |
110 @type BookmarkNode |
106 @param node reference to the bookmark node to remove (BookmarkNode) |
111 @param row row number of the node |
|
112 @type int |
|
113 @param node reference to the bookmark node to remove |
|
114 @type BookmarkNode |
107 """ |
115 """ |
108 # node was already removed, re-add so beginRemoveRows works |
116 # node was already removed, re-add so beginRemoveRows works |
109 parent.add(node, row) |
117 parent.add(node, row) |
110 self.beginRemoveRows(self.nodeIndex(parent), row, row) |
118 self.beginRemoveRows(self.nodeIndex(parent), row, row) |
111 parent.remove(node) |
119 parent.remove(node) |
113 |
121 |
114 def entryChanged(self, node): |
122 def entryChanged(self, node): |
115 """ |
123 """ |
116 Public method to change a node. |
124 Public method to change a node. |
117 |
125 |
118 @param node reference to the bookmark node to change (BookmarkNode) |
126 @param node reference to the bookmark node to change |
|
127 @type BookmarkNode |
119 """ |
128 """ |
120 idx = self.nodeIndex(node) |
129 idx = self.nodeIndex(node) |
121 self.dataChanged.emit(idx, idx) |
130 self.dataChanged.emit(idx, idx) |
122 |
131 |
123 def removeRows(self, row, count, parent=None): |
132 def removeRows(self, row, count, parent=None): |
124 """ |
133 """ |
125 Public method to remove bookmarks from the model. |
134 Public method to remove bookmarks from the model. |
126 |
135 |
127 @param row row of the first bookmark to remove (integer) |
136 @param row row of the first bookmark to remove |
128 @param count number of bookmarks to remove (integer) |
137 @type int |
129 @param parent index of the parent bookmark node (QModelIndex) |
138 @param count number of bookmarks to remove |
130 @return flag indicating successful removal (boolean) |
139 @type int |
|
140 @param parent index of the parent bookmark node |
|
141 @type QModelIndex |
|
142 @return flag indicating successful removal |
|
143 @rtype bool |
131 """ |
144 """ |
132 if parent is None: |
145 if parent is None: |
133 parent = QModelIndex() |
146 parent = QModelIndex() |
134 |
147 |
135 if row < 0 or count <= 0 or row + count > self.rowCount(parent): |
148 if row < 0 or count <= 0 or row + count > self.rowCount(parent): |
153 |
166 |
154 def headerData(self, section, orientation, role=Qt.ItemDataRole.DisplayRole): |
167 def headerData(self, section, orientation, role=Qt.ItemDataRole.DisplayRole): |
155 """ |
168 """ |
156 Public method to get the header data. |
169 Public method to get the header data. |
157 |
170 |
158 @param section section number (integer) |
171 @param section section number |
159 @param orientation header orientation (Qt.Orientation) |
172 @type int |
160 @param role data role (Qt.ItemDataRole) |
173 @param orientation header orientation |
|
174 @type Qt.Orientation |
|
175 @param role data role |
|
176 @type Qt.ItemDataRole |
161 @return header data |
177 @return header data |
|
178 @rtype Any |
162 """ |
179 """ |
163 if ( |
180 if ( |
164 orientation == Qt.Orientation.Horizontal |
181 orientation == Qt.Orientation.Horizontal |
165 and role == Qt.ItemDataRole.DisplayRole |
182 and role == Qt.ItemDataRole.DisplayRole |
166 ): |
183 ): |
170 |
187 |
171 def data(self, index, role=Qt.ItemDataRole.DisplayRole): |
188 def data(self, index, role=Qt.ItemDataRole.DisplayRole): |
172 """ |
189 """ |
173 Public method to get data from the model. |
190 Public method to get data from the model. |
174 |
191 |
175 @param index index of bookmark to get data for (QModelIndex) |
192 @param index index of bookmark to get data for |
176 @param role data role (integer) |
193 @type QModelIndex |
|
194 @param role data role |
|
195 @type int |
177 @return bookmark data |
196 @return bookmark data |
|
197 @rtype Any |
178 """ |
198 """ |
179 from .BookmarkNode import BookmarkNode |
199 from .BookmarkNode import BookmarkNode |
180 |
200 |
181 if not index.isValid() or index.model() != self: |
201 if not index.isValid() or index.model() != self: |
182 return None |
202 return None |
219 |
239 |
220 def columnCount(self, parent=None): |
240 def columnCount(self, parent=None): |
221 """ |
241 """ |
222 Public method to get the number of columns. |
242 Public method to get the number of columns. |
223 |
243 |
224 @param parent index of parent (QModelIndex) |
244 @param parent index of parent |
225 @return number of columns (integer) |
245 @type QModelIndex |
|
246 @return number of columns |
|
247 @rtype int |
226 """ |
248 """ |
227 if parent is None: |
249 if parent is None: |
228 parent = QModelIndex() |
250 parent = QModelIndex() |
229 |
251 |
230 if parent.column() > 0: |
252 if parent.column() > 0: |
234 |
256 |
235 def rowCount(self, parent=None): |
257 def rowCount(self, parent=None): |
236 """ |
258 """ |
237 Public method to determine the number of rows. |
259 Public method to determine the number of rows. |
238 |
260 |
239 @param parent index of parent (QModelIndex) |
261 @param parent index of parent |
240 @return number of rows (integer) |
262 @type QModelIndex |
|
263 @return number of rows |
|
264 @rtype int |
241 """ |
265 """ |
242 if parent is None: |
266 if parent is None: |
243 parent = QModelIndex() |
267 parent = QModelIndex() |
244 |
268 |
245 if parent.column() > 0: |
269 if parent.column() > 0: |
253 |
277 |
254 def index(self, row, column, parent=None): |
278 def index(self, row, column, parent=None): |
255 """ |
279 """ |
256 Public method to get a model index for a node cell. |
280 Public method to get a model index for a node cell. |
257 |
281 |
258 @param row row number (integer) |
282 @param row row number |
259 @param column column number (integer) |
283 @type int |
260 @param parent index of the parent (QModelIndex) |
284 @param column column number |
261 @return index (QModelIndex) |
285 @type int |
|
286 @param parent index of the parent |
|
287 @type QModelIndex |
|
288 @return index |
|
289 @rtype QModelIndex |
262 """ |
290 """ |
263 if parent is None: |
291 if parent is None: |
264 parent = QModelIndex() |
292 parent = QModelIndex() |
265 |
293 |
266 if ( |
294 if ( |
276 |
304 |
277 def parent(self, index=None): |
305 def parent(self, index=None): |
278 """ |
306 """ |
279 Public method to get the index of the parent node. |
307 Public method to get the index of the parent node. |
280 |
308 |
281 @param index index of the child node (QModelIndex) |
309 @param index index of the child node |
282 @return index of the parent node (QModelIndex) |
310 @type QModelIndex |
|
311 @return index of the parent node |
|
312 @rtype QModelIndex |
283 """ |
313 """ |
284 if index is None: |
314 if index is None: |
285 index = QModelIndex() |
315 index = QModelIndex() |
286 |
316 |
287 if not index.isValid(): |
317 if not index.isValid(): |
300 |
330 |
301 def hasChildren(self, parent=None): |
331 def hasChildren(self, parent=None): |
302 """ |
332 """ |
303 Public method to check, if a parent node has some children. |
333 Public method to check, if a parent node has some children. |
304 |
334 |
305 @param parent index of the parent node (QModelIndex) |
335 @param parent index of the parent node |
306 @return flag indicating the presence of children (boolean) |
336 @type QModelIndex |
|
337 @return flag indicating the presence of children |
|
338 @rtype bool |
307 """ |
339 """ |
308 from .BookmarkNode import BookmarkNode |
340 from .BookmarkNode import BookmarkNode |
309 |
341 |
310 if parent is None: |
342 if parent is None: |
311 parent = QModelIndex() |
343 parent = QModelIndex() |
318 |
350 |
319 def flags(self, index): |
351 def flags(self, index): |
320 """ |
352 """ |
321 Public method to get flags for a node cell. |
353 Public method to get flags for a node cell. |
322 |
354 |
323 @param index index of the node cell (QModelIndex) |
355 @param index index of the node cell |
324 @return flags (Qt.ItemFlags) |
356 @type QModelIndex |
|
357 @return flags |
|
358 @rtype Qt.ItemFlags |
325 """ |
359 """ |
326 from .BookmarkNode import BookmarkNode |
360 from .BookmarkNode import BookmarkNode |
327 |
361 |
328 if not index.isValid(): |
362 if not index.isValid(): |
329 return Qt.ItemFlag.NoItemFlags |
363 return Qt.ItemFlag.NoItemFlags |
349 |
383 |
350 def supportedDropActions(self): |
384 def supportedDropActions(self): |
351 """ |
385 """ |
352 Public method to report the supported drop actions. |
386 Public method to report the supported drop actions. |
353 |
387 |
354 @return supported drop actions (Qt.DropAction) |
388 @return supported drop actions |
|
389 @rtype Qt.DropAction |
355 """ |
390 """ |
356 return Qt.DropAction.CopyAction | Qt.DropAction.MoveAction |
391 return Qt.DropAction.CopyAction | Qt.DropAction.MoveAction |
357 |
392 |
358 def mimeTypes(self): |
393 def mimeTypes(self): |
359 """ |
394 """ |
360 Public method to report the supported mime types. |
395 Public method to report the supported mime types. |
361 |
396 |
362 @return supported mime types (list of strings) |
397 @return supported mime types |
|
398 @rtype list of str |
363 """ |
399 """ |
364 return [self.MIMETYPE, "text/uri-list"] |
400 return [self.MIMETYPE, "text/uri-list"] |
365 |
401 |
366 def mimeData(self, indexes): |
402 def mimeData(self, indexes): |
367 """ |
403 """ |
368 Public method to return the mime data. |
404 Public method to return the mime data. |
369 |
405 |
370 @param indexes list of indexes (QModelIndexList) |
406 @param indexes list of indexes |
371 @return mime data (QMimeData) |
407 @type QModelIndexList |
|
408 @return mime data |
|
409 @rtype QMimeData |
372 """ |
410 """ |
373 from .XbelWriter import XbelWriter |
411 from .XbelWriter import XbelWriter |
374 |
412 |
375 data = QByteArray() |
413 data = QByteArray() |
376 stream = QDataStream(data, QIODevice.OpenModeFlag.WriteOnly) |
414 stream = QDataStream(data, QIODevice.OpenModeFlag.WriteOnly) |
396 |
434 |
397 def dropMimeData(self, data, action, row, column, parent): |
435 def dropMimeData(self, data, action, row, column, parent): |
398 """ |
436 """ |
399 Public method to accept the mime data of a drop action. |
437 Public method to accept the mime data of a drop action. |
400 |
438 |
401 @param data reference to the mime data (QMimeData) |
439 @param data reference to the mime data |
402 @param action drop action requested (Qt.DropAction) |
440 @type QMimeData |
403 @param row row number (integer) |
441 @param action drop action requested |
404 @param column column number (integer) |
442 @type Qt.DropAction |
405 @param parent index of the parent node (QModelIndex) |
443 @param row row number |
406 @return flag indicating successful acceptance of the data (boolean) |
444 @type int |
|
445 @param column column number |
|
446 @type int |
|
447 @param parent index of the parent node |
|
448 @type QModelIndex |
|
449 @return flag indicating successful acceptance of the data |
|
450 @rtype bool |
407 """ |
451 """ |
408 from .BookmarkNode import BookmarkNode |
452 from .BookmarkNode import BookmarkNode |
409 from .XbelReader import XbelReader |
453 from .XbelReader import XbelReader |
410 |
454 |
411 if action == Qt.DropAction.IgnoreAction: |
455 if action == Qt.DropAction.IgnoreAction: |
457 |
501 |
458 def setData(self, index, value, role=Qt.ItemDataRole.EditRole): |
502 def setData(self, index, value, role=Qt.ItemDataRole.EditRole): |
459 """ |
503 """ |
460 Public method to set the data of a node cell. |
504 Public method to set the data of a node cell. |
461 |
505 |
462 @param index index of the node cell (QModelIndex) |
506 @param index index of the node cell |
|
507 @type QModelIndex |
463 @param value value to be set |
508 @param value value to be set |
464 @param role role of the data (integer) |
509 @type Any |
465 @return flag indicating success (boolean) |
510 @param role role of the data |
|
511 @type int |
|
512 @return flag indicating success |
|
513 @rtype bool |
466 """ |
514 """ |
467 if not index.isValid() or (self.flags(index) & Qt.ItemFlag.ItemIsEditable) == 0: |
515 if not index.isValid() or (self.flags(index) & Qt.ItemFlag.ItemIsEditable) == 0: |
468 return False |
516 return False |
469 |
517 |
470 item = self.node(index) |
518 item = self.node(index) |
493 |
541 |
494 def node(self, index): |
542 def node(self, index): |
495 """ |
543 """ |
496 Public method to get a bookmark node given its index. |
544 Public method to get a bookmark node given its index. |
497 |
545 |
498 @param index index of the node (QModelIndex) |
546 @param index index of the node |
499 @return bookmark node (BookmarkNode) |
547 @type QModelIndex |
|
548 @return bookmark node |
|
549 @rtype BookmarkNode |
500 """ |
550 """ |
501 itemNode = index.internalPointer() |
551 itemNode = index.internalPointer() |
502 if itemNode is None: |
552 if itemNode is None: |
503 return self.__bookmarksManager.bookmarks() |
553 return self.__bookmarksManager.bookmarks() |
504 else: |
554 else: |