Mon, 11 Oct 2021 19:59:45 +0200
Continued implementing the embedded help viewer widget.
8679
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | # Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing the help viewer base class. |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
8680
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
10 | from PyQt6.QtCore import pyqtSignal, QCoreApplication |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
11 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
12 | AboutBlank = QCoreApplication.translate( |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
13 | "HelpViewer", |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
14 | "<html>" |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
15 | "<head><title>about:blank</title></head>" |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
16 | "<body></body>" |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
17 | "</html>") |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
18 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
19 | PageNotFound = QCoreApplication.translate( |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
20 | "HelpViewer", |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
21 | """<html>""" |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
22 | """<head><title>Error 404...</title></head>""" |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
23 | """<body><div align="center"><br><br>""" |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
24 | """<h1>The page could not be found</h1><br>""" |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
25 | """<h3>'{0}'</h3></div></body>""" |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
26 | """</html>""") |
8679
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | |
8680
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
29 | class HelpViewerImpl: |
8679
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | """ |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | Class implementing the help viewer base class. |
8680
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
32 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
33 | This is the base class of help viewer implementations and defines the |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
34 | interface. Als subclasses must implement the these methods. |
8679
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | """ |
8680
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
36 | titleChanged = pyqtSignal() |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
37 | loadFinished = pyqtSignal(bool) |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
38 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
39 | def __init__(self, engine): |
8679
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | """ |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | Constructor |
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
8680
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
43 | @param engine reference to the help engine |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
44 | @type QHelpEngine |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
45 | """ |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
46 | self._engine = engine |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
47 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
48 | def setUrl(self, url): |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
49 | """ |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
50 | Public method to set the URL of the document to be shown. |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
51 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
52 | @param url source of the document |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
53 | @type QUrl |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
54 | @exception RuntimeError raised when not implemented |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
55 | """ |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
56 | raise RuntimeError("Not implemented") |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
57 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
58 | def getData(self, url): |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
59 | """ |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
60 | Public method to get the data to be shown. |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
61 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
62 | @param url URL to be loaded |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
63 | @type QUrl |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
64 | @return data to be shown |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
65 | @rtype str |
8679
fd172973428e
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | """ |
8680
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
67 | scheme = url.scheme() |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
68 | if scheme == "about": |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
69 | if url.toString() == "about:blank": |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
70 | return AboutBlank |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
71 | else: |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
72 | return PageNotFound.format(url.toString()) |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
73 | elif scheme in ("file", ""): |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
74 | filePath = url.toLocalFile() |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
75 | try: |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
76 | with open(filePath, "r", encoding="utf-8") as f: |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
77 | htmlText = f.read() |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
78 | return htmlText |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
79 | except OSError: |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
80 | return PageNotFound.format(url.toString()) |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
81 | elif scheme == "qthelp": |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
82 | if self._engine.findFile(url).isValid(): |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
83 | data = bytes(self._engine.fileData(url)).decode("utf-8") |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
84 | if not data: |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
85 | data = PageNotFound.format(url.toString()) |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
86 | return data |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
87 | else: |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
88 | return PageNotFound.format(url.toString()) |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
89 | else: |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
90 | # None is an indicator that we cannot handle the request |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
91 | return None |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
92 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
93 | def title(self): |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
94 | """ |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
95 | Public method get the page title. |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
96 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
97 | @return page title |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
98 | @rtype str |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
99 | @exception RuntimeError raised when not implemented |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
100 | """ |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
101 | raise RuntimeError("Not implemented") |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
102 | return "" |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
103 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
104 | def gotoHistory(self, index): |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
105 | """ |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
106 | Public method to step through the history. |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
107 | |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
108 | @param index history index (<0 backward, >0 forward) |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
109 | @type int |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
110 | @exception RuntimeError raised when not implemented |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
111 | """ |
85503ff2fce9
Continued implementing the embedded help viewer widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8679
diff
changeset
|
112 | raise RuntimeError("Not implemented") |