17 |
17 |
18 |
18 |
19 class ZoomManager(QObject): |
19 class ZoomManager(QObject): |
20 """ |
20 """ |
21 Class implementing a manager for site specific zoom level settings. |
21 Class implementing a manager for site specific zoom level settings. |
22 |
22 |
23 @signal changed() emitted to indicate a change of the zoom level |
23 @signal changed() emitted to indicate a change of the zoom level |
24 """ |
24 """ |
|
25 |
25 changed = pyqtSignal() |
26 changed = pyqtSignal() |
26 |
27 |
27 def __init__(self, parent=None): |
28 def __init__(self, parent=None): |
28 """ |
29 """ |
29 Constructor |
30 Constructor |
30 |
31 |
31 @param parent reference to the parent object (QObject) |
32 @param parent reference to the parent object (QObject) |
32 """ |
33 """ |
33 super().__init__(parent) |
34 super().__init__(parent) |
34 |
35 |
35 self.__zoomDB = {} |
36 self.__zoomDB = {} |
36 |
37 |
37 self.__saveTimer = AutoSaver(self, self.save) |
38 self.__saveTimer = AutoSaver(self, self.save) |
38 |
39 |
39 self.changed.connect(self.__saveTimer.changeOccurred) |
40 self.changed.connect(self.__saveTimer.changeOccurred) |
40 |
41 |
41 self.__loaded = False |
42 self.__loaded = False |
42 |
43 |
43 def close(self): |
44 def close(self): |
44 """ |
45 """ |
45 Public method to close the zoom manager. |
46 Public method to close the zoom manager. |
46 """ |
47 """ |
47 self.__saveTimer.saveIfNeccessary() |
48 self.__saveTimer.saveIfNeccessary() |
48 |
49 |
49 def load(self): |
50 def load(self): |
50 """ |
51 """ |
51 Public method to load the bookmarks. |
52 Public method to load the bookmarks. |
52 """ |
53 """ |
53 if self.__loaded: |
54 if self.__loaded: |
54 return |
55 return |
55 |
56 |
56 dbString = Preferences.getWebBrowser("ZoomValuesDB") |
57 dbString = Preferences.getWebBrowser("ZoomValuesDB") |
57 if dbString: |
58 if dbString: |
58 with contextlib.suppress(ValueError): |
59 with contextlib.suppress(ValueError): |
59 db = json.loads(dbString) |
60 db = json.loads(dbString) |
60 self.__zoomDB = db |
61 self.__zoomDB = db |
61 |
62 |
62 self.__loaded = True |
63 self.__loaded = True |
63 |
64 |
64 def save(self): |
65 def save(self): |
65 """ |
66 """ |
66 Public method to save the zoom values. |
67 Public method to save the zoom values. |
67 """ |
68 """ |
68 if not self.__loaded: |
69 if not self.__loaded: |
69 return |
70 return |
70 |
71 |
71 from WebBrowser.WebBrowserWindow import WebBrowserWindow |
72 from WebBrowser.WebBrowserWindow import WebBrowserWindow |
|
73 |
72 if not WebBrowserWindow.isPrivate(): |
74 if not WebBrowserWindow.isPrivate(): |
73 dbString = json.dumps(self.__zoomDB) |
75 dbString = json.dumps(self.__zoomDB) |
74 Preferences.setWebBrowser("ZoomValuesDB", dbString) |
76 Preferences.setWebBrowser("ZoomValuesDB", dbString) |
75 |
77 |
76 def __keyFromUrl(self, url): |
78 def __keyFromUrl(self, url): |
77 """ |
79 """ |
78 Private method to generate a DB key for an URL. |
80 Private method to generate a DB key for an URL. |
79 |
81 |
80 @param url URL to generate a key for |
82 @param url URL to generate a key for |
81 @type QUrl |
83 @type QUrl |
82 @return key for the given URL |
84 @return key for the given URL |
83 @rtype str |
85 @rtype str |
84 """ |
86 """ |
92 elif scheme == "file": |
94 elif scheme == "file": |
93 path = url.path() |
95 path = url.path() |
94 key = path.rsplit("/", 1)[0] |
96 key = path.rsplit("/", 1)[0] |
95 else: |
97 else: |
96 key = "" |
98 key = "" |
97 |
99 |
98 return key |
100 return key |
99 |
101 |
100 def setZoomValue(self, url, zoomValue): |
102 def setZoomValue(self, url, zoomValue): |
101 """ |
103 """ |
102 Public method to record the zoom value for the given URL. |
104 Public method to record the zoom value for the given URL. |
103 |
105 |
104 Note: Only zoom values not equal 100% are recorded. |
106 Note: Only zoom values not equal 100% are recorded. |
105 |
107 |
106 @param url URL of the page to remember the zoom value for |
108 @param url URL of the page to remember the zoom value for |
107 @type QUrl |
109 @type QUrl |
108 @param zoomValue zoom value for the URL |
110 @param zoomValue zoom value for the URL |
109 @type int |
111 @type int |
110 """ |
112 """ |
111 self.load() |
113 self.load() |
112 |
114 |
113 key = self.__keyFromUrl(url) |
115 key = self.__keyFromUrl(url) |
114 if not key: |
116 if not key: |
115 return |
117 return |
116 |
118 |
117 if ((zoomValue == 100 and key not in self.__zoomDB) or |
119 if (zoomValue == 100 and key not in self.__zoomDB) or ( |
118 (key in self.__zoomDB and self.__zoomDB[key] == zoomValue)): |
120 key in self.__zoomDB and self.__zoomDB[key] == zoomValue |
119 return |
121 ): |
120 |
122 return |
|
123 |
121 if zoomValue == 100: |
124 if zoomValue == 100: |
122 del self.__zoomDB[key] |
125 del self.__zoomDB[key] |
123 else: |
126 else: |
124 self.__zoomDB[key] = zoomValue |
127 self.__zoomDB[key] = zoomValue |
125 |
128 |
126 self.changed.emit() |
129 self.changed.emit() |
127 |
130 |
128 def zoomValue(self, url): |
131 def zoomValue(self, url): |
129 """ |
132 """ |
130 Public method to get the zoom value for an URL. |
133 Public method to get the zoom value for an URL. |
131 |
134 |
132 @param url URL of the page to get the zoom value for |
135 @param url URL of the page to get the zoom value for |
133 @type QUrl |
136 @type QUrl |
134 @return zoomValue zoom value for the URL |
137 @return zoomValue zoom value for the URL |
135 @rtype int |
138 @rtype int |
136 """ |
139 """ |
137 self.load() |
140 self.load() |
138 |
141 |
139 key = self.__keyFromUrl(url) |
142 key = self.__keyFromUrl(url) |
140 if not key: |
143 if not key: |
141 zoom = 100 |
144 zoom = 100 |
142 |
145 |
143 # default zoom value (i.e. no zoom) |
146 # default zoom value (i.e. no zoom) |
144 zoom = self.__zoomDB.get(key, 100) |
147 zoom = self.__zoomDB.get(key, 100) |
145 |
148 |
146 return zoom |
149 return zoom |
147 |
150 |
148 def clear(self): |
151 def clear(self): |
149 """ |
152 """ |
150 Public method to clear the saved zoom values. |
153 Public method to clear the saved zoom values. |
151 """ |
154 """ |
152 self.__zoomDB = {} |
155 self.__zoomDB = {} |
153 self.__loaded = True |
156 self.__loaded = True |
154 |
157 |
155 self.changed.emit() |
158 self.changed.emit() |
156 |
159 |
157 def removeZoomValue(self, site): |
160 def removeZoomValue(self, site): |
158 """ |
161 """ |
159 Public method to remove a zoom value entry. |
162 Public method to remove a zoom value entry. |
160 |
163 |
161 @param site web site name |
164 @param site web site name |
162 @type str |
165 @type str |
163 """ |
166 """ |
164 self.load() |
167 self.load() |
165 |
168 |
166 if site in self.__zoomDB: |
169 if site in self.__zoomDB: |
167 del self.__zoomDB[site] |
170 del self.__zoomDB[site] |
168 self.changed.emit() |
171 self.changed.emit() |
169 |
172 |
170 def allSiteNames(self): |
173 def allSiteNames(self): |
171 """ |
174 """ |
172 Public method to get a list of all site names. |
175 Public method to get a list of all site names. |
173 |
176 |
174 @return sorted list of all site names |
177 @return sorted list of all site names |
175 @rtype list of str |
178 @rtype list of str |
176 """ |
179 """ |
177 self.load() |
180 self.load() |
178 |
181 |
179 return sorted(self.__zoomDB.keys()) |
182 return sorted(self.__zoomDB.keys()) |
180 |
183 |
181 def sitesCount(self): |
184 def sitesCount(self): |
182 """ |
185 """ |
183 Public method to get the number of available sites. |
186 Public method to get the number of available sites. |
184 |
187 |
185 @return number of sites |
188 @return number of sites |
186 @rtype int |
189 @rtype int |
187 """ |
190 """ |
188 self.load() |
191 self.load() |
189 |
192 |
190 return len(self.__zoomDB) |
193 return len(self.__zoomDB) |
191 |
194 |
192 def siteInfo(self, site): |
195 def siteInfo(self, site): |
193 """ |
196 """ |
194 Public method to get the zoom value for the site. |
197 Public method to get the zoom value for the site. |
195 |
198 |
196 @param site web site name |
199 @param site web site name |
197 @type str |
200 @type str |
198 @return zoom value for the site |
201 @return zoom value for the site |
199 @rtype int |
202 @rtype int |
200 """ |
203 """ |
201 self.load() |
204 self.load() |
202 |
205 |
203 if site not in self.__zoomDB: |
206 if site not in self.__zoomDB: |
204 return None |
207 return None |
205 |
208 |
206 return self.__zoomDB[site] |
209 return self.__zoomDB[site] |
207 |
210 |
208 |
211 |
209 _ZoomManager = None |
212 _ZoomManager = None |
210 |
213 |
211 |
214 |
212 def instance(): |
215 def instance(): |
213 """ |
216 """ |
214 Global function to get a reference to the zoom manager and create it, if |
217 Global function to get a reference to the zoom manager and create it, if |
215 it hasn't been yet. |
218 it hasn't been yet. |
216 |
219 |
217 @return reference to the zoom manager object |
220 @return reference to the zoom manager object |
218 @rtype ZoomManager |
221 @rtype ZoomManager |
219 """ |
222 """ |
220 global _ZoomManager |
223 global _ZoomManager |
221 |
224 |
222 if _ZoomManager is None: |
225 if _ZoomManager is None: |
223 _ZoomManager = ZoomManager() |
226 _ZoomManager = ZoomManager() |
224 |
227 |
225 return _ZoomManager |
228 return _ZoomManager |