Helpviewer/ZoomManager/ZoomManager.py

changeset 4612
c9982bcd00f8
child 4631
5c1a96925da4
equal deleted inserted replaced
4610:93732395fc1d 4612:c9982bcd00f8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2015 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a manager for site specific zoom level settings.
8 """
9
10 from __future__ import unicode_literals
11
12 import json
13
14 from PyQt5.QtCore import pyqtSignal, QObject
15
16 from Utilities.AutoSaver import AutoSaver
17 import Preferences
18
19
20 class ZoomManager(QObject):
21 """
22 Class implementing a manager for site specific zoom level settings.
23 """
24 changed = pyqtSignal()
25
26 def __init__(self, parent=None):
27 """
28 Constructor
29
30 @param parent reference to the parent object (QObject)
31 """
32 super(ZoomManager, self).__init__(parent)
33
34 self.__zoomDB = {}
35
36 self.__saveTimer = AutoSaver(self, self.save)
37
38 self.changed.connect(self.__saveTimer.changeOccurred)
39
40 self.__loaded = False
41
42 def close(self):
43 """
44 Public method to close the bookmark manager.
45 """
46 self.__saveTimer.saveIfNeccessary()
47
48 def load(self):
49 """
50 Public method to load the bookmarks.
51 """
52 if self.__loaded:
53 return
54
55 dbString = Preferences.getHelp("ZoomValuesDB")
56 if dbString:
57 try:
58 db = json.loads(dbString)
59 self.__zoomDB = db
60 except ValueError:
61 # ignore silently
62 pass
63
64 self.__loaded = True
65
66 def save(self):
67 """
68 Public method to save the bookmarks.
69 """
70 if not self.__loaded:
71 return
72
73 dbString = json.dumps(self.__zoomDB)
74 Preferences.setHelp("ZoomValuesDB", dbString)
75
76 def __keyFromUrl(self, url):
77 """
78 Private method to generate a DB key for an URL.
79
80 @param url URL to generate a key for
81 @type QUrl
82 @return key for the given URL
83 @rtype str
84 """
85 if url.isEmpty():
86 key = ""
87 else:
88 scheme = url.scheme()
89 host = url.host()
90 if host:
91 key = host
92 elif scheme == "file":
93 path = url.path()
94 key = path.rsplit("/", 1)[0]
95 else:
96 key = ""
97
98 return key
99
100 def setZoomValue(self, url, zoomValue):
101 """
102 Public method to record the zoom value for the given URL.
103
104 Note: Only zoom values not equal 100% are recorded.
105
106 @param url URL of the page to remember the zoom value for
107 @type QUrl
108 @param zoomValue zoom value for the URL
109 @type int
110 """
111 self.load()
112
113 key = self.__keyFromUrl(url)
114 if not key:
115 return
116
117 if ((zoomValue == 100 and key not in self.__zoomDB) or
118 (key in self.__zoomDB and self.__zoomDB[key] == zoomValue)):
119 return
120
121 if zoomValue == 100:
122 del self.__zoomDB[key]
123 else:
124 self.__zoomDB[key] = zoomValue
125
126 self.changed.emit()
127
128 def zoomValue(self, url):
129 """
130 Public method to get the zoom value for an URL.
131
132 @param url URL of the page to get the zoom value for
133 @type QUrl
134 @return zoomValue zoom value for the URL
135 @rtype int
136 """
137 self.load()
138
139 key = self.__keyFromUrl(url)
140 if not key:
141 zoom = 100
142
143 if key in self.__zoomDB:
144 zoom = self.__zoomDB[key]
145 else:
146 # default zoom value (i.e. no zoom)
147 zoom = 100
148
149 return zoom
150
151 def clear(self):
152 """
153 Public method to clear the saved zoom values.
154 """
155 self.__zoomDB = {}
156 self.__loaded = True
157
158 self.changed.emit()
159
160 def removeZoomValue(self, site):
161 """
162 Public method to remove a zoom value entry.
163
164 @param site web site name
165 @type str
166 """
167 self.load()
168
169 if site in self.__zoomDB:
170 del self.__zoomDB[site]
171 self.changed.emit()
172
173 def allSiteNames(self):
174 """
175 Public method to get a list of all site names.
176
177 @return sorted list of all site names
178 @rtype list of str
179 """
180 self.load()
181
182 return sorted(self.__zoomDB.keys())
183
184 def sitesCount(self):
185 """
186 Public method to get the number of available sites.
187
188 @return number of sites
189 @rtype int
190 """
191 self.load()
192
193 return len(self.__zoomDB)
194
195 def siteInfo(self, site):
196 """
197 Public method to get the zoom value for the site.
198
199 @param site web site name
200 @type str
201 @return zoom value for the site
202 @rtype int
203 """
204 self.load()
205
206 if site not in self.__zoomDB:
207 return None
208
209 return self.__zoomDB[site]

eric ide

mercurial