Helpviewer/Bookmarks/BookmarksManager.py

changeset 3002
6ffc581f00f1
parent 2954
bf0215fe12d1
child 3014
9c5e6ef87252
child 3057
10516539f238
equal deleted inserted replaced
3001:3674ff5fa8f8 3002:6ffc581f00f1
7 Module implementing the bookmarks manager. 7 Module implementing the bookmarks manager.
8 """ 8 """
9 9
10 import os 10 import os
11 11
12 from PyQt4.QtCore import pyqtSignal, Qt, QT_TRANSLATE_NOOP, QObject, QFile, QByteArray, \ 12 from PyQt4.QtCore import pyqtSignal, Qt, QT_TRANSLATE_NOOP, QObject, QFile, \
13 QBuffer, QIODevice, QXmlStreamReader, QDate, QDateTime, QFileInfo, QUrl 13 QByteArray, QBuffer, QIODevice, QXmlStreamReader, QDate, QDateTime, \
14 QFileInfo, QUrl
14 from PyQt4.QtGui import QUndoStack, QUndoCommand, QApplication, QDialog 15 from PyQt4.QtGui import QUndoStack, QUndoCommand, QApplication, QDialog
15 16
16 from E5Gui import E5MessageBox, E5FileDialog 17 from E5Gui import E5MessageBox, E5FileDialog
17 18
18 from .BookmarkNode import BookmarkNode 19 from .BookmarkNode import BookmarkNode
31 32
32 class BookmarksManager(QObject): 33 class BookmarksManager(QObject):
33 """ 34 """
34 Class implementing the bookmarks manager. 35 Class implementing the bookmarks manager.
35 36
36 @signal entryAdded(BookmarkNode) emitted after a bookmark node has been added 37 @signal entryAdded(BookmarkNode) emitted after a bookmark node has been
37 @signal entryRemoved(BookmarkNode, int, BookmarkNode) emitted after a bookmark 38 added
38 node has been removed 39 @signal entryRemoved(BookmarkNode, int, BookmarkNode) emitted after a
39 @signal entryChanged(BookmarkNode) emitted after a bookmark node has been changed 40 bookmark node has been removed
41 @signal entryChanged(BookmarkNode) emitted after a bookmark node has been
42 changed
40 @signal bookmarksSaved() emitted after the bookmarks were saved 43 @signal bookmarksSaved() emitted after the bookmarks were saved
41 @signal bookmarksReloaded() emitted after the bookmarks were reloaded 44 @signal bookmarksReloaded() emitted after the bookmarks were reloaded
42 """ 45 """
43 entryAdded = pyqtSignal(BookmarkNode) 46 entryAdded = pyqtSignal(BookmarkNode)
44 entryRemoved = pyqtSignal(BookmarkNode, int, BookmarkNode) 47 entryRemoved = pyqtSignal(BookmarkNode, int, BookmarkNode)
77 """ 80 """
78 Public method to get the file name of the bookmark file. 81 Public method to get the file name of the bookmark file.
79 82
80 @return name of the bookmark file (string) 83 @return name of the bookmark file (string)
81 """ 84 """
82 return os.path.join(Utilities.getConfigDir(), "browser", "bookmarks.xbel") 85 return os.path.join(Utilities.getConfigDir(), "browser",
86 "bookmarks.xbel")
83 87
84 def close(self): 88 def close(self):
85 """ 89 """
86 Public method to close the bookmark manager. 90 Public method to close the bookmark manager.
87 """ 91 """
132 reader = XbelReader() 136 reader = XbelReader()
133 self.__bookmarkRootNode = reader.read(bookmarkFile) 137 self.__bookmarkRootNode = reader.read(bookmarkFile)
134 if reader.error() != QXmlStreamReader.NoError: 138 if reader.error() != QXmlStreamReader.NoError:
135 E5MessageBox.warning(None, 139 E5MessageBox.warning(None,
136 self.trUtf8("Loading Bookmarks"), 140 self.trUtf8("Loading Bookmarks"),
137 self.trUtf8("""Error when loading bookmarks on line {0}, column {1}:\n""" 141 self.trUtf8(
138 """{2}""")\ 142 """Error when loading bookmarks on line {0},"""
143 """ column {1}:\n {2}""")\
139 .format(reader.lineNumber(), 144 .format(reader.lineNumber(),
140 reader.columnNumber(), 145 reader.columnNumber(),
141 reader.errorString())) 146 reader.errorString()))
142 147
143 others = [] 148 others = []
144 for index in range(len(self.__bookmarkRootNode.children()) - 1, -1, -1): 149 for index in range(
150 len(self.__bookmarkRootNode.children()) - 1, -1, -1):
145 node = self.__bookmarkRootNode.children()[index] 151 node = self.__bookmarkRootNode.children()[index]
146 if node.type() == BookmarkNode.Folder: 152 if node.type() == BookmarkNode.Folder:
147 if (node.title == self.trUtf8("Toolbar Bookmarks") or \ 153 if (node.title == self.trUtf8("Toolbar Bookmarks") or \
148 node.title == BOOKMARKBAR) and \ 154 node.title == BOOKMARKBAR) and \
149 self.__toolbar is None: 155 self.__toolbar is None:
161 167
162 if len(self.__bookmarkRootNode.children()) > 0: 168 if len(self.__bookmarkRootNode.children()) > 0:
163 raise RuntimeError("Error loading bookmarks.") 169 raise RuntimeError("Error loading bookmarks.")
164 170
165 if self.__toolbar is None: 171 if self.__toolbar is None:
166 self.__toolbar = BookmarkNode(BookmarkNode.Folder, self.__bookmarkRootNode) 172 self.__toolbar = BookmarkNode(BookmarkNode.Folder,
173 self.__bookmarkRootNode)
167 self.__toolbar.title = self.trUtf8(BOOKMARKBAR) 174 self.__toolbar.title = self.trUtf8(BOOKMARKBAR)
168 else: 175 else:
169 self.__bookmarkRootNode.add(self.__toolbar) 176 self.__bookmarkRootNode.add(self.__toolbar)
170 177
171 if self.__menu is None: 178 if self.__menu is None:
172 self.__menu = BookmarkNode(BookmarkNode.Folder, self.__bookmarkRootNode) 179 self.__menu = BookmarkNode(BookmarkNode.Folder,
180 self.__bookmarkRootNode)
173 self.__menu.title = self.trUtf8(BOOKMARKMENU) 181 self.__menu.title = self.trUtf8(BOOKMARKMENU)
174 else: 182 else:
175 self.__bookmarkRootNode.add(self.__menu) 183 self.__bookmarkRootNode.add(self.__menu)
176 184
177 for node in others: 185 for node in others:
214 @param row row number (integer) 222 @param row row number (integer)
215 """ 223 """
216 if not self.__loaded: 224 if not self.__loaded:
217 return 225 return
218 226
219 self.setTimestamp(node, BookmarkNode.TsAdded, QDateTime.currentDateTime()) 227 self.setTimestamp(node, BookmarkNode.TsAdded,
228 QDateTime.currentDateTime())
220 229
221 command = InsertBookmarksCommand(self, parent, node, row) 230 command = InsertBookmarksCommand(self, parent, node, row)
222 self.__commands.push(command) 231 self.__commands.push(command)
223 232
224 def removeBookmark(self, node): 233 def removeBookmark(self, node):
392 401
393 if bmNames is not None and bmFiles is not None: 402 if bmNames is not None and bmFiles is not None:
394 if len(bmNames) == len(bmFiles): 403 if len(bmNames) == len(bmFiles):
395 convertedRootNode = BookmarkNode(BookmarkNode.Folder) 404 convertedRootNode = BookmarkNode(BookmarkNode.Folder)
396 convertedRootNode.title = self.trUtf8("Converted {0}")\ 405 convertedRootNode.title = self.trUtf8("Converted {0}")\
397 .format(QDate.currentDate().toString(Qt.SystemLocaleShortDate)) 406 .format(QDate.currentDate().toString(
407 Qt.SystemLocaleShortDate))
398 for i in range(len(bmNames)): 408 for i in range(len(bmNames)):
399 node = BookmarkNode(BookmarkNode.Bookmark, convertedRootNode) 409 node = BookmarkNode(BookmarkNode.Bookmark,
410 convertedRootNode)
400 node.title = bmNames[i] 411 node.title = bmNames[i]
401 url = QUrl(bmFiles[i]) 412 url = QUrl(bmFiles[i])
402 if not url.scheme(): 413 if not url.scheme():
403 url.setScheme("file") 414 url.setScheme("file")
404 node.url = url.toString() 415 node.url = url.toString()
444 def __searchBookmark(self, url, startNode): 455 def __searchBookmark(self, url, startNode):
445 """ 456 """
446 Private method get a bookmark node for a given URL. 457 Private method get a bookmark node for a given URL.
447 458
448 @param url URL of the bookmark to search for (string) 459 @param url URL of the bookmark to search for (string)
449 @param startNode reference to the node to start searching (BookmarkNode) 460 @param startNode reference to the node to start searching
461 (BookmarkNode)
450 @return bookmark node for the given url (BookmarkNode) 462 @return bookmark node for the given url (BookmarkNode)
451 """ 463 """
452 bm = None 464 bm = None
453 for node in startNode.children(): 465 for node in startNode.children():
454 if node.type() == BookmarkNode.Folder: 466 if node.type() == BookmarkNode.Folder:
486 def __searchBookmarks(self, url, startNode): 498 def __searchBookmarks(self, url, startNode):
487 """ 499 """
488 Private method get a list of bookmark nodes for a given URL. 500 Private method get a list of bookmark nodes for a given URL.
489 501
490 @param url URL of the bookmarks to search for (string) 502 @param url URL of the bookmarks to search for (string)
491 @param startNode reference to the node to start searching (BookmarkNode) 503 @param startNode reference to the node to start searching
504 (BookmarkNode)
492 @return list of bookmark nodes for the given url (list of BookmarkNode) 505 @return list of bookmark nodes for the given url (list of BookmarkNode)
493 """ 506 """
494 bm = [] 507 bm = []
495 for node in startNode.children(): 508 for node in startNode.children():
496 if node.type() == BookmarkNode.Folder: 509 if node.type() == BookmarkNode.Folder:
507 """ 520 """
508 def __init__(self, bookmarksManager, parent, row): 521 def __init__(self, bookmarksManager, parent, row):
509 """ 522 """
510 Constructor 523 Constructor
511 524
512 @param bookmarksManager reference to the bookmarks manager (BookmarksManager) 525 @param bookmarksManager reference to the bookmarks manager
526 (BookmarksManager)
513 @param parent reference to the parent node (BookmarkNode) 527 @param parent reference to the parent node (BookmarkNode)
514 @param row row number of bookmark (integer) 528 @param row row number of bookmark (integer)
515 """ 529 """
516 super().__init__( 530 super().__init__(
517 QApplication.translate("BookmarksManager", "Remove Bookmark")) 531 QApplication.translate("BookmarksManager", "Remove Bookmark"))
534 def redo(self): 548 def redo(self):
535 """ 549 """
536 Public slot to perform the redo action. 550 Public slot to perform the redo action.
537 """ 551 """
538 self._parent.remove(self._node) 552 self._parent.remove(self._node)
539 self._bookmarksManager.entryRemoved.emit(self._parent, self._row, self._node) 553 self._bookmarksManager.entryRemoved.emit(
554 self._parent, self._row, self._node)
540 555
541 556
542 class InsertBookmarksCommand(RemoveBookmarksCommand): 557 class InsertBookmarksCommand(RemoveBookmarksCommand):
543 """ 558 """
544 Class implementing the Insert undo command. 559 Class implementing the Insert undo command.
545 """ 560 """
546 def __init__(self, bookmarksManager, parent, node, row): 561 def __init__(self, bookmarksManager, parent, node, row):
547 """ 562 """
548 Constructor 563 Constructor
549 564
550 @param bookmarksManager reference to the bookmarks manager (BookmarksManager) 565 @param bookmarksManager reference to the bookmarks manager
566 (BookmarksManager)
551 @param parent reference to the parent node (BookmarkNode) 567 @param parent reference to the parent node (BookmarkNode)
552 @param node reference to the node to be inserted (BookmarkNode) 568 @param node reference to the node to be inserted (BookmarkNode)
553 @param row row number of bookmark (integer) 569 @param row row number of bookmark (integer)
554 """ 570 """
555 RemoveBookmarksCommand.__init__(self, bookmarksManager, parent, row) 571 RemoveBookmarksCommand.__init__(self, bookmarksManager, parent, row)
556 self.setText(QApplication.translate("BookmarksManager", "Insert Bookmark")) 572 self.setText(QApplication.translate(
573 "BookmarksManager", "Insert Bookmark"))
557 self._node = node 574 self._node = node
558 575
559 def undo(self): 576 def undo(self):
560 """ 577 """
561 Public slot to perform the undo action. 578 Public slot to perform the undo action.
575 """ 592 """
576 def __init__(self, bookmarksManager, node, newValue, title): 593 def __init__(self, bookmarksManager, node, newValue, title):
577 """ 594 """
578 Constructor 595 Constructor
579 596
580 @param bookmarksManager reference to the bookmarks manager (BookmarksManager) 597 @param bookmarksManager reference to the bookmarks manager
598 (BookmarksManager)
581 @param node reference to the node to be changed (BookmarkNode) 599 @param node reference to the node to be changed (BookmarkNode)
582 @param newValue new value to be set (string) 600 @param newValue new value to be set (string)
583 @param title flag indicating a change of the title (True) or 601 @param title flag indicating a change of the title (True) or
584 the URL (False) (boolean) 602 the URL (False) (boolean)
585 """ 603 """
590 self._newValue = newValue 608 self._newValue = newValue
591 self._node = node 609 self._node = node
592 610
593 if self._title: 611 if self._title:
594 self._oldValue = self._node.title 612 self._oldValue = self._node.title
595 self.setText(QApplication.translate("BookmarksManager", "Name Change")) 613 self.setText(QApplication.translate(
614 "BookmarksManager", "Name Change"))
596 else: 615 else:
597 self._oldValue = self._node.url 616 self._oldValue = self._node.url
598 self.setText(QApplication.translate("BookmarksManager", "Address Change")) 617 self.setText(QApplication.translate(
618 "BookmarksManager", "Address Change"))
599 619
600 def undo(self): 620 def undo(self):
601 """ 621 """
602 Public slot to perform the undo action. 622 Public slot to perform the undo action.
603 """ 623 """

eric ide

mercurial