11 |
11 |
12 from PyQt4.QtCore import pyqtSignal, pyqtSlot, QObject, QCryptographicHash, QByteArray, \ |
12 from PyQt4.QtCore import pyqtSignal, pyqtSlot, QObject, QCryptographicHash, QByteArray, \ |
13 QUrl, qWarning |
13 QUrl, qWarning |
14 from PyQt4.QtWebKit import QWebPage |
14 from PyQt4.QtWebKit import QWebPage |
15 |
15 |
|
16 from E5Gui import E5MessageBox |
|
17 |
|
18 from .Page import Page |
16 from .PageThumbnailer import PageThumbnailer |
19 from .PageThumbnailer import PageThumbnailer |
17 |
20 from .SpeedDialReader import SpeedDialReader |
18 import Preferences |
21 from .SpeedDialWriter import SpeedDialWriter |
|
22 |
|
23 from Utilities.AutoSaver import AutoSaver |
19 import Utilities |
24 import Utilities |
20 |
|
21 |
|
22 class Page(object): |
|
23 """ |
|
24 Class to hold the data for a speed dial page. |
|
25 """ |
|
26 def __init__(self, url="", title="", broken=False): |
|
27 """ |
|
28 Constructor |
|
29 |
|
30 @param url URL of the page (string) |
|
31 @param title title of the page (string) |
|
32 """ |
|
33 self.url = url |
|
34 self.title = title |
|
35 self.broken = broken |
|
36 |
|
37 def __eq__(self, other): |
|
38 """ |
|
39 Public method implementing the equality operator. |
|
40 |
|
41 @param other reference to the other page object (Page) |
|
42 @return flag indicating equality (boolean) |
|
43 """ |
|
44 return self.title == other.title and \ |
|
45 self.url == other.url |
|
46 |
25 |
47 |
26 |
48 class SpeedDial(QObject): |
27 class SpeedDial(QObject): |
49 """ |
28 """ |
50 Class implementing the speed dial. |
29 Class implementing the speed dial. |
51 |
30 |
52 @signal pagesChanged() emitted after the list of pages changed |
31 @signal pagesChanged() emitted after the list of pages changed |
|
32 @signal speedDialSaved() emitted after the speed dial data was saved |
53 """ |
33 """ |
54 pagesChanged = pyqtSignal() |
34 pagesChanged = pyqtSignal() |
|
35 speedDialSaved = pyqtSignal() |
55 |
36 |
56 def __init__(self, parent=None): |
37 def __init__(self, parent=None): |
57 """ |
38 """ |
58 Constructor |
39 Constructor |
59 |
40 |
152 self.__initialScript += "addBox('{0}', '{1}', '{2}');\n".format( |
136 self.__initialScript += "addBox('{0}', '{1}', '{2}');\n".format( |
153 page.url, page.title, imgSource) |
137 page.url, page.title, imgSource) |
154 |
138 |
155 return self.__initialScript |
139 return self.__initialScript |
156 |
140 |
|
141 def getFileName(self): |
|
142 """ |
|
143 Public method to get the file name of the user agents file. |
|
144 |
|
145 @return name of the user agents file (string) |
|
146 """ |
|
147 return os.path.join(Utilities.getConfigDir(), "browser", "speedDial.xml") |
|
148 |
157 def __initialize(self): |
149 def __initialize(self): |
158 """ |
150 """ |
159 Private method to initialize the speed dial. |
151 Private method to initialize the speed dial. |
160 """ |
152 """ |
161 allPages = Preferences.Prefs.settings.value("Help/SpeedDial/Pages", "") |
153 self.__thumbnailsDirectory = os.path.join( |
162 |
154 Utilities.getConfigDir(), "browser", "thumbnails") |
163 if not allPages: |
155 # Create directory if it does not exist yet |
|
156 if not os.path.exists(self.__thumbnailsDirectory): |
|
157 os.makedirs(self.__thumbnailsDirectory) |
|
158 |
|
159 self.__load() |
|
160 |
|
161 def __load(self): |
|
162 """ |
|
163 Private method to load the speed dial configuration. |
|
164 """ |
|
165 speedDialFile = self.getFileName() |
|
166 if os.path.exists(speedDialFile): |
|
167 reader = SpeedDialReader() |
|
168 allPages, pagesPerRow, speedDialSize = reader.read(speedDialFile) |
|
169 self.__pagesPerRow = pagesPerRow if pagesPerRow else 4 |
|
170 self.__speedDialSize = speedDialSize if speedDialSize else 231 |
|
171 |
|
172 if allPages: |
|
173 self.__webPages = allPages |
|
174 self.pagesChanged.emit() |
|
175 else: |
164 allPages = \ |
176 allPages = \ |
165 'url:"http://eric-ide.python-projects.org/"|title:"Eric Web Site";'\ |
177 'url:"http://eric-ide.python-projects.org/"|title:"Eric Web Site";'\ |
166 'url:"http://www.riverbankcomputing.com/"|title:"PyQt4 Web Site";'\ |
178 'url:"http://www.riverbankcomputing.com/"|title:"PyQt4 Web Site";'\ |
167 'url:"http://qt.nokia.com/"|title:"Qt Web Site";'\ |
179 'url:"http://qt.nokia.com/"|title:"Qt Web Site";'\ |
168 'url:"http://www.python.org"|title:"Python Language Website";'\ |
180 'url:"http://www.python.org"|title:"Python Language Website";'\ |
169 'url:"http://www.google.com"|title:"Google";' |
181 'url:"http://www.google.com"|title:"Google";' |
170 self.changed(allPages) |
182 self.changed(allPages) |
171 |
183 |
172 self.__thumbnailsDirectory = os.path.join( |
184 def save(self): |
173 Utilities.getConfigDir(), "browser", "thumbnails") |
185 """ |
174 # Create directory if it does not exist yet |
186 Public method to save the speed dial configuration. |
175 if not os.path.exists(self.__thumbnailsDirectory): |
187 """ |
176 os.makedirs(self.__thumbnailsDirectory) |
188 speedDialFile = self.getFileName() |
|
189 writer = SpeedDialWriter() |
|
190 if not writer.write(speedDialFile, |
|
191 self.__webPages, self.__pagesPerRow, self.__speedDialSize): |
|
192 E5MessageBox.critical(None, |
|
193 self.trUtf8("Saving Speed Dial data"), |
|
194 self.trUtf8("""<p>Speed Dial data could not be saved to <b>{0}</b></p>""" |
|
195 ).format(speedDialFile)) |
|
196 else: |
|
197 self.speedDialSaved.emit() |
|
198 |
|
199 def close(self): |
|
200 """ |
|
201 Public method to close the user agents manager. |
|
202 """ |
|
203 self.__saveTimer.saveIfNeccessary() |
177 |
204 |
178 def pageForUrl(self, url): |
205 def pageForUrl(self, url): |
179 """ |
206 """ |
180 Public method to get the page for the given URL. |
207 Public method to get the page for the given URL. |
181 |
208 |
278 """ |
305 """ |
279 Public slot to set the number of pages per row. |
306 Public slot to set the number of pages per row. |
280 |
307 |
281 @param count number of pages per row (integer) |
308 @param count number of pages per row (integer) |
282 """ |
309 """ |
283 Preferences.Prefs.settings.setValue("Help/SpeedDial/PagesPerRow", count) |
310 self.__pagesPerRow = count |
|
311 self.__saveTimer.changeOccurred() |
284 |
312 |
285 def pagesInRow(self): |
313 def pagesInRow(self): |
286 """ |
314 """ |
287 Public method to get the number of dials per row. |
315 Public method to get the number of dials per row. |
288 |
316 |
289 @return number of dials per row (integer) |
317 @return number of dials per row (integer) |
290 """ |
318 """ |
291 return int( |
319 return self.__pagesPerRow |
292 Preferences.Prefs.settings.value("Help/SpeedDial/PagesPerRow", 4)) |
|
293 |
320 |
294 @pyqtSlot(int) |
321 @pyqtSlot(int) |
295 def setSdSize(self, size): |
322 def setSdSize(self, size): |
296 """ |
323 """ |
297 Public slot to set the size of the speed dial. |
324 Public slot to set the size of the speed dial. |
298 |
325 |
299 @param size size of the speed dial (integer) |
326 @param size size of the speed dial (integer) |
300 """ |
327 """ |
301 Preferences.Prefs.settings.setValue("Help/SpeedDial/SpeedDialSize", size) |
328 self.__speedDialSize = size |
|
329 self.__saveTimer.changeOccurred() |
302 |
330 |
303 def sdSize(self): |
331 def sdSize(self): |
304 """ |
332 """ |
305 Public method to get the speed dial size. |
333 Public method to get the speed dial size. |
306 |
334 |
307 @return speed dial size (integer) |
335 @return speed dial size (integer) |
308 """ |
336 """ |
309 return int( |
337 return self.__speedDialSize |
310 Preferences.Prefs.settings.value("Help/SpeedDial/SpeedDialSize", 231)) |
|
311 |
338 |
312 def __thumbnailCreated(self, image): |
339 def __thumbnailCreated(self, image): |
313 """ |
340 """ |
314 Private slot to handle the creation of a thumbnail image. |
341 Private slot to handle the creation of a thumbnail image. |
315 |
342 |
368 |
395 |
369 def __pagesChanged(self): |
396 def __pagesChanged(self): |
370 """ |
397 """ |
371 Private slot to react on a change of the pages configuration. |
398 Private slot to react on a change of the pages configuration. |
372 """ |
399 """ |
373 # step 1: save the list of pages |
400 # update all speed dial pages |
374 Preferences.Prefs.settings.setValue( |
|
375 "Help/SpeedDial/Pages", self.__generateAllPages()) |
|
376 |
|
377 # step 2: update all speed dial pages |
|
378 self.__regenerateScript = True |
401 self.__regenerateScript = True |
379 for frame in self.__cleanFrames(): |
402 for frame in self.__cleanFrames(): |
380 frame.page().triggerAction(QWebPage.Reload) |
403 frame.page().triggerAction(QWebPage.Reload) |
381 |
|
382 def __generateAllPages(self): |
|
383 """ |
|
384 Private method to generate s string with all pages managed by the speed dial. |
|
385 |
|
386 @return string with all pages (string) |
|
387 """ |
|
388 allPages = "" |
|
389 |
|
390 for page in self.__webPages: |
|
391 entry = 'url:"{0}"|title:"{1}";'.format(page.url, page.title) |
|
392 allPages += entry |
|
393 |
|
394 return allPages |
|