src/eric7/WebBrowser/ZoomManager/ZoomManager.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
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

eric ide

mercurial