36 """ |
36 """ |
37 Private slot to populate the menu. |
37 Private slot to populate the menu. |
38 """ |
38 """ |
39 self.aboutToShow.disconnect(self.__populateMenu) |
39 self.aboutToShow.disconnect(self.__populateMenu) |
40 |
40 |
|
41 self.__actionGroup = QActionGroup(self) |
|
42 |
41 # add default action |
43 # add default action |
42 self.__defaultUserAgent = QAction(self) |
44 self.__defaultUserAgent = QAction(self) |
43 self.__defaultUserAgent.setText(self.trUtf8("Default")) |
45 self.__defaultUserAgent.setText(self.trUtf8("Default")) |
44 self.__defaultUserAgent.setCheckable(True) |
46 self.__defaultUserAgent.setCheckable(True) |
45 self.__defaultUserAgent.triggered[()].connect(self.__switchToDefaultUserAgent) |
47 self.__defaultUserAgent.triggered[()].connect(self.__switchToDefaultUserAgent) |
46 self.__defaultUserAgent.setChecked(HelpWebPage().userAgent() == "") |
48 self.__defaultUserAgent.setChecked(HelpWebPage().userAgent() == "") |
47 self.addAction(self.__defaultUserAgent) |
49 self.addAction(self.__defaultUserAgent) |
|
50 self.__actionGroup.addAction(self.__defaultUserAgent) |
|
51 isChecked = self.__defaultUserAgent.isChecked() |
48 |
52 |
49 # add default extra user agents |
53 # add default extra user agents |
50 self.__addDefaultActions() |
54 isChecked = self.__addDefaultActions() or isChecked |
51 |
55 |
52 # add other action |
56 # add other action |
53 self.addSeparator() |
57 self.addSeparator() |
54 self.__otherUserAgent = QAction(self) |
58 self.__otherUserAgent = QAction(self) |
55 self.__otherUserAgent.setText(self.trUtf8("Other...")) |
59 self.__otherUserAgent.setText(self.trUtf8("Other...")) |
56 self.__otherUserAgent.setCheckable(True) |
60 self.__otherUserAgent.setCheckable(True) |
57 self.__otherUserAgent.triggered[()].connect(self.__switchToOtherUserAgent) |
61 self.__otherUserAgent.triggered[()].connect(self.__switchToOtherUserAgent) |
58 self.addAction(self.__otherUserAgent) |
62 self.addAction(self.__otherUserAgent) |
59 |
63 self.__actionGroup.addAction(self.__otherUserAgent) |
60 usingCustomUserAgent = True |
64 self.__otherUserAgent.setChecked(not isChecked) |
61 actionGroup = QActionGroup(self) |
|
62 for act in self.actions(): |
|
63 actionGroup.addAction(act) |
|
64 if act.isChecked(): |
|
65 usingCustomUserAgent = False |
|
66 self.__otherUserAgent.setChecked(usingCustomUserAgent) |
|
67 |
65 |
68 def __switchToDefaultUserAgent(self): |
66 def __switchToDefaultUserAgent(self): |
69 """ |
67 """ |
70 Private slot to set the default user agent. |
68 Private slot to set the default user agent. |
71 """ |
69 """ |
92 HelpWebPage().setUserAgent(act.data()) |
90 HelpWebPage().setUserAgent(act.data()) |
93 |
91 |
94 def __addDefaultActions(self): |
92 def __addDefaultActions(self): |
95 """ |
93 """ |
96 Private slot to add the default user agent entries. |
94 Private slot to add the default user agent entries. |
|
95 |
|
96 @return flag indicating that a user agent entry is checked (boolean) |
97 """ |
97 """ |
|
98 menuStack = [] |
|
99 isChecked = False |
98 defaultUserAgents = QByteArray(UserAgentDefaults) |
100 defaultUserAgents = QByteArray(UserAgentDefaults) |
99 |
101 |
100 currentUserAgentString = HelpWebPage().userAgent() |
102 currentUserAgentString = HelpWebPage().userAgent() |
101 xml = QXmlStreamReader(defaultUserAgents) |
103 xml = QXmlStreamReader(defaultUserAgents) |
102 while not xml.atEnd(): |
104 while not xml.atEnd(): |
103 xml.readNext() |
105 xml.readNext() |
104 if xml.isStartElement() and xml.name() == "separator": |
106 if xml.isStartElement() and xml.name() == "separator": |
105 self.addSeparator() |
107 if menuStack: |
|
108 menuStack[-1].addSeparator() |
|
109 else: |
|
110 self.addSeparator() |
106 continue |
111 continue |
107 |
112 |
108 if xml.isStartElement() and xml.name() == "useragent": |
113 if xml.isStartElement() and xml.name() == "useragent": |
109 attributes = xml.attributes() |
114 attributes = xml.attributes() |
110 title = attributes.value("description") |
115 title = attributes.value("description") |
115 act.setData(userAgent) |
120 act.setData(userAgent) |
116 act.setToolTip(userAgent) |
121 act.setToolTip(userAgent) |
117 act.setCheckable(True) |
122 act.setCheckable(True) |
118 act.setChecked(userAgent == currentUserAgentString) |
123 act.setChecked(userAgent == currentUserAgentString) |
119 act.triggered[()].connect(self.__changeUserAgent) |
124 act.triggered[()].connect(self.__changeUserAgent) |
120 self.addAction(act) |
125 if menuStack: |
|
126 menuStack[-1].addAction(act) |
|
127 else: |
|
128 self.addAction(act) |
|
129 self.__actionGroup.addAction(act) |
|
130 isChecked = isChecked or act.isChecked() |
|
131 |
|
132 if xml.isStartElement() and xml.name() == "useragentmenu": |
|
133 attributes = xml.attributes() |
|
134 title = attributes.value("title") |
|
135 if title == "v_a_r_i_o_u_s": |
|
136 title = self.trUtf8("Various") |
|
137 |
|
138 menu = QMenu(self) |
|
139 menu.setTitle(title) |
|
140 self.addMenu(menu) |
|
141 menuStack.append(menu) |
|
142 |
|
143 if xml.isEndElement() and xml.name() == "useragentmenu": |
|
144 menuStack.pop() |
121 |
145 |
122 if xml.hasError(): |
146 if xml.hasError(): |
123 E5MessageBox.critical(self, |
147 E5MessageBox.critical(self, |
124 self.trUtf8("Parsing default user agents"), |
148 self.trUtf8("Parsing default user agents"), |
125 self.trUtf8("""<p>Error parsing default user agents.</p><p>{0}</p>""")\ |
149 self.trUtf8("""<p>Error parsing default user agents.</p><p>{0}</p>""")\ |
126 .format(xml.errorString())) |
150 .format(xml.errorString())) |
|
151 |
|
152 return isChecked |