Helpviewer/Bookmarks/BookmarksToolBar.py

changeset 0
de9c2efb9d02
child 7
c679fb30c8f3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Helpviewer/Bookmarks/BookmarksToolBar.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,180 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a tool bar showing bookmarks.
+"""
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from E4Gui.E4ModelToolBar import E4ModelToolBar
+
+import Helpviewer.HelpWindow
+
+from BookmarksModel import BookmarksModel
+from BookmarkNode import BookmarkNode
+from BookmarksMenu import BookmarksMenu
+from AddBookmarkDialog import AddBookmarkDialog
+
+import UI.PixmapCache
+
+class BookmarksToolBar(E4ModelToolBar):
+    """
+    Class implementing a tool bar showing bookmarks.
+    
+    @signal openUrl(const QUrl&, const QString&) emitted to open a URL in the current
+            tab
+    @signal newUrl(const QUrl&, const QString&) emitted to open a URL in a new tab
+    """
+    def __init__(self, model, parent = None):
+        """
+        Constructor
+        
+        @param model reference to the bookmarks model (BookmarksModel)
+        @param parent reference to the parent widget (QWidget)
+        """
+        E4ModelToolBar.__init__(self, 
+            QApplication.translate("BookmarksToolBar", "Bookmarks"), parent)
+        
+        self.__bookmarksModel = model
+        
+        self.setModel(model)
+        self.setRootIndex(model.nodeIndex(
+            Helpviewer.HelpWindow.HelpWindow.bookmarksManager().toolbar()))
+        
+        self.setContextMenuPolicy(Qt.CustomContextMenu)
+        self.connect(self, SIGNAL("customContextMenuRequested(const QPoint &)"), 
+                     self.__contextMenuRequested)
+        self.connect(self, SIGNAL("activated(const QModelIndex &)"), 
+                     self.__bookmarkActivated)
+        
+        self.setHidden(True)
+        self.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+        
+        self._build()
+    
+    def __contextMenuRequested(self, pos):
+        """
+        Private slot to handle the context menu request.
+        
+        @param pos position the context menu shall be shown (QPoint)
+        """
+        act = self.actionAt(pos)
+        menu = QMenu()
+        
+        if act is not None:
+            v = act.data()
+            
+            if act.menu() is None:
+                menuAction = menu.addAction(self.trUtf8("&Open"), self.__openBookmark)
+                menuAction.setData(v)
+                
+                menuAction = menu.addAction(self.trUtf8("Open in New &Tab\tCtrl+LMB"), 
+                    self.__openBookmarkInNewTab)
+                menuAction.setData(v)
+                
+                menu.addSeparator()
+            
+            menuAction = menu.addAction(self.trUtf8("&Remove"), self.__removeBookmark)
+            menuAction.setData(v)
+            
+            menu.addSeparator()
+        
+        menu.addAction(self.trUtf8("Add &Bookmark..."), self.__newBookmark)
+        menu.addAction(self.trUtf8("Add &Folder..."), self.__newFolder)
+        
+        menu.exec_(QCursor.pos())
+    
+    def __bookmarkActivated(self, idx):
+        """
+        Private slot handling the activation of a bookmark.
+        
+        @param idx index of the activated bookmark (QModelIndex)
+        """
+        assert idx.isValid()
+        
+        if self._keyboardModifiers & Qt.ControlModifier:
+            self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), 
+                      idx.data(BookmarksModel.UrlRole).toUrl(), 
+                      idx.data(Qt.DisplayRole).toString())
+        else:
+            self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), 
+                      idx.data(BookmarksModel.UrlRole).toUrl(), 
+                      idx.data(Qt.DisplayRole).toString())
+    
+    def __openToolBarBookmark(self):
+        """
+        Private slot to open a bookmark in the current browser tab.
+        """
+        idx = self.index(self.sender())
+        
+        if self._keyboardModifiers & Qt.ControlModifier:
+            self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), 
+                      idx.data(BookmarksModel.UrlRole).toUrl(), 
+                      idx.data(Qt.DisplayRole).toString())
+        else:
+            self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), 
+                      idx.data(BookmarksModel.UrlRole).toUrl(), 
+                      idx.data(Qt.DisplayRole).toString())
+        self.resetFlags()
+    
+    def __openBookmark(self):
+        """
+        Private slot to open a bookmark in the current browser tab.
+        """
+        idx = self.index(self.sender())
+        
+        self.emit(SIGNAL("openUrl(const QUrl&, const QString&)"), 
+                  idx.data(BookmarksModel.UrlRole).toUrl(), 
+                  idx.data(Qt.DisplayRole).toString())
+    
+    def __openBookmarkInNewTab(self):
+        """
+        Private slot to open a bookmark in a new browser tab.
+        """
+        idx = self.index(self.sender())
+        
+        self.emit(SIGNAL("newUrl(const QUrl&, const QString&)"), 
+                  idx.data(BookmarksModel.UrlRole).toUrl(), 
+                  idx.data(Qt.DisplayRole).toString())
+    
+    def __removeBookmark(self):
+        """
+        Private slot to remove a bookmark.
+        """
+        idx = self.index(self.sender())
+        
+        self.__bookmarksModel.removeRow(idx.row(), self.rootIndex())
+    
+    def __newBookmark(self):
+        """
+        Private slot to add a new bookmark.
+        """
+        dlg = AddBookmarkDialog()
+        dlg.setCurrentIndex(self.rootIndex())
+        dlg.exec_()
+    
+    def __newFolder(self):
+        """
+        Private slot to add a new bookmarks folder.
+        """
+        dlg = AddBookmarkDialog()
+        dlg.setCurrentIndex(self.rootIndex())
+        dlg.setFolder(True)
+        dlg.exec_()
+    
+    def _createMenu(self):
+        """
+        Protected method to create the menu for a tool bar action.
+        
+        @return menu for a tool bar action (E4ModelMenu)
+        """
+        menu = BookmarksMenu(self)
+        self.connect(menu, SIGNAL("openUrl(const QUrl&, const QString&)"), 
+                     self, SIGNAL("openUrl(const QUrl&, const QString&)"))
+        self.connect(menu, SIGNAL("newUrl(const QUrl&, const QString&)"), 
+                     self, SIGNAL("newUrl(const QUrl&, const QString&)"))
+        return menu

eric ide

mercurial