Helpviewer/UserAgent/UserAgentMenu.py

Sun, 04 Jul 2010 20:46:52 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 04 Jul 2010 20:46:52 +0200
changeset 383
286de4e5179c
child 454
d28d558f7484
permissions
-rw-r--r--

Added capability to select the user agent string for the web browser.

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

eric ide

mercurial