Helpviewer/UserAgent/UserAgentMenu.py

changeset 383
286de4e5179c
child 454
d28d558f7484
equal deleted inserted replaced
382:29f660c4ad3e 383:286de4e5179c
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a menu to select the user agent string.
8 """
9
10 from PyQt4.QtCore import QByteArray, QXmlStreamReader
11 from PyQt4.QtGui import QMenu, QAction, QActionGroup, QMessageBox, QInputDialog, \
12 QLineEdit
13
14 from .UserAgentDefaults import UserAgentDefaults
15
16 from Helpviewer.HelpBrowserWV import HelpWebPage
17
18 class UserAgentMenu(QMenu):
19 """
20 Class implementing a menu to select the user agent string.
21 """
22 def __init__(self, title, parent = None):
23 """
24 Constructor
25
26 @param title title of the menu (string)
27 @param parent reference to the parent widget (QWidget)
28 """
29 QMenu.__init__(self, title, parent)
30
31 self.aboutToShow.connect(self.__populateMenu)
32
33 def __populateMenu(self):
34 """
35 Private slot to populate the menu.
36 """
37 self.aboutToShow.disconnect(self.__populateMenu)
38
39 # add default action
40 self.__defaultUserAgent = QAction(self)
41 self.__defaultUserAgent.setText(self.trUtf8("Default"))
42 self.__defaultUserAgent.setCheckable(True)
43 self.__defaultUserAgent.triggered.connect(self.__switchToDefaultUserAgent)
44 self.__defaultUserAgent.setChecked(HelpWebPage().userAgent() == "")
45 self.addAction(self.__defaultUserAgent)
46
47 # add default extra user agents
48 self.__addDefaultActions()
49
50 # add other action
51 self.addSeparator()
52 self.__otherUserAgent = QAction(self)
53 self.__otherUserAgent.setText(self.trUtf8("Other..."))
54 self.__otherUserAgent.setCheckable(True)
55 self.__otherUserAgent.triggered.connect(self.__switchToOtherUserAgent)
56 self.addAction(self.__otherUserAgent)
57
58 usingCustomUserAgent = True
59 actionGroup = QActionGroup(self)
60 for act in self.actions():
61 actionGroup.addAction(act)
62 if act.isChecked():
63 usingCustomUserAgent = False
64 self.__otherUserAgent.setChecked(usingCustomUserAgent)
65
66 def __switchToDefaultUserAgent(self):
67 """
68 Private slot to set the default user agent.
69 """
70 HelpWebPage().setUserAgent("")
71
72 def __switchToOtherUserAgent(self):
73 """
74 Private slot to set a custom user agent string.
75 """
76 userAgent, ok = QInputDialog.getText(
77 self,
78 self.trUtf8("Custom user agent"),
79 self.trUtf8("User agent:"),
80 QLineEdit.Normal,
81 HelpWebPage().userAgent(resolveEmpty = True))
82 if ok:
83 HelpWebPage().setUserAgent(userAgent)
84
85 def __changeUserAgent(self):
86 """
87 Private slot to change the user agent.
88 """
89 act = self.sender()
90 HelpWebPage().setUserAgent(act.data())
91
92 def __addDefaultActions(self):
93 """
94 Private slot to add the default user agent entries.
95 """
96 defaultUserAgents = QByteArray(UserAgentDefaults)
97
98 currentUserAgentString = HelpWebPage().userAgent()
99 xml = QXmlStreamReader(defaultUserAgents)
100 while not xml.atEnd():
101 xml.readNext()
102 if xml.isStartElement() and xml.name() == "separator":
103 self.addSeparator()
104 continue
105
106 if xml.isStartElement() and xml.name() == "useragent":
107 attributes = xml.attributes()
108 title = attributes.value("description")
109 userAgent = attributes.value("useragent")
110
111 act = QAction(self)
112 act.setText(title)
113 act.setData(userAgent)
114 act.setToolTip(userAgent)
115 act.setCheckable(True)
116 act.setChecked(userAgent == currentUserAgentString)
117 act.triggered.connect(self.__changeUserAgent)
118 self.addAction(act)
119
120 if xml.hasError():
121 QMessageBox.critical(None,
122 self.trUtf8("Parsing default user agents"),
123 self.trUtf8("""<p>Error parsing default user agents.</p><p>{0}</p>""")\
124 .format(xml.errorString()))
125

eric ide

mercurial