1111from logHandler import log # logging
1212
1313# initialize the user preferences tuples
14- user_preferences = dict ([( "" , "" )])
14+ user_preferences = {}
1515#Speech_Language is derived from the folder structure
1616Speech_Impairment = ("LearningDisability" , "Blindness" , "LowVision" )
1717#Speech_SpeechStyle is derived from the yaml files under the selected language
2323#Navigation_OverView is boolean
2424Navigation_NavVerbosity = ("Terse" , "Medium" , "Verbose" )
2525#Navigation_AutoZoomOut is boolean
26-
2726Braille_BrailleNavHighlight = ("Off" , "FirstChar" , "EndPoints" , "All" )
2827Braille_BrailleCode = ("Nemeth" , "UEB" )
2928
30-
3129class UserInterface (MathCATgui .MathCATPreferencesDialog ):
3230 def __init__ (self ,parent ):
3331 #initialize parent class
@@ -97,6 +95,7 @@ def set_ui_values(self):
9795 self .m_choiceLanguage .SetSelection (0 )
9896 #now get the available SpeechStyles from the folder structure and set to the preference setting is possible
9997 self .GetSpeechStyles (user_preferences ["Speech" ]["SpeechStyle" ])
98+ #set the rest of the UI elements
10099 self .m_choiceSpeechAmount .SetSelection (Speech_Verbosity .index (user_preferences ["Speech" ]["Verbosity" ]))
101100 self .m_sliderRelativeSpeed .SetValue (user_preferences ["Speech" ]["MathRate" ])
102101 self .m_choiceSpeechForChemical .SetSelection (Speech_Chemistry .index (user_preferences ["Speech" ]["Chemistry" ]))
@@ -154,10 +153,6 @@ def load_default_preferences():
154153 if os .path .exists (UserInterface .path_to_default_preferences ()):
155154 with open (UserInterface .path_to_default_preferences (), encoding = 'utf-8' ) as f :
156155 user_preferences = yaml .load (f , Loader = yaml .FullLoader )
157- else :
158- #default preferences file is NOT found
159- wx .MessageBox (_ (u"MathCat preferences file not found. The program will now exit." ), "Error" , wx .OK | wx .ICON_ERROR )
160- os .sys .exit (- 1 )
161156
162157 def load_user_preferences ():
163158 global user_preferences
@@ -167,162 +162,64 @@ def load_user_preferences():
167162 # merge with the default preferences, overwriting with the user's values
168163 user_preferences .update (yaml .load (f , Loader = yaml .FullLoader ))
169164
170- def validate_user_preferences ( ):
165+ def validate ( key1 , key2 , valid_values , default_value ):
171166 global user_preferences
172- #check each user preference value to ensure it is present and valid, set default value if not
173-
174- # Speech:
175- #Impairment: Blindness # LearningDisability, LowVision, Blindness
176- valid_test_passed = False
177- try :
178- if user_preferences ["Speech" ]["Impairment" ] in ["LearningDisability" , "LowVision" , "Blindness" ]:
179- valid_test_passed = True
180- except :
181- pass
182- if not valid_test_passed :
183- user_preferences ["Speech" ]["Impairment" ] = "Blindness"
184-
185- # Language: en # any known language code and sub-code -- could be en-uk, etc
186- valid_test_passed = False
187- try :
188- if user_preferences ["Speech" ]["Language" ] != "" :
189- valid_test_passed = True
167+ try :
168+ if valid_values == None :
169+ #any value is valid
170+ if user_preferences [key1 ][key2 ] != "" :
171+ return
172+ if (type (valid_values [0 ]) == int ) and (type (valid_values [1 ]) == int ):
173+ #any value between lower and upper bounds is valid
174+ if (user_preferences [key1 ][key2 ] >= valid_values (0 )) and (user_preferences [key1 ][key2 ] <= valid_values (1 )):
175+ return
176+ else :
177+ #any value in the list is valid
178+ if user_preferences [key1 ][key2 ] in valid_values :
179+ return
190180 except :
181+ #the preferences entry does not exist
191182 pass
192- if not valid_test_passed :
193- user_preferences ["Speech" ]["Language" ] = "en"
183+ if not key1 in user_preferences :
184+ user_preferences [key1 ] = {key2 : default_value }
185+ else :
186+ user_preferences [key1 ][key2 ] = default_value
194187
188+ def validate_user_preferences ():
189+ #check each user preference value to ensure it is present and valid, set default value if not
190+ # Speech:
191+ #Impairment: Blindness # LearningDisability, LowVision, Blindness
192+ UserInterface .validate ("Speech" , "Impairment" , ["LearningDisability" , "LowVision" , "Blindness" ], "Blindness" )
193+ # Language: en # any known language code and sub-code -- could be en-uk, etc
194+ UserInterface .validate ("Speech" , "Language" , None , "en" )
195195 # Verbosity: Medium # Terse, Medium, Verbose
196- valid_test_passed = False
197- try :
198- if user_preferences ["Speech" ]["Verbosity" ] in ["Terse" , "Medium" , "Verbose" ]:
199- valid_test_passed = True
200- except :
201- pass
202- if not valid_test_passed :
203- user_preferences ["Speech" ]["Verbosity" ] = "Medium"
204-
196+ UserInterface .validate ("Speech" , "Verbosity" , ["Terse" , "Medium" , "Verbose" ], "Medium" )
205197 # MathRate: 100 # Change from text speech rate (%)
206- valid_test_passed = False
207- try :
208- if (user_preferences ["Speech" ]["MathRate" ] > 0 ):
209- valid_test_passed = True
210- except :
211- pass
212- if not valid_test_passed :
213- user_preferences ["Speech" ]["MathRate" ] = 100
214-
198+ UserInterface .validate ("Speech" , "MathRate" , [0 ,200 ], 100 )
215199 # SpeechStyle: ClearSpeak # Any known speech style (falls back to ClearSpeak)
216- valid_test_passed = False
217- try :
218- if user_preferences ["Speech" ]["SpeechStyle" ] != "" :
219- valid_test_passed = True
220- except :
221- pass
222- if not valid_test_passed :
223- user_preferences ["Speech" ]["SpeechStyle" ] = "ClearSpeak"
224-
200+ UserInterface .validate ("Speech" , "SpeechStyle" , None , "ClearSpeak" )
225201 # SubjectArea: General # FIX: still working on this
226- valid_test_passed = False
227- try :
228- if user_preferences ["Speech" ]["SubjectArea" ] != "" :
229- valid_test_passed = True
230- except :
231- pass
232- if not valid_test_passed :
233- user_preferences ["Speech" ]["SubjectArea" ] = "General"
234-
202+ UserInterface .validate ("Speech" , "SubjectArea" , None , "General" )
235203 # Chemistry: SpellOut # SpellOut (H 2 0), AsCompound (Water), Off (H sub 2 O)
236- valid_test_passed = False
237- try :
238- if user_preferences ["Speech" ]["Chemistry" ] in ["SpellOut" , "AsCompound" , "Off" ]:
239- valid_test_passed = True
240- except :
241- pass
242- if not valid_test_passed :
243- user_preferences ["Speech" ]["Chemistry" ] = "SpellOut"
244-
204+ UserInterface .validate ("Speech" , "Chemistry" , ["SpellOut" , "AsCompound" , "Off" ], "SpellOut" )
245205 #Navigation:
246206 # NavMode: Enhanced # Enhanced, Simple, Character
247- valid_test_passed = False
248- try :
249- if user_preferences ["Navigation" ]["NavMode" ] in ["Enhanced" , "Simple" , "Character" ]:
250- valid_test_passed = True
251- except :
252- pass
253- if not valid_test_passed :
254- user_preferences ["Navigation" ]["NavMode" ] = "Enhanced"
255-
207+ UserInterface .validate ("Navigation" , "NavMode" , ["Enhanced" , "Simple" , "Character" ], "Enhanced" )
256208 # ResetNavMode: false # remember previous value and use it
257- valid_test_passed = False
258- try :
259- if (user_preferences ["Navigation" ]["ResetNavMode" ]) or (not user_preferences ["Navigation" ]["ResetNavMode" ]) :
260- valid_test_passed = True
261- except :
262- pass
263- if not valid_test_passed :
264- user_preferences ["Navigation" ]["ResetNavMode" ] = False
265-
266- # Overview: false # speak the expression or give a description/overview
267- valid_test_passed = False
268- try :
269- if (user_preferences ["Navigation" ]["Overview" ]) or True :
270- valid_test_passed = True
271- except :
272- pass
273- if not valid_test_passed :
274- user_preferences ["Navigation" ]["Overview" ] = False
275-
209+ UserInterface .validate ("Navigation" , "ResetNavMode" , [False , True ], False )
210+ # Overview: false # speak the expression or give a description/overview
211+ UserInterface .validate ("Navigation" , "Overview" , [False , True ] ,False )
276212 # ResetOverview: true # remember previous value and use it
277- valid_test_passed = False
278- try :
279- if (user_preferences ["Navigation" ]["ResetOverview" ]) or True :
280- valid_test_passed = True
281- except :
282- pass
283- if not valid_test_passed :
284- user_preferences ["Navigation" ]["ResetOverview" ] = True
285-
286- # NavVerbosity: Medium # Terse, Medium, Verbose (words to say for nav command)
287- valid_test_passed = False
288- try :
289- if user_preferences ["Navigation" ]["NavVerbosity" ] in ["Terse" , "Medium" , "Verbose" ]:
290- valid_test_passed = True
291- except :
292- pass
293- if not valid_test_passed :
294- user_preferences ["Navigation" ]["NavVerbosity" ] = "Medium"
295-
213+ UserInterface .validate ("Navigation" , "ResetOverview" , [False , True ], True )
214+ # NavVerbosity: Medium # Terse, Medium, Full (words to say for nav command)
215+ UserInterface .validate ("Navigation" , "NavVerbosity" , ["Terse" , "Medium" , "Full" ], "Medium" )
296216 # AutoZoomOut: true # Auto zoom out of 2D exprs (use shift-arrow to force zoom out if unchecked)
297- valid_test_passed = False
298- try :
299- if (user_preferences ["Navigation" ]["AutoZoomOut" ]) or True :
300- valid_test_passed = True
301- except :
302- pass
303- if not valid_test_passed :
304- user_preferences ["Navigation" ]["AutoZoomOut" ] = True
305-
217+ UserInterface .validate ("Navigation" , "AutoZoomOut" , [False , True ], True )
306218 #Braille:
307219 # BrailleNavHighlight: EndPoints # Highlight with dots 7 & 8 the current nav node -- values are Off, FirstChar, EndPoints, All
308- valid_test_passed = False
309- try :
310- if user_preferences ["Braille" ]["BrailleNavHighlight" ] in ["Off" , "FirstChar" , "EndPoints" , "All" ]:
311- valid_test_passed = True
312- except :
313- pass
314- if not valid_test_passed :
315- user_preferences ["Braille" ]["BrailleNavHighlight" ] = "EndPoints"
316-
220+ UserInterface .validate ("Braille" , "BrailleNavHighlight" , ["Off" , "FirstChar" , "EndPoints" , "All" ], "EndPoints" )
317221 # BrailleCode: "Nemeth" # Any supported braille code (currently Nemeth, UEB)
318- valid_test_passed = False
319- try :
320- if user_preferences ["Braille" ]["BrailleCode" ] in ["Nemeth" , "UEB" ]:
321- valid_test_passed = True
322- except :
323- pass
324- if not valid_test_passed :
325- user_preferences ["Braille" ]["BrailleCode" ] = "Nemeth"
222+ UserInterface .validate ("Braille" , "BrailleCode" , ["Nemeth" , "UEB" ], "Nemeth" )
326223
327224 def write_user_preferences ():
328225 if not os .path .exists (UserInterface .path_to_user_preferences_folder ()):
0 commit comments