Helpviewer/UserAgent/UserAgentMenu.py

changeset 1102
aae999261983
parent 945
8cd4d08fa9f6
child 1131
7781e396c903
--- a/Helpviewer/UserAgent/UserAgentMenu.py	Thu Jun 02 12:28:58 2011 +0200
+++ b/Helpviewer/UserAgent/UserAgentMenu.py	Thu Jun 02 17:29:13 2011 +0200
@@ -38,6 +38,8 @@
         """
         self.aboutToShow.disconnect(self.__populateMenu)
         
+        self.__actionGroup = QActionGroup(self)
+        
         # add default action
         self.__defaultUserAgent = QAction(self)
         self.__defaultUserAgent.setText(self.trUtf8("Default"))
@@ -45,9 +47,11 @@
         self.__defaultUserAgent.triggered[()].connect(self.__switchToDefaultUserAgent)
         self.__defaultUserAgent.setChecked(HelpWebPage().userAgent() == "")
         self.addAction(self.__defaultUserAgent)
+        self.__actionGroup.addAction(self.__defaultUserAgent)
+        isChecked = self.__defaultUserAgent.isChecked()
         
         # add default extra user agents
-        self.__addDefaultActions()
+        isChecked = self.__addDefaultActions() or isChecked
         
         # add other action
         self.addSeparator()
@@ -56,14 +60,8 @@
         self.__otherUserAgent.setCheckable(True)
         self.__otherUserAgent.triggered[()].connect(self.__switchToOtherUserAgent)
         self.addAction(self.__otherUserAgent)
-        
-        usingCustomUserAgent = True
-        actionGroup = QActionGroup(self)
-        for act in self.actions():
-            actionGroup.addAction(act)
-            if act.isChecked():
-                usingCustomUserAgent = False
-        self.__otherUserAgent.setChecked(usingCustomUserAgent)
+        self.__actionGroup.addAction(self.__otherUserAgent)
+        self.__otherUserAgent.setChecked(not isChecked)
     
     def __switchToDefaultUserAgent(self):
         """
@@ -94,7 +92,11 @@
     def __addDefaultActions(self):
         """
         Private slot to add the default user agent entries.
+        
+        @return flag indicating that a user agent entry is checked (boolean)
         """
+        menuStack = []
+        isChecked = False
         defaultUserAgents = QByteArray(UserAgentDefaults)
         
         currentUserAgentString = HelpWebPage().userAgent()
@@ -102,7 +104,10 @@
         while not xml.atEnd():
             xml.readNext()
             if xml.isStartElement() and xml.name() == "separator":
-                self.addSeparator()
+                if menuStack:
+                    menuStack[-1].addSeparator()
+                else:
+                    self.addSeparator()
                 continue
             
             if xml.isStartElement() and xml.name() == "useragent":
@@ -117,10 +122,31 @@
                 act.setCheckable(True)
                 act.setChecked(userAgent == currentUserAgentString)
                 act.triggered[()].connect(self.__changeUserAgent)
-                self.addAction(act)
+                if menuStack:
+                    menuStack[-1].addAction(act)
+                else:
+                    self.addAction(act)
+                self.__actionGroup.addAction(act)
+                isChecked = isChecked or act.isChecked()
+            
+            if xml.isStartElement() and xml.name() == "useragentmenu":
+                attributes = xml.attributes()
+                title = attributes.value("title")
+                if title == "v_a_r_i_o_u_s":
+                    title = self.trUtf8("Various")
+                
+                menu = QMenu(self)
+                menu.setTitle(title)
+                self.addMenu(menu)
+                menuStack.append(menu)
+            
+            if xml.isEndElement() and xml.name() == "useragentmenu":
+                menuStack.pop()
         
         if xml.hasError():
             E5MessageBox.critical(self,
                 self.trUtf8("Parsing default user agents"),
                 self.trUtf8("""<p>Error parsing default user agents.</p><p>{0}</p>""")\
                     .format(xml.errorString()))
+        
+        return isChecked

eric ide

mercurial