Changeset 2436

Show
Ignore:
Timestamp:
10/22/08 08:56:33 (3 months ago)
Author:
bzr
Message:

Merge initial braille display support from the braille branch!
There is still lots of work to be done, but this initial implementation is quite useable.
Drivers are included for BRLTTY and Handy Tech displays.
Closes #82.
Please update misc-deps to 2008-10-22-01.

Location:
trunk
Files:
6 added
20 modified

Legend:

Unmodified
Added
Removed
  • trunk

    • Property bzr:revision-info
      •  

        old new  
        1 timestamp: 2008-10-19 12:46:33.749000072 +1000 
         1timestamp: 2008-10-22 16:01:26.638000011 +1000 
        22committer: James Teh <jamie@jantrid.net> 
        33properties:  
    • Property bzr:ancestry:v3-list-QlpoOTFBWSZTWbrL2vUAAB1VgAAQABCAQDrrnqAgAFCgaaGRkxBoTIJ6mmaNRwhndFAoNhZjh_YY4a01fOg1ulgNNC2UrzPdXXEnDpX8XckU4UJC6y9r1A..
      •  

        old new  
        1010jamie@jantrid.net-20080810101432-te9chzpil51jwjtd 
        1111mick@kulgan.net-20080830094018-0azn22n453on23ve 
         12jamie@jantrid.net-20081022055144-zd6v96gjzz94ript 
    • Property bzr:revision-id:v3-list-QlpoOTFBWSZTWbrL2vUAAB1VgAAQABCAQDrrnqAgAFCgaaGRkxBoTIJ6mmaNRwhndFAoNhZjh_YY4a01fOg1ulgNNC2UrzPdXXEnDpX8XckU4UJC6y9r1A..
      •  

        old new  
        2052052233 jamie@jantrid.net-20081017062242-58oc9d002nihw3hu 
        2062062234 jamie@jantrid.net-20081019024633-rahtbtmbuenafjfz 
         2072235 jamie@jantrid.net-20081022060126-xpk6izde74viwa2x 
    • Property bzr:file-ids
      •  

        old new  
         1.bzrignore      bzrignore-20080122021806-b5wx35icn5gbvszl-1 
         2contributors.txt        198@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:contributers.txt 
         3dependencies.txt        46@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:dependencies.txt 
        14source/NVDAObjects/IAccessible/__init__.py      683@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FNVDAObjects%2FIAccessible%2F__init__.py 
         5source/NVDAObjects/IAccessible/edit.py  885@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FNVDAObjects%2FIAccessible%2Fedit.py 
         6source/NVDAObjects/IAccessible/scintilla.py     829@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FNVDAObjects%2FIAccessible%2Fscintilla.py 
         7source/NVDAObjects/IAccessible/winConsole.py    683@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FNVDAObjects%2FIAccessible%2FwinConsole.py 
         8source/NVDAObjects/__init__.py  683@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FNVDAObjects%2F__init__.py 
         9source/api.py   46@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2Fapi.py 
         10source/appModules/_default.py   92@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2F_default.py 
         11source/appModules/_default_desktop.kbd  250@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FappModules%2F_default_desktop.kbd 
         12source/braille.py       braille.py-20080908070240-tjwqjsv7drp1kt8c-1 
         13source/brailleDisplayDrivers    brailledisplaydriver-20080908070031-15dxcuiuxfazjt1r-1 
         14source/brailleDisplayDrivers/brltty.py  brltty.py-20080908070031-15dxcuiuxfazjt1r-2 
         15source/brailleDisplayDrivers/handyTech.py       handytech.py-20080908070031-15dxcuiuxfazjt1r-3 
         16source/brailleDisplayDrivers/noBraille.py       nobraille.py-20080910042115-rerfty4bob1khp07-1 
         17source/config/__init__.py       46@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2Fconfig%2F__init__.py 
         18source/core.py  49@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2Fcore.py 
         19source/cursorManager.py cursormanager.py-20080207040300-ipt2bssoovrlbxu3-1 
         20source/gui/__init__.py  46@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2Fgui%2F__init__.py 
         21source/gui/settingsDialogs.py   299@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2Fgui%2FsettingsDialogs.py 
         22source/ui.py    ui.py-20081016230451-m40g09eaveji2gc1-1 
         23source/virtualBuffers/__init__.py       1675@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FvirtualBuffers%2F__init__.py 
         24source/winUser.py       118@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:source%2FwinUser.py 
        225user_docs/whats%20new.txt       559@dbe06fc7-9119-0410-a01d-9dbf589ecbba:trunk:user_docs%2Fwhats%20new.txt 
    • Property bzr:text-parents
      •  

        old new  
         1.bzrignore      jamie@jantrid.net-20081017054024-0oe0fgir33i85tgw 
         2contributors.txt        jamie@jantrid.net-20081022055144-zd6v96gjzz94ript 
         3source/NVDAObjects/IAccessible/edit.py  jamie@jantrid.net-20080919040644-l4egvyfapi06165s 
         4source/NVDAObjects/IAccessible/scintilla.py     jamie@jantrid.net-20080919094929-ymezqee11a6x08li 
         5source/NVDAObjects/IAccessible/winConsole.py    jamie@jantrid.net-20081009103022-jrppjqnsih453f8t 
         6source/NVDAObjects/__init__.py  jamie@jantrid.net-20081017071138-nnx7cpe551ces0jv 
         7source/api.py   jamie@jantrid.net-20081015080013-bvvtqd32f7ixishz 
         8source/appModules/_default.py   jamie@jantrid.net-20081022020632-181tsda36doh4rt7 
         9source/appModules/_default_desktop.kbd  jamie@jantrid.net-20081022020632-181tsda36doh4rt7 
         10source/braille.py       jamie@jantrid.net-20081022032828-6ps5dhsekdbtf653 
         11source/brailleDisplayDrivers    jamie@jantrid.net-20080909070310-wzxe2pwk1umpy7c6 
         12source/brailleDisplayDrivers/brltty.py  jamie@jantrid.net-20081016113257-58ibxql0vyqo51ok 
         13source/brailleDisplayDrivers/handyTech.py       jamie@jantrid.net-20081021102515-rbifrh99gkssvv8h 
         14source/brailleDisplayDrivers/noBraille.py       jamie@jantrid.net-20080910042146-ydj3gtzra3scuch7 
         15source/config/__init__.py       jamie@jantrid.net-20081022055125-6uulve0lgq5zubvq 
         16source/core.py  jamie@jantrid.net-20081001104239-t11thu7s01sb94vd 
         17source/cursorManager.py jamie@jantrid.net-20081008050900-os4bd7nsyqss1lfb 
         18source/gui/__init__.py  jamie@jantrid.net-20080919064529-kfl9xj9y3tfyqylm 
         19source/gui/settingsDialogs.py   jamie@jantrid.net-20081021204645-uy3y7l9g1gxzds0e 
         20source/ui.py    jamie@jantrid.net-20081016230637-4nc8n4ncu8fcj5yi 
         21source/virtualBuffers/__init__.py       jamie@jantrid.net-20081009102548-be3duzeox66u66ji 
         22source/winUser.py       jamie@jantrid.net-20081017071138-nnx7cpe551ces0jv 
  • trunk/.bzrignore

    r2293 r2436  
    1616installer/waves 
    1717source/images/*.ico 
     18source/louis 
  • trunk/contributors.txt

    r2365 r2436  
    4545Demetry <demetry82@googlemail.com> - German language files 
    4646robjoy <robjoy@freemail.hu> - Hungarian language files and documentation 
     47Felix Grützmacher (Handy Tech Elektronik GmbH) <felix.gruetzmacher@handytech.de> - some initial ideas for braille support, Handy Tech braille display driver 
  • trunk/dependencies.txt

    r2400 r2436  
    88Python Windows Extensions (for python 2.5), build 210 only: 
    99http://www.sourceforge.net/projects/pywin32/  
    10 Several other packages, made available for convenience in the NVDA miscellaneous dependencies package, version 2008-08-25-01 or later: 
     10Several other packages, made available for convenience in the NVDA miscellaneous dependencies package, version 2008-10-22-01 or later: 
    1111http://www.nvda-project.org/wiki/MiscellaneousDependencies 
    1212 
  • trunk/source/NVDAObjects/IAccessible/__init__.py

    r2435 r2436  
    721721 
    722722        def event_caret(self): 
     723                super(IAccessible, self).event_caret() 
    723724                if self.IAccessibleRole==IAccessibleHandler.ROLE_SYSTEM_CARET: 
    724725                        return 
  • trunk/source/NVDAObjects/IAccessible/edit.py

    r2387 r2436  
    2626from . import IAccessible 
    2727from .. import NVDAObjectTextInfo 
     28import braille 
    2829 
    2930ignoreCaretEvents=False 
     
    725726                if eventHandler.isPendingEvents('valueChange',self): 
    726727                        self.hasContentChangedSinceLastSelection=True 
     728                braille.handler.handleCaretMove(self) 
    727729                self.detectPossibleSelectionChange() 
    728730 
     
    733735                self.initAutoSelectDetection() 
    734736                super(Edit,self).event_gainFocus() 
     737 
     738        def _get_states(self): 
     739                states = super(Edit, self)._get_states() 
     740                if self.windowStyle & winUser.ES_MULTILINE: 
     741                        states.add(controlTypes.STATE_MULTILINE) 
     742                return states 
    735743 
    736744[Edit.bindKey(keyName,scriptName) for keyName,scriptName in [ 
  • trunk/source/NVDAObjects/IAccessible/scintilla.py

    r2387 r2436  
    210210                return controlTypes.ROLE_EDITABLETEXT 
    211211 
     212        def _get_states(self): 
     213                states = super(Scintilla, self)._get_states() 
     214                # Scintilla controls are always multiline. 
     215                states.add(controlTypes.STATE_MULTILINE) 
     216                return states 
     217 
    212218#We want all the standard text editing key commands to be handled by NVDA 
    213219[Scintilla.bindKey(keyName,scriptName) for keyName,scriptName in [ 
  • trunk/source/NVDAObjects/IAccessible/winConsole.py

    r2403 r2436  
    2222from . import IAccessible 
    2323from .. import NVDAObjectTextInfo 
     24import controlTypes 
     25import braille 
    2426 
    2527class WinConsole(IAccessible): 
     
    117119                if globalVars.caretMovesReviewCursor and self==api.getReviewPosition().obj: 
    118120                        api.setReviewPosition(self.makeTextInfo(textHandler.POSITION_CARET)) 
     121                braille.handler.handleCaretMove(self) 
    119122                #For any events other than caret movement, we want to let the monitor thread know that there might be text to speak 
    120123                if eventID!=winUser.EVENT_CONSOLE_CARET: 
     
    223226 
    224227        def event_gainFocus(self): 
     228                self.connectConsole() 
    225229                super(WinConsole,self).event_gainFocus() 
    226                 self.connectConsole() 
    227230                for line in self.prevConsoleVisibleLines: 
    228231                        if not line.isspace() and len(line)>0:  
     
    265268                self.lastConsoleEvent=winUser.EVENT_CONSOLE_UPDATE_REGION 
    266269 
     270        def _get_role(self): 
     271                return controlTypes.ROLE_TERMINAL 
     272 
    267273[WinConsole.bindKey(keyName,scriptName) for keyName,scriptName in [ 
    268274        ("control+c","protectConsoleKillKey"), 
  • trunk/source/NVDAObjects/__init__.py

    r2434 r2436  
    2222import appModuleHandler 
    2323import virtualBufferHandler 
     24import braille 
    2425 
    2526class NVDAObjectTextInfo(textHandler.TextInfo): 
     
    640641                if self is api.getFocusObject(): 
    641642                        speech.speakObjectProperties(self,states=True, reason=speech.REASON_CHANGE) 
     643                braille.handler.handleUpdate(self) 
    642644 
    643645        def event_focusEntered(self): 
     
    650652                api.setNavigatorObject(self) 
    651653                self.reportFocus() 
     654                braille.handler.handleGainFocus(self) 
    652655 
    653656        def event_foreground(self): 
     
    662665                if self is api.getFocusObject(): 
    663666                        speech.speakObjectProperties(self, value=True, reason=speech.REASON_CHANGE) 
     667                braille.handler.handleUpdate(self) 
    664668 
    665669        def event_nameChange(self): 
    666670                if self is api.getFocusObject(): 
    667671                        speech.speakObjectProperties(self, name=True, reason=speech.REASON_CHANGE) 
     672                braille.handler.handleUpdate(self) 
    668673 
    669674        def event_descriptionChange(self): 
    670675                if self is api.getFocusObject(): 
    671676                        speech.speakObjectProperties(self, description=True, reason=speech.REASON_CHANGE) 
     677                braille.handler.handleUpdate(self) 
     678 
     679        def event_caret(self): 
     680                if self is api.getFocusObject(): 
     681                        braille.handler.handleCaretMove(self) 
    672682 
    673683        def _get_basicText(self): 
     
    686696 
    687697        def _get_basicCaretOffset(self): 
    688                 return 0 
     698                raise NotImplementedError 
    689699 
    690700        def _set_basicCaretOffset(self,offset): 
  • trunk/source/api.py

    r2403 r2436  
    193193        globalVars.reviewPosition=reviewPosition 
    194194        globalVars.navigatorObject=None 
     195        import braille 
     196        braille.handler.handleReviewMove() 
    195197 
    196198def getNavigatorObject(): 
     
    216218        globalVars.navigatorObject=obj 
    217219        globalVars.reviewPosition=None 
     220        import braille 
     221        braille.handler.handleReviewMove() 
    218222 
    219223def isTypingProtected(): 
  • trunk/source/appModules/_default.py

    • Property svn:executable set to *
    r2425 r2436  
    3333import virtualBufferHandler 
    3434import scriptHandler 
     35import ui 
     36import braille 
    3537 
    3638class AppModule(appModuleHandler.AppModule): 
     
    5658                        state=_("off") 
    5759                        globalVars.keyboardHelp=False 
    58                 speech.speakMessage(_("keyboard help %s")%state) 
     60                ui.message(_("keyboard help %s")%state) 
    5961        script_keyboardHelp.__doc__=_("Turns keyboard help on and off. When on, pressing a key on the keyboard will tell you what script is associated with it, if any.") 
    6062 
     
    6466                if hasattr(virtualBuffer,'TextInfo') and not virtualBuffer.passThrough: 
    6567                        obj=virtualBuffer 
    66                 info=obj.makeTextInfo(textHandler.POSITION_CARET) 
     68                try: 
     69                        info=obj.makeTextInfo(textHandler.POSITION_CARET) 
     70                except: 
     71                        info=obj.makeTextInfo(textHandler.POSITION_FIRST) 
    6772                info.expand(textHandler.UNIT_LINE) 
    6873                if scriptHandler.getLastScriptRepeatCount()==0: 
     
    7378 
    7479        def script_leftMouseClick(self,keyPress): 
    75                 speech.speakMessage(_("left click")) 
     80                ui.message(_("left click")) 
    7681                winUser.mouse_event(winUser.MOUSEEVENTF_LEFTDOWN,0,0,None,None) 
    7782                winUser.mouse_event(winUser.MOUSEEVENTF_LEFTUP,0,0,None,None) 
     
    7984 
    8085        def script_rightMouseClick(self,keyPress): 
    81                 speech.speakMessage(_("right click")) 
     86                ui.message(_("right click")) 
    8287                winUser.mouse_event(winUser.MOUSEEVENTF_RIGHTDOWN,0,0,None,None) 
    8388                winUser.mouse_event(winUser.MOUSEEVENTF_RIGHTUP,0,0,None,None) 
     
    101106                else: 
    102107                        text=winKernel.GetDateFormat(winKernel.getThreadLocale(), winKernel.DATE_LONGDATE, None, None) 
    103                 speech.speakMessage(text) 
     108                ui.message(text) 
    104109        script_dateTime.__doc__=_("If pressed once, reports the current time. If pressed twice, reports the current date") 
    105110 
     
    161166 
    162167        def script_moveMouseToNavigatorObject(self,keyPress): 
    163                 speech.speakMessage(_("Move mouse to navigator")) 
     168                ui.message(_("Move mouse to navigator")) 
    164169                obj=api.getNavigatorObject()  
    165170                try: 
     
    179184 
    180185        def script_moveNavigatorObjectToMouse(self,keyPress): 
    181                 speech.speakMessage(_("Move navigator object to mouse")) 
     186                ui.message(_("Move navigator object to mouse")) 
    182187                obj=api.getMouseObject() 
    183188                api.setNavigatorObject(obj) 
     
    609614                obj = api.getStatusBar() 
    610615                if not obj: 
    611                         speech.speakMessage(_("no status bar found")) 
     616                        ui.message(_("no status bar found")) 
    612617                        return 
    613618                text = api.getStatusBarText(obj) 
    614619 
    615620                if scriptHandler.getLastScriptRepeatCount()==0: 
    616                         speech.speakMessage(text) 
     621                        ui.message(text) 
    617622                else: 
    618623                        speech.speakSpelling(text) 
     
    627632                        onOff=_("on") 
    628633                        config.conf["mouse"]["enableMouseTracking"]=True 
    629                 speech.speakMessage(_("Mouse tracking")+" "+onOff) 
     634                ui.message(_("Mouse tracking")+" "+onOff) 
    630635        script_toggleMouseTracking.__doc__=_("Toggles the reporting of information as the mouse moves") 
    631636 
     
    639644                repeatCount=scriptHandler.getLastScriptRepeatCount() 
    640645                if repeatCount==0: 
    641                         speech.speakMessage(title) 
     646                        ui.message(title) 
    642647                elif repeatCount==1: 
    643648                        speech.speakSpelling(title) 
    644649                else: 
    645650                        if api.copyToClip(title): 
    646                                 speech.speakMessage(_("%s copied to clipboard")%title) 
     651                                ui.message(_("%s copied to clipboard")%title) 
    647652        script_title.__doc__=_("Reports the title of the current application or foreground window. If pressed twice, spells the title. If pressed thrice, copies the title to the clipboard") 
    648653 
     
    693698                config.conf["presentation"]["reportProgressBarUpdates"]=progressLabels[new][0] 
    694699                speech.cancelSpeech() 
    695                 speech.speakMessage(progressLabels[new][1]) 
     700                ui.message(progressLabels[new][1]) 
    696701        script_toggleBeepOnProgressBarUpdates.__doc__=_("Toggles how NVDA reports progress bar updates. It can beep for all the progress bars or just for the progressbars in the foreground. Additionally it is possible to have current value spoken each 10 percent or it is possible to completely disable this reporting.") 
    697702 
     
    703708                        onOff=_("on") 
    704709                        globalVars.reportDynamicContentChanges=True 
    705                 speech.speakMessage(_("report dynamic content changes")+" "+onOff) 
     710                ui.message(_("report dynamic content changes")+" "+onOff) 
    706711        script_toggleReportDynamicContentChanges.__doc__=_("Toggles on and off the reporting of dynamic content changes, such as new text in dos console windows") 
    707712 
     
    713718                        onOff=_("on") 
    714719                        globalVars.caretMovesReviewCursor=True 
    715                 speech.speakMessage(_("caret moves review cursor")+" "+onOff) 
     720                ui.message(_("caret moves review cursor")+" "+onOff) 
    716721        script_toggleCaretMovesReviewCursor.__doc__=_("Toggles on and off the movement of the review cursor due to the caret moving.") 
    717722 
     
    723728                        onOff=_("on") 
    724729                        globalVars.focusMovesNavigatorObject=True 
    725                 speech.speakMessage(_("focus moves navigator object")+" "+onOff) 
     730                ui.message(_("focus moves navigator object")+" "+onOff) 
    726731        script_toggleFocusMovesNavigatorObject.__doc__=_("Toggles on and off the movement of the navigator object due to focus changes")  
    727732 
     
    736741                        return 
    737742                if sps.BatteryFlag & NO_SYSTEM_BATTERY: 
    738                         speech.speakMessage(_("no system battery")) 
     743                        ui.message(_("no system battery")) 
    739744                        return 
    740745                text = _("%d percent") % sps.BatteryLifePercent + " " 
     
    742747                elif sps.BatteryLifeTime!=0xffffffff:  
    743748                        text += _("%d hours and %d minutes remaining") % (sps.BatteryLifeTime / 3600, (sps.BatteryLifeTime % 3600) / 60) 
    744                 speech.speakMessage(text) 
     749                ui.message(text) 
    745750        script_say_battery_status.__doc__ = _("reports battery status and time remaining if AC is not plugged in") 
    746751 
    747752        def script_passNextKeyThrough(self,keyPress): 
    748753                keyboardHandler.passNextKeyThrough() 
    749                 speech.speakMessage(_("Pass next key through")) 
     754                ui.message(_("Pass next key through")) 
    750755        script_passNextKeyThrough.__doc__=_("The next key that is pressed will not be handled at all by NVDA, it will be passed directly through to Windows.") 
    751756 
     
    806811                pythonConsole.activate() 
    807812        script_activatePythonConsole.__doc__ = _("Activates the NVDA Python Console, primarily useful for development") 
     813 
     814        def script_braille_toggleTether(self, keyPress): 
     815                if braille.handler.tether == braille.handler.TETHER_FOCUS: 
     816                        braille.handler.tether = braille.handler.TETHER_REVIEW 
     817                        tetherMsg = _("review") 
     818                else: 
     819                        braille.handler.tether = braille.handler.TETHER_FOCUS 
     820                        tetherMsg = _("focus") 
     821                ui.message(_("Braille tethered to %s") % tetherMsg) 
     822        script_braille_toggleTether.__doc__ = _("Toggle tethering of braille between the focus and the review position") 
  • trunk/source/appModules/_default_desktop.kbd

    r2139 r2436  
    8080extendedDivide=leftMouseClick 
    8181multiply=rightMouseClick 
     82NVDA+control+t=braille_toggleTether 
  • trunk/source/config/__init__.py

    r2403 r2436  
    4747                sayCapForCapitals = boolean(default=false) 
    4848                beepForCapitals = boolean(default=false) 
     49 
     50# Braille settings 
     51[braille] 
     52        display = string(default=noBraille) 
     53        translationTable = string(default=en-us-comp8.ctb) 
     54        expandAtCursor = boolean(default=true) 
     55        cursorBlinkRate = integer(default=500,min=0,max=2000) 
     56        messageTimeout = integer(default=4,min=1,max=20) 
    4957 
    5058# Presentation settings 
  • trunk/source/core.py

    r2403 r2436  
    8383        log.info("Using wx version %s"%wx.version()) 
    8484        app = wx.App(redirect=False) 
     85        # HACK: wx currently raises spurious assertion failures when a timer is stopped but there is already an event in the queue for that timer. 
     86        # Unfortunately, these assertion exceptions are raised in the middle of other code, which causes problems. 
     87        # Therefore, disable assertions for now. 
     88        app.SetAssertMode(wx.PYAPP_ASSERT_SUPPRESS) 
    8589        # We do support QueryEndSession events, but we don't want to do anything for them. 
    8690        app.Bind(wx.EVT_QUERY_END_SESSION, lambda evt: None) 
     
    9397                log.info("Windows session ending") 
    9498        app.Bind(wx.EVT_END_SESSION, onEndSession) 
     99        import braille 
     100        log.debug("Initializing braille") 
     101        braille.initialize() 
    95102        import NVDAHelper 
    96103        log.debug("Initializing NVDAHelper") 
     
    200207        except: 
    201208                log.error("error terminating mouse handler",exc_info=True) 
     209        log.debug("Terminating braille") 
     210        try: 
     211                braille.terminate() 
     212        except: 
     213                log.error("Error terminating braille",exc_info=True) 
    202214        log.debug("Terminating speech") 
    203215        try: 
  • trunk/source/cursorManager.py

    r2356 r2436  
    1616import speech 
    1717import config 
     18import braille 
    1819 
    1920class CursorManager(baseObject.ScriptableObject): 
     
    4950        def _set_selection(self, info): 
    5051                info.updateSelection() 
     52                braille.handler.handleCaretMove(self) 
    5153 
    5254        def _caretMovementScriptHelper(self,unit,direction=None,posConstant=textHandler.POSITION_SELECTION,posUnit=None,posUnitEnd=False,extraDetail=False,handleSymbols=False): 
     
    278280        def _set_selection(self, info): 
    279281                self._selection = info.copy() 
     282                braille.handler.handleCaretMove(self) 
  • trunk/source/gui/__init__.py

    r2339 r2436  
    190190                self._popupSettingsDialog(VoiceSettingsDialog) 
    191191 
     192        def onBrailleCommand(self,evt): 
     193                self._popupSettingsDialog(BrailleSettingsDialog) 
     194 
    192195        def onKeyboardSettingsCommand(self,evt): 
    193196                self._popupSettingsDialog(KeyboardSettingsDialog) 
     
    242245                item = menu_preferences.Append(wx.ID_ANY,_("&Voice settings..."),_("Choose the voice, rate, pitch and volume  to use")) 
    243246                self.Bind(wx.EVT_MENU, frame.onVoiceCommand, item) 
     247                item = menu_preferences.Append(wx.ID_ANY,_("B&raille settings...")) 
     248                self.Bind(wx.EVT_MENU, frame.onBrailleCommand, item) 
    244249                item = menu_preferences.Append(wx.ID_ANY,_("&Keyboard Settings..."),_("Configure keyboard layout, speaking of typed characters, wor