50 self.__subStyles = {} |
50 self.__subStyles = {} |
51 self.__subStylesInitialized = False |
51 self.__subStylesInitialized = False |
52 |
52 |
53 def loadSubstyles(self): |
53 def loadSubstyles(self): |
54 """ |
54 """ |
55 Public method to load the sub-styles from the settings file |
55 Public method to load the sub-styles from the settings file. |
56 """ |
56 """ |
57 settings = Preferences.Prefs.settings |
57 settings = Preferences.Prefs.settings |
58 |
58 |
59 self.loadDefaultSubStyles() |
59 # Step 1: check if sub-styles were defined and saved |
60 |
60 subStylesDefined = False |
61 for baseStyle in self.baseStyles: |
61 for baseStyle in self.baseStyles: |
62 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
62 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
63 self.language(), baseStyle) |
63 self.language(), baseStyle) |
64 if settings.contains(key): |
64 subStylesDefined |= settings.contains(key) |
65 subStyleLength = int(settings.value(key), 0) |
65 # Step 2.1: load default sub-styles, if none were defined |
66 self.__subStyles[baseStyle] = {} |
66 if not subStylesDefined: |
67 if subStyleLength: |
67 self.loadDefaultSubStyles() |
68 self.__subStyles[baseStyle] = [] |
68 |
69 for subStyle in range(subStyleLength): |
69 # Step 2.2: load from settings file |
70 baseKey = "Scintilla/{0}/style{1}/substyle{2}/".format( |
70 else: |
71 self.language(), baseStyle, subStyle) |
71 self.__subStyles = {} |
72 if settings.contains(baseKey): |
72 for baseStyle in self.baseStyles: |
73 subStyleData = {} |
73 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
74 subStyleData["Description"] = settings.value( |
74 self.language(), baseStyle) |
75 baseKey + "Description", "") |
75 if settings.contains(key): |
76 subStyleData["Words"] = settings.value( |
76 subStyleLength = int(settings.value(key), 0) |
77 baseKey + "Words", "") |
77 if subStyleLength: |
78 style = {} |
78 self.__subStyles[baseStyle] = {} |
79 |
79 for subStyle in range(subStyleLength): |
80 key = baseKey + "fore" |
80 substyleKey = \ |
81 if settings.contains(key): |
81 "Scintilla/{0}/style{1}/substyle{2}/"\ |
82 style["fore"] = int(settings.value(key)) |
82 .format(self.language(), baseStyle, subStyle) |
83 key = baseKey + "paper" |
83 if settings.contains(substyleKey): |
84 if settings.contains(key): |
84 subStyleData = {} |
85 style["paper"] = int(settings.value(key)) |
85 subStyleData["Description"] = settings.value( |
86 key = baseKey + "eolfill" |
86 substyleKey + "Description", "") |
87 if settings.contains(key): |
87 subStyleData["Words"] = settings.value( |
88 style["eolfill"] = Preferences.toBool( |
88 substyleKey + "Words", "") |
89 settings.value(key)) |
89 style = {} |
90 key = baseKey + "font_family" |
90 |
91 if settings.contains(key): |
91 key = substyleKey + "fore" |
92 style["font_family"] = settings.value(key) |
92 if settings.contains(key): |
93 key = baseKey + "font_size" |
93 style["fore"] = int(settings.value(key)) |
94 if settings.contains(key): |
94 key = substyleKey + "paper" |
95 style["font_size"] = int(settings.value(key)) |
95 if settings.contains(key): |
96 key = baseKey + "font_bold" |
96 style["paper"] = int(settings.value(key)) |
97 if settings.contains(key): |
97 key = substyleKey + "eolfill" |
98 style["font_bold"] = Preferences.toBool( |
98 if settings.contains(key): |
99 settings.value(key)) |
99 style["eolfill"] = Preferences.toBool( |
100 key = baseKey + "font_italic" |
100 settings.value(key)) |
101 if settings.contains(key): |
101 key = substyleKey + "font_family" |
102 style["font_italic"] = Preferences.toBool( |
102 if settings.contains(key): |
103 settings.value(key)) |
103 style["font_family"] = settings.value(key) |
104 key = baseKey + "font_underline" |
104 key = substyleKey + "font_size" |
105 if settings.contains(key): |
105 if settings.contains(key): |
106 style["font_underline"] = Preferences.toBool( |
106 style["font_size"] = \ |
107 settings.value(key)) |
107 int(settings.value(key)) |
108 |
108 key = substyleKey + "font_bold" |
109 subStyleData["Style"] = style |
109 if settings.contains(key): |
110 |
110 style["font_bold"] = Preferences.toBool( |
111 self.__subStyles[baseStyle][subStyle] = \ |
111 settings.value(key)) |
112 subStyleData |
112 key = substyleKey + "font_italic" |
|
113 if settings.contains(key): |
|
114 style["font_italic"] = Preferences.toBool( |
|
115 settings.value(key)) |
|
116 key = substyleKey + "font_underline" |
|
117 if settings.contains(key): |
|
118 style["font_underline"] = \ |
|
119 Preferences.toBool(settings.value(key)) |
|
120 |
|
121 subStyleData["Style"] = style |
|
122 |
|
123 self.__subStyles[baseStyle][subStyle] = \ |
|
124 subStyleData |
113 |
125 |
114 self.__subStylesInitialized = True |
126 self.__subStylesInitialized = True |
115 |
127 |
116 def loadDefaultSubStyles(self): |
128 def loadDefaultSubStyles(self): |
117 """ |
129 """ |
206 def writeSubstyles(self): |
220 def writeSubstyles(self): |
207 """ |
221 """ |
208 Public method to save the sub-styles. |
222 Public method to save the sub-styles. |
209 """ |
223 """ |
210 if not self.__subStylesInitialized: |
224 if not self.__subStylesInitialized: |
211 # make sure, the sub-styles have been initialized |
225 return |
212 self.loadSubstyles() |
|
213 |
226 |
214 settings = Preferences.Prefs.settings |
227 settings = Preferences.Prefs.settings |
215 |
228 |
|
229 # Step 1: remove all sub-style definitions first |
|
230 for baseStyle in self.baseStyles: |
|
231 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
|
232 self.language(), baseStyle) |
|
233 if settings.contains(key): |
|
234 subStyleLength = int(settings.value(key), 0) |
|
235 if subStyleLength: |
|
236 self.__subStyles[baseStyle] = {} |
|
237 for subStyle in range(subStyleLength): |
|
238 substyleKey = "Scintilla/{0}/style{1}/substyle{2}/"\ |
|
239 .format(self.language(), baseStyle, subStyle) |
|
240 settings.remove(substyleKey) |
|
241 |
|
242 # Step 2: save the defined sub-styles |
216 for baseStyle in self.baseStyles: |
243 for baseStyle in self.baseStyles: |
217 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
244 key = "Scintilla/{0}/style{1}/SubStyleLength".format( |
218 self.language(), baseStyle) |
245 self.language(), baseStyle) |
219 settings.setValue(key, len(self.__subStyles[baseStyle])) |
246 settings.setValue(key, len(self.__subStyles[baseStyle])) |
220 for subStyle in self.__subStyles[baseStyle]: |
247 for subStyle in self.__subStyles[baseStyle]: |
221 baseKey = "Scintilla/{0}/style{1}/substyle{2}/".format( |
248 substyleKey = "Scintilla/{0}/style{1}/substyle{2}/".format( |
222 self.language(), baseStyle, subStyle) |
249 self.language(), baseStyle, subStyle) |
223 subStyleData = self.__subStyles[baseStyle][subStyle] |
250 subStyleData = self.__subStyles[baseStyle][subStyle] |
224 |
251 |
225 settings.setValue(baseKey + "Description", |
252 if not subStyleData["Description"] and \ |
|
253 not subStyleData["Words"]: |
|
254 # invalid or incomplete sub-style definition |
|
255 continue |
|
256 |
|
257 settings.setValue(substyleKey + "Description", |
226 subStyleData["Description"]) |
258 subStyleData["Description"]) |
227 settings.setValue(baseKey + "Words", |
259 settings.setValue(substyleKey + "Words", |
228 subStyleData["Words"]) |
260 subStyleData["Words"]) |
229 |
261 |
230 style = subStyleData["Style"] |
262 style = subStyleData["Style"] |
231 if "fore" in style: |
263 if "fore" in style: |
232 color = style["fore"] |
264 color = style["fore"] |
233 else: |
265 else: |
234 col = self.color(baseStyle) |
266 col = self.color(baseStyle) |
235 color = col.red() << 16 | col.green() << 8 | col.blue() |
267 color = col.red() << 16 | col.green() << 8 | col.blue() |
236 settings.setValue(baseKey + "fore", color) |
268 settings.setValue(substyleKey + "fore", color) |
237 if "paper" in style: |
269 if "paper" in style: |
238 color = style["paper"] |
270 color = style["paper"] |
239 else: |
271 else: |
240 col = self.paper(baseStyle) |
272 col = self.paper(baseStyle) |
241 color = col.red() << 16 | col.green() << 8 | col.blue() |
273 color = col.red() << 16 | col.green() << 8 | col.blue() |
242 settings.setValue(baseKey + "paper", color) |
274 settings.setValue(substyleKey + "paper", color) |
243 if "eolfill" in style: |
275 if "eolfill" in style: |
244 eolfill = style["eolfill"] |
276 eolfill = style["eolfill"] |
245 else: |
277 else: |
246 eolfill = self.eolFill(baseStyle) |
278 eolfill = self.eolFill(baseStyle) |
247 settings.setValue(baseKey + "eolfill", eolfill) |
279 settings.setValue(substyleKey + "eolfill", eolfill) |
248 font = self.font(baseStyle) |
280 font = self.font(baseStyle) |
249 if "font_family" in style: |
281 if "font_family" in style: |
250 family = style["font_family"] |
282 family = style["font_family"] |
251 else: |
283 else: |
252 family = font.family() |
284 family = font.family() |
253 settings.setValue(baseKey + "font_family", family) |
285 settings.setValue(substyleKey + "font_family", family) |
254 if "font_size" in style: |
286 if "font_size" in style: |
255 size = style["font_size"] |
287 size = style["font_size"] |
256 else: |
288 else: |
257 size = font.pointSize() |
289 size = font.pointSize() |
258 settings.setValue(baseKey + "font_size", size) |
290 settings.setValue(substyleKey + "font_size", size) |
259 if "font_bold" in style: |
291 if "font_bold" in style: |
260 bold = style["font_bold"] |
292 bold = style["font_bold"] |
261 else: |
293 else: |
262 bold = font.bold() |
294 bold = font.bold() |
263 settings.setValue(baseKey + "font_bold", bold) |
295 settings.setValue(substyleKey + "font_bold", bold) |
264 if "font_italic" in style: |
296 if "font_italic" in style: |
265 italic = style["font_italic"] |
297 italic = style["font_italic"] |
266 else: |
298 else: |
267 italic = font.italic() |
299 italic = font.italic() |
268 settings.setValue(baseKey + "font_italic", italic) |
300 settings.setValue(substyleKey + "font_italic", italic) |
269 if "font_underline" in style: |
301 if "font_underline" in style: |
270 underline = style["font_underline"] |
302 underline = style["font_underline"] |
271 else: |
303 else: |
272 underline = font.underline() |
304 underline = font.underline() |
273 settings.setValue(baseKey + "font_underline", underline) |
305 settings.setValue(substyleKey + "font_underline", underline) |
274 |
306 |
275 def hasSubStyles(self): |
307 def hasSubStyles(self): |
276 """ |
308 """ |
277 Public method to indicate the support of sub-styles. |
309 Public method to indicate the support of sub-styles. |
278 |
310 |