OSDN Git Service

Reversed up and down arrow keys for changing values of all the sliders in the voice...
authorPeter Vágner <peter.v@datagate.sk>
Wed, 22 Sep 2010 11:59:56 +0000 (13:59 +0200)
committerPeter Vágner <peter.v@datagate.sk>
Wed, 22 Sep 2010 11:59:56 +0000 (13:59 +0200)
source/gui/settingsDialogs.py

index bbb41b7..b90e8bb 100644 (file)
@@ -262,6 +262,47 @@ class StringSynthSettingChanger(SynthSettingChanger):
                else:\r
                        setattr(getSynth(),self.setting.name,getattr(self.dialog,"_%ss"%self.setting.name)[evt.GetSelection()].ID)\r
 \r
+class VoiceSettingsSlider(wx.Slider):\r
+\r
+       def __init__(self,*args, **kwargs):\r
+               super(VoiceSettingsSlider,self).__init__(*args,**kwargs)\r
+               self.Bind(wx.EVT_CHAR, self.onSliderChar)\r
+\r
+       def SetValue(self,i):\r
+               super(VoiceSettingsSlider, self).SetValue(i)\r
+               evt = wx.CommandEvent(wx.wxEVT_COMMAND_SLIDER_UPDATED,self.GetId())\r
+               evt.SetInt(i)\r
+               wx.PostEvent(self,evt)\r
+\r
+       def onSliderChar(self, evt):\r
+               key = evt.KeyCode\r
+               if key == wx.WXK_UP:\r
+                       newValue=self.Value+self.LineSize\r
+                       if newValue >self.Max:\r
+                               newValue=self.Max\r
+                       self.SetValue(newValue)\r
+               elif key == wx.WXK_DOWN:\r
+                       newValue=self.Value-self.LineSize\r
+                       if newValue <self.Min:\r
+                               newValue=self.Min\r
+                       self.SetValue(newValue)\r
+               elif key == wx.WXK_PRIOR:\r
+                       newValue=self.Value+self.PageSize\r
+                       if newValue >self.Max:\r
+                               newValue=self.Max\r
+                       self.SetValue(newValue)\r
+               elif key == wx.WXK_NEXT:\r
+                       newValue=self.Value-self.PageSize\r
+                       if newValue <self.Min:\r
+                               newValue=self.Min\r
+                       self.SetValue(newValue)\r
+               elif key == wx.WXK_HOME:\r
+                       self.SetValue(self.Max)\r
+               elif key == wx.WXK_END:\r
+                       self.SetValue(self.Min)\r
+               else:\r
+                       evt.Skip()\r
+\r
 class VoiceSettingsDialog(SettingsDialog):\r
        title = _("Voice settings")\r
 \r
@@ -279,7 +320,7 @@ class VoiceSettingsDialog(SettingsDialog):
                """\r
                sizer=wx.BoxSizer(wx.HORIZONTAL)\r
                label=wx.StaticText(self,wx.ID_ANY,label="%s:"%setting.i18nName)\r
-               slider=wx.Slider(self,wx.ID_ANY,minValue=0,maxValue=100,name="%s:"%setting.i18nName)\r
+               slider=VoiceSettingsSlider(self,wx.ID_ANY,minValue=0,maxValue=100,name="%s:"%setting.i18nName)\r
                setattr(self,"%sSlider"%setting.name,slider)\r
                slider.Bind(wx.EVT_SLIDER,SynthSettingChanger(setting))\r
                self._setSliderStepSizes(slider,setting)\r
@@ -398,6 +439,14 @@ class VoiceSettingsDialog(SettingsDialog):
                config.conf["speech"][getSynth().name]["useSpellingFunctionality"]=self.useSpellingFunctionalityCheckBox.IsChecked()\r
                super(VoiceSettingsDialog, self).onOk(evt)\r
 \r
+       def sendEvent(self,window, eventBinder):\r
+               # Example of PyEventBinder: wx.EVT_BUTTON\r
+               # window is the window (control) that triggers the event\r
+               cmd = wx.CommandEvent(eventBinder.evtType[0])\r
+               cmd.SetEventObject(window)\r
+               cmd.SetId(window.GetId())\r
+               window.GetEventHandler().ProcessEvent(cmd)\r
+\r
 class KeyboardSettingsDialog(SettingsDialog):\r
        title = _("Keyboard Settings")\r
 \r