import appModuleHandler import ui from NVDAObjects.window import Window from NVDAObjects.window.edit import Edit import comtypes.client #from tones import beep import config class AppModule(appModuleHandler.AppModule): def chooseNVDAObjectOverlayClasses(self, obj, clsList): if isinstance(obj, Window) and( obj.windowClassName == u'TJvEditor' or obj.windowClassName == u'TEdit' and obj.windowStyle== 1409353920): clsList.insert(0, LambdaEditField) class LambdaEditField(Edit): COMCLASS="lambda.lambdaobj" def say(self,what): if(what==self.empty): return ui.message(what) def event_gainFocus(self): #initialization self.l=comtypes.client.GetActiveObject(self.COMCLASS) if self.l: self.empty=self.l.getnone() if(not self.empty): self.empty="" s=self.l.getline(self.windowHandle, -1, -1) self.say(s) self.initAutoSelectDetection() def event_valueChange(self): # typing echo. don't know whi i can't use self.l in this event l=comtypes.client.GetActiveObject(self.COMCLASS) if config.conf["keyboard"]["speakTypedCharacters"]: s=l.getlastinsertedel(self.windowHandle,1) ui.message(s) def event_typedCharacter(self,ch): # we don't want nvda-s typing echo pass def script_caret_moveByCharacter(self,gesture): gesture.send() s=self.l.getchar(self.windowHandle, -1, -1) self.say(s) def script_caret_moveByLine(self,gesture): gesture.send() s=self.l.getline(self.windowHandle, -1, -1) self.say(s) def script_caret_moveByWord(self,gesture): gesture.send() s=self.l.getword(self.windowHandle, -1, -1) self.say(s) def script_caret_moveByParagraph(self,gesture): self.script_caret_moveByLine(gesture) def script_caret_backspaceCharacter(self,gesture): gesture.send() s=self.l.getlastdeleted(self.windowHandle) self.say(s) def script_caret_delete(self,gesture): self.script_caret_backspaceCharacter(gesture) def script_sayAll(self, gesture): # this is not nice! todo: check howto improwe this s=self.l.getall(self.windowHandle) self.say(s) def script_sayHighlighted(self, gesture): s=self.l.getselected(self.windowHandle) self.say(s) def script_saySpecialHighlight(self, gesture): # ctrl+b and ctrl+shift+b hotkeys gesture.send() self.initAutoSelectDetection() self.script_sayHighlighted(gesture) def initAutoSelectDetection(self): self.s="" s=self.l.getselected(self.windowHandle) if s: self.s=s def detectPossibleSelectionChange(self): s=self.l.gethighlightedtext(self.windowHandle) if not s: s="" if len(s)>len(self.s): self.say("selecting " +s[len(self.s):len(s)]) elif len(s)