Beispiel #1
0
 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)
Beispiel #3
0
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()