From 332a5c2553db41de777473a1e1be9cd1522c9496 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Thu, 31 Mar 2016 18:54:41 +0100 Subject: Move the src directory to poezio, for better cython compatibility. --- poezio/tabs/data_forms.py | 75 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 poezio/tabs/data_forms.py (limited to 'poezio/tabs/data_forms.py') diff --git a/poezio/tabs/data_forms.py b/poezio/tabs/data_forms.py new file mode 100644 index 00000000..0fad2974 --- /dev/null +++ b/poezio/tabs/data_forms.py @@ -0,0 +1,75 @@ +""" +Defines the data-forms Tab +""" + +import logging +log = logging.getLogger(__name__) + +import windows +from tabs import Tab + +class DataFormsTab(Tab): + """ + A tab contaning various window type, displaying + a form that the user needs to fill. + """ + plugin_commands = {} + def __init__(self, form, on_cancel, on_send, kwargs): + Tab.__init__(self) + self._form = form + self._on_cancel = on_cancel + self._on_send = on_send + self._kwargs = kwargs + self.fields = [] + for field in self._form: + self.fields.append(field) + self.topic_win = windows.Topic() + self.form_win = windows.FormWin(form, self.height-4, self.width, 1, 0) + self.help_win = windows.HelpText("Ctrl+Y: send form, Ctrl+G: cancel") + self.help_win_dyn = windows.HelpText() + self.key_func['KEY_UP'] = self.form_win.go_to_previous_input + self.key_func['KEY_DOWN'] = self.form_win.go_to_next_input + self.key_func['^G'] = self.on_cancel + self.key_func['^Y'] = self.on_send + self.resize() + self.update_commands() + + def on_cancel(self): + self._on_cancel(self._form, **self._kwargs) + return True + + def on_send(self): + self._form.reply() + self.form_win.reply() + self._on_send(self._form, **self._kwargs) + return True + + def on_input(self, key, raw=False): + if key in self.key_func: + res = self.key_func[key]() + if res: + return res + self.help_win_dyn.refresh(self.form_win.get_help_message()) + self.form_win.refresh_current_input() + else: + self.form_win.on_input(key) + + def resize(self): + self.need_resize = False + self.topic_win.resize(1, self.width, 0, 0) + self.form_win.resize(self.height - 3 - Tab.tab_win_height(), + self.width, 1, 0) + self.help_win.resize(1, self.width, self.height - 1, 0) + self.help_win_dyn.resize(1, self.width, + self.height - 2 - Tab.tab_win_height(), 0) + self.lines = [] + + def refresh(self): + if self.need_resize: + self.resize() + self.topic_win.refresh(self._form['title']) + self.refresh_tab_win() + self.help_win.refresh() + self.help_win_dyn.refresh(self.form_win.get_help_message()) + self.form_win.refresh() + -- cgit v1.2.3