src/eric7/WebBrowser/QtHelp/QtHelpDocumentationSettings.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9653
e67609152c5e
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
16 16
17 class QtHelpDocumentationSettings: 17 class QtHelpDocumentationSettings:
18 """ 18 """
19 Class implementing a temporary store for QtHelp documentation settings. 19 Class implementing a temporary store for QtHelp documentation settings.
20 """ 20 """
21
21 def __init__(self): 22 def __init__(self):
22 """ 23 """
23 Constructor 24 Constructor
24 """ 25 """
25 self._namespaceToComponent = {} 26 self._namespaceToComponent = {}
26 self._componentToNamespace = collections.defaultdict(list) 27 self._componentToNamespace = collections.defaultdict(list)
27 28
28 self._namespaceToVersion = {} 29 self._namespaceToVersion = {}
29 self._versionToNamespace = collections.defaultdict(list) 30 self._versionToNamespace = collections.defaultdict(list)
30 31
31 self._namespaceToFilename = {} 32 self._namespaceToFilename = {}
32 self._filenameToNamespace = {} 33 self._filenameToNamespace = {}
33 34
34 def addDocumentation(self, filename): 35 def addDocumentation(self, filename):
35 """ 36 """
36 Public method to a add a documentation file to the list. 37 Public method to a add a documentation file to the list.
37 38
38 @param filename name of the documentation file to add 39 @param filename name of the documentation file to add
39 @type str 40 @type str
40 @return flag indicating success 41 @return flag indicating success
41 @rtype bool 42 @rtype bool
42 """ 43 """
43 info = QCompressedHelpInfo.fromCompressedHelpFile(filename) 44 info = QCompressedHelpInfo.fromCompressedHelpFile(filename)
44 45
45 if info.isNull(): 46 if info.isNull():
46 return False 47 return False
47 48
48 namespace = info.namespaceName() 49 namespace = info.namespaceName()
49 50
50 if namespace in self._namespaceToFilename: 51 if namespace in self._namespaceToFilename:
51 return False 52 return False
52 53
53 if filename in self._filenameToNamespace: 54 if filename in self._filenameToNamespace:
54 return False 55 return False
55 56
56 component = info.component() 57 component = info.component()
57 version = info.version() 58 version = info.version()
58 59
59 self._namespaceToFilename[namespace] = filename 60 self._namespaceToFilename[namespace] = filename
60 self._filenameToNamespace[filename] = namespace 61 self._filenameToNamespace[filename] = namespace
61 62
62 self._namespaceToComponent[namespace] = component 63 self._namespaceToComponent[namespace] = component
63 self._componentToNamespace[component].append(namespace) 64 self._componentToNamespace[component].append(namespace)
64 65
65 self._namespaceToVersion[namespace] = version 66 self._namespaceToVersion[namespace] = version
66 self._versionToNamespace[version].append(namespace) 67 self._versionToNamespace[version].append(namespace)
67 68
68 return True 69 return True
69 70
70 def removeDocumentation(self, namespace): 71 def removeDocumentation(self, namespace):
71 """ 72 """
72 Public method to remove the documentation of a given namespace. 73 Public method to remove the documentation of a given namespace.
73 74
74 @param namespace name of the namespace 75 @param namespace name of the namespace
75 @type str 76 @type str
76 @return flag indicating success 77 @return flag indicating success
77 @rtype bool 78 @rtype bool
78 """ 79 """
79 if not namespace: 80 if not namespace:
80 return False 81 return False
81 82
82 try: 83 try:
83 filename = self._namespaceToFilename[namespace] 84 filename = self._namespaceToFilename[namespace]
84 except KeyError: 85 except KeyError:
85 return False 86 return False
86 87
87 component = self._namespaceToComponent[namespace] 88 component = self._namespaceToComponent[namespace]
88 version = self._namespaceToVersion[namespace] 89 version = self._namespaceToVersion[namespace]
89 90
90 del self._namespaceToComponent[namespace] 91 del self._namespaceToComponent[namespace]
91 del self._namespaceToVersion[namespace] 92 del self._namespaceToVersion[namespace]
92 del self._namespaceToFilename[namespace] 93 del self._namespaceToFilename[namespace]
93 del self._filenameToNamespace[filename] 94 del self._filenameToNamespace[filename]
94 self._componentToNamespace[component].remove(namespace) 95 self._componentToNamespace[component].remove(namespace)
95 if len(self._componentToNamespace[component]) == 0: 96 if len(self._componentToNamespace[component]) == 0:
96 del self._componentToNamespace[component] 97 del self._componentToNamespace[component]
97 self._versionToNamespace[version].remove(namespace) 98 self._versionToNamespace[version].remove(namespace)
98 if len(self._versionToNamespace[version]) == 0: 99 if len(self._versionToNamespace[version]) == 0:
99 del self._versionToNamespace[version] 100 del self._versionToNamespace[version]
100 101
101 return True 102 return True
102 103
103 def namespace(self, filename): 104 def namespace(self, filename):
104 """ 105 """
105 Public method to get the namespace defined by a QtHelp file. 106 Public method to get the namespace defined by a QtHelp file.
106 107
107 @param filename name of the QtHelp file 108 @param filename name of the QtHelp file
108 @type str 109 @type str
109 @return name of the namespace 110 @return name of the namespace
110 @rtype str 111 @rtype str
111 """ 112 """
112 return self._filenameToNamespace[filename] 113 return self._filenameToNamespace[filename]
113 114
114 def components(self): 115 def components(self):
115 """ 116 """
116 Public method to get the list of components. 117 Public method to get the list of components.
117 118
118 @return list of components 119 @return list of components
119 @rtype list of str 120 @rtype list of str
120 """ 121 """
121 return [k for k in self._componentToNamespace.keys()] 122 return [k for k in self._componentToNamespace.keys()]
122 123
123 def versions(self): 124 def versions(self):
124 """ 125 """
125 Public method to get the list of versions. 126 Public method to get the list of versions.
126 127
127 @return list of versions 128 @return list of versions
128 @rtype list of QVersionNumber 129 @rtype list of QVersionNumber
129 """ 130 """
130 return [k for k in self._versionToNamespace.keys()] 131 return [k for k in self._versionToNamespace.keys()]
131 132
132 def namespaces(self): 133 def namespaces(self):
133 """ 134 """
134 Public method to get the list of namespaces. 135 Public method to get the list of namespaces.
135 136
136 @return list of namespaces 137 @return list of namespaces
137 @rtype list of str 138 @rtype list of str
138 """ 139 """
139 return [k for k in self._namespaceToFilename.keys()] 140 return [k for k in self._namespaceToFilename.keys()]
140 141
141 def namespaceToFilename(self): 142 def namespaceToFilename(self):
142 """ 143 """
143 Public method to get the namespace to filename mapping. 144 Public method to get the namespace to filename mapping.
144 145
145 @return dictionary containing the namespace to filename mapping 146 @return dictionary containing the namespace to filename mapping
146 @rtype dict 147 @rtype dict
147 """ 148 """
148 return copy.deepcopy(self._namespaceToFilename) 149 return copy.deepcopy(self._namespaceToFilename)
149 150
150 @staticmethod 151 @staticmethod
151 def readSettings(helpEngine): 152 def readSettings(helpEngine):
152 """ 153 """
153 Static method to read the QtHelp documentation configuration. 154 Static method to read the QtHelp documentation configuration.
154 155
155 @param helpEngine reference to the QtHelp engine 156 @param helpEngine reference to the QtHelp engine
156 @type QHelpEngineCore 157 @type QHelpEngineCore
157 @return reference to the created QtHelpDocumentationSettings object 158 @return reference to the created QtHelpDocumentationSettings object
158 @rtype QtHelpDocumentationSettings 159 @rtype QtHelpDocumentationSettings
159 """ 160 """
160 filterEngine = helpEngine.filterEngine() 161 filterEngine = helpEngine.filterEngine()
161 162
162 docSettings = QtHelpDocumentationSettings() 163 docSettings = QtHelpDocumentationSettings()
163 docSettings._namespaceToComponent = filterEngine.namespaceToComponent() 164 docSettings._namespaceToComponent = filterEngine.namespaceToComponent()
164 docSettings._namespaceToVersion = filterEngine.namespaceToVersion() 165 docSettings._namespaceToVersion = filterEngine.namespaceToVersion()
165 166
166 for namespace, component in docSettings._namespaceToComponent.items(): 167 for namespace, component in docSettings._namespaceToComponent.items():
167 filename = helpEngine.documentationFileName(namespace) 168 filename = helpEngine.documentationFileName(namespace)
168 docSettings._namespaceToFilename[namespace] = filename 169 docSettings._namespaceToFilename[namespace] = filename
169 docSettings._filenameToNamespace[filename] = namespace 170 docSettings._filenameToNamespace[filename] = namespace
170 docSettings._componentToNamespace[component].append(namespace) 171 docSettings._componentToNamespace[component].append(namespace)
171 172
172 for namespace, version in docSettings._namespaceToVersion.items(): 173 for namespace, version in docSettings._namespaceToVersion.items():
173 docSettings._versionToNamespace[version].append(namespace) 174 docSettings._versionToNamespace[version].append(namespace)
174 175
175 return docSettings 176 return docSettings
176 177
177 @staticmethod 178 @staticmethod
178 def applySettings(helpEngine, settings): 179 def applySettings(helpEngine, settings):
179 """ 180 """
180 Static method to apply the changed QtHelp documentation configuration. 181 Static method to apply the changed QtHelp documentation configuration.
181 182
182 @param helpEngine reference to the QtHelp engine 183 @param helpEngine reference to the QtHelp engine
183 @type QHelpEngineCore 184 @type QHelpEngineCore
184 @param settings reference to the created QtHelpDocumentationSettings 185 @param settings reference to the created QtHelpDocumentationSettings
185 object 186 object
186 @type QtHelpDocumentationSettings 187 @type QtHelpDocumentationSettings
187 @return flag indicating success 188 @return flag indicating success
188 @rtype bool 189 @rtype bool
189 """ 190 """
190 currentSettings = QtHelpDocumentationSettings.readSettings(helpEngine) 191 currentSettings = QtHelpDocumentationSettings.readSettings(helpEngine)
191 192
192 docsToRemove = [name for name in currentSettings._namespaceToFilename 193 docsToRemove = [
193 if name not in settings._namespaceToFilename] 194 name
194 docsToAdd = [filename for filename in settings._filenameToNamespace 195 for name in currentSettings._namespaceToFilename
195 if filename not in currentSettings._filenameToNamespace] 196 if name not in settings._namespaceToFilename
196 197 ]
198 docsToAdd = [
199 filename
200 for filename in settings._filenameToNamespace
201 if filename not in currentSettings._filenameToNamespace
202 ]
203
197 changed = False 204 changed = False
198 for namespace in docsToRemove: 205 for namespace in docsToRemove:
199 helpEngine.unregisterDocumentation(namespace) 206 helpEngine.unregisterDocumentation(namespace)
200 changed = True 207 changed = True
201 208
202 for filename in docsToAdd: 209 for filename in docsToAdd:
203 helpEngine.registerDocumentation(filename) 210 helpEngine.registerDocumentation(filename)
204 changed = True 211 changed = True
205 212
206 return changed 213 return changed

eric ide

mercurial