def script_speechHelp(self, gesture): if self.lanzador == "zl": varGlobal.mensaje( _("Use flechas derecha e izquierda para moverse por las categorías, flechas arriba y abajo para seleccionar item, enter para activarlo o escape para salir" )) elif self.lanzador == "zn": varGlobal.mensaje( _("Use flechas derecha e izquierda para moverse por las categorías, flechas arriba y abajo para seleccionar item, F1 para escuchar el contenido de la nota, F2 para copiar al portapapeles, F3 para pegar en el foco o escape para salir" ))
def znotaClick(self, event): if self.doblePulsacion == False: if varGlobal.IS_WinON == False: self._MainWindows = HiloComplemento(2) self._MainWindows.start() else: msg = \ _("""Ya hay una instancia de zUtilidades abierta. No es posible tener dos instancias a la vez.""") varGlobal.mensaje(msg) else: pass
def script_previousCategory(self, gesture): if self.lanzador == "zl": self.catIndexzl = self.catIndexzl - 1 if self.catIndexzl > 0 else len( self.categorias) - 1 self.leerArchivosDAT(self.catIndexzl) varGlobal.mensaje(self.categorias[self.catIndexzl]) self.itemIndexzl = -1 elif self.lanzador == "zn": self.catIndexzn = self.catIndexzn - 1 if self.catIndexzn > 0 else len( self.categorias) - 1 self.leerArchivosDAT(self.catIndexzn) varGlobal.mensaje(self.categorias[self.catIndexzn]) self.itemIndexzn = -1
def script_copyPP(self, gesture): if self.itemIndexzn < 0: varGlobal.mensaje( _("Use flechas derecha e izquierda para moverse por las categorías, flechas arriba y abajo para seleccionar item, F1 para escuchar el contenido de la nota, F2 para copiar al portapapeles, F3 para pegar en el foco o escape para salir" )) return if len(self.temporal) == 0: varGlobal.mensaje(_("Esta categoría no tiene notas")) return else: valor = self.itemIndexzn self.dataObj = wx.TextDataObject() self.dataObj.SetText(self.temporal[valor][2]) if wx.TheClipboard.Open(): wx.TheClipboard.SetData(self.dataObj) wx.TheClipboard.Flush() varGlobal.mensaje( _("Se ha copiado la nota {} al portapapeles").format( self.temporal[valor][1])) else: varGlobal.mensaje( _("No se pudo copiar la nota {} al portapapeles").format( self.temporal[valor][1])) self.script_exit(None) self.finish()
def script_nextCategory(self, gesture): if self.lanzador == "zl": self.catIndexzl = self.catIndexzl + 1 if self.catIndexzl < len( self.categorias) - 1 else 0 self.leerArchivosDAT(self.catIndexzl) varGlobal.mensaje(self.categorias[self.catIndexzl]) self.itemIndexzl = -1 elif self.lanzador == "zn": self.catIndexzn = self.catIndexzn + 1 if self.catIndexzn < len( self.categorias) - 1 else 0 self.leerArchivosDAT(self.catIndexzn) varGlobal.mensaje(self.categorias[self.catIndexzn]) self.itemIndexzn = -1
def znotaDobleClick(self, event): if self.doblePulsacion == True: if varGlobal.IS_WinON == False: self.lanzador = "zn" self.script_activarMenu(event) self.doblePulsacion = False else: msg = \ _("""Ya hay una instancia de zUtilidades abierta. No es posible tener dos instancias a la vez.""") varGlobal.mensaje(msg) self.doblePulsacion = False else: self.doblePulsacion = False pass
def script_skipToCategory(self, gesture): if self.lanzador == "zl": categories = (self.categorias[self.catIndexzl + 1:] if self.catIndexzl + 1 < len(self.categorias) else []) + (self.categorias[:self.catIndexzl]) try: self.catIndexzl = self.categorias.index( filter(lambda i: i[0].lower() == gesture.mainKeyName, categories).__next__()) - 1 except AttributeError: try: self.catIndexzl = self.categorias.index( filter(lambda i: i[0].lower() == gesture.mainKeyName, categories)[0]) - 1 self.script_nextCategory(None) except IndexError: if self.categorias[ self.catIndexzl][0].lower() == gesture.mainKeyName: varGlobal.mensaje(self.categorias[self.catIndexzl]) else: tones.beep(200, 30) except StopIteration: if self.categorias[ self.catIndexzl][0].lower() == gesture.mainKeyName: varGlobal.mensaje(self.categorias[self.catIndexzl]) else: tones.beep(200, 30) else: self.script_nextCategory(None) elif self.lanzador == "zn": categories = (self.categorias[self.catIndexzn + 1:] if self.catIndexzn + 1 < len(self.categorias) else []) + (self.categorias[:self.catIndexzn]) try: self.catIndexzn = self.categorias.index( filter(lambda i: i[0].lower() == gesture.mainKeyName, categories).__next__()) - 1 except AttributeError: try: self.catIndexzn = self.categorias.index( filter(lambda i: i[0].lower() == gesture.mainKeyName, categories)[0]) - 1 self.script_nextCategory(None) except IndexError: if self.categorias[ self.catIndexzn][0].lower() == gesture.mainKeyName: varGlobal.mensaje(self.categorias[self.catIndexzn]) else: tones.beep(200, 30) except StopIteration: if self.categorias[ self.catIndexzn][0].lower() == gesture.mainKeyName: varGlobal.mensaje(self.categorias[self.catIndexzn]) else: tones.beep(200, 30) else: self.script_nextCategory(None)
def script_previousItem(self, gesture): try: if self.lanzador == "zl": self.itemIndexzl = self.itemIndexzl - 1 if self.itemIndexzl > 0 else len( self.nombreAccion) - 1 varGlobal.mensaje(self.nombreAccion[self.itemIndexzl]) elif self.lanzador == "zn": self.itemIndexzn = self.itemIndexzn - 1 if self.itemIndexzn > 0 else len( self.nombreAccion) - 1 varGlobal.mensaje(self.nombreAccion[self.itemIndexzn]) except: if self.lanzador == "zl": varGlobal.mensaje(_("Sin acción")) if self.lanzador == "zn": varGlobal.mensaje(_("Sin notas"))
def script_nextItem(self, gesture): try: if self.lanzador == "zl": self.itemIndexzl = self.itemIndexzl + 1 if self.itemIndexzl < len( self.nombreAccion) - 1 else 0 varGlobal.mensaje(self.nombreAccion[self.itemIndexzl]) elif self.lanzador == "zn": self.itemIndexzn = self.itemIndexzn + 1 if self.itemIndexzn < len( self.nombreAccion) - 1 else 0 varGlobal.mensaje(self.nombreAccion[self.itemIndexzn]) except: if self.lanzador == "zl": varGlobal.mensaje(_("Sin acción")) if self.lanzador == "zn": varGlobal.mensaje(_("Sin notas"))
def newNote(self, event): if self.doblePulsacion == True: if varGlobal.IS_WinON == False: self.lanzador = "zn" indiceNotes = varGlobal.dbDatos( os.path.join(zn.ajustes.dbDir, "index.dat")).CargaDatosIndex() self.NewCategorias = varGlobal.AnalizaDatos( indiceNotes).GetCategoria() self.newArchivoCategorias = varGlobal.AnalizaDatos( indiceNotes).GetArchivosCat() if len(self.NewCategorias) == 0: msg = \ _("""No hay categorías para añadir una nota rápida. Agregue una categoría antes para poder crear una nota rápida.""") varGlobal.mensaje(msg) self.doblePulsacion = False return self.windowsApp = AñadirNotaCopia(gui.mainFrame, self.NewCategorias, self.newArchivoCategorias, None, 1) url = self.getURL() if url: self.windowsApp.textoNota.SetValue(url) gui.mainFrame.prePopup() self.windowsApp.Show() self.doblePulsacion = False else: msg = \ _("""Ya hay una instancia de zUtilidades abierta. No es posible tener dos instancias a la vez.""") varGlobal.mensaje(msg) self.doblePulsacion = False else: self.doblePulsacion = False pass
def script_viewNote(self, gesture): if self.itemIndexzn < 0: varGlobal.mensaje( _("Use flechas derecha e izquierda para moverse por las categorías, flechas arriba y abajo para seleccionar item, F1 para escuchar el contenido de la nota, F2 para copiar al portapapeles, F3 para pegar en el foco o escape para salir" )) return if len(self.temporal) == 0: varGlobal.mensaje(_("Esta categoría no tiene notas")) return else: valor = self.itemIndexzn if self.temporal[valor][0] == "txt": varGlobal.mensaje(self.temporal[valor][2])
def script_pastePP(self, gesture): if self.itemIndexzn < 0: varGlobal.mensaje( _("Use flechas derecha e izquierda para moverse por las categorías, flechas arriba y abajo para seleccionar item, F1 para escuchar el contenido de la nota, F2 para copiar al portapapeles, F3 para pegar en el foco o escape para salir" )) return if len(self.temporal) == 0: varGlobal.mensaje(_("Esta categoría no tiene notas")) return else: valor = self.itemIndexzn if self.temporal[valor][0] == "txt": self.script_exit(None) self.finish() paste = self.temporal[valor][2] # Source code taken from: frequentText add-on for NVDA. Written by Rui Fontes and Ângelo Abrantes try: clipboardBackup = api.getClipData() except: pass api.copyToClip(paste) time.sleep(0.1) api.processPendingEvents(False) focus = api.getFocusObject() if focus.windowClassName == "ConsoleWindowClass": # Windows console window - Control+V doesn't work here, so using an alternative method here WM_COMMAND = 0x0111 watchdog.cancellableSendMessage(focus.windowHandle, WM_COMMAND, 0xfff1, 0) else: time.sleep(0.1) try: KeyboardInputGesture.fromName("Control+v").send() except: # Solución para teclados con caracteres cirilicos. KeyboardInputGesture.fromName("shift+insert").send() varGlobal.mensaje(_("Nota pegada en el foco")) try: core.callLater(300, lambda: api.copyToClip(clipboardBackup)) except: pass
def script_exit(self, gesture): varGlobal.mensaje(_("Saliendo del menú"))
def script_executeCommand(self, gesture): if self.itemIndexzl < 0: varGlobal.mensaje( _("Use flechas derecha e izquierda para moverse por las categorías, flechas arriba y abajo para seleccionar item, enter para activarlo o escape para salir" )) return if len(self.temporal) == 0: varGlobal.mensaje(_("Esta categoría no tiene acciones")) return else: varGlobal.mensaje(_("Ejecutando acción")) self.script_exit(None) valor = self.itemIndexzl if self.temporal[valor][0] == "app": if os.path.isfile(self.temporal[valor][2]): self.finish() if self.temporal[valor][5] == False: if self.temporal[valor][3] == False: varGlobal.ejecutar( None, "open", self.temporal[valor][2], None, os.path.dirname(self.temporal[valor][2]), 10) else: varGlobal.ejecutar( None, "open", self.temporal[valor][2], self.temporal[valor][4], os.path.dirname(self.temporal[valor][2]), 10) else: if self.temporal[valor][3] == False: varGlobal.ejecutar( None, "runas", self.temporal[valor][2], None, os.path.dirname(self.temporal[valor][2]), 10) else: varGlobal.ejecutar( None, "runas", self.temporal[valor][2], self.temporal[valor][4], os.path.dirname(self.temporal[valor][2]), 10) else: msg = \ _("""La ruta a la aplicación {}, no se encontró. Ejecute el lanzador de aplicaciones en modo grafico para editar la acción.""").format(self.temporal[valor][1]) varGlobal.mensaje(msg) self.finish() elif self.temporal[valor][0] == "cmd": self.finish() if self.temporal[valor][4] == False: if self.temporal[valor][3] == False: varGlobal.ejecutar(None, "open", "cmd.exe", "/c" + self.temporal[valor][2], None, 10) else: varGlobal.ejecutar( None, "open", "cmd.exe", "/c" + self.temporal[valor][2] + "&pause", None, 10) else: if self.temporal[valor][3] == False: varGlobal.ejecutar(None, "runas", "cmd.exe", "/c" + self.temporal[valor][2], None, 10) else: varGlobal.ejecutar( None, "runas", "cmd.exe", "/c" + self.temporal[valor][2] + "&pause", None, 10) elif self.temporal[valor][0] == "fol": if os.path.isdir(self.temporal[valor][2]): self.finish() varGlobal.ejecutar(None, "explore", self.temporal[valor][2], None, None, 10) else: msg = \ _("""La ruta a la carpeta no se encontró. {} Ejecute el lanzador de aplicaciones en modo grafico para editar la acción.""").format(self.temporal[valor][2]) varGlobal.mensaje(msg) self.finish() elif self.temporal[valor][0] == "adr": if os.path.isfile(self.temporal[valor][2]): self.finish() if self.temporal[valor][3] == False: varGlobal.ejecutar(None, "open", self.temporal[valor][2], None, None, 10) else: varGlobal.ejecutar(None, "runas", self.temporal[valor][2], None, None, 10) else: msg = \ _("""La ruta al acceso directo no se encontró. {} Ejecute el lanzador de aplicaciones en modo grafico para editar la acción.""").format(self.temporal[valor][2]) varGlobal.mensaje(msg) self.finish() elif self.temporal[valor][0] == "sap": self.finish() if self.temporal[valor][3] == False: varGlobal.ejecutar( None, "open", "explorer.exe", "shell:appsfolder\{}".format(self.temporal[valor][2]), None, 10) else: varGlobal.ejecutar( None, "runas", "explorer.exe", "shell:appsfolder\{}".format(self.temporal[valor][2]), None, 10)
def script_activarMenu(self, gesture): # Prevents the helper was launched when the keyboard is locked by the InputLock addon if inputCore.manager._captureFunc and not inputCore.manager._captureFunc( gesture): return if varGlobal.IS_WinON == True: msg = \ _("""Ya hay una instancia de zUtilidades abierta. No es posible tener dos instancias a la vez.""") varGlobal.mensaje(msg) return self.leerCategoriaDAT() if len(self.categorias) == 0: varGlobal.mensaje(_("No hay categorías")) return varGlobal.IS_WinON = True if self.lanzador == "zl": catTotalTemporal = self.catTotalzl elif self.lanzador == "zn": catTotalTemporal = self.catTotalzn if catTotalTemporal == len(self.categorias): pass else: if self.lanzador == "zl": self.catIndexzl = 0 self.itemIndexzl = -1 elif self.lanzador == "zn": self.catIndexzn = 0 self.itemIndexzn = -1 if len(self.categorias) == 0: varGlobal.mensaje(_("No hay categorías")) varGlobal.IS_WinON = False return if self.toggling: self.script_exit(gesture) self.finish() return for k in ("upArrow", "downArrow", "leftArrow", "rightArrow", "enter", "shift+enter", "control+enter", "numpadEnter", "shift+numpadEnter", "control+numpadEnter", "escape", "backspace", "F1", "F12", "numpad2", "numpad4", "numpad5", "numpad6", "numpad8", "numpadPlus", "numpadMinus", "numpadDelete"): try: script = KeyboardInputGesture.fromName(k).script except KeyError: script = None if script and self != script.__self__: try: script.__self__.removeGestureBinding("kb:" + k) except KeyError: pass else: self.oldGestureBindings["kb:" + k] = script if self.lanzador == "zl": self.bindGestures(self.__zlmenuGestures) elif self.lanzador == "zn": self.bindGestures(self.__znmenuGestures) for c in ascii_uppercase: self.bindGesture("kb:" + c, "skipToCategory") if self.lanzador == "zn": self.bindGesture("kb:F1", "viewNote") self.bindGesture("kb:F2", "copyPP") self.bindGesture("kb:F3", "pastePP") self.toggling = True varGlobal.mensaje(_("Menú activado")) if self.lanzador == "zl": firstTimeTemporal = self.firstTimezl if self.lanzador == "zn": firstTimeTemporal = self.firstTimezn if firstTimeTemporal: self.script_speechHelp(None) if self.lanzador == "zl": self.firstTimezl = False elif self.lanzador == "zn": self.firstTimezn = False self.leerArchivosDAT(0) varGlobal.mensaje(self.categorias[0]) if self.lanzador == "zl": self.catTotalzl = len(self.categorias) elif self.lanzador == "zn": self.catTotalzn = len(self.categorias) else: if self.lanzador == "zl": try: varGlobal.mensaje(self.categorias[self.catIndexzl]) except: varGlobal.mensaje(self.categorias[0]) elif self.lanzador == "zn": try: varGlobal.mensaje(self.categorias[self.catIndexzn]) except: varGlobal.mensaje(self.categorias[0])
def selectNewNote(self, event): if self.doblePulsacion == False: if varGlobal.IS_WinON == False: # Inicio código obtenido de Buscador de definiciones de la RAE (DLEChecker) de Antonio Cascales obj = api.getFocusObject() selectedText = "" if hasattr(obj.treeInterceptor, 'TextInfo') and not obj.treeInterceptor.passThrough: try: info = obj.treeInterceptor.makeTextInfo( textInfos.POSITION_SELECTION) except (RuntimeError, NotImplementedError): info = None if not info or info.isCollapsed: varGlobal.mensaje( _("Seleccione un texto para poder agregar a una nota rápida" )) return else: selectedText = info.text else: try: selectedText = obj.selection.text except (RuntimeError, NotImplementedError): varGlobal.mensaje( _("Seleccione un texto para poder agregar a una nota rápida" )) return if obj.selection.text == "": varGlobal.mensaje( _("Seleccione un texto para poder agregar a una nota rápida" )) return # Fin código obtenido de Buscador de definiciones de la RAE (DLEChecker) de Antonio Cascales if varGlobal.urlCaptura: url = self.getURL() selectedText = "\n\n".join([selectedText, url ]) if url else selectedText self.lanzador = "zn" indiceNotes = varGlobal.dbDatos( os.path.join(zn.ajustes.dbDir, "index.dat")).CargaDatosIndex() self.NewCategorias = varGlobal.AnalizaDatos( indiceNotes).GetCategoria() self.newArchivoCategorias = varGlobal.AnalizaDatos( indiceNotes).GetArchivosCat() if len(self.NewCategorias) == 0: msg = \ _("""No hay categorías para añadir una nota rápida. Agregue una categoría antes para poder copiar un texto a una nota rápida.""") varGlobal.mensaje(msg) return self.windowsApp = AñadirNotaCopia(gui.mainFrame, self.NewCategorias, self.newArchivoCategorias, selectedText, 0) gui.mainFrame.prePopup() self.windowsApp.Show() else: msg = \ _("""Ya hay una instancia de zUtilidades abierta. No es posible tener dos instancias a la vez.""") varGlobal.mensaje(msg) else: pass