E5Gui/E5Action.py

changeset 55
b5c84934de9c
child 96
9624a110667d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/E5Gui/E5Action.py	Wed Jan 13 18:53:58 2010 +0000
@@ -0,0 +1,160 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2006 - 2010 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing an Action class extending QAction.
+
+This extension is necessary in order to support alternate keyboard
+shortcuts.
+"""
+
+from PyQt4.QtGui import QAction, QActionGroup, QIcon, QKeySequence
+from PyQt4.QtCore import QObject
+
+class ArgumentsError(RuntimeError):
+    """
+    Class implementing an exception, which is raised, if the wrong number of arguments
+    are given.
+    """
+    def __init__(self, error):
+        """
+        Constructor
+        """
+        self.errorMessage = str(error)
+        
+    def __repr__(self):
+        """
+        Private method returning a representation of the exception.
+        
+        @return string representing the error message
+        """
+        return str(self.errorMessage)
+        
+    def __str__(self):
+        """
+        Private method returning a string representation of the exception.
+        
+        @return string representing the error message
+        """
+        return str(self.errorMessage)
+
+class E5Action(QAction):
+    """
+    Class implementing an Action class extending QAction.
+    """
+    def __init__(self, *args):
+        """
+        Constructor
+        
+        @param args argument list of the constructor. This list is one of
+            <ul>
+            <li>text (string), icon (QIcon), menu text (string), 
+                accelarator (QKeySequence), alternative accelerator (QKeySequence), 
+                parent (QObject), name (string), toggle (boolean)</li>
+            <li>text (string), icon (QIcon), menu text (string), 
+                accelarator (QKeySequence), alternative accelerator (QKeySequence), 
+                parent (QObject), name (string)</li>
+            <li>text (string), menu text (string), 
+                accelarator (QKeySequence), alternative accelerator (QKeySequence), 
+                parent (QObject), name (string), toggle (boolean)</li>
+            <li>text (string), menu text (string), 
+                accelarator (QKeySequence), alternative accelerator (QKeySequence), 
+                parent (QObject), name (string)</li>
+            </ul>
+        """
+        if isinstance(args[1], QIcon):
+            icon = args[1]
+            incr = 1
+        else:
+            icon = None
+            incr = 0
+        if len(args) < 6+incr:
+            raise ArgumentsError("Not enough arguments, %d expected, got %d" % \
+                                 (6+incr, len(args)))
+        elif len(args) > 7+incr:
+            raise ArgumentsError("Too many arguments, max. %d expected, got %d" % \
+                                 (7+incr, len(args)))
+            
+        parent = args[4+incr]
+        QAction.__init__(self, parent)
+        name = args[5+incr]
+        if name:
+            self.setObjectName(name)
+        
+        if args[1+incr]:
+            self.setText(args[1+incr])
+        
+        if args[0]:
+            self.setIconText(args[0])
+        if args[2+incr]:
+            self.setShortcut(QKeySequence(args[2+incr]))
+        
+        if args[3+incr]:
+            self.setAlternateShortcut(QKeySequence(args[3+incr]))
+        
+        if icon:
+            self.setIcon(icon)
+        
+        if len(args) == 7+incr:
+            self.setCheckable(args[6+incr])
+        
+    def setAlternateShortcut(self, shortcut):
+        """
+        Public slot to set the alternative keyboard shortcut.
+        
+        @param shortcut the alternative accelerator (QKeySequence)
+        """
+        if not shortcut.isEmpty():
+            shortcuts = self.shortcuts()
+            if len(shortcuts) > 0:
+                if len(shortcuts) == 1:
+                    shortcuts.append(shortcut)
+                else:
+                    shortcuts[1] = shortcut
+                self.setShortcuts(shortcuts)
+        
+    def alternateShortcut(self):
+        """
+        Public method to retrieve the alternative keyboard shortcut.
+        
+        @return the alternative accelerator (QKeySequence)
+        """
+        shortcuts = self.shortcuts()
+        if len(shortcuts) < 2:
+            return QKeySequence()
+        else:
+            return shortcuts[1]
+
+def addActions(target, actions):
+    """
+    Module function to add a list of actions to a widget.
+    
+    @param target reference to the target widget (QWidget)
+    @param actions list of actions to be added to the target. A
+        None indicates a separator (list of QActions)
+    """
+    if target is None:
+        return
+    
+    for action in actions:
+        if action is None:
+            target.addSeparator()
+        else:
+            target.addAction(action)
+
+def createActionGroup(parent, name = None, exclusive = False):
+    """
+    Module function to create an action group.
+    
+    @param parent parent object of the action group (QObject)
+    @param name name of the action group object (string)
+    @param exclusive flag indicating an exclusive action group (boolean)
+    @return reference to the created action group (QActionGroup)
+    """
+    actGrp = QActionGroup(parent)
+    if name:
+        actGrp.setObjectName(name)
+    actGrp.setExclusive(exclusive)
+    return actGrp
\ No newline at end of file

eric ide

mercurial