src/eric7/WebBrowser/UserAgent/UserAgentMenu.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
19 19
20 class UserAgentMenu(QMenu): 20 class UserAgentMenu(QMenu):
21 """ 21 """
22 Class implementing a menu to select the user agent string. 22 Class implementing a menu to select the user agent string.
23 """ 23 """
24
24 def __init__(self, title, url=None, parent=None): 25 def __init__(self, title, url=None, parent=None):
25 """ 26 """
26 Constructor 27 Constructor
27 28
28 @param title title of the menu (string) 29 @param title title of the menu (string)
29 @param url URL to set user agent for (QUrl) 30 @param url URL to set user agent for (QUrl)
30 @param parent reference to the parent widget (QWidget) 31 @param parent reference to the parent widget (QWidget)
31 """ 32 """
32 super().__init__(title, parent) 33 super().__init__(title, parent)
33 34
34 self.__manager = None 35 self.__manager = None
35 self.__url = url 36 self.__url = url
36 if self.__url: 37 if self.__url:
37 if self.__url.isValid(): 38 if self.__url.isValid():
38 from WebBrowser.WebBrowserWindow import WebBrowserWindow 39 from WebBrowser.WebBrowserWindow import WebBrowserWindow
40
39 self.__manager = WebBrowserWindow.userAgentsManager() 41 self.__manager = WebBrowserWindow.userAgentsManager()
40 else: 42 else:
41 self.__url = None 43 self.__url = None
42 44
43 self.aboutToShow.connect(self.__populateMenu) 45 self.aboutToShow.connect(self.__populateMenu)
44 46
45 def __populateMenu(self): 47 def __populateMenu(self):
46 """ 48 """
47 Private slot to populate the menu. 49 Private slot to populate the menu.
48 """ 50 """
49 self.aboutToShow.disconnect(self.__populateMenu) 51 self.aboutToShow.disconnect(self.__populateMenu)
50 52
51 self.__actionGroup = QActionGroup(self) 53 self.__actionGroup = QActionGroup(self)
52 54
53 # add default action 55 # add default action
54 self.__defaultUserAgent = QAction(self) 56 self.__defaultUserAgent = QAction(self)
55 self.__defaultUserAgent.setText(self.tr("Default")) 57 self.__defaultUserAgent.setText(self.tr("Default"))
56 self.__defaultUserAgent.setCheckable(True) 58 self.__defaultUserAgent.setCheckable(True)
57 self.__defaultUserAgent.triggered.connect( 59 self.__defaultUserAgent.triggered.connect(self.__switchToDefaultUserAgent)
58 self.__switchToDefaultUserAgent)
59 if self.__url: 60 if self.__url:
60 self.__defaultUserAgent.setChecked( 61 self.__defaultUserAgent.setChecked(
61 self.__manager.userAgentForUrl(self.__url) == "") 62 self.__manager.userAgentForUrl(self.__url) == ""
62 else: 63 )
63 from WebBrowser.WebBrowserPage import WebBrowserPage 64 else:
64 self.__defaultUserAgent.setChecked( 65 from WebBrowser.WebBrowserPage import WebBrowserPage
65 WebBrowserPage.userAgent() == "") 66
67 self.__defaultUserAgent.setChecked(WebBrowserPage.userAgent() == "")
66 self.addAction(self.__defaultUserAgent) 68 self.addAction(self.__defaultUserAgent)
67 self.__actionGroup.addAction(self.__defaultUserAgent) 69 self.__actionGroup.addAction(self.__defaultUserAgent)
68 isChecked = self.__defaultUserAgent.isChecked() 70 isChecked = self.__defaultUserAgent.isChecked()
69 71
70 # add default extra user agents 72 # add default extra user agents
71 isChecked = self.__addDefaultActions() or isChecked 73 isChecked = self.__addDefaultActions() or isChecked
72 74
73 # add other action 75 # add other action
74 self.addSeparator() 76 self.addSeparator()
75 self.__otherUserAgent = QAction(self) 77 self.__otherUserAgent = QAction(self)
76 self.__otherUserAgent.setText(self.tr("Other...")) 78 self.__otherUserAgent.setText(self.tr("Other..."))
77 self.__otherUserAgent.setCheckable(True) 79 self.__otherUserAgent.setCheckable(True)
78 self.__otherUserAgent.triggered.connect( 80 self.__otherUserAgent.triggered.connect(self.__switchToOtherUserAgent)
79 self.__switchToOtherUserAgent)
80 self.addAction(self.__otherUserAgent) 81 self.addAction(self.__otherUserAgent)
81 self.__actionGroup.addAction(self.__otherUserAgent) 82 self.__actionGroup.addAction(self.__otherUserAgent)
82 self.__otherUserAgent.setChecked(not isChecked) 83 self.__otherUserAgent.setChecked(not isChecked)
83 84
84 def __switchToDefaultUserAgent(self): 85 def __switchToDefaultUserAgent(self):
85 """ 86 """
86 Private slot to set the default user agent. 87 Private slot to set the default user agent.
87 """ 88 """
88 if self.__url: 89 if self.__url:
89 self.__manager.removeUserAgent(self.__url.host()) 90 self.__manager.removeUserAgent(self.__url.host())
90 else: 91 else:
91 from WebBrowser.WebBrowserPage import WebBrowserPage 92 from WebBrowser.WebBrowserPage import WebBrowserPage
93
92 WebBrowserPage.setUserAgent("") 94 WebBrowserPage.setUserAgent("")
93 95
94 def __switchToOtherUserAgent(self): 96 def __switchToOtherUserAgent(self):
95 """ 97 """
96 Private slot to set a custom user agent string. 98 Private slot to set a custom user agent string.
97 """ 99 """
98 from WebBrowser.WebBrowserPage import WebBrowserPage 100 from WebBrowser.WebBrowserPage import WebBrowserPage
101
99 userAgent, ok = QInputDialog.getText( 102 userAgent, ok = QInputDialog.getText(
100 self, 103 self,
101 self.tr("Custom user agent"), 104 self.tr("Custom user agent"),
102 self.tr("User agent:"), 105 self.tr("User agent:"),
103 QLineEdit.EchoMode.Normal, 106 QLineEdit.EchoMode.Normal,
104 WebBrowserPage.userAgent(resolveEmpty=True)) 107 WebBrowserPage.userAgent(resolveEmpty=True),
108 )
105 if ok: 109 if ok:
106 if self.__url: 110 if self.__url:
107 self.__manager.setUserAgentForUrl(self.__url, userAgent) 111 self.__manager.setUserAgentForUrl(self.__url, userAgent)
108 else: 112 else:
109 WebBrowserPage.setUserAgent(userAgent) 113 WebBrowserPage.setUserAgent(userAgent)
110 114
111 def __changeUserAgent(self, act): 115 def __changeUserAgent(self, act):
112 """ 116 """
113 Private slot to change the user agent. 117 Private slot to change the user agent.
114 118
115 @param act reference to the action that triggered 119 @param act reference to the action that triggered
116 @type QAction 120 @type QAction
117 """ 121 """
118 if self.__url: 122 if self.__url:
119 self.__manager.setUserAgentForUrl(self.__url, act.data()) 123 self.__manager.setUserAgentForUrl(self.__url, act.data())
120 else: 124 else:
121 from WebBrowser.WebBrowserPage import WebBrowserPage 125 from WebBrowser.WebBrowserPage import WebBrowserPage
126
122 WebBrowserPage.setUserAgent(act.data()) 127 WebBrowserPage.setUserAgent(act.data())
123 128
124 def __addDefaultActions(self): 129 def __addDefaultActions(self):
125 """ 130 """
126 Private slot to add the default user agent entries. 131 Private slot to add the default user agent entries.
127 132
128 @return flag indicating that a user agent entry is checked (boolean) 133 @return flag indicating that a user agent entry is checked (boolean)
129 """ 134 """
130 defaultUserAgents = QFile(os.path.join( 135 defaultUserAgents = QFile(
131 os.path.dirname(__file__), "UserAgentDefaults.xml")) 136 os.path.join(os.path.dirname(__file__), "UserAgentDefaults.xml")
137 )
132 defaultUserAgents.open(QIODevice.OpenModeFlag.ReadOnly) 138 defaultUserAgents.open(QIODevice.OpenModeFlag.ReadOnly)
133 139
134 menuStack = [] 140 menuStack = []
135 isChecked = False 141 isChecked = False
136 142
137 if self.__url: 143 if self.__url:
138 currentUserAgentString = self.__manager.userAgentForUrl(self.__url) 144 currentUserAgentString = self.__manager.userAgentForUrl(self.__url)
139 else: 145 else:
140 from WebBrowser.WebBrowserPage import WebBrowserPage 146 from WebBrowser.WebBrowserPage import WebBrowserPage
147
141 currentUserAgentString = WebBrowserPage.userAgent() 148 currentUserAgentString = WebBrowserPage.userAgent()
142 xml = QXmlStreamReader(defaultUserAgents) 149 xml = QXmlStreamReader(defaultUserAgents)
143 while not xml.atEnd(): 150 while not xml.atEnd():
144 xml.readNext() 151 xml.readNext()
145 if xml.isStartElement() and xml.name() == "separator": 152 if xml.isStartElement() and xml.name() == "separator":
146 if menuStack: 153 if menuStack:
147 menuStack[-1].addSeparator() 154 menuStack[-1].addSeparator()
148 else: 155 else:
149 self.addSeparator() 156 self.addSeparator()
150 continue 157 continue
151 158
152 if xml.isStartElement() and xml.name() == "useragent": 159 if xml.isStartElement() and xml.name() == "useragent":
153 attributes = xml.attributes() 160 attributes = xml.attributes()
154 title = attributes.value("description") 161 title = attributes.value("description")
155 userAgent = attributes.value("useragent") 162 userAgent = attributes.value("useragent")
156 163
157 act = QAction(self) 164 act = QAction(self)
158 act.setText(title) 165 act.setText(title)
159 act.setData(userAgent) 166 act.setData(userAgent)
160 act.setToolTip(userAgent) 167 act.setToolTip(userAgent)
161 act.setCheckable(True) 168 act.setCheckable(True)
162 act.setChecked(userAgent == currentUserAgentString) 169 act.setChecked(userAgent == currentUserAgentString)
163 act.triggered.connect( 170 act.triggered.connect(functools.partial(self.__changeUserAgent, act))
164 functools.partial(self.__changeUserAgent, act))
165 if menuStack: 171 if menuStack:
166 menuStack[-1].addAction(act) 172 menuStack[-1].addAction(act)
167 else: 173 else:
168 self.addAction(act) 174 self.addAction(act)
169 self.__actionGroup.addAction(act) 175 self.__actionGroup.addAction(act)
170 isChecked = isChecked or act.isChecked() 176 isChecked = isChecked or act.isChecked()
171 177
172 if xml.isStartElement() and xml.name() == "useragentmenu": 178 if xml.isStartElement() and xml.name() == "useragentmenu":
173 attributes = xml.attributes() 179 attributes = xml.attributes()
174 title = attributes.value("title") 180 title = attributes.value("title")
175 if title == "v_a_r_i_o_u_s": 181 if title == "v_a_r_i_o_u_s":
176 title = self.tr("Various") 182 title = self.tr("Various")
177 183
178 menu = QMenu(self) 184 menu = QMenu(self)
179 menu.setTitle(title) 185 menu.setTitle(title)
180 self.addMenu(menu) 186 self.addMenu(menu)
181 menuStack.append(menu) 187 menuStack.append(menu)
182 188
183 if xml.isEndElement() and xml.name() == "useragentmenu": 189 if xml.isEndElement() and xml.name() == "useragentmenu":
184 menuStack.pop() 190 menuStack.pop()
185 191
186 if xml.hasError(): 192 if xml.hasError():
187 EricMessageBox.critical( 193 EricMessageBox.critical(
188 self, 194 self,
189 self.tr("Parsing default user agents"), 195 self.tr("Parsing default user agents"),
190 self.tr( 196 self.tr(
191 """<p>Error parsing default user agents.</p><p>{0}</p>""") 197 """<p>Error parsing default user agents.</p><p>{0}</p>"""
192 .format(xml.errorString())) 198 ).format(xml.errorString()),
193 199 )
200
194 return isChecked 201 return isChecked

eric ide

mercurial