Helpviewer/Bookmarks/BookmarksManager.py

branch
Py2 comp.
changeset 3057
10516539f238
parent 2525
8b507a9a2d40
parent 3002
6ffc581f00f1
child 3058
0a02c433f52d
equal deleted inserted replaced
3056:9986ec0e559a 3057:10516539f238
9 9
10 from __future__ import unicode_literals # __IGNORE_WARNING__ 10 from __future__ import unicode_literals # __IGNORE_WARNING__
11 11
12 import os 12 import os
13 13
14 from PyQt4.QtCore import pyqtSignal, Qt, QT_TRANSLATE_NOOP, QObject, QFile, QByteArray, \ 14 from PyQt4.QtCore import pyqtSignal, Qt, QT_TRANSLATE_NOOP, QObject, QFile, \
15 QBuffer, QIODevice, QXmlStreamReader, QDate, QDateTime, QFileInfo, QUrl 15 QByteArray, QBuffer, QIODevice, QXmlStreamReader, QDate, QDateTime, \
16 QFileInfo, QUrl
16 from PyQt4.QtGui import QUndoStack, QUndoCommand, QApplication, QDialog 17 from PyQt4.QtGui import QUndoStack, QUndoCommand, QApplication, QDialog
17 18
18 from E5Gui import E5MessageBox, E5FileDialog 19 from E5Gui import E5MessageBox, E5FileDialog
19 20
20 from .BookmarkNode import BookmarkNode 21 from .BookmarkNode import BookmarkNode
33 34
34 class BookmarksManager(QObject): 35 class BookmarksManager(QObject):
35 """ 36 """
36 Class implementing the bookmarks manager. 37 Class implementing the bookmarks manager.
37 38
38 @signal entryAdded(BookmarkNode) emitted after a bookmark node has been added 39 @signal entryAdded(BookmarkNode) emitted after a bookmark node has been
39 @signal entryRemoved(BookmarkNode, int, BookmarkNode) emitted after a bookmark 40 added
40 node has been removed 41 @signal entryRemoved(BookmarkNode, int, BookmarkNode) emitted after a
41 @signal entryChanged(BookmarkNode) emitted after a bookmark node has been changed 42 bookmark node has been removed
43 @signal entryChanged(BookmarkNode) emitted after a bookmark node has been
44 changed
42 @signal bookmarksSaved() emitted after the bookmarks were saved 45 @signal bookmarksSaved() emitted after the bookmarks were saved
43 @signal bookmarksReloaded() emitted after the bookmarks were reloaded 46 @signal bookmarksReloaded() emitted after the bookmarks were reloaded
44 """ 47 """
45 entryAdded = pyqtSignal(BookmarkNode) 48 entryAdded = pyqtSignal(BookmarkNode)
46 entryRemoved = pyqtSignal(BookmarkNode, int, BookmarkNode) 49 entryRemoved = pyqtSignal(BookmarkNode, int, BookmarkNode)
79 """ 82 """
80 Public method to get the file name of the bookmark file. 83 Public method to get the file name of the bookmark file.
81 84
82 @return name of the bookmark file (string) 85 @return name of the bookmark file (string)
83 """ 86 """
84 return os.path.join(Utilities.getConfigDir(), "browser", "bookmarks.xbel") 87 return os.path.join(Utilities.getConfigDir(), "browser",
88 "bookmarks.xbel")
85 89
86 def close(self): 90 def close(self):
87 """ 91 """
88 Public method to close the bookmark manager. 92 Public method to close the bookmark manager.
89 """ 93 """
112 self.bookmarksReloaded.emit() 116 self.bookmarksReloaded.emit()
113 117
114 def load(self): 118 def load(self):
115 """ 119 """
116 Public method to load the bookmarks. 120 Public method to load the bookmarks.
121
122 @exception RuntimeError raised to indicate an error loading the
123 bookmarks
117 """ 124 """
118 if self.__loaded: 125 if self.__loaded:
119 return 126 return
120 127
121 self.__loaded = True 128 self.__loaded = True
131 reader = XbelReader() 138 reader = XbelReader()
132 self.__bookmarkRootNode = reader.read(bookmarkFile) 139 self.__bookmarkRootNode = reader.read(bookmarkFile)
133 if reader.error() != QXmlStreamReader.NoError: 140 if reader.error() != QXmlStreamReader.NoError:
134 E5MessageBox.warning(None, 141 E5MessageBox.warning(None,
135 self.trUtf8("Loading Bookmarks"), 142 self.trUtf8("Loading Bookmarks"),
136 self.trUtf8("""Error when loading bookmarks on line {0}, column {1}:\n""" 143 self.trUtf8(
137 """{2}""")\ 144 """Error when loading bookmarks on line {0},"""
145 """ column {1}:\n {2}""")\
138 .format(reader.lineNumber(), 146 .format(reader.lineNumber(),
139 reader.columnNumber(), 147 reader.columnNumber(),
140 reader.errorString())) 148 reader.errorString()))
141 149
142 others = [] 150 others = []
143 for index in range(len(self.__bookmarkRootNode.children()) - 1, -1, -1): 151 for index in range(
152 len(self.__bookmarkRootNode.children()) - 1, -1, -1):
144 node = self.__bookmarkRootNode.children()[index] 153 node = self.__bookmarkRootNode.children()[index]
145 if node.type() == BookmarkNode.Folder: 154 if node.type() == BookmarkNode.Folder:
146 if (node.title == self.trUtf8("Toolbar Bookmarks") or \ 155 if (node.title == self.trUtf8("Toolbar Bookmarks") or \
147 node.title == BOOKMARKBAR) and \ 156 node.title == BOOKMARKBAR) and \
148 self.__toolbar is None: 157 self.__toolbar is None:
160 169
161 if len(self.__bookmarkRootNode.children()) > 0: 170 if len(self.__bookmarkRootNode.children()) > 0:
162 raise RuntimeError("Error loading bookmarks.") 171 raise RuntimeError("Error loading bookmarks.")
163 172
164 if self.__toolbar is None: 173 if self.__toolbar is None:
165 self.__toolbar = BookmarkNode(BookmarkNode.Folder, self.__bookmarkRootNode) 174 self.__toolbar = BookmarkNode(BookmarkNode.Folder,
175 self.__bookmarkRootNode)
166 self.__toolbar.title = self.trUtf8(BOOKMARKBAR) 176 self.__toolbar.title = self.trUtf8(BOOKMARKBAR)
167 else: 177 else:
168 self.__bookmarkRootNode.add(self.__toolbar) 178 self.__bookmarkRootNode.add(self.__toolbar)
169 179
170 if self.__menu is None: 180 if self.__menu is None:
171 self.__menu = BookmarkNode(BookmarkNode.Folder, self.__bookmarkRootNode) 181 self.__menu = BookmarkNode(BookmarkNode.Folder,
182 self.__bookmarkRootNode)
172 self.__menu.title = self.trUtf8(BOOKMARKMENU) 183 self.__menu.title = self.trUtf8(BOOKMARKMENU)
173 else: 184 else:
174 self.__bookmarkRootNode.add(self.__menu) 185 self.__bookmarkRootNode.add(self.__menu)
175 186
176 for node in others: 187 for node in others:
213 @param row row number (integer) 224 @param row row number (integer)
214 """ 225 """
215 if not self.__loaded: 226 if not self.__loaded:
216 return 227 return
217 228
218 self.setTimestamp(node, BookmarkNode.TsAdded, QDateTime.currentDateTime()) 229 self.setTimestamp(node, BookmarkNode.TsAdded,
230 QDateTime.currentDateTime())
219 231
220 command = InsertBookmarksCommand(self, parent, node, row) 232 command = InsertBookmarksCommand(self, parent, node, row)
221 self.__commands.push(command) 233 self.__commands.push(command)
222 234
223 def removeBookmark(self, node): 235 def removeBookmark(self, node):
260 command = ChangeBookmarkCommand(self, node, newUrl, False) 272 command = ChangeBookmarkCommand(self, node, newUrl, False)
261 self.__commands.push(command) 273 self.__commands.push(command)
262 274
263 def setNodeChanged(self, node): 275 def setNodeChanged(self, node):
264 """ 276 """
265 Public method to signal changes of bookmarks other than title, URL or timestamp. 277 Public method to signal changes of bookmarks other than title, URL
278 or timestamp.
279
280 @param node reference to the bookmark (BookmarkNode)
266 """ 281 """
267 self.__saveTimer.changeOccurred() 282 self.__saveTimer.changeOccurred()
268 283
269 def setTimestamp(self, node, timestampType, timestamp): 284 def setTimestamp(self, node, timestampType, timestamp):
270 """ 285 """
271 Public method to set the URL of a bookmark. 286 Public method to set the URL of a bookmark.
272 287
273 @param node reference to the node to be changed (BookmarkNode) 288 @param node reference to the node to be changed (BookmarkNode)
274 @param timestampType type of the timestamp to set (BookmarkNode.TsAdded, 289 @param timestampType type of the timestamp to set
275 BookmarkNode.TsModified, BookmarkNode.TsVisited) 290 (BookmarkNode.TsAdded, BookmarkNode.TsModified,
291 BookmarkNode.TsVisited)
276 @param timestamp timestamp to set (QDateTime) 292 @param timestamp timestamp to set (QDateTime)
277 """ 293 """
278 if not self.__loaded: 294 if not self.__loaded:
279 return 295 return
280 296
387 403
388 if bmNames is not None and bmFiles is not None: 404 if bmNames is not None and bmFiles is not None:
389 if len(bmNames) == len(bmFiles): 405 if len(bmNames) == len(bmFiles):
390 convertedRootNode = BookmarkNode(BookmarkNode.Folder) 406 convertedRootNode = BookmarkNode(BookmarkNode.Folder)
391 convertedRootNode.title = self.trUtf8("Converted {0}")\ 407 convertedRootNode.title = self.trUtf8("Converted {0}")\
392 .format(QDate.currentDate().toString(Qt.SystemLocaleShortDate)) 408 .format(QDate.currentDate().toString(
409 Qt.SystemLocaleShortDate))
393 for i in range(len(bmNames)): 410 for i in range(len(bmNames)):
394 node = BookmarkNode(BookmarkNode.Bookmark, convertedRootNode) 411 node = BookmarkNode(BookmarkNode.Bookmark,
412 convertedRootNode)
395 node.title = bmNames[i] 413 node.title = bmNames[i]
396 url = QUrl(bmFiles[i]) 414 url = QUrl(bmFiles[i])
397 if not url.scheme(): 415 if not url.scheme():
398 url.setScheme("file") 416 url.setScheme("file")
399 node.url = url.toString() 417 node.url = url.toString()
439 def __searchBookmark(self, url, startNode): 457 def __searchBookmark(self, url, startNode):
440 """ 458 """
441 Private method get a bookmark node for a given URL. 459 Private method get a bookmark node for a given URL.
442 460
443 @param url URL of the bookmark to search for (string) 461 @param url URL of the bookmark to search for (string)
444 @param startNode reference to the node to start searching (BookmarkNode) 462 @param startNode reference to the node to start searching
463 (BookmarkNode)
445 @return bookmark node for the given url (BookmarkNode) 464 @return bookmark node for the given url (BookmarkNode)
446 """ 465 """
447 bm = None 466 bm = None
448 for node in startNode.children(): 467 for node in startNode.children():
449 if node.type() == BookmarkNode.Folder: 468 if node.type() == BookmarkNode.Folder:
481 def __searchBookmarks(self, url, startNode): 500 def __searchBookmarks(self, url, startNode):
482 """ 501 """
483 Private method get a list of bookmark nodes for a given URL. 502 Private method get a list of bookmark nodes for a given URL.
484 503
485 @param url URL of the bookmarks to search for (string) 504 @param url URL of the bookmarks to search for (string)
486 @param startNode reference to the node to start searching (BookmarkNode) 505 @param startNode reference to the node to start searching
506 (BookmarkNode)
487 @return list of bookmark nodes for the given url (list of BookmarkNode) 507 @return list of bookmark nodes for the given url (list of BookmarkNode)
488 """ 508 """
489 bm = [] 509 bm = []
490 for node in startNode.children(): 510 for node in startNode.children():
491 if node.type() == BookmarkNode.Folder: 511 if node.type() == BookmarkNode.Folder:
502 """ 522 """
503 def __init__(self, bookmarksManager, parent, row): 523 def __init__(self, bookmarksManager, parent, row):
504 """ 524 """
505 Constructor 525 Constructor
506 526
507 @param bookmarksManager reference to the bookmarks manager (BookmarksManager) 527 @param bookmarksManager reference to the bookmarks manager
528 (BookmarksManager)
508 @param parent reference to the parent node (BookmarkNode) 529 @param parent reference to the parent node (BookmarkNode)
509 @param row row number of bookmark (integer) 530 @param row row number of bookmark (integer)
510 """ 531 """
511 super(RemoveBookmarksCommand, self).__init__( 532 super(RemoveBookmarksCommand, self).__init__(
512 QApplication.translate("BookmarksManager", "Remove Bookmark")) 533 QApplication.translate("BookmarksManager", "Remove Bookmark"))
529 def redo(self): 550 def redo(self):
530 """ 551 """
531 Public slot to perform the redo action. 552 Public slot to perform the redo action.
532 """ 553 """
533 self._parent.remove(self._node) 554 self._parent.remove(self._node)
534 self._bookmarksManager.entryRemoved.emit(self._parent, self._row, self._node) 555 self._bookmarksManager.entryRemoved.emit(
556 self._parent, self._row, self._node)
535 557
536 558
537 class InsertBookmarksCommand(RemoveBookmarksCommand): 559 class InsertBookmarksCommand(RemoveBookmarksCommand):
538 """ 560 """
539 Class implementing the Insert undo command. 561 Class implementing the Insert undo command.
540 """ 562 """
541 def __init__(self, bookmarksManager, parent, node, row): 563 def __init__(self, bookmarksManager, parent, node, row):
542 """ 564 """
543 Constructor 565 Constructor
544 566
545 @param bookmarksManager reference to the bookmarks manager (BookmarksManager) 567 @param bookmarksManager reference to the bookmarks manager
568 (BookmarksManager)
546 @param parent reference to the parent node (BookmarkNode) 569 @param parent reference to the parent node (BookmarkNode)
547 @param node reference to the node to be inserted (BookmarkNode) 570 @param node reference to the node to be inserted (BookmarkNode)
548 @param row row number of bookmark (integer) 571 @param row row number of bookmark (integer)
549 """ 572 """
550 RemoveBookmarksCommand.__init__(self, bookmarksManager, parent, row) 573 RemoveBookmarksCommand.__init__(self, bookmarksManager, parent, row)
551 self.setText(QApplication.translate("BookmarksManager", "Insert Bookmark")) 574 self.setText(QApplication.translate(
575 "BookmarksManager", "Insert Bookmark"))
552 self._node = node 576 self._node = node
553 577
554 def undo(self): 578 def undo(self):
555 """ 579 """
556 Public slot to perform the undo action. 580 Public slot to perform the undo action.
570 """ 594 """
571 def __init__(self, bookmarksManager, node, newValue, title): 595 def __init__(self, bookmarksManager, node, newValue, title):
572 """ 596 """
573 Constructor 597 Constructor
574 598
575 @param bookmarksManager reference to the bookmarks manager (BookmarksManager) 599 @param bookmarksManager reference to the bookmarks manager
600 (BookmarksManager)
576 @param node reference to the node to be changed (BookmarkNode) 601 @param node reference to the node to be changed (BookmarkNode)
577 @param newValue new value to be set (string) 602 @param newValue new value to be set (string)
578 @param title flag indicating a change of the title (True) or 603 @param title flag indicating a change of the title (True) or
579 the URL (False) (boolean) 604 the URL (False) (boolean)
580 """ 605 """
585 self._newValue = newValue 610 self._newValue = newValue
586 self._node = node 611 self._node = node
587 612
588 if self._title: 613 if self._title:
589 self._oldValue = self._node.title 614 self._oldValue = self._node.title
590 self.setText(QApplication.translate("BookmarksManager", "Name Change")) 615 self.setText(QApplication.translate(
616 "BookmarksManager", "Name Change"))
591 else: 617 else:
592 self._oldValue = self._node.url 618 self._oldValue = self._node.url
593 self.setText(QApplication.translate("BookmarksManager", "Address Change")) 619 self.setText(QApplication.translate(
620 "BookmarksManager", "Address Change"))
594 621
595 def undo(self): 622 def undo(self):
596 """ 623 """
597 Public slot to perform the undo action. 624 Public slot to perform the undo action.
598 """ 625 """

eric ide

mercurial