def createWidgets(self): self.dictionaryDownloadPanel = ZDictionaryDownloadPanel(self) self.enableSpellCheckCB = wx.CheckBox( self, wx.ID_ANY, _extstr(u"spellingprefpage.EnableSpellcheck")) #$NON-NLS-1$ provider = ZLanguagesListProvider(self.model) self.langListBox = ZListView(provider, self, style=wx.LC_VIRTUAL | wx.LC_REPORT | wx.LC_SINGLE_SEL)
def createWidgets(self): self.dictionaryDownloadPanel = ZDictionaryDownloadPanel(self) self.enableSpellCheckCB = wx.CheckBox(self, wx.ID_ANY, _extstr(u"spellingprefpage.EnableSpellcheck")) #$NON-NLS-1$ provider = ZLanguagesListProvider(self.model) self.langListBox = ZListView(provider, self, style = wx.LC_VIRTUAL | wx.LC_REPORT | wx.LC_SINGLE_SEL)
class ZSpellingPreferencePage(ZApplicationPreferencesPrefPage): def __init__(self, parent): ZApplicationPreferencesPrefPage.__init__(self, parent) self.originalProps = {} self.selectedLanguage = None self.model = ZSpellingPreferencePageModel() # end __init__() def createWidgets(self): self.dictionaryDownloadPanel = ZDictionaryDownloadPanel(self) self.enableSpellCheckCB = wx.CheckBox( self, wx.ID_ANY, _extstr(u"spellingprefpage.EnableSpellcheck")) #$NON-NLS-1$ provider = ZLanguagesListProvider(self.model) self.langListBox = ZListView(provider, self, style=wx.LC_VIRTUAL | wx.LC_REPORT | wx.LC_SINGLE_SEL) # end createWidgets() def populateWidgets(self): spellcheckEnabled = self.model.isSpellcheckEnabled() currentLanguage = self.model.getActiveLanguage() downloadTask = self.model.getDictionaryDownloadTask() # FIXME (EPW) there is a problem when closing the pref page and then re-opening it while the download is still in progress (unknown problem at this point) if downloadTask is not None and downloadTask.isRunning(): self.dictionaryDownloadPanel.Show(True) self.dictionaryDownloadPanel.setTask(downloadTask) self.enableSpellCheckCB.SetValue(True) self.enableSpellCheckCB.Enable(False) self.langListBox.Enable(False) else: self.dictionaryDownloadPanel.Show(False) self.originalProps[ u"spellcheck-enabled"] = spellcheckEnabled #$NON-NLS-1$ self.originalProps[u"language"] = currentLanguage #$NON-NLS-1$ self.enableSpellCheckCB.Enable(True) self.langListBox.Enable(True) self.enableSpellCheckCB.SetValue(spellcheckEnabled) self.langListBox.Enable(spellcheckEnabled) if spellcheckEnabled: idx = self.model.getLanguageIndex(currentLanguage) self.selectedLanguage = currentLanguage self.langListBox.Select(idx) else: currentLocale = self.model.getCurrentLocale() localeLang = self.model.findLanguage(currentLocale) idx = self.model.getLanguageIndex(localeLang) if idx is not None and idx >= 0: self.selectedLanguage = self.model.getLanguages()[idx] self.langListBox.Select(idx) # end populateWidgets() def bindWidgetEvents(self): self.Bind(wx.EVT_CHECKBOX, self.onEnableSpellCheck, self.enableSpellCheckCB) self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onLanguageSelected, self.langListBox) # end bindWidgetEvents() def layoutWidgets(self): sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.dictionaryDownloadPanel, 0, wx.EXPAND | wx.ALL, 2) sizer.Add(self.enableSpellCheckCB, 0, wx.EXPAND | wx.ALL, 2) sizer.Add(self.langListBox, 1, wx.EXPAND | wx.ALL, 2) prefSizer = wx.BoxSizer(wx.VERTICAL) prefSizer.AddSizer(sizer, 1, wx.EXPAND | wx.ALL, 5) self.SetAutoLayout(True) self.SetSizer(prefSizer) self.Layout() # end layoutWidgets() def onEnableSpellCheck(self, event): self.langListBox.Enable(event.IsChecked()) self.getPrefsDialog().onPrefPageChange() # end onEnableSpellCheck() def onLanguageSelected(self, event): self.selectedLanguage = self.model.getLanguages()[ event.GetItem().GetId()] self.getPrefsDialog().onPrefPageChange() event.Skip() # end onLanguageSelected() def onDictionaryDownloadComplete(self, task): langCode = task.getLanguageCode() self.selectedLanguage = self.model.findLanguage(langCode) self.originalProps[u"spellcheck-enabled"] = True #$NON-NLS-1$ self.originalProps[u"language"] = self.selectedLanguage #$NON-NLS-1$ self.langListBox.refresh() self.dictionaryDownloadPanel.Show(False) self.enableSpellCheckCB.SetValue(True) self.enableSpellCheckCB.Enable(True) self.langListBox.Enable(True) self.Layout() self.getPrefsDialog().onPrefPageChange() # end onDictionaryDownloadComplete() def onDictionaryDownloadFailed(self): pass # end onDictionaryDownloadFailed() def onDictionaryDownloadCancelled(self): self.populateWidgets() self.Layout() self.getPrefsDialog().onPrefPageChange() # end onDictionaryDownloadCancelled() def isDirty(self): # If we are downloading a dictionary, then we are NOT dirty downloadTask = self.model.getDictionaryDownloadTask() if downloadTask is not None and downloadTask.isRunning(): return False if self.originalProps[ u"spellcheck-enabled"] != self.enableSpellCheckCB.IsChecked( ): #$NON-NLS-1$ return True if self.enableSpellCheckCB.IsChecked() and self.originalProps[ u"language"] != self.selectedLanguage: #$NON-NLS-1$ return True return False # end isDirty() def isValid(self): if not self.enableSpellCheckCB.IsChecked(): return True else: return self.selectedLanguage is not None # end isValid() def apply(self): if self.enableSpellCheckCB.IsChecked(): if self.model.isDictionaryDownloaded(self.selectedLanguage): self._enableSpellCheck() return True else: if ZShowYesNoMessage( self, _extstr(u"spellingprefpage.DownloadVerifyMessage"), _extstr(u"spellingprefpage.DownloadDictionary" )): #$NON-NLS-2$ #$NON-NLS-1$ self._startDictionaryDownload() return True else: # Veto the apply() if the user said "no" to the download. return False else: self.model.disableSpellCheck() return True # end apply() def _enableSpellCheck(self): if self.model.enableSpellCheck(self.selectedLanguage): ZShowInfoMessage( self, _extstr(u"spellingprefpage.AppMustBeRestartedMessage"), _extstr(u"spellingprefpage.RestartNeeded" )) #$NON-NLS-2$ #$NON-NLS-1$ self.populateWidgets() # end _enableSpellCheck() def _startDictionaryDownload(self): busyIndicator = wx.BusyCursor() task = self.model.downloadDictionary(self.selectedLanguage) self.dictionaryDownloadPanel.Enable(True) self.dictionaryDownloadPanel.setTask(task) self.originalProps[u"spellcheck-enabled"] = True #$NON-NLS-1$ self.originalProps[u"language"] = self.selectedLanguage #$NON-NLS-1$ self.dictionaryDownloadPanel.Show(True) self.enableSpellCheckCB.Enable(False) self.langListBox.Enable(False) self.Layout() del busyIndicator # end _startDictionaryDownload() def rollback(self): getLoggerService().debug(u"rollback") #$NON-NLS-1$ self.populateWidgets() # end rollback() def destroy(self): ZUserPreferencePage.destroy(self) self.dictionaryDownloadPanel.destroy()
class ZSpellingPreferencePage(ZApplicationPreferencesPrefPage): def __init__(self, parent): ZApplicationPreferencesPrefPage.__init__(self, parent) self.originalProps = {} self.selectedLanguage = None self.model = ZSpellingPreferencePageModel() # end __init__() def createWidgets(self): self.dictionaryDownloadPanel = ZDictionaryDownloadPanel(self) self.enableSpellCheckCB = wx.CheckBox(self, wx.ID_ANY, _extstr(u"spellingprefpage.EnableSpellcheck")) #$NON-NLS-1$ provider = ZLanguagesListProvider(self.model) self.langListBox = ZListView(provider, self, style = wx.LC_VIRTUAL | wx.LC_REPORT | wx.LC_SINGLE_SEL) # end createWidgets() def populateWidgets(self): spellcheckEnabled = self.model.isSpellcheckEnabled() currentLanguage = self.model.getActiveLanguage() downloadTask = self.model.getDictionaryDownloadTask() # FIXME (EPW) there is a problem when closing the pref page and then re-opening it while the download is still in progress (unknown problem at this point) if downloadTask is not None and downloadTask.isRunning(): self.dictionaryDownloadPanel.Show(True) self.dictionaryDownloadPanel.setTask(downloadTask) self.enableSpellCheckCB.SetValue(True) self.enableSpellCheckCB.Enable(False) self.langListBox.Enable(False) else: self.dictionaryDownloadPanel.Show(False) self.originalProps[u"spellcheck-enabled"] = spellcheckEnabled #$NON-NLS-1$ self.originalProps[u"language"] = currentLanguage #$NON-NLS-1$ self.enableSpellCheckCB.Enable(True) self.langListBox.Enable(True) self.enableSpellCheckCB.SetValue(spellcheckEnabled) self.langListBox.Enable(spellcheckEnabled) if spellcheckEnabled: idx = self.model.getLanguageIndex(currentLanguage) self.selectedLanguage = currentLanguage self.langListBox.Select(idx) else: currentLocale = self.model.getCurrentLocale() localeLang = self.model.findLanguage(currentLocale) idx = self.model.getLanguageIndex(localeLang) if idx is not None and idx >= 0: self.selectedLanguage = self.model.getLanguages()[idx] self.langListBox.Select(idx) # end populateWidgets() def bindWidgetEvents(self): self.Bind(wx.EVT_CHECKBOX, self.onEnableSpellCheck, self.enableSpellCheckCB) self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onLanguageSelected, self.langListBox) # end bindWidgetEvents() def layoutWidgets(self): sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.dictionaryDownloadPanel, 0, wx.EXPAND | wx.ALL, 2) sizer.Add(self.enableSpellCheckCB, 0, wx.EXPAND | wx.ALL, 2) sizer.Add(self.langListBox, 1, wx.EXPAND | wx.ALL, 2) prefSizer = wx.BoxSizer(wx.VERTICAL) prefSizer.AddSizer(sizer, 1, wx.EXPAND | wx.ALL, 5) self.SetAutoLayout(True) self.SetSizer(prefSizer) self.Layout() # end layoutWidgets() def onEnableSpellCheck(self, event): self.langListBox.Enable(event.IsChecked()) self.getPrefsDialog().onPrefPageChange() # end onEnableSpellCheck() def onLanguageSelected(self, event): self.selectedLanguage = self.model.getLanguages()[event.GetItem().GetId()] self.getPrefsDialog().onPrefPageChange() event.Skip() # end onLanguageSelected() def onDictionaryDownloadComplete(self, task): langCode = task.getLanguageCode() self.selectedLanguage = self.model.findLanguage(langCode) self.originalProps[u"spellcheck-enabled"] = True #$NON-NLS-1$ self.originalProps[u"language"] = self.selectedLanguage #$NON-NLS-1$ self.langListBox.refresh() self.dictionaryDownloadPanel.Show(False) self.enableSpellCheckCB.SetValue(True) self.enableSpellCheckCB.Enable(True) self.langListBox.Enable(True) self.Layout() self.getPrefsDialog().onPrefPageChange() # end onDictionaryDownloadComplete() def onDictionaryDownloadFailed(self): pass # end onDictionaryDownloadFailed() def onDictionaryDownloadCancelled(self): self.populateWidgets() self.Layout() self.getPrefsDialog().onPrefPageChange() # end onDictionaryDownloadCancelled() def isDirty(self): # If we are downloading a dictionary, then we are NOT dirty downloadTask = self.model.getDictionaryDownloadTask() if downloadTask is not None and downloadTask.isRunning(): return False if self.originalProps[u"spellcheck-enabled"] != self.enableSpellCheckCB.IsChecked(): #$NON-NLS-1$ return True if self.enableSpellCheckCB.IsChecked() and self.originalProps[u"language"] != self.selectedLanguage: #$NON-NLS-1$ return True return False # end isDirty() def isValid(self): if not self.enableSpellCheckCB.IsChecked(): return True else: return self.selectedLanguage is not None # end isValid() def apply(self): if self.enableSpellCheckCB.IsChecked(): if self.model.isDictionaryDownloaded(self.selectedLanguage): self._enableSpellCheck() return True else: if ZShowYesNoMessage(self, _extstr(u"spellingprefpage.DownloadVerifyMessage"), _extstr(u"spellingprefpage.DownloadDictionary")): #$NON-NLS-2$ #$NON-NLS-1$ self._startDictionaryDownload() return True else: # Veto the apply() if the user said "no" to the download. return False else: self.model.disableSpellCheck() return True # end apply() def _enableSpellCheck(self): if self.model.enableSpellCheck(self.selectedLanguage): ZShowInfoMessage(self, _extstr(u"spellingprefpage.AppMustBeRestartedMessage"), _extstr(u"spellingprefpage.RestartNeeded")) #$NON-NLS-2$ #$NON-NLS-1$ self.populateWidgets() # end _enableSpellCheck() def _startDictionaryDownload(self): busyIndicator = wx.BusyCursor() task = self.model.downloadDictionary(self.selectedLanguage) self.dictionaryDownloadPanel.Enable(True) self.dictionaryDownloadPanel.setTask(task) self.originalProps[u"spellcheck-enabled"] = True #$NON-NLS-1$ self.originalProps[u"language"] = self.selectedLanguage #$NON-NLS-1$ self.dictionaryDownloadPanel.Show(True) self.enableSpellCheckCB.Enable(False) self.langListBox.Enable(False) self.Layout() del busyIndicator # end _startDictionaryDownload() def rollback(self): getLoggerService().debug(u"rollback") #$NON-NLS-1$ self.populateWidgets() # end rollback() def destroy(self): ZUserPreferencePage.destroy(self) self.dictionaryDownloadPanel.destroy()