summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2011-01-25 21:15:46 +0100
committerFlorent Le Coz <louiz@louiz.org>2011-01-25 21:15:46 +0100
commitcc0449f73b3346ee4d98a1d8e11694ba14e0eb37 (patch)
treefb1bb93cb8f1d874ca1717fd04d6a809b9464674
parent716b8be04fc8ed6b41dc01217c7970a715b8d6fd (diff)
downloadpoezio-cc0449f73b3346ee4d98a1d8e11694ba14e0eb37.tar.gz
poezio-cc0449f73b3346ee4d98a1d8e11694ba14e0eb37.tar.bz2
poezio-cc0449f73b3346ee4d98a1d8e11694ba14e0eb37.tar.xz
poezio-cc0449f73b3346ee4d98a1d8e11694ba14e0eb37.zip
data-forms: text-multi and jid-multi support
-rw-r--r--src/data_forms.py66
1 files changed, 62 insertions, 4 deletions
diff --git a/src/data_forms.py b/src/data_forms.py
index 1fbcfa0f..ae530551 100644
--- a/src/data_forms.py
+++ b/src/data_forms.py
@@ -150,6 +150,65 @@ class BooleanWin(FieldInput, windows.Win):
self._field['label'] = ''
self._field.setAnswer(self.value)
+class TextMultiWin(FieldInput, windows.Win):
+ def __init__(self, field):
+ FieldInput.__init__(self, field)
+ windows.Win.__init__(self)
+ self.options = field.getValue()
+ self.val_pos = 0
+ self.edition_input = None
+ if not isinstance(self.options, list):
+ self.options = [self.options]
+ self.options.append('')
+
+ def do_command(self, key):
+ if not self.edition_input:
+ if key == 'KEY_LEFT':
+ if self.val_pos > 0:
+ self.val_pos -= 1
+ elif key == 'KEY_RIGHT':
+ if self.val_pos < len(self.options)-1:
+ self.val_pos += 1
+ elif key in ('^J', '^M', '\n'):
+ self.edition_input = windows.Input()
+ self.edition_input.color = self.color
+ self.edition_input.resize(self.height, self.width, self.y, self.x)
+ self.edition_input.text = self.options[self.val_pos]
+ self.edition_input.key_end()
+ else:
+ if key in ('^J', '^M', '\n'):
+ self.options[self.val_pos] = self.edition_input.get_text()
+ if not self.options[self.val_pos] and self.val_pos != len(self.options) -1:
+ del self.options[self.val_pos]
+ if self.val_pos == len(self.options) -1:
+ self.val_pos -= 1
+ self.edition_input = None
+ if not self.options or self.options[-1] != '':
+ self.options.append('')
+ else:
+ self.edition_input.do_command(key)
+ self.refresh()
+
+ def refresh(self):
+ if not self.edition_input:
+ with g_lock:
+ self._win.attron(curses.color_pair(self.color))
+ self.addnstr(0, 0, ' '*self.width, self.width)
+ option = self.options[self.val_pos]
+ self.addstr(0, self.width//2-len(option)//2, option)
+ if self.val_pos > 0:
+ self.addstr(0, 0, '←')
+ if self.val_pos < len(self.options)-1:
+ self.addstr(0, self.width-1, '→')
+ self._win.attroff(curses.color_pair(self.color))
+ self._refresh()
+ else:
+ self.edition_input.refresh()
+
+ def reply(self):
+ values = [val for val in self.options if val]
+ self._field.setAnswer(values)
+
class ListMultiWin(FieldInput, windows.Win):
def __init__(self, field):
FieldInput.__init__(self, field)
@@ -274,11 +333,11 @@ class FormWin(object):
"""
input_classes = {'boolean': BooleanWin,
'fixed': DummyInput,
- # jid-multi
+ 'jid-multi': TextMultiWin,
'jid-single': TextSingleWin,
'list-multi': ListMultiWin,
'list-single': ListSingleWin,
- 'text-multi': TextSingleWin,
+ 'text-multi': TextMultiWin,
'text-private': TextPrivateWin,
'text-single': TextSingleWin,
}
@@ -293,8 +352,7 @@ class FormWin(object):
try:
input_class = self.input_classes[field['type']]
except:
- field.setValue(field['type'])
- input_class = TextSingleWin
+ continue
instructions = field['instructions']
label = field['label']
if field['type'] == 'fixed':