From 8d1e8e1a11ae518df42342279108284fd7c8a4ac Mon Sep 17 00:00:00 2001 From: Goffi Date: Sat, 3 Jul 2010 13:56:44 +0800 Subject: [PATCH] primitivus: added edition zone at the bottom - primitivus: new AdvancedEdit widget, which is like Edit but manage some new keys (C-a, C-e, C-k, C-w) --- frontends/primitivus/custom_widgets.py | 23 ++++++++++++++++++++++- frontends/primitivus/primitivus | 7 +++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/frontends/primitivus/custom_widgets.py b/frontends/primitivus/custom_widgets.py index 6cd104dc..7ceebbea 100644 --- a/frontends/primitivus/custom_widgets.py +++ b/frontends/primitivus/custom_widgets.py @@ -36,6 +36,26 @@ class Password(urwid.Edit): def get_edit_text(self): return self.__real_text +class AdvancedEdit(urwid.Edit): + """Edit box with some custom improvments""" + + def keypress(self, size, key): + #TODO: insert mode is not managed yet + if key == 'ctrl a': + key = 'home' + elif key == 'ctrl e': + key = 'end' + elif key == 'ctrl k': + self._delete_highlighted() + self.set_edit_text(self.edit_text[:self.edit_pos]) + elif key == 'ctrl w': + before = self.edit_text[:self.edit_pos] + pos = before.rstrip().rfind(" ")+1 + self.set_edit_text(before[:pos] + self.edit_text[self.edit_pos:]) + self.set_edit_pos(pos) + return super(AdvancedEdit, self).keypress(size, key) + + class SelectableText(urwid.FlowWidget): signals = ['change'] @@ -93,6 +113,7 @@ class List(urwid.WidgetWrap): self.content = urwid.SimpleListWalker([]) self.list_box = urwid.ListBox(self.content) + urwid.WidgetWrap.__init__(self, self.list_box) self.changeValues(options) def __onStateChange(self, widget, selected): @@ -141,7 +162,7 @@ class List(urwid.WidgetWrap): if self.single and new_values: self.content[0].setState(True) display_widget = urwid.BoxAdapter(self.list_box, min(len(new_values),5) or 1) - urwid.WidgetWrap.__init__(self, display_widget) + self._set_w(display_widget) def selectValue(self, value): self.unselectAll() diff --git a/frontends/primitivus/primitivus b/frontends/primitivus/primitivus index 17ddeced..dfa579e7 100755 --- a/frontends/primitivus/primitivus +++ b/frontends/primitivus/primitivus @@ -27,6 +27,7 @@ from quick_frontend.quick_contact_management import QuickContactManagement import urwid from profile_manager import ProfileManager from contact_list import ContactList +from custom_widgets import AdvancedEdit import pdb """from window import Window from editbox import EditBox @@ -78,10 +79,12 @@ class PrimitivusApp(QuickApp): def __buildMainWidget(self): self.contactList = ContactList(self, self.CM) - return self.contactList + self.center_part = urwid.Columns([self.contactList]) + self.main_widget = urwid.Frame(self.center_part, footer=AdvancedEdit('> '), focus_part='footer') + return self.main_widget def plug_profile(self, profile_key='@DEFAULT@'): - self.main_widget = self.loop.widget = self.__buildMainWidget() + self.loop.widget = self.__buildMainWidget() QuickApp.plug_profile(self, profile_key) def removePopUp(self):