Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/rpms/sugar/0029-accessibility_0006_virtualkeyboard.patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'rpms/sugar/0029-accessibility_0006_virtualkeyboard.patch.patch')
-rw-r--r--rpms/sugar/0029-accessibility_0006_virtualkeyboard.patch.patch2251
1 files changed, 2251 insertions, 0 deletions
diff --git a/rpms/sugar/0029-accessibility_0006_virtualkeyboard.patch.patch b/rpms/sugar/0029-accessibility_0006_virtualkeyboard.patch.patch
new file mode 100644
index 0000000..faa7fb0
--- /dev/null
+++ b/rpms/sugar/0029-accessibility_0006_virtualkeyboard.patch.patch
@@ -0,0 +1,2251 @@
+From d99a48e5d8690826d90594d5956a42e3fcb16802 Mon Sep 17 00:00:00 2001
+From: Unknown <unknown@unknown.org>
+Date: Mon, 1 Nov 2010 18:24:08 +0100
+Subject: [PATCH sugar 29/74] accessibility_0006_virtualkeyboard.patch
+
+---
+ bin/sugar.in | 2 +
+ extensions/deviceicon/Makefile.am | 1 +
+ extensions/deviceicon/virtualkeyboard.py | 72 ++
+ extensions/globalkey/Makefile.am | 3 +-
+ extensions/globalkey/virtualkeyboard.py | 9 +
+ src/jarabe/model/Makefile.am | 3 +-
+ src/jarabe/model/virtualkeyboard.py | 185 +++
+ src/jarabe/view/Makefile.am | 3 +-
+ src/jarabe/view/virtualkeyboard.py | 1883 ++++++++++++++++++++++++++++++
+ 9 files changed, 2158 insertions(+), 3 deletions(-)
+ create mode 100644 extensions/deviceicon/virtualkeyboard.py
+ create mode 100644 extensions/globalkey/virtualkeyboard.py
+ create mode 100644 src/jarabe/model/virtualkeyboard.py
+ create mode 100644 src/jarabe/view/virtualkeyboard.py
+
+diff --git a/bin/sugar.in b/bin/sugar.in
+index 90fbf8f..de3cfbd 100644
+--- a/bin/sugar.in
++++ b/bin/sugar.in
+@@ -98,4 +98,6 @@ fi
+ echo Xcursor.theme: $CURSOR_THEME | xrdb -merge
+ metacity --no-force-fullscreen -d $DISPLAY &
+
++[ -x /usr/bin/pulseaudio ] && /usr/bin/pulseaudio &
++
+ exec sugar-session
+diff --git a/extensions/deviceicon/Makefile.am b/extensions/deviceicon/Makefile.am
+index 0d15c38..3a74053 100644
+--- a/extensions/deviceicon/Makefile.am
++++ b/extensions/deviceicon/Makefile.am
+@@ -7,4 +7,5 @@ sugar_PYTHON = \
+ resources.py \
+ speaker.py \
+ touchpad.py \
++ virtualkeyboard.py \
+ volume.py
+diff --git a/extensions/deviceicon/virtualkeyboard.py b/extensions/deviceicon/virtualkeyboard.py
+new file mode 100644
+index 0000000..955f79b
+--- /dev/null
++++ b/extensions/deviceicon/virtualkeyboard.py
+@@ -0,0 +1,72 @@
++from gettext import gettext as _
++
++import logging
++import gobject
++import gtk
++import gconf
++import os
++
++from sugar.graphics.tray import TrayIcon
++from sugar.graphics.xocolor import XoColor
++from sugar.graphics.palette import Palette
++from sugar.graphics import style
++from jarabe.frame.frameinvoker import FrameWidgetInvoker
++
++import jarabe.view.virtualkeyboard
++
++class DeviceView(TrayIcon):
++
++ FRAME_POSITION_RELATIVE = 500
++
++ def __init__(self):
++ icon_name = 'virtualkeyboard'
++
++ client = gconf.client_get_default()
++ color = XoColor(client.get_string('/desktop/sugar/user/color'))
++ TrayIcon.__init__(self, icon_name=icon_name, xo_color=color)
++ self.set_palette_invoker(FrameWidgetInvoker(self))
++
++ def create_palette(self):
++ palette = VirtualkeyboardPalette(_('Teclado Virtual'))
++ palette.set_group_id('frame')
++ return palette
++
++class VirtualkeyboardPalette(Palette):
++
++ def __init__(self, primary_text):
++ Palette.__init__(self, label=primary_text)
++
++ self.connect('popup', self._popup_cb)
++ self.connect('popdown', self._popdown_cb)
++
++ self._popped_up = False
++
++ self._open_item = gtk.MenuItem(_('Open'))
++ self._open_item.connect('activate', self._open_activate_cb)
++ self.menu.append(self._open_item)
++ self._open_item.show()
++
++ self._close_item = gtk.MenuItem(_('Close'))
++ self._close_item.connect('activate', self._close_activate_cb)
++ self.menu.append(self._close_item)
++ self._close_item.show()
++
++ def _popup_cb(self, gobject_ref):
++ self._popped_up = True
++
++ def _popdown_cb(self, gobject_ref):
++ self._popped_up = False
++
++ def _open_activate_cb(self, gobject_ref):
++ self.v = jarabe.view.virtualkeyboard.Teclado()
++
++ def _close_activate_cb(self, gobject_ref):
++ try:
++ self.v.close()
++ except:
++ pass
++
++
++def setup(tray):
++ tray.add_device(DeviceView())
++
+diff --git a/extensions/globalkey/Makefile.am b/extensions/globalkey/Makefile.am
+index 49a8dd7..b44626e 100644
+--- a/extensions/globalkey/Makefile.am
++++ b/extensions/globalkey/Makefile.am
+@@ -4,4 +4,5 @@ sugar_PYTHON = \
+ __init__.py \
+ magnifier.py \
+ screenshot.py \
+- viewsource.py
++ viewsource.py \
++ virtualkeyboard.py
+diff --git a/extensions/globalkey/virtualkeyboard.py b/extensions/globalkey/virtualkeyboard.py
+new file mode 100644
+index 0000000..bba0877
+--- /dev/null
++++ b/extensions/globalkey/virtualkeyboard.py
+@@ -0,0 +1,9 @@
++import logging
++
++import jarabe.view.virtualkeyboard
++
++BOUND_KEYS = ['<alt>k']
++
++def handle_key_press(key):
++ logging.debug('load virtual keyboard')
++ jarabe.view.virtualkeyboard.Teclado()
+diff --git a/src/jarabe/model/Makefile.am b/src/jarabe/model/Makefile.am
+index ee8b865..040b099 100644
+--- a/src/jarabe/model/Makefile.am
++++ b/src/jarabe/model/Makefile.am
+@@ -18,4 +18,5 @@ sugar_PYTHON = \
+ screen.py \
+ session.py \
+ sound.py \
+- telepathyclient.py
++ telepathyclient.py \
++ virtualkeyboard.py
+diff --git a/src/jarabe/model/virtualkeyboard.py b/src/jarabe/model/virtualkeyboard.py
+new file mode 100644
+index 0000000..b3e3659
+--- /dev/null
++++ b/src/jarabe/model/virtualkeyboard.py
+@@ -0,0 +1,185 @@
++#!/usr/bin/env python
++# -*- coding: UTF-8 -*-
++# VirtualKeyboard
++# Copyright (C) 2010 Plan Ceibal
++# pykey - http://shallowsky.com/software/crikey
++#
++# Author: Esteban Arias <earias@plan.ceibal.edu.uy>
++# Contact information: comunidad@plan.ceibal.edu.uy
++# Plan Ceibal http://www.ceibal.edu.uy
++#
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++import subprocess
++import sys, os
++import time
++import Xlib.display
++import Xlib.X
++import Xlib.XK
++import Xlib.protocol.event
++
++class Teclado:
++ special_X_keysyms = {
++ ' ' : "space",
++ '\t' : "Tab",
++ '\n' : "Return",
++ '\r' : "BackSpace",
++ '\e' : "Escape",
++ '!' : "exclam",
++ '#' : "numbersign",
++ '%' : "percent",
++ '$' : "dollar",
++ '&' : "ampersand",
++ '"' : "quotedbl",
++ '\'' : "apostrophe",
++ '(' : "parenleft",
++ ')' : "parenright",
++ '*' : "asterisk",
++ '=' : "equal",
++ '+' : "plus",
++ ',' : "comma",
++ '-' : "minus",
++ '.' : "period",
++ '/' : "slash",
++ ':' : "colon",
++ ';' : "semicolon",
++ '<' : "less",
++ '>' : "greater",
++ '?' : "question",
++ '@' : "at",
++ '[' : "bracketleft",
++ ']' : "bracketright",
++ '\\' : "backslash",
++ '^' : "asciicircum",
++ '_' : "underscore",
++ '`' : "grave",
++ '{' : "braceleft",
++ '|' : "bar",
++ '}' : "braceright",
++ '~' : "asciitilde",
++ 'ñ' : "ntilde",
++ 'Ñ' : "Ntilde"
++ };
++
++ def __init__(self):
++ self.display = Xlib.display.Display()
++ self.window = self.display.get_input_focus()._data["focus"];
++
++ def get_keysym(self, ch) :
++ keysym = Xlib.XK.string_to_keysym(ch)
++ if keysym == 0:
++ keysym = Xlib.XK.string_to_keysym(self.special_X_keysyms[ch])
++ return keysym
++
++ def is_shifted(self, ch) :
++ if ch.isupper() :
++ return True
++ if "/=~!@#$%^&()_*{}|:;\">?Ñ".find(ch) >= 0 :
++ return True
++ return False
++
++ def char_to_keycode(self, ch) :
++ keysym = self.get_keysym(ch)
++ keycode = self.display.keysym_to_keycode(keysym)
++ if keycode == 0 :
++ print "Sorry, can't map", ch
++
++ if (self.is_shifted(ch)) :
++ shift_mask = Xlib.X.ShiftMask
++ else :
++ shift_mask = 0
++
++ return keycode, shift_mask
++
++
++ def send_string(self, ch):
++ keycode, shift_mask = self.char_to_keycode(ch)
++ self.escribir(keycode, shift_mask)
++
++ def escribir(self, keycode, shift_mask):
++ event = Xlib.protocol.event.KeyPress(
++ time = int(time.time()),
++ root = self.display.screen().root,
++ window = self.window,
++ same_screen = 0, child = Xlib.X.NONE,
++ root_x = 0, root_y = 0, event_x = 0, event_y = 0,
++ state = shift_mask,
++ detail = keycode
++ )
++ self.window.send_event(event, propagate = True)
++ event = Xlib.protocol.event.KeyRelease(
++ time = int(time.time()),
++ root = self.display.screen().root,
++ window = self.window,
++ same_screen = 0, child = Xlib.X.NONE,
++ root_x = 0, root_y = 0, event_x = 0, event_y = 0,
++ state = shift_mask,
++ detail = keycode
++ )
++ self.window.send_event(event, propagate = True)
++
++
++ def escribir_txt(self, txt):
++ self.display = Xlib.display.Display()
++ self.window = self.display.get_input_focus()._data["focus"];
++
++ if (txt == "ü"):
++ self.escribir(34, 1)
++ self.send_string("u")
++ elif (txt == "Ü"):
++ self.escribir(34, 1)
++ self.send_string("U")
++ elif (txt == "|"):
++ self.escribir(10, Xlib.X.Mod5Mask)
++ elif (txt == "@"):
++ self.escribir(11, Xlib.X.Mod5Mask)
++ elif (txt == "#"):
++ self.escribir(12, Xlib.X.Mod5Mask)
++ elif (txt == "º"):
++ self.escribir(49, 0)
++ elif (txt == "ª"):
++ self.escribir(49, 1)
++ elif (txt == "'"):
++ self.escribir(20, 0)
++ elif (txt == "¿"):
++ self.escribir(21, 1)
++ elif (txt == "¡"):
++ self.escribir(21, 0)
++ elif (txt == "'"):
++ self.escribir(34, 0)
++ elif (self.tieneTilde(txt)):
++ self.escribir(34, 0)
++ self.escribirVocal(txt)
++ else:
++ self.send_string(txt)
++
++ self.display.sync()
++
++ def tieneTilde(self, txt):
++ return "ÁÉÍÓÚáéíóú".find(txt) >= 0
++
++ def escribirVocal(self, txt):
++ if txt=="Á": self.send_string("A")
++ if txt=="É": self.send_string("E")
++ if txt=="Í": self.send_string("I")
++ if txt=="Ó": self.send_string("O")
++ if txt=="Ú": self.send_string("U")
++ if txt=="á": self.send_string("a")
++ if txt=="é": self.send_string("e")
++ if txt=="í": self.send_string("i")
++ if txt=="ó": self.send_string("o")
++ if txt=="ú": self.send_string("u")
++
++ def hablar(self, texto, s):
++ subprocess.call(["espeak", "-p", "30", "-s", s, "-v", "spanish", texto], stdout=subprocess.PIPE)
+diff --git a/src/jarabe/view/Makefile.am b/src/jarabe/view/Makefile.am
+index 630f184..0b7d886 100644
+--- a/src/jarabe/view/Makefile.am
++++ b/src/jarabe/view/Makefile.am
+@@ -10,4 +10,5 @@ sugar_PYTHON = \
+ pulsingicon.py \
+ service.py \
+ tabbinghandler.py \
+- viewsource.py
++ viewsource.py \
++ virtualkeyboard.py
+diff --git a/src/jarabe/view/virtualkeyboard.py b/src/jarabe/view/virtualkeyboard.py
+new file mode 100644
+index 0000000..b873ae4
+--- /dev/null
++++ b/src/jarabe/view/virtualkeyboard.py
+@@ -0,0 +1,1883 @@
++#!/usr/bin/env python
++# -*- coding: UTF-8 -*-
++# Virtualkeyboard
++# Copyright (C) 2010 Plan Ceibal
++#
++# Author: Esteban Arias <earias@plan.ceibal.edu.uy>
++# Contact information: comunidad@plan.ceibal.edu.uy
++# Plan Ceibal http://www.ceibal.edu.uy
++#
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++import pygtk
++pygtk.require('2.0')
++import gtk
++import sys, os
++import time
++import pango
++import gconf
++import logging
++import threading
++import gobject
++
++import jarabe.model.virtualkeyboard
++from sugar.graphics.icon import Icon, get_icon_file_name
++
++gobject.threads_init()
++
++velocidades = {'lenta': 4500, 'media': 3000, 'rapida':1500}
++hablar = {'lenta': "170", 'media': "180", 'rapida':"275"}
++
++class Teclado:
++
++ def __init__(self):
++ self.BOTONESxBARRIDO = False;
++ self.BOTONESxBARRIDOxFILA = False;
++ self.MAYUSCULA = True;
++ self.fila_1 = [];
++ self.fila_2 = [];
++ self.fila_3 = [];
++ self.fila_4 = [];
++ self.fila_5 = [];
++ self.losBotones = [];
++ self.fila_actual = None;
++ self.btn_actual = None;
++ self.fila_actual_nro = -1;
++
++ self.seg = velocidades['media'];
++ self.hablar_al = "NUNCA";
++ self.size = "CHICO"
++ self.teclado_tipo = "COMPLETO";
++ self.inicilizar_config()
++
++# self.desplegar()
++ if os.environ.has_key('virtualkeyboard'):
++ self.visible = os.environ['virtualkeyboard']
++ if self.visible == 'True':
++ return
++ else:
++ if self.visible == 'False':
++ self.desplegar()
++ else:
++ self.desplegar()
++
++
++ def delete_event(self, widget, event=None):
++ self.close()
++
++ def close(self):
++ self.BOTONESxBARRIDOxFILA = False
++ self.BOTONESxBARRIDO = False
++ os.environ['virtualkeyboard'] = 'False'
++ logging.debug('close virtual keyboard')
++ self.dialog.destroy()
++ try:
++ self.hilo_type._Thread__stop()
++ self.hilo_size._Thread__stop()
++ self.hilo_bloquear._Thread__stop()
++ self.hilo_hablar._Thread__stop()
++ except:
++ pass
++ return False
++
++
++ def desplegar(self):
++ self._mTeclado=jarabe.model.virtualkeyboard.Teclado()
++
++ self.dialog = gtk.Dialog()
++ self.dialog.set_title("TECLADO VIRTUAL")
++ self.dialog.set_keep_above(True)
++ self.dialog.grab_focus()
++ try:
++ self.dialog.set_icon_from_file(get_icon_file_name('virtualkeyboard'))
++ except:
++ logging.debug('dont show virtual keyboard icon')
++
++ self.dialog.set_accept_focus(False)
++ self.dialog.connect("delete_event", self.delete_event)
++
++ #tipo de teclado:
++ try:
++ self.teclado_tipo = self.get_tipo_teclado()
++ except:
++ logging.error("init - error al leer teclado_tipo")
++ self.teclado_tipo = "COMPLETO"
++
++ self.vbox_teclado = self.mostrar_teclado()
++
++ #sizes:
++ try:
++ self.size = self.get_size_botones()
++ except:
++ logging.error("init - error al leer size_botones")
++ self.size = "CHICO"
++
++ x, y = self.get_size_dialog(self.size, self.teclado_tipo)
++ font_desc = self.get_font_desc(self.size, self.teclado_tipo)
++ self.dialog.set_size_request(x, y)
++ self.sizeBotones(font_desc)
++
++ self.event_box = gtk.EventBox()
++ self.event_box.add(self.vbox_teclado)
++ self.event_box.set_events(gtk.gdk.BUTTON_PRESS)
++ self.event_box.show()
++ self.ebc = self.event_box.connect("button_press_event", self.mouse_boton)
++ self.dialog.vbox.pack_start(self.event_box, False, False, 5)
++
++ self.vbox_teclado.show_all()
++
++ self.posicionar_dialog(self.dialog)
++
++ self.dialog.show()
++
++ try:
++ self.hablar_al = self.get_opciones_hablar()
++ except:
++ logging.debug('init - Error al cargar opciones.')
++ self.hablar_al = "NUNCA"
++
++ barriendo=""
++ try:
++ barriendo = self.leer_barrido()
++ except:
++ logging.error("init - Error al leer barrido.")
++ barriendo = "NO"
++
++ if barriendo == "SI":
++ try:
++ seg =self.get_time_barrido_botones()
++ except:
++ logging.error("init - error al leer time_barrido_botones")
++ seg = velocidades['media']
++
++ self.seg = seg
++ self.BOTONESxBARRIDOxFILA = True
++ self.botonesXbarridoXfila()
++
++ os.environ['virtualkeyboard'] = 'True'
++
++
++ def mostrar_teclado(self):
++ if (self.teclado_tipo == "COMPLETO"):
++ return self.mostrar_teclado_completo()
++ elif (self.teclado_tipo == "NUMERICO"):
++ return self.mostrar_teclado_numerico()
++ elif (self.teclado_tipo == "LETRAS"):
++ return self.mostrar_teclado_letras()
++
++ def mostrar_teclado_completo(self):
++ child = gtk.VBox(False, 2)
++
++ # defino botones
++ self.btn_BACK_SPACE = self.new_button_borrar()
++ self.losBotones.append(self.btn_BACK_SPACE)
++
++ self.btn_SPACE = self.new_button_espacio()
++ self.losBotones.append(self.btn_SPACE)
++
++ self.btn_CAPS_LOCK = self.new_button_mayuscula()
++ self.fila_3.append(self.btn_CAPS_LOCK)
++ self.losBotones.append(self.btn_CAPS_LOCK)
++
++ self.btn_ENTER = self.new_button_enter()
++ self.losBotones.append(self.btn_ENTER)
++ self.fila_2.append(self.btn_ENTER)
++
++ self.btn_TAB = self.new_button_tab()
++ self.losBotones.append(self.btn_TAB)
++ self.fila_2.append(self.btn_TAB)
++
++ self.btn_do = self.new_button_escribir("º")
++ self.btn_do.set_text_desc("o superíndice")
++ self.losBotones.append(self.btn_do)
++ self.fila_1.append(self.btn_do)
++
++ self.btn_1 = self.new_button_escribir("1")
++ self.losBotones.append(self.btn_1)
++ self.fila_1.append(self.btn_1)
++
++ self.btn_2 = self.new_button_escribir("2")
++ self.losBotones.append(self.btn_2)
++ self.fila_1.append(self.btn_2)
++
++ self.btn_3 = self.new_button_escribir("3")
++ self.losBotones.append(self.btn_3)
++ self.fila_1.append(self.btn_3)
++
++ self.btn_4 = self.new_button_escribir("4")
++ self.losBotones.append(self.btn_4)
++ self.fila_1.append(self.btn_4)
++
++ self.btn_5 = self.new_button_escribir("5")
++ self.losBotones.append(self.btn_5)
++ self.fila_1.append(self.btn_5)
++
++ self.btn_6 = self.new_button_escribir("6")
++ self.losBotones.append(self.btn_6)
++ self.fila_1.append(self.btn_6)
++
++ self.btn_7 = self.new_button_escribir("7")
++ self.losBotones.append(self.btn_7)
++ self.fila_1.append(self.btn_7)
++
++ self.btn_8 = self.new_button_escribir("8")
++ self.losBotones.append(self.btn_8)
++ self.fila_1.append(self.btn_8)
++
++ self.btn_9 = self.new_button_escribir("9")
++ self.losBotones.append(self.btn_9)
++ self.fila_1.append(self.btn_9)
++
++ self.btn_0 = self.new_button_escribir("0")
++ self.losBotones.append(self.btn_0)
++ self.fila_1.append(self.btn_0)
++
++ self.btn_finPreg = self.new_button_escribir("'")
++ self.btn_finPreg.set_text_desc("comilla simple")
++ self.losBotones.append(self.btn_finPreg)
++ self.fila_1.append(self.btn_finPreg)
++
++ self.btn_inicioPreg = self.new_button_escribir("¡")
++ self.btn_inicioPreg.set_text_desc("abro exclamación")
++ self.losBotones.append(self.btn_inicioPreg)
++ self.fila_1.append(self.btn_inicioPreg)
++
++ self.btn_Q = self.new_button_escribir("Q")
++ self.losBotones.append(self.btn_Q)
++ self.fila_2.append(self.btn_Q)
++
++ self.btn_W = self.new_button_escribir("W")
++ self.losBotones.append(self.btn_W)
++ self.fila_2.append(self.btn_W)
++
++ self.btn_E = self.new_button_escribir("E")
++ self.losBotones.append(self.btn_E)
++ self.fila_2.append(self.btn_E)
++
++ self.btn_R = self.new_button_escribir("R")
++ self.losBotones.append(self.btn_R)
++ self.fila_2.append(self.btn_R)
++
++ self.btn_T = self.new_button_escribir("T")
++ self.losBotones.append(self.btn_T)
++ self.fila_2.append(self.btn_T)
++
++ self.btn_Y = self.new_button_escribir("Y")
++ self.losBotones.append(self.btn_Y)
++ self.fila_2.append(self.btn_Y)
++
++ self.btn_U = self.new_button_escribir("U")
++ self.losBotones.append(self.btn_U)
++ self.fila_2.append(self.btn_U)
++
++ self.btn_I = self.new_button_escribir("I")
++ self.losBotones.append(self.btn_I)
++ self.fila_2.append(self.btn_I)
++
++ self.btn_O = self.new_button_escribir("O")
++ self.losBotones.append(self.btn_O)
++ self.fila_2.append(self.btn_O)
++
++ self.btn_P = self.new_button_escribir("P")
++ self.losBotones.append(self.btn_P)
++ self.fila_2.append(self.btn_P)
++
++ self.btn_asterisco = self.new_button_escribir("*")
++ self.losBotones.append(self.btn_asterisco)
++ self.fila_2.append(self.btn_asterisco)
++
++ self.btn_cierra_llave = self.new_button_escribir("]")
++ self.btn_cierra_llave.set_text_desc("cierro paréntesis recto")
++ self.losBotones.append(self.btn_cierra_llave)
++
++ self.btn_A = self.new_button_escribir("A")
++ self.losBotones.append(self.btn_A)
++ self.fila_3.append(self.btn_A)
++
++ self.btn_S = self.new_button_escribir("S")
++ self.losBotones.append(self.btn_S)
++ self.fila_3.append(self.btn_S)
++
++ self.btn_D = self.new_button_escribir("D")
++ self.losBotones.append(self.btn_D)
++ self.fila_3.append(self.btn_D)
++
++ self.btn_F = self.new_button_escribir("F")
++ self.losBotones.append(self.btn_F)
++ self.fila_3.append(self.btn_F)
++
++ self.btn_G = self.new_button_escribir("G")
++ self.losBotones.append(self.btn_G)
++ self.fila_3.append(self.btn_G)
++
++ self.btn_H = self.new_button_escribir("H")
++ self.losBotones.append(self.btn_H)
++ self.fila_3.append(self.btn_H)
++
++ self.btn_J = self.new_button_escribir("J")
++ self.losBotones.append(self.btn_J)
++ self.fila_3.append(self.btn_J)
++
++ self.btn_K = self.new_button_escribir("K")
++ self.losBotones.append(self.btn_K)
++ self.fila_3.append(self.btn_K)
++
++ self.btn_L = self.new_button_escribir("L")
++ self.losBotones.append(self.btn_L)
++ self.fila_3.append(self.btn_L)
++
++ self.btn_enie = self.new_button_escribir("Ñ")
++ self.losBotones.append(self.btn_enie)
++ self.fila_3.append(self.btn_enie)
++
++ self.btn_mas = self.new_button_escribir("+")
++ self.btn_mas.set_text_desc("más")
++ self.losBotones.append(self.btn_mas)
++ self.fila_3.append(self.btn_mas)
++
++ self.fila_3.append(self.btn_cierra_llave)
++
++ self.btn_abre_llave = self.new_button_escribir("[")
++ self.btn_abre_llave.set_text_desc("abro paréntesis recto")
++ self.losBotones.append(self.btn_abre_llave)
++ self.fila_2.append(self.btn_abre_llave)
++
++ self.btn_Z = self.new_button_escribir("Z")
++ self.losBotones.append(self.btn_Z)
++ self.fila_4.append(self.btn_Z)
++
++ self.btn_X = self.new_button_escribir("X")
++ self.losBotones.append(self.btn_X)
++ self.fila_4.append(self.btn_X)
++
++ self.btn_C = self.new_button_escribir("C")
++ self.losBotones.append(self.btn_C)
++ self.fila_4.append(self.btn_C)
++
++ self.btn_V = self.new_button_escribir("V")
++ self.losBotones.append(self.btn_V)
++ self.fila_4.append(self.btn_V)
++
++ self.btn_B = self.new_button_escribir("B")
++ self.losBotones.append(self.btn_B)
++ self.fila_4.append(self.btn_B)
++
++ self.btn_N = self.new_button_escribir("N")
++ self.losBotones.append(self.btn_N)
++ self.fila_4.append(self.btn_N)
++
++ self.btn_M = self.new_button_escribir("M")
++ self.losBotones.append(self.btn_M)
++ self.fila_4.append(self.btn_M)
++
++ self.btn_coma = self.new_button_escribir(",")
++ self.btn_coma.set_text_desc("coma")
++ self.losBotones.append(self.btn_coma)
++ self.fila_4.append(self.btn_coma)
++
++ self.btn_punto = self.new_button_escribir(".")
++ self.btn_punto.set_text_desc("punto")
++ self.losBotones.append(self.btn_punto)
++ self.fila_4.append(self.btn_punto)
++
++ self.btn_guion = self.new_button_escribir("-")
++ self.btn_guion.set_text_desc("guión")
++ self.losBotones.append(self.btn_guion)
++ self.fila_4.append(self.btn_guion)
++
++ self.btn_A_tilde = self.new_button_escribir("Á")
++ self.btn_A_tilde.set_text_desc("Á tilde")
++ self.losBotones.append(self.btn_A_tilde)
++ self.fila_5.append(self.btn_A_tilde)
++
++ self.btn_E_tilde = self.new_button_escribir("É")
++ self.btn_E_tilde.set_text_desc("É tilde")
++ self.losBotones.append(self.btn_E_tilde)
++ self.fila_5.append(self.btn_E_tilde)
++
++ self.btn_I_tilde = self.new_button_escribir("Í")
++ self.btn_I_tilde.set_text_desc("Í tilde")
++ self.losBotones.append(self.btn_I_tilde)
++ self.fila_5.append(self.btn_I_tilde)
++
++ self.btn_O_tilde = self.new_button_escribir("Ó")
++ self.btn_O_tilde.set_text_desc("Ó tilde")
++ self.losBotones.append(self.btn_O_tilde)
++ self.fila_5.append(self.btn_O_tilde)
++
++ self.btn_U_tilde = self.new_button_escribir("Ú")
++ self.btn_U_tilde.set_text_desc("Ú tilde")
++ self.losBotones.append(self.btn_U_tilde)
++ self.fila_5.append(self.btn_U_tilde)
++
++ self.btn_U_puntos = self.new_button_escribir("Ü")
++ self.btn_U_puntos.set_text_desc("u diéresis")
++ self.losBotones.append(self.btn_U_puntos)
++ self.fila_5.append(self.btn_U_puntos)
++
++ self.btn_pite = self.new_button_escribir("|")
++ self.btn_pite.set_text_desc("pait")
++ self.losBotones.append(self.btn_pite)
++ self.fila_5.append(self.btn_pite)
++
++ self.btn_arroba = self.new_button_escribir("@")
++ self.losBotones.append(self.btn_arroba)
++ self.fila_5.append(self.btn_arroba)
++
++ self.btn_menor = self.new_button_escribir("<")
++ self.btn_menor.set_text_desc("menor")
++ self.losBotones.append(self.btn_menor)
++ self.fila_5.append(self.btn_menor)
++
++ self.btn_opciones = self.new_button(gtk.STOCK_PREFERENCES, " ", self.desplegar_opciones)
++
++ #dibujo tabla
++ table = gtk.Table(7, 19, True)
++
++ table.set_row_spacing(0, 15)
++ table.set_row_spacing(1, 3)
++ table.set_row_spacing(2, 3)
++ table.set_row_spacing(3, 15)
++ table.set_row_spacing(4, 10)
++ table.set_row_spacing(5, 3)
++ table.set_row_spacing(6, 3)
++
++ table.set_col_spacing(0, 3)
++ table.set_col_spacing(1, 3)
++ table.set_col_spacing(2, 3)
++ table.set_col_spacing(3, 3)
++ table.set_col_spacing(4, 3)
++ table.set_col_spacing(5, 3)
++ table.set_col_spacing(6, 3)
++ table.set_col_spacing(7, 3)
++ table.set_col_spacing(8, 3)
++ table.set_col_spacing(9, 3)
++ table.set_col_spacing(10, 3)
++ table.set_col_spacing(11, 3)
++ table.set_col_spacing(12, 3)
++ table.set_col_spacing(13, 15)
++
++
++ table.attach(self.btn_do, 1, 2, 0, 1)
++ table.attach(self.btn_1, 2, 3, 0, 1)
++ table.attach(self.btn_2, 3, 4, 0, 1)
++ table.attach(self.btn_3, 4, 5, 0, 1)
++ table.attach(self.btn_4, 5, 6, 0, 1)
++ table.attach(self.btn_5, 6, 7, 0, 1)
++ table.attach(self.btn_6, 7, 8, 0, 1)
++ table.attach(self.btn_7, 8, 9, 0, 1)
++ table.attach(self.btn_8, 9, 10, 0, 1)
++ table.attach(self.btn_9, 10, 11, 0, 1)
++ table.attach(self.btn_0, 11, 12, 0, 1)
++ table.attach(self.btn_finPreg, 12 ,13, 0, 1)
++ table.attach(self.btn_inicioPreg, 13, 14, 0, 1)
++ table.attach(self.btn_TAB, 0, 2, 1, 2)
++ table.attach(self.btn_Q, 2, 3, 1, 2)
++ table.attach(self.btn_W, 3, 4, 1, 2)
++ table.attach(self.btn_E, 4, 5, 1, 2)
++ table.attach(self.btn_R, 5, 6, 1, 2)
++ table.attach(self.btn_T, 6, 7, 1, 2)
++ table.attach(self.btn_Y, 7, 8, 1, 2)
++ table.attach(self.btn_U, 8, 9, 1, 2)
++ table.attach(self.btn_I, 9, 10, 1, 2)
++ table.attach(self.btn_O, 10, 11, 1, 2)
++ table.attach(self.btn_P, 11, 12, 1, 2)
++ table.attach(self.btn_asterisco, 12, 13, 1, 2)
++ table.attach(self.btn_abre_llave, 13, 14, 1, 2)
++ table.attach(self.btn_A, 2, 3, 2, 3)
++ table.attach(self.btn_S, 3, 4, 2, 3)
++ table.attach(self.btn_D, 4, 5, 2, 3)
++ table.attach(self.btn_F, 5, 6, 2, 3)
++ table.attach(self.btn_G, 6, 7, 2, 3)
++ table.attach(self.btn_H, 7, 8, 2, 3)
++ table.attach(self.btn_J, 8, 9, 2, 3)
++ table.attach(self.btn_K, 9, 10, 2, 3)
++ table.attach(self.btn_L, 10, 11, 2, 3)
++ table.attach(self.btn_enie, 11, 12, 2, 3)
++ table.attach(self.btn_mas, 12, 13, 2, 3)
++ table.attach(self.btn_cierra_llave, 13, 14, 2, 3)
++ table.attach(self.btn_Z, 2, 3, 3, 4)
++ table.attach(self.btn_X, 3, 4, 3, 4)
++ table.attach(self.btn_C, 4, 5, 3, 4)
++ table.attach(self.btn_V, 5, 6, 3, 4)
++ table.attach(self.btn_B, 6, 7, 3, 4)
++ table.attach(self.btn_N, 7, 8, 3, 4)
++ table.attach(self.btn_M, 8, 9, 3, 4)
++ table.attach(self.btn_coma, 9, 10, 3, 4)
++ table.attach(self.btn_punto, 10, 11, 3, 4)
++ table.attach(self.btn_guion, 11, 12, 3, 4)
++
++ table.attach(self.btn_BACK_SPACE, 14, 19, 0, 1)
++ table.attach(self.btn_ENTER, 14, 19, 1, 2)
++ table.attach(self.btn_CAPS_LOCK, 14, 19, 2, 3)
++ table.attach(self.btn_SPACE, 2, 14, 5, 6)
++ table.attach(self.btn_opciones, 18, 19, 5, 6)
++
++ table.attach(self.btn_A_tilde, 2, 3, 4, 5)
++ table.attach(self.btn_E_tilde, 3, 4, 4, 5)
++ table.attach(self.btn_I_tilde, 4, 5, 4, 5)
++ table.attach(self.btn_O_tilde, 5, 6, 4, 5)
++ table.attach(self.btn_U_tilde, 6, 7, 4, 5)
++ table.attach(self.btn_U_puntos, 9, 10, 4, 5)
++ table.attach(self.btn_pite, 10, 11, 4, 5)
++ table.attach(self.btn_arroba, 11, 12, 4, 5)
++ table.attach(self.btn_menor, 12, 13, 4, 5)
++
++ child.pack_end(table, True, True, 0)
++
++ return child
++
++####################################################################################
++ def escribir(self, widget, *arg):
++ txt = widget.get_text()
++
++ self._mTeclado.escribir_txt(txt)
++ if (self.hablar_al == "ESCRIBIR"):
++ self.btn_actual=widget
++ self.hablar()
++
++ def espacio(self, *arg):
++ self._mTeclado.escribir_txt(" ")
++ if (self.hablar_al == "ESCRIBIR"):
++ self.btn_actual = self.btn_SPACE
++ self.hablar()
++
++ def tab(self, *arg):
++ self._mTeclado.escribir_txt("\t")
++ if (self.hablar_al == "ESCRIBIR"):
++ self.btn_actual = self.btn_TAB
++ self.hablar()
++
++ def enter(self, *arg):
++ self._mTeclado.escribir_txt("\n")
++ if (self.hablar_al == "ESCRIBIR"):
++ self.btn_actual = self.btn_ENTER
++ self.hablar()
++
++ def borrar(self, *arg):
++ self._mTeclado.escribir_txt("\r")
++ if (self.hablar_al == "ESCRIBIR"):
++ self.btn_actual = self.btn_BACK_SPACE
++ self.hablar()
++
++ def new_button_escribir(self, plabel):
++ btn = Boton(plabel)
++ btn.connect("pressed", self.escribir, plabel)
++ btn.connect("activate", self.escribir, plabel)
++ return btn
++
++
++ def new_button_enter(self):
++ btn = Boton("ENTER")
++ btn.set_text_desc("énter")
++ btn.set_font_desc("sans bold 11")
++ btn.connect("pressed", self.enter)
++ btn.connect("activate", self.enter)
++ return btn
++
++ def new_button_espacio(self):
++ btn = Boton("ESPACIO")
++ btn.set_font_desc("sans bold 11")
++ btn.connect("pressed", self.espacio)
++ btn.connect("activate", self.espacio)
++ return btn
++
++ def new_button_borrar(self):
++ btn = Boton("BORRAR")
++ btn.set_font_desc("sans bold 11")
++ btn.connect("pressed", self.borrar)
++ btn.connect("activate", self.borrar)
++ return btn
++
++ def new_button_tab(self):
++ btn = Boton("TAB")
++ btn.set_font_desc("sans bold 11")
++ btn.connect("pressed", self.tab)
++ btn.connect("activate", self.tab)
++ return btn
++
++ def new_button_mayuscula(self):
++ btn = Boton("MINÚSCULA")
++ btn.set_font_desc("sans bold 11")
++ btn.connect("pressed", self.set_mayuscula)
++ btn.connect("activate", self.set_mayuscula)
++ return btn
++
++ def new_button_cambiar_tipo(self, titulo):
++ btn = Boton(titulo)
++ btn.set_font_desc("sans 9")
++ btn.connect("pressed", self.cambiar_tipo)
++ btn.connect("activate", self.cambiar_tipo)
++ return btn
++
++
++ def set_mayuscula(self, *arg):
++ if (self.MAYUSCULA):
++ self.btn_do.set_text("ª")
++ self.btn_do.set_text_desc("a superíndice")
++ self.btn_1.set_text("!")
++ self.btn_1.set_text_desc("cierro exclamación")
++ self.btn_2.set_text("\"")
++ self.btn_2.set_text_desc("comilla doble")
++ self.btn_3.set_text("#")
++ self.btn_3.set_text_desc("numeral")
++ self.btn_4.set_text("$")
++ self.btn_4.set_text_desc("peso")
++ self.btn_5.set_text("%")
++ self.btn_5.set_text_desc("porcentaje")
++ self.btn_6.set_text("&")
++ self.btn_6.set_text_desc("ámpersand")
++ self.btn_7.set_text("/")
++ self.btn_7.set_text_desc("barra")
++ self.btn_8.set_text("(")
++ self.btn_8.set_text_desc("abro paréntesis")
++ self.btn_9.set_text(")")
++ self.btn_9.set_text_desc("cierro paréntesis")
++ self.btn_0.set_text("=")
++ self.btn_0.set_text_desc("igual")
++ self.btn_finPreg.set_text("?")
++ self.btn_finPreg.set_text_desc("cierro pregunta")
++ self.btn_inicioPreg.set_text("¿")
++ self.btn_inicioPreg.set_text_desc("abro pregunta")
++ self.btn_Q.set_text("q")
++ self.btn_W.set_text("w")
++ self.btn_E.set_text("e")
++ self.btn_R.set_text("r")
++ self.btn_T.set_text("t")
++ self.btn_Y.set_text("y")
++ self.btn_U.set_text("u")
++ self.btn_I.set_text("i")
++ self.btn_O.set_text("o")
++ self.btn_P.set_text("p")
++ self.btn_A.set_text("a")
++ self.btn_S.set_text("s")
++ self.btn_D.set_text("d")
++ self.btn_F.set_text("f")
++ self.btn_G.set_text("g")
++ self.btn_H.set_text("h")
++ self.btn_J.set_text("j")
++ self.btn_K.set_text("k")
++ self.btn_L.set_text("l")
++ self.btn_enie.set_text("ñ")
++ self.btn_menor.set_text(">")
++ self.btn_menor.set_text_desc("mayor")
++ self.btn_Z.set_text("z")
++ self.btn_X.set_text("x")
++ self.btn_C.set_text("c")
++ self.btn_V.set_text("v")
++ self.btn_B.set_text("b")
++ self.btn_N.set_text("n")
++ self.btn_M.set_text("m")
++ self.btn_coma.set_text(";")
++ self.btn_coma.set_text_desc("punto y coma")
++ self.btn_punto.set_text(":")
++ self.btn_punto.set_text_desc("dos puntos")
++ self.btn_guion.set_text("_")
++ self.btn_guion.set_text_desc("guión bajo")
++ self.btn_A_tilde.set_text("á")
++ self.btn_A_tilde.set_text_desc("á tilde")
++ self.btn_E_tilde.set_text("é")
++ self.btn_E_tilde.set_text_desc("é tilde")
++ self.btn_I_tilde.set_text("í")
++ self.btn_I_tilde.set_text_desc("í tilde")
++ self.btn_O_tilde.set_text("ó")
++ self.btn_O_tilde.set_text_desc("ó tilde")
++ self.btn_U_tilde.set_text("ú")
++ self.btn_U_tilde.set_text_desc("ú tilde")
++ self.btn_U_puntos.set_text("ü")
++ self.btn_U_puntos.set_text_desc("u diéresis")
++ self.btn_abre_llave.set_text("{")
++ self.btn_abre_llave.set_text_desc("abro llave")
++ self.btn_cierra_llave.set_text("}")
++ self.btn_cierra_llave.set_text_desc("cierro llave")
++
++ self.MAYUSCULA = False
++ self.btn_CAPS_LOCK.set_text("MAYÚSCULA")
++ self.btn_CAPS_LOCK.set_text_desc("MAYÚSCULA")
++ else:
++ self.btn_do.set_text("º")
++ self.btn_do.set_text_desc("o superíndice")
++ self.btn_1.set_text("1")
++ self.btn_1.set_text_desc("1")
++ self.btn_2.set_text("2")
++ self.btn_2.set_text_desc("2")
++ self.btn_3.set_text("3")
++ self.btn_3.set_text_desc("3")
++ self.btn_4.set_text("4")
++ self.btn_4.set_text_desc("4")
++ self.btn_5.set_text("5")
++ self.btn_5.set_text_desc("5")
++ self.btn_6.set_text("6")
++ self.btn_6.set_text_desc("6")
++ self.btn_7.set_text("7")
++ self.btn_7.set_text_desc("7")
++ self.btn_8.set_text("8")
++ self.btn_8.set_text_desc("8")
++ self.btn_9.set_text("9")
++ self.btn_9.set_text_desc("9")
++ self.btn_0.set_text("0")
++ self.btn_0.set_text_desc("0")
++ self.btn_finPreg.set_text("'")
++ self.btn_finPreg.set_text_desc("comilla simple")
++ self.btn_inicioPreg.set_text("¡")
++ self.btn_inicioPreg.set_text_desc("abro exclamación")
++ self.btn_Q.set_text("Q")
++ self.btn_W.set_text("W")
++ self.btn_E.set_text("E")
++ self.btn_R.set_text("R")
++ self.btn_T.set_text("T")
++ self.btn_Y.set_text("Y")
++ self.btn_U.set_text("U")
++ self.btn_I.set_text("I")
++ self.btn_O.set_text("O")
++ self.btn_P.set_text("P")
++ self.btn_A.set_text("A")
++ self.btn_S.set_text("S")
++ self.btn_D.set_text("D")
++ self.btn_F.set_text("F")
++ self.btn_G.set_text("G")
++ self.btn_H.set_text("H")
++ self.btn_J.set_text("J")
++ self.btn_K.set_text("K")
++ self.btn_L.set_text("L")
++ self.btn_enie.set_text("Ñ")
++ self.btn_menor.set_text("<")
++ self.btn_menor.set_text_desc("menor")
++ self.btn_Z.set_text("Z")
++ self.btn_X.set_text("X")
++ self.btn_C.set_text("C")
++ self.btn_V.set_text("V")
++ self.btn_B.set_text("B")
++ self.btn_N.set_text("N")
++ self.btn_M.set_text("M")
++ self.btn_coma.set_text(",")
++ self.btn_coma.set_text_desc("coma")
++ self.btn_punto.set_text(".")
++ self.btn_punto.set_text_desc("punto")
++ self.btn_guion.set_text("-")
++ self.btn_guion.set_text_desc("guión")
++ self.btn_A_tilde.set_text("Á")
++ self.btn_A_tilde.set_text_desc("Á tilde")
++ self.btn_E_tilde.set_text("É")
++ self.btn_E_tilde.set_text_desc("É tilde")
++ self.btn_I_tilde.set_text("Í")
++ self.btn_I_tilde.set_text_desc("Í tilde")
++ self.btn_O_tilde.set_text("Ó")
++ self.btn_O_tilde.set_text_desc("Ó tilde")
++ self.btn_U_tilde.set_text("Ú")
++ self.btn_U_tilde.set_text_desc("Ú tilde")
++ self.btn_U_puntos.set_text("Ü")
++ self.btn_U_puntos.set_text_desc("u diéresis")
++ self.btn_abre_llave.set_text("[")
++ self.btn_abre_llave.set_text_desc("abro paréntesis recto")
++ self.btn_cierra_llave.set_text("]")
++ self.btn_cierra_llave.set_text_desc("abro paréntesis recto")
++
++
++ self.MAYUSCULA = True
++ self.btn_CAPS_LOCK.set_text("MINÚSCULA")
++ self.btn_CAPS_LOCK.set_text_desc("MINÚSCULA")
++ if (self.hablar_al == "ESCRIBIR"):
++ self.btn_actual = self.btn_CAPS_LOCK
++ self.hablar()
++
++########################################################################
++
++ def set_botonesXbarridoXfila(self, widget):
++ state = widget.get_active()
++ if state:
++ self.BOTONESxBARRIDOxFILA = True
++ self.grabar_barrido("SI")
++ self.BOTONESxBARRIDO = False #nuevo
++ self.botonesXbarridoXfila()
++ else:
++ if (self.BOTONESxBARRIDOxFILA):
++ self.BOTONESxBARRIDOxFILA = False
++ self.iluminarFila(self.fila_actual_nro, "white")
++ self.iluminarBoton(self.btn_actual, "white")
++ self.BOTONESxBARRIDO = False
++ self.grabar_barrido("NO")
++
++ def botonesXbarridoXfila(self):
++ gobject.timeout_add(self.seg, self.barrerFocusXfila1)
++
++ def barrerFocusXfila1(self, *arg):
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.fila_actual_nro = 1
++ self.fila_actual = self.fila_1
++ self.iluminarBoton(self.btn_actual, "white") #nuevo, sacarlo
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.iluminarFila(1, "Yellow")
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ if self.BOTONESxBARRIDOxFILA:
++ if (not self.fila_2 == []):
++ gobject.timeout_add(self.seg, self.barrer_el_boton, self.btn_BACK_SPACE,1, 2)
++ else:
++ gobject.timeout_add(self.seg, self.barrerFocusXfila1)
++
++ def barrer_el_boton(self, btn , fila_anterior, fila_a_seguir):
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++
++ self.fila_actual_nro = -1
++ self.fila_actual = None
++ self.btn_actual = btn
++ self.iluminarFila(fila_anterior, "white")
++
++ if (self.hablar_al == "BARRER"):
++ self.hablar()
++
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.iluminarBoton(self.btn_actual, "Yellow")
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ if self.BOTONESxBARRIDOxFILA:
++ if fila_a_seguir==1:
++ gobject.timeout_add(self.seg, self.barrerFocusXfila1)
++ if fila_a_seguir==2:
++ gobject.timeout_add(self.seg, self.barrerFocusXfila2)
++ if fila_a_seguir==3:
++ gobject.timeout_add(self.seg, self.barrerFocusXfila3)
++ if fila_a_seguir==4:
++ gobject.timeout_add(self.seg, self.barrerFocusXfila4)
++ if fila_a_seguir==5:
++ gobject.timeout_add(self.seg, self.barrerFocusXfila5)
++
++
++
++ def barrerFocusXfila2(self, *arg):
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.iluminarBoton(self.btn_actual, "white")
++ self.fila_actual_nro = 2
++ self.fila_actual = self.fila_2
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.iluminarFila(2, "Yellow")
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ if self.BOTONESxBARRIDOxFILA:
++ if (not self.fila_3 == []):
++ gobject.timeout_add(self.seg, self.barrer_el_boton, self.btn_BACK_SPACE,2, 3)
++ else:
++ gobject.timeout_add(self.seg, self.barrer_el_boton, self.btn_BACK_SPACE,2, 1)
++
++
++ def barrerFocusXfila3(self, *arg):
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.fila_actual_nro = 3
++ self.fila_actual = self.fila_3
++ self.iluminarBoton(self.btn_actual, "white")
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.iluminarFila(3, "Yellow")
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ if self.BOTONESxBARRIDOxFILA:
++ if (not self.fila_4 == []):
++ gobject.timeout_add(self.seg, self.barrer_el_boton, self.btn_BACK_SPACE, 3, 4)
++ else:
++ gobject.timeout_add(self.seg, self.barrer_el_boton, self.btn_BACK_SPACE, 3, 1)
++
++
++ def barrerFocusXfila4(self, *arg):
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.fila_actual_nro = 4
++ self.fila_actual = self.fila_4
++ self.iluminarBoton(self.btn_actual, "white")
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.iluminarFila(4, "Yellow")
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ if self.BOTONESxBARRIDOxFILA:
++ if (not self.fila_5 == []):
++ gobject.timeout_add(self.seg, self.barrer_el_boton, self.btn_BACK_SPACE, 4, 5)
++ else:
++ if (self.teclado_tipo=="LETRAS" or self.teclado_tipo=="COMPLETO"):
++ gobject.timeout_add(self.seg, self.barrer_el_boton, self.btn_SPACE, 4, 1)
++ else:
++ gobject.timeout_add(self.seg, self.barrer_el_boton, self.btn_BACK_SPACE, 4, 1)
++
++
++ def barrerFocusXfila5(self, *arg):
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.fila_actual_nro = 5
++ self.fila_actual = self.fila_5
++ self.iluminarBoton(self.btn_actual, "white")
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ self.iluminarFila(5, "Yellow")
++ if not self.BOTONESxBARRIDOxFILA:
++ return False
++ if self.BOTONESxBARRIDOxFILA:
++ gobject.timeout_add(self.seg, self.barrer_el_boton, self.btn_SPACE, 5, 1)
++
++
++ def iluminarFila(self, fila, color):
++ if fila == 1:
++ for f in range(0,len(self.fila_1)):
++ gobject.idle_add(self.pintarControl,self.fila_1[f], color)
++ if fila == 2:
++ for f in range(0,len(self.fila_2)):
++ gobject.idle_add(self.pintarControl,self.fila_2[f], color)
++ if fila == 3:
++ for f in range(0,len(self.fila_3)):
++ gobject.idle_add(self.pintarControl,self.fila_3[f], color)
++ if fila == 4:
++ for f in range(0,len(self.fila_4)):
++ gobject.idle_add(self.pintarControl,self.fila_4[f], color)
++ if fila == 5:
++ for f in range(0,len(self.fila_5)):
++ gobject.idle_add(self.pintarControl,self.fila_5[f], color)
++
++ def pintarControl(self, w, color):
++ if not w == None:
++ w.modify_bg( gtk.STATE_NORMAL, gtk.gdk.color_parse(color))
++
++ def mouse_boton(self, widget, event):
++ #evita repetición
++ self.bloquearHandler()
++
++ if self.BOTONESxBARRIDO:
++ self.BOTONESxBARRIDO=False
++ self.btn_actual.emit("pressed")
++ #voler a empezar...
++ self.iluminarBoton(self.btn_actual, "white")
++ self.BOTONESxBARRIDOxFILA = True
++ self.botonesXbarridoXfila()
++ return
++ if self.BOTONESxBARRIDOxFILA:
++ if self.fila_actual_nro==-1: #es un boton
++ self.btn_actual.emit("pressed")
++ self.iluminarBoton(self.btn_actual, "white") #nuevo
++ else:
++ self.BOTONESxBARRIDOxFILA = False;
++ self.iluminarFila(self.fila_actual_nro, "white")
++ self.BOTONESxBARRIDO = True;
++ self.botonesXbarridoEnFila()
++
++
++
++ def iluminarBoton(self, btn, color):
++ gobject.idle_add(self.pintarControl,btn, color)
++
++ def bloquearHandler(self):
++ self.hilo_bloquear = threading.Thread(target = self.bloquearHandler_aux_obj)
++ self.hilo_bloquear.start()
++ self.hilo_bloquear.quit = True
++
++ def bloquearHandler_aux_obj(self):
++ self.event_box.handler_block(self.ebc)
++ try:
++ seg=self.get_time_barrido_botones()
++ except:
++ seg = velocidades['media']
++
++ s = seg/1000
++ if self.BOTONESxBARRIDOxFILA:
++ if self.fila_actual_nro==-1: #es un boton
++ if seg == velocidades['rapida']:
++ s = s - 0.5
++ else:
++ s = s - 1
++ time.sleep(s)
++ self.event_box.handler_unblock(self.ebc)
++
++
++ def botonesXbarridoEnFila(self):
++ gobject.idle_add(self.barrerEnFila)
++
++ def barrerEnFila(self):
++ if self.BOTONESxBARRIDO:
++ i=0
++ gobject.timeout_add(self.seg, self.barrerEnFila_aux, i)
++
++ def barrerEnFila_aux(self, i):
++ if not self.BOTONESxBARRIDO:
++ return False
++ try:
++ self.btn_ant = self.fila_actual[i-1]
++ except:
++ return False
++ try:
++ self.btn_actual = self.fila_actual[i]
++ except:
++ self.BOTONESxBARRIDO = False
++ self.BOTONESxBARRIDOxFILA = True
++ self.botonesXbarridoXfila()
++ return False
++ if not self.BOTONESxBARRIDO:
++ return False
++ self.iluminarBoton(self.btn_ant, "white")
++ if not self.BOTONESxBARRIDO:
++ return False
++ self.iluminarBoton(self.btn_actual, "Yellow")
++
++ if (self.hablar_al == "BARRER"):
++ self.hablar()
++
++ if not self.BOTONESxBARRIDO:
++ return False
++ else:
++ gobject.timeout_add(self.seg, self.barrerEnFila_aux, i+1)
++
++
++ def combo_tiempos_botones(self):
++ cb = gtk.combo_box_new_text()
++ cb.append_text("RÁPIDO")
++ cb.append_text("MEDIO")
++ cb.append_text("LENTO")
++ seg = velocidades['media']
++ try:
++ seg = self.get_time_barrido_botones()
++ logging.debug('seg : ' + seg)
++ except:
++ logging.debug("ERROR al leer velocidad de barrido de botones")
++
++ if seg==velocidades['rapida']:
++ cb.set_active(0)
++ if seg==velocidades['media']:
++ cb.set_active(1)
++ if seg==velocidades['lenta']:
++ cb.set_active(2)
++
++ cb.connect("changed", self.on_changed_cbo_time_btn)
++ return cb
++
++
++ def combo_size_botones(self):
++ cb = gtk.combo_box_new_text()
++ cb.append_text("CHICO")
++ cb.append_text("MEDIANO")
++ cb.append_text("GRANDE")
++ size="CHICO"
++ try:
++ size = self.get_size_botones()
++ except:
++ logging.debug("ERROR, al leer size de botones")
++
++ if size=="CHICO":
++ cb.set_active(0)
++ if size=="MEDIANO":
++ cb.set_active(1)
++ if size=="GRANDE":
++ cb.set_active(2)
++
++ cb.connect("changed", self.on_changed_cbo_size_btn)
++ return cb
++
++ def combo_tipo_teclados(self):
++ cb = gtk.combo_box_new_text()
++ cb.append_text("COMPLETO")
++ cb.append_text("NUMÉRICO")
++ cb.append_text("LETRAS")
++ tipo="COMPLETO"
++ try:
++ tipo = self.get_tipo_teclado()
++ except:
++ logging.debug("ERROR, al leer tipo de teclado")
++
++ if tipo=="COMPLETO":
++ cb.set_active(0)
++ if tipo=="NUMERICO":
++ cb.set_active(1)
++ if tipo=="LETRAS":
++ cb.set_active(2)
++
++ cb.connect("changed", self.on_changed_cbo_tipo_teclados)
++ return cb
++
++ def on_changed_cbo_tipo_teclados(self, widget):
++ s = widget.get_active()
++
++ if s==0:
++ tipo = "COMPLETO"
++ if s==1:
++ tipo = "NUMERICO"
++ if s==2:
++ tipo = "LETRAS"
++
++ self.set_tipo_teclado(tipo)
++
++ self.hilo_type = threading.Thread(target = self.reset)
++ self.hilo_type.start()
++ self.hilo_type.quit = True
++
++ self.dialog_opciones.destroy()
++ self.close()
++
++
++ def on_changed_cbo_size_btn(self, widget):
++ s = widget.get_active()
++
++ if s==0:
++ size = "CHICO"
++ if s==1:
++ size = "MEDIANO"
++ if s==2:
++ size = "GRANDE"
++
++ self.set_size_botones(size)
++
++ self.hilo_size = threading.Thread(target = self.reset)
++ self.hilo_size.start()
++ self.hilo_size.quit = True
++
++ self.dialog_opciones.destroy()
++ self.close()
++
++
++ def on_changed_cbo_time_btn(self, widget):
++ s = widget.get_active()
++
++ if s==0:
++ seg = velocidades['rapida']
++ if s==1:
++ seg = velocidades['media']
++ if s==2:
++ seg = velocidades['lenta']
++
++ self.set_time_barrido_botones(seg)
++ self.seg=seg
++
++
++
++ def get_time_barrido_botones(self):
++ client = gconf.client_get_default()
++ return client.get_int("/desktop/sugar/virtualkeyboard/time")
++
++ def set_time_barrido_botones(self, seg):
++ client = gconf.client_get_default()
++ client.set_int("/desktop/sugar/virtualkeyboard/time", seg)
++
++ def get_size_botones(self):
++ client = gconf.client_get_default()
++ return client.get_string("/desktop/sugar/virtualkeyboard/size")
++
++ def set_size_botones(self, size):
++ client = gconf.client_get_default()
++ client.set_string("/desktop/sugar/virtualkeyboard/size", size)
++
++ def set_hablar(self, hablar):
++ client = gconf.client_get_default()
++ client.set_string("/desktop/sugar/virtualkeyboard/hablar", hablar)
++ self.hablar_al = hablar
++
++ def get_tipo_teclado(self):
++ client = gconf.client_get_default()
++ return client.get_string("/desktop/sugar/virtualkeyboard/tipo")
++
++ def set_tipo_teclado(self, tipo):
++ client = gconf.client_get_default()
++ client.set_string("/desktop/sugar/virtualkeyboard/tipo", tipo)
++
++ def leer_barrido(self):
++ client = gconf.client_get_default()
++ return client.get_string("/desktop/sugar/virtualkeyboard/barrido")
++
++
++ def grabar_barrido(self, barrido):
++ client = gconf.client_get_default()
++ client.set_string("/desktop/sugar/virtualkeyboard/barrido", barrido)
++
++ def get_opciones_hablar(self):
++ client = gconf.client_get_default()
++ return client.get_string("/desktop/sugar/virtualkeyboard/hablar")
++
++ def set_opciones_hablar(self, widget, data=None):
++ if (widget.get_active()):
++ self.set_hablar(data)
++
++ def inicilizar_config(self):
++ client = gconf.client_get_default()
++ if not client.dir_exists("/desktop/sugar/virtualkeyboard"):
++ self.set_time_barrido_botones(self.seg)
++ self.set_size_botones(self.size)
++ self.set_hablar(self.hablar_al)
++ self.set_tipo_teclado(self.teclado_tipo)
++ if self.BOTONESxBARRIDOxFILA:
++ self.grabar_barrido("SI")
++ else:
++ self.grabar_barrido("NO")
++
++ def new_button(self, icon, label, callbackstr):
++ btn = Boton(label)
++ btn.set_font_desc("sans 9")
++ btn.connect("pressed", callbackstr)
++ if (not icon == None):
++ btn.set_icon(icon)
++ return btn
++
++
++ def sizeBotones(self, desc):
++ for btn in self.losBotones:
++ btn.set_font_desc(desc)
++
++ def reset(self):
++ self.close()
++ Teclado()
++
++ def hablar(self):
++ self.hilo_hablar = threading.Thread(target=self.hablar_aux)
++ self.hilo_hablar.start()
++ self.hilo_hablar.quit=True
++
++ def hablar_aux(self):
++ texto = ""
++ v = ""
++ try:
++ texto = self.btn_actual.get_text_desc()
++ except:
++ return
++ if (not texto == ""):
++ try:
++ seg=self.get_time_barrido_botones()
++ except:
++ seg = velocidades['media']
++ if seg == velocidades['rapida']:
++ v = hablar['rapida']
++ if seg == velocidades['media']:
++ v = hablar['media']
++ if seg == velocidades['lenta']:
++ v = hablar['lenta']
++ self._mTeclado.hablar(texto, v)
++
++ def desplegar_opciones(self, *arg):
++ try:
++ if (self.dialog_opciones.get_property('visible')):
++ return
++ except:
++ pass
++
++ self.dialog_opciones = gtk.Dialog()
++ self.dialog_opciones.set_title("OPCIONES")
++ self.dialog_opciones.set_keep_above(True)
++
++ #opciones hablar
++ box_hablar = gtk.VBox(False, 10)
++ box_hablar.set_border_width(20)
++
++ button = gtk.RadioButton(None, "HABLAR AL BARRER BOTONES.")
++ button.connect("toggled", self.set_opciones_hablar, "BARRER")
++ if (self.get_opciones_hablar()=="BARRER"):
++ button.set_active(True)
++ box_hablar.pack_start(button, True, True, 0)
++ button = gtk.RadioButton(button, "HABLAR AL ESCRIBIR.")
++ button.connect("toggled", self.set_opciones_hablar, "ESCRIBIR")
++ if (self.get_opciones_hablar()=="ESCRIBIR"):
++ button.set_active(True)
++ box_hablar.pack_start(button, True, True, 0)
++ button = gtk.RadioButton(button, "NO HABLAR.")
++ button.connect("toggled", self.set_opciones_hablar, "NUNCA")
++ if (self.get_opciones_hablar()=="NUNCA"):
++ button.set_active(True)
++ box_hablar.pack_start(button, True, True, 0)
++ self.dialog_opciones.vbox.pack_start(box_hablar, True, True, 0)
++
++ separator_hablar = gtk.HSeparator()
++ self.dialog_opciones.vbox.pack_start(separator_hablar, expand=False)
++ separator_hablar.show()
++
++ #opciones de barrido
++ box_barrido = gtk.VBox(False, 10)
++ box_barrido.set_border_width(20)
++
++ lbl_op_botones = gtk.Label("Barrer:")
++ lbl_op_botones.show()
++ box_barrido.pack_start(lbl_op_botones, True, True, 0)
++
++ self.chk_activarBarrido_botones = gtk.CheckButton("_BOTONES")
++
++ barriendo= ""
++ try:
++ barriendo = self.leer_barrido()
++ except:
++ barriendo == "NO"
++ if barriendo == "SI":
++ self.BOTONESxBARRIDOxFILA = True
++ elif barriendo == "NO":
++ self.BOTONESxBARRIDOxFILA = False
++ else:
++ logging.error("Error al leer barrido." + str(barriendo))
++
++
++ self.chk_activarBarrido_botones.set_active(self.BOTONESxBARRIDOxFILA or self.BOTONESxBARRIDO)
++ self.chk_activarBarrido_botones.connect("toggled", self.set_botonesXbarridoXfila)
++ box_barrido.pack_start(self.chk_activarBarrido_botones, True, True, 0)
++
++ lbl_op_velocidad = gtk.Label("Velocidad:")
++ lbl_op_velocidad.show()
++ box_barrido.pack_start(lbl_op_velocidad, True, True, 0)
++
++ self.cbo_time_btn = self.combo_tiempos_botones()
++ box_barrido.pack_start(self.cbo_time_btn, True, True, 0)
++ self.dialog_opciones.vbox.pack_start(box_barrido, True, True, 0)
++
++ separator_barrido = gtk.HSeparator()
++ self.dialog_opciones.vbox.pack_start(separator_barrido, expand=False)
++ separator_barrido.show()
++
++ #opciones de tamaño
++ box_size = gtk.VBox(False, 10)
++ box_size.set_border_width(20)
++
++ lbl_op_size = gtk.Label("Tamaño:")
++ lbl_op_size.show()
++ box_size.pack_start(lbl_op_size, True, True, 0)
++
++ self.cbo_size_btn = self.combo_size_botones()
++ box_size.pack_start(self.cbo_size_btn, True, True, 0)
++ self.dialog_opciones.vbox.pack_start(box_size, True, True, 0)
++
++ separator_size = gtk.HSeparator()
++ self.dialog_opciones.vbox.pack_start(separator_size, expand=False)
++ separator_size.show()
++
++ #tipo
++ box_teclado = gtk.VBox(False, 10)
++ box_teclado.set_border_width(20)
++
++ lbl_op_tipo = gtk.Label("Tipo:")
++ lbl_op_tipo.show()
++ box_teclado.pack_start(lbl_op_tipo, True, True, 0)
++
++ self.cbo_tipo_teclado = self.combo_tipo_teclados()
++ box_teclado.pack_start(self.cbo_tipo_teclado, True, True, 0)
++ self.dialog_opciones.vbox.pack_start(box_teclado, True, True, 0)
++
++ separator_tipo = gtk.HSeparator()
++ self.dialog_opciones.vbox.pack_start(separator_tipo, expand=False)
++ separator_tipo.show()
++
++ self.dialog_opciones.show_all()
++
++
++
++ def set_opciones_hablar(self, widget, data=None):
++ if (widget.get_active()):
++ self.set_hablar(data)
++################################################################################################################
++ def mostrar_teclado_numerico(self):
++ child = gtk.VBox(False, 2)
++
++ self.fila_1 = []
++ self.fila_2 = []
++ self.fila_3 = []
++ self.fila_4 = []
++ self.fila_5 = []
++ self.losBotones = []
++
++ # defino botones
++ self.btn_BACK_SPACE = self.new_button_borrar()
++ self.losBotones.append(self.btn_BACK_SPACE)
++
++ self.btn_1 = self.new_button_escribir("1")
++ self.losBotones.append(self.btn_1)
++ self.fila_3.append(self.btn_1)
++
++ self.btn_2 = self.new_button_escribir("2")
++ self.losBotones.append(self.btn_2)
++ self.fila_3.append(self.btn_2)
++
++ self.btn_3 = self.new_button_escribir("3")
++ self.losBotones.append(self.btn_3)
++ self.fila_3.append(self.btn_3)
++
++ self.btn_4 = self.new_button_escribir("4")
++ self.losBotones.append(self.btn_4)
++ self.fila_2.append(self.btn_4)
++
++ self.btn_5 = self.new_button_escribir("5")
++ self.losBotones.append(self.btn_5)
++ self.fila_2.append(self.btn_5)
++
++ self.btn_6 = self.new_button_escribir("6")
++ self.losBotones.append(self.btn_6)
++ self.fila_2.append(self.btn_6)
++
++ self.btn_7 = self.new_button_escribir("7")
++ self.losBotones.append(self.btn_7)
++ self.fila_1.append(self.btn_7)
++
++ self.btn_8 = self.new_button_escribir("8")
++ self.losBotones.append(self.btn_8)
++ self.fila_1.append(self.btn_8)
++
++ self.btn_9 = self.new_button_escribir("9")
++ self.losBotones.append(self.btn_9)
++ self.fila_1.append(self.btn_9)
++
++ self.btn_0 = self.new_button_escribir("0")
++ self.losBotones.append(self.btn_0)
++ self.fila_4.append(self.btn_0)
++
++ self.btn_asterisco = self.new_button_escribir("*")
++ self.btn_asterisco.set_text_desc("por")
++ self.losBotones.append(self.btn_asterisco)
++ self.fila_3.append(self.btn_asterisco)
++
++ self.btn_barra = self.new_button_escribir("/")
++ self.btn_barra.set_text_desc("dividido")
++ self.losBotones.append(self.btn_barra)
++ self.fila_3.append(self.btn_barra)
++
++ self.btn_mas = self.new_button_escribir("+")
++ self.btn_mas.set_text_desc("más")
++ self.losBotones.append(self.btn_mas)
++ self.fila_2.append(self.btn_mas)
++
++ self.btn_punto = self.new_button_escribir(".")
++ self.btn_punto.set_text_desc("punto")
++ self.losBotones.append(self.btn_punto)
++ self.fila_4.append(self.btn_punto)
++
++ self.btn_guion = self.new_button_escribir("-")
++ self.btn_guion.set_text_desc("menos")
++ self.losBotones.append(self.btn_guion)
++ self.fila_2.append(self.btn_guion)
++
++ self.btn_ENTER = self.new_button_enter()
++ self.losBotones.append(self.btn_ENTER)
++ self.fila_4.append(self.btn_ENTER)
++
++ self.btn_opciones = self.new_button(gtk.STOCK_PREFERENCES, None ,self.desplegar_opciones)
++ self.btn_cambiar_tipo = self.new_button_cambiar_tipo("ABC")
++ self.fila_4.append(self.btn_cambiar_tipo)
++
++ table = gtk.Table(6, 11, True)
++
++ table.set_row_spacing(0, 3)
++ table.set_row_spacing(1, 3)
++ table.set_row_spacing(2, 3)
++ table.set_row_spacing(3, 3)
++ table.set_row_spacing(4, 3)
++ table.set_row_spacing(5, 3)
++
++ table.set_col_spacing(0, 3)
++ table.set_col_spacing(1, 3)
++ table.set_col_spacing(2, 3)
++ table.set_col_spacing(3, 3)
++ table.set_col_spacing(4, 3)
++ table.set_col_spacing(5, 15)
++ table.set_col_spacing(6, 3)
++ table.set_col_spacing(7, 3)
++ table.set_col_spacing(8, 3)
++ table.set_col_spacing(9, 3)
++ table.set_col_spacing(10, 15)
++
++ table.attach(self.btn_7, 0, 2, 0, 2)
++ table.attach(self.btn_8, 2, 4, 0, 2)
++ table.attach(self.btn_9, 4, 6, 0, 2)
++ table.attach(self.btn_BACK_SPACE, 6, 10, 0, 2)
++
++ table.attach(self.btn_4, 0, 2, 2, 4)
++ table.attach(self.btn_5, 2, 4, 2, 4)
++ table.attach(self.btn_6, 4, 6, 2, 4)
++ table.attach(self.btn_mas, 6, 8, 2, 4)
++ table.attach(self.btn_guion, 8, 10, 2, 4)
++
++ table.attach(self.btn_1, 0, 2, 4, 6)
++ table.attach(self.btn_2, 2, 4, 4, 6)
++ table.attach(self.btn_3, 4, 6, 4, 6)
++ table.attach(self.btn_asterisco, 6, 8, 4, 6)
++ table.attach(self.btn_barra, 8, 10, 4, 6)
++
++ table.attach(self.btn_0, 0, 2, 6, 8)
++ table.attach(self.btn_punto, 2, 4, 6, 8)
++ table.attach(self.btn_ENTER, 6, 10, 6, 8)
++
++ table.attach(self.btn_opciones, 10, 11, 6, 7)
++ table.attach(self.btn_cambiar_tipo, 10, 11, 7, 8)
++
++
++ child.pack_end(table, True, True, 0)
++
++ return child
++
++ def posicionar_dialog(self, dialog):
++ dialog.set_gravity(gtk.gdk.GRAVITY_SOUTH_EAST)
++ width, height = dialog.get_size()
++ dialog.move(gtk.gdk.screen_width() - width, gtk.gdk.screen_height() - height)
++
++ def mostrar_teclado_letras(self):
++ self.fila_1 = []
++ self.fila_2 = []
++ self.fila_3 = []
++ self.fila_4 = []
++ self.fila_5 = []
++ self.losBotones = []
++
++ child = gtk.VBox(False, 2)
++
++ # defino botones
++ self.btn_BACK_SPACE = self.new_button_borrar()
++ self.losBotones.append(self.btn_BACK_SPACE)
++
++ self.btn_SPACE = self.new_button_espacio()
++ self.losBotones.append(self.btn_SPACE)
++
++ self.btn_ENTER = self.new_button_enter()
++ self.losBotones.append(self.btn_ENTER)
++ self.fila_2.append(self.btn_ENTER)
++
++ self.btn_Q = self.new_button_escribir("Q")
++ self.losBotones.append(self.btn_Q)
++ self.fila_1.append(self.btn_Q)
++
++ self.btn_W = self.new_button_escribir("W")
++ self.losBotones.append(self.btn_W)
++ self.fila_1.append(self.btn_W)
++
++ self.btn_E = self.new_button_escribir("E")
++ self.losBotones.append(self.btn_E)
++ self.fila_1.append(self.btn_E)
++
++ self.btn_R = self.new_button_escribir("R")
++ self.losBotones.append(self.btn_R)
++ self.fila_1.append(self.btn_R)
++
++ self.btn_T = self.new_button_escribir("T")
++ self.losBotones.append(self.btn_T)
++ self.fila_1.append(self.btn_T)
++
++ self.btn_Y = self.new_button_escribir("Y")
++ self.losBotones.append(self.btn_Y)
++ self.fila_1.append(self.btn_Y)
++
++ self.btn_U = self.new_button_escribir("U")
++ self.losBotones.append(self.btn_U)
++ self.fila_1.append(self.btn_U)
++
++ self.btn_I = self.new_button_escribir("I")
++ self.losBotones.append(self.btn_I)
++ self.fila_1.append(self.btn_I)
++
++ self.btn_O = self.new_button_escribir("O")
++ self.losBotones.append(self.btn_O)
++ self.fila_1.append(self.btn_O)
++
++ self.btn_P = self.new_button_escribir("P")
++ self.losBotones.append(self.btn_P)
++ self.fila_1.append(self.btn_P)
++
++ self.btn_A = self.new_button_escribir("A")
++ self.losBotones.append(self.btn_A)
++ self.fila_2.append(self.btn_A)
++
++ self.btn_S = self.new_button_escribir("S")
++ self.losBotones.append(self.btn_S)
++ self.fila_2.append(self.btn_S)
++
++ self.btn_D = self.new_button_escribir("D")
++ self.losBotones.append(self.btn_D)
++ self.fila_2.append(self.btn_D)
++
++ self.btn_F = self.new_button_escribir("F")
++ self.losBotones.append(self.btn_F)
++ self.fila_2.append(self.btn_F)
++
++ self.btn_G = self.new_button_escribir("G")
++ self.losBotones.append(self.btn_G)
++ self.fila_2.append(self.btn_G)
++
++ self.btn_H = self.new_button_escribir("H")
++ self.losBotones.append(self.btn_H)
++ self.fila_2.append(self.btn_H)
++
++ self.btn_J = self.new_button_escribir("J")
++ self.losBotones.append(self.btn_J)
++ self.fila_2.append(self.btn_J)
++
++ self.btn_K = self.new_button_escribir("K")
++ self.losBotones.append(self.btn_K)
++ self.fila_2.append(self.btn_K)
++
++ self.btn_L = self.new_button_escribir("L")
++ self.losBotones.append(self.btn_L)
++ self.fila_2.append(self.btn_L)
++
++ self.btn_enie = self.new_button_escribir("Ñ")
++ self.losBotones.append(self.btn_enie)
++ self.fila_2.append(self.btn_enie)
++
++ self.btn_Z = self.new_button_escribir("Z")
++ self.losBotones.append(self.btn_Z)
++ self.fila_3.append(self.btn_Z)
++
++ self.btn_X = self.new_button_escribir("X")
++ self.losBotones.append(self.btn_X)
++ self.fila_3.append(self.btn_X)
++
++ self.btn_C = self.new_button_escribir("C")
++ self.losBotones.append(self.btn_C)
++ self.fila_3.append(self.btn_C)
++
++ self.btn_V = self.new_button_escribir("V")
++ self.losBotones.append(self.btn_V)
++ self.fila_3.append(self.btn_V)
++
++ self.btn_B = self.new_button_escribir("B")
++ self.losBotones.append(self.btn_B)
++ self.fila_3.append(self.btn_B)
++
++ self.btn_N = self.new_button_escribir("N")
++ self.losBotones.append(self.btn_N)
++ self.fila_3.append(self.btn_N)
++
++ self.btn_M = self.new_button_escribir("M")
++ self.losBotones.append(self.btn_M)
++ self.fila_3.append(self.btn_M)
++
++ self.btn_A_tilde = self.new_button_escribir("Á")
++ self.btn_A_tilde.set_text_desc("Á tilde")
++ self.losBotones.append(self.btn_A_tilde)
++ self.fila_4.append(self.btn_A_tilde)
++
++ self.btn_E_tilde = self.new_button_escribir("É")
++ self.btn_E_tilde.set_text_desc("É tilde")
++ self.losBotones.append(self.btn_E_tilde)
++ self.fila_4.append(self.btn_E_tilde)
++
++ self.btn_I_tilde = self.new_button_escribir("Í")
++ self.btn_I_tilde.set_text_desc("Í tilde")
++ self.losBotones.append(self.btn_I_tilde)
++ self.fila_4.append(self.btn_I_tilde)
++
++ self.btn_O_tilde = self.new_button_escribir("Ó")
++ self.btn_O_tilde.set_text_desc("Ó tilde")
++ self.losBotones.append(self.btn_O_tilde)
++ self.fila_4.append(self.btn_O_tilde)
++
++ self.btn_U_tilde = self.new_button_escribir("Ú")
++ self.btn_U_tilde.set_text_desc("Ú tilde")
++ self.losBotones.append(self.btn_U_tilde)
++ self.fila_4.append(self.btn_U_tilde)
++
++ self.btn_opciones = self.new_button(gtk.STOCK_PREFERENCES, " ", self.desplegar_opciones)
++ self.btn_cambiar_tipo = self.new_button_cambiar_tipo("123")
++ self.fila_4.append(self.btn_cambiar_tipo)
++
++ #dibujo tabla
++ table = gtk.Table(7, 13, True)
++
++ table.set_row_spacing(0, 3)
++ table.set_row_spacing(1, 3)
++ table.set_row_spacing(2, 13)
++ table.set_row_spacing(3, 10)
++ table.set_row_spacing(4, 3)
++ table.set_row_spacing(5, 3)
++ table.set_row_spacing(6, 3)
++
++ table.set_col_spacing(0, 3)
++ table.set_col_spacing(1, 3)
++ table.set_col_spacing(2, 3)
++ table.set_col_spacing(3, 3)
++ table.set_col_spacing(4, 3)
++ table.set_col_spacing(5, 3)
++ table.set_col_spacing(6, 3)
++ table.set_col_spacing(7, 3)
++ table.set_col_spacing(8, 3)
++ table.set_col_spacing(9, 3)
++ table.set_col_spacing(10, 3)
++ table.set_col_spacing(11, 13)
++ table.set_col_spacing(12, 3)
++
++
++ table.attach(self.btn_Q, 0, 1, 0, 1)
++ table.attach(self.btn_W, 1, 2, 0, 1)
++ table.attach(self.btn_E, 2, 3, 0, 1)
++ table.attach(self.btn_R, 3, 4, 0, 1)
++ table.attach(self.btn_T, 4, 5, 0, 1)
++ table.attach(self.btn_Y, 5, 6, 0, 1)
++ table.attach(self.btn_U, 6, 7, 0, 1)
++ table.attach(self.btn_I, 7, 8, 0, 1)
++ table.attach(self.btn_O, 8, 9, 0, 1)
++ table.attach(self.btn_P, 9, 10, 0, 1)
++ table.attach(self.btn_A, 0, 1, 1, 2)
++ table.attach(self.btn_S, 1, 2, 1, 2)
++ table.attach(self.btn_D, 2, 3, 1, 2)
++ table.attach(self.btn_F, 3, 4, 1, 2)
++ table.attach(self.btn_G, 4, 5, 1, 2)
++ table.attach(self.btn_H, 5, 6, 1, 2)
++ table.attach(self.btn_J, 6, 7, 1, 2)
++ table.attach(self.btn_K, 7, 8, 1, 2)
++ table.attach(self.btn_L, 8, 9, 1, 2)
++ table.attach(self.btn_Z, 0, 1, 2, 3)
++ table.attach(self.btn_X, 1, 2, 2, 3)
++ table.attach(self.btn_C, 2, 3, 2, 3)
++ table.attach(self.btn_V, 3, 4, 2, 3)
++ table.attach(self.btn_B, 4, 5, 2, 3)
++ table.attach(self.btn_N, 5, 6, 2, 3)
++ table.attach(self.btn_M, 6, 7, 2, 3)
++
++ table.attach(self.btn_BACK_SPACE, 10, 13, 0, 1)
++ table.attach(self.btn_ENTER, 10, 13, 1, 2)
++ table.attach(self.btn_SPACE, 1, 9, 4, 5)
++ table.attach(self.btn_opciones, 12, 13, 4, 5)
++ table.attach(self.btn_cambiar_tipo, 12, 13, 3, 4)
++
++
++ table.attach(self.btn_A_tilde, 1, 2, 3, 4)
++ table.attach(self.btn_E_tilde, 2, 3, 3, 4)
++ table.attach(self.btn_I_tilde, 3, 4, 3, 4)
++ table.attach(self.btn_O_tilde, 4, 5, 3, 4)
++ table.attach(self.btn_U_tilde, 5, 6, 3, 4)
++
++ child.pack_end(table, True, True, 0)
++
++ return child
++
++ def get_size_dialog(self, size, teclado_tipo):
++ if teclado_tipo == "COMPLETO":
++ if size == "CHICO":
++ return 700, 335
++ if size == "MEDIANO":
++ return 1000, 400
++ if size == "GRANDE":
++ return 1200, 475
++
++ if teclado_tipo == "NUMERICO":
++ if size == "CHICO":
++ return 700, 400
++ if size == "MEDIANO":
++ return 900, 400
++ if size == "GRANDE":
++ return 1200, 500
++
++ if teclado_tipo == "LETRAS":
++ if size == "CHICO":
++ return 830, 290
++ if size == "MEDIANO":
++ return 1000, 330
++ if size == "GRANDE":
++ return 1200, 550
++
++ def get_font_desc(self, size, teclado_tipo):
++ if teclado_tipo == "COMPLETO":
++ if size == "CHICO":
++ return "sans 7"
++ if size == "MEDIANO":
++ return "sans bold 13"
++ if size == "GRANDE":
++ return "sans bold 15"
++
++ if teclado_tipo == "NUMERICO":
++ if size == "CHICO":
++ return "sans bold 7"
++ if size == "MEDIANO":
++ return "sans bold 13"
++ if size == "GRANDE":
++ return "sans bold 28"
++
++ if teclado_tipo == "LETRAS":
++ if size == "CHICO":
++ return "sans 7"
++ if size == "MEDIANO":
++ return "sans bold 13"
++ if size == "GRANDE":
++ return "sans bold 26"
++
++ def cambiar_tipo(self, w):
++
++ if (self.teclado_tipo=="NUMERICO"):
++ tipo = "LETRAS"
++ else:
++ tipo = "NUMERICO"
++
++ self.set_tipo_teclado(tipo)
++
++ self.hilo_type = threading.Thread(target = self.reset)
++ self.hilo_type.start()
++ self.hilo_type.quit = True
++
++ self.close()
++
++class Boton(gtk.Button):
++ font_desc = ''
++ font_color = ''
++ fondo_color = ''
++ text = ''
++ text_desc = ''
++
++ def __init__(self, nom=None):
++ gtk.Button.__init__(self)
++
++ self.hbox = gtk.HBox(False, 0)
++ self.add(self.hbox)
++
++ self.label = gtk.Label()
++ self.set_text(nom)
++
++ self.set_text(nom)
++ self.set_text_desc(nom)
++ self.set_font_desc('sans bold 13')
++ self.set_font_color('black')
++ self.set_fondo_color('white')
++
++ self.label.set_use_underline(True)
++ self.hbox.add(self.label)
++
++ def set_font_desc(self, pfont_desc):
++ self.font_desc = pfont_desc
++ self.label.modify_font(pango.FontDescription(pfont_desc))
++
++ def set_font_color(self, pfont_color):
++ self.font_color = pfont_color
++ self.label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(pfont_color))
++
++ def set_fondo_color(self, pfondo_color):
++ self.fondo_color = pfondo_color
++ self.modify_bg( gtk.STATE_NORMAL, gtk.gdk.color_parse(pfondo_color))
++
++ def set_text(self, ptext):
++ if (not ptext == None):
++ self.text = ptext
++ self.label.set_text(self.text)
++
++ def get_font_desc(self):
++ return self.font_desc
++
++ def get_font_color(self):
++ return self.font_color
++
++ def get_fondo_color(self):
++ return self.fondo_color
++
++ def get_text(self):
++ return self.text
++
++ def is_visible(self):
++ self.get_property('visible')
++
++ def get_text_desc(self):
++ return self.text_desc
++
++ def set_text_desc(self, ptext_desc):
++ self.text_desc = ptext_desc
++
++ def set_icon(self, icon):
++ #http://www.pygtk.org/docs/pygtk/gtk-stock-items.html
++ s = gtk.Style()
++ icon = s.lookup_icon_set(icon).render_icon(s, gtk.TEXT_DIR_LTR, gtk.STATE_NORMAL, gtk.ICON_SIZE_BUTTON, self.hbox, None)
++ img = gtk.Image()
++ img.set_from_pixbuf(icon)
++ self.hbox.add(img)
+--
+1.7.6
+