Skip to content

Commit 7e9fce6

Browse files
committed
add option to disable beeping on passwords fields
add basic validation on tone pitch, length and volume fields. User can't save non digit characters or negative numbers. update english, spanish and french readme. update translation strings template update spanish and french languages strings.
1 parent 462122a commit 7e9fce6

File tree

8 files changed

+198
-77
lines changed

8 files changed

+198
-77
lines changed

addon/doc/es/readme.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Este paquete es distribuido bajo los términos de la GNU General Public License,
1212
* Pitar para caracteres escritos cuando la tecla shift es presionada: con esta característica NVDA pitará si escribes un carácter con la tecla shift presionada.
1313
* Pitar cuando cambia el estado de las teclas interruptores: con esta característica, NVDA producirá un tono alto cuando el interructor se activa, y uno bajo si se desactiva.
1414
* Anunciar el cambio de estado de las teclas interruptores: Solo para cuando "Pitar cuando cambia el estado de las teclas" está habilitado. Puedes habilitar o deshabilitar el anunciado de las teclas interruptores cuando estas cambian su estado.
15-
* pitar para caracteres específicos: en las opciones avanzadas, puedes configurar NVDA para que emita un pitido con los caracteres que desees.
15+
* Pitar para caracteres específicos: en las opciones avanzadas, puedes configurar NVDA para que emita un pitido con los caracteres que desees.
1616

1717
## Requisitos
1818
Necesitarás NVDA 2018.2 o posterior.
@@ -23,3 +23,13 @@ Este paquete es distribuido bajo los términos de la GNU General Public License,
2323
## Uso
2424
Para desactivar o activar características, ve a las configuraciones de NVDA y selecciona la categoría beep keyboard. En esa categoría podrás habilitar o deshabilitar cualquier característica soportada por este complemento.
2525
"Pitar para mayúsculas cuando el bloqueo mayúsculas está activado" está habilitado por defecto.
26+
Si necesitas ajustes adicionales, abra el cuadro de diálogo de las opciones avanzadas que contiene las siguientes opciones:
27+
28+
* Ignorar caracteres escritos con la tecla shift presionada: todos los caracteres escritos aquí serán ignorados al emitir el pitido cuando la tecla shift sea presionada. Se permiten secuencias de escape, EJ. "\t" para tab, "\r" para la tecla enter.
29+
* Pitar siempre para los siguientes caracteres: ingrese aquí todos los caracteres escritos para los que quieras que NVDA emita un pitido. Se permiten secuencias de escape, EJ. "\t" para tab, "\r" para la tecla enter.
30+
* Seleccionar un tono para su configuración: puedes configurar parámetros para todos los tonos. Selecciona uno aquí, y ajuste los parámetros en los siguientes cuadros de texto. Al cambiar de opción, NVDA emitirá el pitido del tono seleccionado con los parámetros configurados en ese momento.
31+
* Tono: tono para el tono seleccionado actualmente.
32+
* Duración: duración para el tono seleccionado actualmente.
33+
* Volumen: volumen para el tono seleccionado actualmente.
34+
* Probar el tono: este botón te permite reproducir un tono de prueba con los parámetros establecidos actualmente.
35+
* Presione el botón Aceptar para guardar las configuraciones o cancelar para descartarlas.

addon/doc/fr/readme.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ Ce paquet est distribué sous les termes de la licence publique générale GNU,
1010

1111
* Bip pour les majuscules quand le verrouillage majuscule est activé: si cette fonctionnalité est activée, NVDA émettra un bip lorsque vous tapez une lettre majuscule et que le verrouillage majuscule est activé. Ne faites plus d'erreurs de majuscules !
1212
* Bip pour les caractères saisis lorsque vous appuyez sur la touche maj: avec cette fonctionnalité, NVDA émettra un bip si vous tapez un caractère avec la touche maj enfoncée.
13-
* Beep quand l'état des touches de l'interrupteur à bascule change: avec cette fonctionnalité, NVDA émettra un bip plus aigu si l'interrupteur à bascule est activé et une tonalité plus grave s'il est désactivé.
14-
* Annoncer le changement de l'état des touches de l'interrupteur à bascule: uniquement lorsque l'option "Beep pendant le changement de l'état des touches de l'interrupteur à bascule" est activé. Vous pouvez activer ou désactiver l'annonce des touches de l'interrupteur à bascule lorsqu'elles changent d'état.
13+
* Bip quand l'état des touches de l'interrupteur à bascule change: avec cette fonctionnalité, NVDA émettra un bip plus aigu si l'interrupteur à bascule est activé et une tonalité plus grave s'il est désactivé.
14+
* Annoncer le changement de l'état des touches de l'interrupteur à bascule: uniquement lorsque l'option "Bip pendant le changement de l'état des touches de l'interrupteur à bascule" est activé. Vous pouvez activer ou désactiver l'annonce des touches de l'interrupteur à bascule lorsqu'elles changent d'état.
15+
* Bip pour les caractères spécifiés: dans les paramètres avancés, vous pouvez configurer NVDA pour émettre un bip avec les caractères souhaités.
1516

1617
## Exigences
1718
Vous avez besoin de NVDA 2018.2 ou une version ultérieure.
@@ -22,3 +23,13 @@ Ce paquet est distribué sous les termes de la licence publique générale GNU,
2223
## Utilisation
2324
Pour activer ou désactiver des fonctionnalités, accédez aux paramètres NVDA et sélectionnez la catégorie beep keyboard. Dans cette catégorie, vous pouvez configurer toutes les fonctionnalités prises en charge par l'extension.
2425
"Bip pour les majuscules quand le verrouillage majuscule est activé" est activé par défaut.
26+
Si vous avez besoin de réglages supplémentaires, ouvrez la boîte de dialogue des paramètres avancés contenant les paramètres suivants:
27+
28+
* Ignorés les caractères saisis avec la touche maj enfoncée: tous les caractères saisis ici seront ignorés lors de l'émission du bip quand on appuie sur la touche maj. Les séquences d'échappement sont autorisées, par exemple "\t" pour tab, "\r" pour la touche Entrée.
29+
* Bip toujours pour les caractères suivants: insérez ici tous les caractères pour lesquels vous souhaitez que NVDA émette un bip. Les séquences d'échappement sont autorisées, par exemple "\t" pour tab, "\r" pour la touche Entrée.
30+
* Choisir la tonalité à configurer: vous pouvez définir des paramètres pour toutes les tonalités. Sélectionnez-en une ici et ajustez les paramètres dans les zones de texte suivantes. Lors du changement des paramètres NVDA émettra le bip de la tonalité sélectionnée avec les paramètres configurés à ce moment.
31+
* Hauteur: hauteur pour la tonalité actuellement sélectionnée.
32+
* Durée: durée pour la tonalité actuellement sélectionnée.
33+
* Volume: volume pour la tonalité actuellement sélectionnée.
34+
* Tester la tonalité: ce bouton vous permet de jouer une tonalité de test avec les paramètres actuellement définis.
35+
* Appuyer sur le bouton OK pour sauvegarder la configuration ou sur Annuler pour les écarter.

addon/globalPlugins/beepKeyboard.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,28 @@
55
# Released under GPL 2
66
#globalPlugins/beepKeyboard.py
77

8-
import codecs, config, globalPluginHandler, gui, keyboardHandler, tones, winUser, wx, addonHandler
8+
import api, codecs, config, globalPluginHandler, gui, keyboardHandler, tones, ui, winUser, wx, addonHandler
99
addonHandler.initTranslation()
1010

1111
confspec = {
1212
"beepUpperWithCapsLock": "boolean(default=True)",
1313
"beepCharacterWithShift": "boolean(default=False)",
1414
"beepToggleKeyChanges": "boolean(default=False)",
1515
"announceToggleStatus": "boolean(default=True)",
16+
"disableBeepingOnPasswordFields": "boolean(default=True)",
1617
"ignoredCharactersForShift": "string(default='\t\b\r ')",
1718
"beepForCharacters": "string(default='')",
1819
"shiftedCharactersTone": "int_list(default=list(6000,10,25))",
1920
"customCharactersTone": "int_list(default=list(6000,10,25))",
2021
"capsLockUpperTone": "int_list(default=list(3000,40,50))",
2122
"toggleOffTone": "int_list(default=list(1000,40,50))",
22-
"toggleOnTone": "int_list(default=list(2000, 40, 50))",
23+
"toggleOnTone": "int_list(default=list(2000, 40, 50))"
2324
}
2425
config.conf.spec["beepKeyboard"] = confspec
2526

2627
def beep(l):
2728
""" it receives a list with three arguments to beep: [pitch, length, volume]"""
28-
tones.beep(*l, right=l[-1])
29+
if not (config.conf['beepKeyboard']['disableBeepingOnPasswordFields'] and api.getFocusObject().isProtected): tones.beep(*l, right=l[-1])
2930

3031
#saves the original _reportToggleKey function
3132
origReportToggleKey = keyboardHandler.KeyboardInputGesture._reportToggleKey
@@ -34,7 +35,7 @@ def _reportToggleKey(self):
3435
if winUser.getKeyState(self.vkCode) & 1:
3536
beep(config.conf['beepKeyboard']['toggleOnTone'])
3637
else: beep(config.conf['beepKeyboard']['toggleOffTone'])
37-
if config.conf['beepKeyboard']['announceToggleStatus']: origReportToggleKey(self)
38+
if config.conf['beepKeyboard']['announceToggleStatus'] or (config.conf['beepKeyboard']['disableBeepingOnPasswordFields'] and api.getFocusObject().isProtected): origReportToggleKey(self)
3839

3940
class BeepKeyboardSettingsPanel(gui.SettingsPanel):
4041
# Translators: This is the label for the beepKeyboard settings category in NVDA Settings screen.
@@ -54,6 +55,9 @@ def makeSettings(self, settingsSizer):
5455
# Translators: label for a checkbox option in the settings panel.
5556
self.announceToggleStatus = sHelper.addItem(wx.CheckBox(self, label=_("&Announce toggle keys changes (if Beep for toggle keys changes is disabled NVDA will have the original behavior)")))
5657
self.announceToggleStatus.SetValue(config.conf['beepKeyboard']['announceToggleStatus'])
58+
# Translators: label for a checkbox option in the settings panel.
59+
self.disableBeepingOnPasswordFields = sHelper.addItem(wx.CheckBox(self, label=_("&disable beeping on password fields")))
60+
self.disableBeepingOnPasswordFields.SetValue(config.conf['beepKeyboard']['disableBeepingOnPasswordFields'])
5761

5862
# Translators: label for a button to open advanced settings dialog in the settings panel.
5963
advancedButton = sHelper.addItem (wx.Button (self, label = _("&Open advanced options")))
@@ -68,11 +72,11 @@ def onSave(self):
6872
config.conf['beepKeyboard']['beepCharacterWithShift'] = self.beepCharacterWithShift.GetValue()
6973
config.conf['beepKeyboard']['beepToggleKeyChanges'] = self.beepToggleKeyChanges.GetValue()
7074
config.conf['beepKeyboard']['announceToggleStatus'] = self.announceToggleStatus.GetValue()
75+
config.conf['beepKeyboard']['disableBeepingOnPasswordFields'] = self.disableBeepingOnPasswordFields.GetValue()
7176
if hasattr(config, "post_configProfileSwitch"):
7277
config.post_configProfileSwitch.notify()
7378
else: config.configProfileSwitched.notify()
7479

75-
7680
class AdvancedBeepKeyboardSettingsDialog(gui.SettingsDialog):
7781
# Translators: This is the label for the beep keyboard advanced settings dialog
7882
title = _("Advanced settings - Keyboard beep")
@@ -85,8 +89,7 @@ def makeSettings(self, settingsSizer):
8589
self.ignoredCharactersForShift.SetValue(co['ignoredCharactersForShift'])
8690
# Translators: label for an edit text control option in the advanced settings dialog.
8791
self.beepForCharacters = sHelper.addLabeledControl(_("Beep &always for the following characters"), wx.TextCtrl)
88-
self.beepForCharacters.SetValue(co['beepForCharacters'])
89-
92+
self.beepForCharacters.SetValue(co['beepForCharacters'])
9093
self.tonesParameters = [co['shiftedCharactersTone'], co['customCharactersTone'], co['capsLockUpperTone'], co['toggleOffTone'], co['toggleOnTone']]
9194
# Translators: label for a combo box control in the advanced settings dialog.
9295
self.toneOptionsList = sHelper.addLabeledControl(_("&Select tone to configure"), wx.Choice, choices=[
@@ -121,14 +124,26 @@ def postInit(self):
121124
self.ignoredCharactersForShift.SetFocus()
122125

123126
def updateCurrentToneValues(self):
124-
self.tonesParameters[self.curSelection] = [int(self.tonePitch.GetValue()), int(self.toneLength.GetValue()), int(self.toneVolume.GetValue())]
127+
try:
128+
l = [int(self.tonePitch.GetValue()), int(self.toneLength.GetValue()), int(self.toneVolume.GetValue())]
129+
if True in [k<0 for k in l]: raise ValueError
130+
self.tonesParameters[self.curSelection] = l
131+
except ValueError:
132+
tones.beep(100,160)
133+
# Translators: an error message sent to ve spoken by NVDA.
134+
ui.message(_("You entered a wrong value. Please correct it or discard changes."))
135+
raise ValueError
125136

126137
def onTest(self, evt):
127138
self.updateCurrentToneValues()
128139
beep(self.tonesParameters[self.curSelection])
129140

130141
def onToneOptionChange(self, evt):
131-
self.updateCurrentToneValues()
142+
try:
143+
self.updateCurrentToneValues()
144+
except ValueError:
145+
self.toneOptionsList.SetSelection(self.curSelection)
146+
return
132147
self.curSelection = self.toneOptionsList.GetCurrentSelection()
133148
co = self.tonesParameters[self.curSelection][0:3]
134149
beep(co)
@@ -137,14 +152,10 @@ def onToneOptionChange(self, evt):
137152
self.toneVolume.SetValue(str(co[2]))
138153

139154
def onOk(self, evt):
155+
self.updateCurrentToneValues()
140156
config.conf['beepKeyboard']['ignoredCharactersForShift'] = self.ignoredCharactersForShift.GetValue()
141157
config.conf['beepKeyboard']['beepForCharacters'] = self.beepForCharacters.GetValue()
142-
self.updateCurrentToneValues()
143-
config.conf['beepKeyboard']['shiftedCharactersTone'] = self.tonesParameters[0]
144-
config.conf['beepKeyboard']['customCharactersTone'] = self.tonesParameters[1]
145-
config.conf['beepKeyboard']['capsLockUpperTone'] = self.tonesParameters[2]
146-
config.conf['beepKeyboard']['toggleOffTone'] = self.tonesParameters[3]
147-
config.conf['beepKeyboard']['toggleOnTone'] = self.tonesParameters[4]
158+
config.conf['beepKeyboard']['shiftedCharactersTone'], config.conf['beepKeyboard']['customCharactersTone'], config.conf['beepKeyboard']['capsLockUpperTone'], config.conf['beepKeyboard']['toggleOffTone'], config.conf['beepKeyboard']['toggleOnTone'] = self.tonesParameters
148159
if hasattr(config, "post_configProfileSwitch"):
149160
config.post_configProfileSwitch.notify()
150161
else: config.configProfileSwitched.notify()
@@ -167,8 +178,7 @@ def event_typedCharacter(self, obj, nextHandler, ch):
167178
beep(config.conf['beepKeyboard']['capsLockUpperTone'])
168179
elif config.conf['beepKeyboard']['beepCharacterWithShift'] and not winUser.getKeyState(winUser.VK_CONTROL) &32768 and winUser.getKeyState(winUser.VK_SHIFT) &32768 and ch not in self.ignoredCharactersForShift and not (config.conf["keyboard"]["beepForLowercaseWithCapslock"] and ch.islower() and winUser.getKeyState(winUser.VK_CAPITAL)&1):
169180
beep(config.conf['beepKeyboard']['shiftedCharactersTone'])
170-
elif ch in self.beepForCharacters:
171-
beep(config.conf['beepKeyboard']['customCharactersTone'])
181+
elif ch in self.beepForCharacters: beep(config.conf['beepKeyboard']['customCharactersTone'])
172182

173183
def setExternalReportToggleStatus(self, flag):
174184
if flag:

0 commit comments

Comments
 (0)