Files
pallectrum/electrum/plugins/virtualkeyboard/qt.py

68 lines
1.9 KiB
Python
Raw Normal View History

import random
2017-09-23 05:54:38 +02:00
from PyQt5.QtWidgets import (QVBoxLayout, QGridLayout, QPushButton)
from PyQt5.QtGui import QFontMetrics
from electrum.plugin import BasePlugin, hook
2013-09-11 11:45:58 +02:00
from electrum.i18n import _
2013-03-15 18:35:05 +01:00
2017-02-05 13:38:44 +03:00
class Plugin(BasePlugin):
vkb = None
vkb_index = 0
2013-03-15 18:35:05 +01:00
2014-08-31 11:42:40 +02:00
@hook
2013-03-15 18:35:05 +01:00
def password_dialog(self, pw, grid, pos):
vkb_button = QPushButton("+")
font_height = QFontMetrics(vkb_button.font()).height()
vkb_button.setFixedWidth(round(1.7 * font_height))
2013-03-15 18:35:05 +01:00
vkb_button.clicked.connect(lambda: self.toggle_vkb(grid, pw))
grid.addWidget(vkb_button, pos, 2)
self.kb_pos = 2
2015-02-28 12:08:23 +01:00
self.vkb = None
2013-03-15 18:35:05 +01:00
def toggle_vkb(self, grid, pw):
2015-02-28 12:08:23 +01:00
if self.vkb:
grid.removeItem(self.vkb)
2013-03-15 18:35:05 +01:00
self.vkb = self.virtual_keyboard(self.vkb_index, pw)
grid.addLayout(self.vkb, self.kb_pos, 0, 1, 3)
self.vkb_index += 1
def virtual_keyboard(self, i, pw):
2017-02-05 13:38:44 +03:00
i = i % 3
2013-03-15 18:35:05 +01:00
if i == 0:
chars = 'abcdefghijklmnopqrstuvwxyz '
elif i == 1:
chars = 'ABCDEFGHIJKLMNOPQRTSUVWXYZ '
elif i == 2:
chars = '1234567890!?.,;:/%&()[]{}+-'
2013-03-15 18:35:05 +01:00
n = len(chars)
s = []
2017-02-05 13:38:44 +03:00
for i in range(n):
2013-03-15 18:35:05 +01:00
while True:
2017-02-05 13:38:44 +03:00
k = random.randint(0, n - 1)
2013-03-15 18:35:05 +01:00
if k not in s:
s.append(k)
break
def add_target(t):
2015-02-28 12:08:23 +01:00
return lambda: pw.setText(str(pw.text()) + t)
font_height = QFontMetrics(QPushButton().font()).height()
btn_size = max(25, round(1.7 * font_height))
2013-03-15 18:35:05 +01:00
vbox = QVBoxLayout()
grid = QGridLayout()
grid.setSpacing(2)
for i in range(n):
l_button = QPushButton(chars[s[i]])
l_button.setFixedWidth(btn_size)
l_button.setFixedHeight(btn_size)
2015-02-28 12:08:23 +01:00
l_button.clicked.connect(add_target(chars[s[i]]))
2017-02-05 13:38:44 +03:00
grid.addWidget(l_button, i // 6, i % 6)
2013-03-15 18:35:05 +01:00
vbox.addLayout(grid)
return vbox