Mercurial > libervia-backend
comparison frontends/src/primitivus/primitivus @ 1158:c0f15e52695a
primitivus: use of new keys modules from Urwid SàText
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 04 Sep 2014 19:05:57 +0200 |
parents | 75025461141f |
children | 85fd02356dba |
comparison
equal
deleted
inserted
replaced
1157:c4b62e6b7377 | 1158:c0f15e52695a |
---|---|
34 from sat_frontends.primitivus.contact_list import ContactList | 34 from sat_frontends.primitivus.contact_list import ContactList |
35 from sat_frontends.primitivus.chat import Chat | 35 from sat_frontends.primitivus.chat import Chat |
36 from sat_frontends.primitivus import xmlui | 36 from sat_frontends.primitivus import xmlui |
37 from sat_frontends.primitivus.progress import Progress | 37 from sat_frontends.primitivus.progress import Progress |
38 from sat_frontends.primitivus.notify import Notify | 38 from sat_frontends.primitivus.notify import Notify |
39 from sat_frontends.primitivus.keys import action_key_map as a_key | |
39 from sat_frontends.tools.misc import InputHistory | 40 from sat_frontends.tools.misc import InputHistory |
40 from sat_frontends.constants import Const as commonConst # FIXME | 41 from sat_frontends.constants import Const as commonConst # FIXME |
41 from sat_frontends.tools.jid import JID | 42 from sat_frontends.tools.jid import JID |
42 from os.path import join | 43 from os.path import join |
43 | 44 |
54 The modal edit bar where you would enter messages and commands. | 55 The modal edit bar where you would enter messages and commands. |
55 """ | 56 """ |
56 | 57 |
57 def __init__(self, app): | 58 def __init__(self, app): |
58 modes = {None: ('NORMAL', u''), | 59 modes = {None: ('NORMAL', u''), |
59 'i': ('INSERTION', u'> '), | 60 a_key['MODE_INSERTION']: ('INSERTION', u'> '), |
60 ':': ('COMMAND', u':')} #XXX: captions *MUST* be unicode | 61 a_key['MODE_COMMAND']: ('COMMAND', u':')} #XXX: captions *MUST* be unicode |
61 super(EditBar, self).__init__(modes) | 62 super(EditBar, self).__init__(modes) |
62 self.app = app | 63 self.app = app |
63 self.setCompletionMethod(self._text_completion) | 64 self.setCompletionMethod(self._text_completion) |
64 urwid.connect_signal(self, 'click', self.onTextEntered) | 65 urwid.connect_signal(self, 'click', self.onTextEntered) |
65 | 66 |
151 and move the index of the temporary history stack.""" | 152 and move the index of the temporary history stack.""" |
152 def history_cb(text): | 153 def history_cb(text): |
153 self.set_edit_text(text) | 154 self.set_edit_text(text) |
154 self.set_edit_pos(len(text)) | 155 self.set_edit_pos(len(text)) |
155 | 156 |
156 if key == "esc": | 157 if key == a_key['MODAL_ESCAPE']: |
157 # first save the text to the current mode, then change to NORMAL | 158 # first save the text to the current mode, then change to NORMAL |
158 self.app._updateInputHistory(self.get_edit_text(), mode=self.mode) | 159 self.app._updateInputHistory(self.get_edit_text(), mode=self.mode) |
159 self.app._updateInputHistory(mode='NORMAL') | 160 self.app._updateInputHistory(mode='NORMAL') |
160 if self._mode == 'NORMAL' and key in self._modes: | 161 if self._mode == 'NORMAL' and key in self._modes: |
161 self.app._updateInputHistory(mode=self._modes[key][0]) | 162 self.app._updateInputHistory(mode=self._modes[key][0]) |
162 if key == "up": | 163 if key == a_key['HISTORY_PREV']: |
163 self.app._updateInputHistory(self.get_edit_text(), -1, history_cb, self.mode) | 164 self.app._updateInputHistory(self.get_edit_text(), -1, history_cb, self.mode) |
164 return | 165 return |
165 elif key == "down": | 166 elif key == a_key['HISTORY_NEXT']: |
166 self.app._updateInputHistory(self.get_edit_text(), +1, history_cb, self.mode) | 167 self.app._updateInputHistory(self.get_edit_text(), +1, history_cb, self.mode) |
167 return | 168 return |
168 elif key == "enter": | 169 elif key == a_key['EDIT_ENTER']: |
169 self.app._updateInputHistory(self.get_edit_text(), mode=self.mode) | 170 self.app._updateInputHistory(self.get_edit_text(), mode=self.mode) |
170 else: | 171 else: |
171 contact = self.app.contact_list.getContact() | 172 contact = self.app.contact_list.getContact() |
172 if contact: | 173 if contact: |
173 self.app.bridge.chatStateComposing(unescapePrivate(contact), self.app.profile) | 174 self.app.bridge.chatStateComposing(unescapePrivate(contact), self.app.profile) |
244 input[input.index(i)] = 'up' | 245 input[input.index(i)] = 'up' |
245 if i[1] == 5: #Mouse wheel down | 246 if i[1] == 5: #Mouse wheel down |
246 input[input.index(i)] = 'down' | 247 input[input.index(i)] = 'down' |
247 return input | 248 return input |
248 | 249 |
249 def keyHandler(self, input): | 250 def keyHandler(self, input_): |
250 if input == 'meta m': | 251 if input_ == a_key['MENU_HIDE']: |
251 """User want to (un)hide the menu roller""" | 252 """User want to (un)hide the menu roller""" |
252 try: | 253 try: |
253 if self.main_widget.header == None: | 254 if self.main_widget.header == None: |
254 self.main_widget.header = self.menu_roller | 255 self.main_widget.header = self.menu_roller |
255 else: | 256 else: |
256 self.main_widget.header = None | 257 self.main_widget.header = None |
257 except AttributeError: | 258 except AttributeError: |
258 pass | 259 pass |
259 elif input == 'ctrl n': | 260 elif input_ == a_key['NOTIFICATION_NEXT']: |
260 """User wants to see next notification""" | 261 """User wants to see next notification""" |
261 self.notBar.showNext() | 262 self.notBar.showNext() |
262 elif input == 'ctrl s': | 263 elif input_ == a_key['OVERLAY_HIDE']: |
263 """User wants to (un)hide overlay window""" | 264 """User wants to (un)hide overlay window""" |
264 if isinstance(self.loop.widget,urwid.Overlay): | 265 if isinstance(self.loop.widget,urwid.Overlay): |
265 self.__saved_overlay = self.loop.widget | 266 self.__saved_overlay = self.loop.widget |
266 self.loop.widget = self.main_widget | 267 self.loop.widget = self.main_widget |
267 else: | 268 else: |
268 if self.__saved_overlay: | 269 if self.__saved_overlay: |
269 self.loop.widget = self.__saved_overlay | 270 self.loop.widget = self.__saved_overlay |
270 self.__saved_overlay = None | 271 self.__saved_overlay = None |
271 | 272 |
272 elif input == 'ctrl d' and 'D' in self.bridge.getVersion(): #Debug only for dev versions | 273 elif input_ == a_key['DEBUG'] and 'D' in self.bridge.getVersion(): #Debug only for dev versions |
273 self.debug() | 274 self.debug() |
274 elif input == 'f2': #user wants to (un)hide the contact_list | 275 elif input_ == a_key['CONTACTS_HIDE']: #user wants to (un)hide the contact_list |
275 try: | 276 try: |
276 for wid, options in self.center_part.contents: | 277 for wid, options in self.center_part.contents: |
277 if self.contact_list is wid: | 278 if self.contact_list is wid: |
278 self.center_part.contents.remove((wid, options)) | 279 self.center_part.contents.remove((wid, options)) |
279 break | 280 break |
280 else: | 281 else: |
281 self.center_part.contents.insert(0, (self.contact_list, ('weight', 2, False))) | 282 self.center_part.contents.insert(0, (self.contact_list, ('weight', 2, False))) |
282 except AttributeError: | 283 except AttributeError: |
283 #The main widget is not built (probably in Profile Manager) | 284 #The main widget is not built (probably in Profile Manager) |
284 pass | 285 pass |
285 elif input == 'window resize': | 286 elif input_ == 'window resize': |
286 width,height = self.loop.screen_size | 287 width,height = self.loop.screen_size |
287 if height<=5 and width<=35: | 288 if height<=5 and width<=35: |
288 if not 'save_main_widget' in dir(self): | 289 if not 'save_main_widget' in dir(self): |
289 self.save_main_widget = self.loop.widget | 290 self.save_main_widget = self.loop.widget |
290 self.loop.widget = urwid.Filler(urwid.Text(_("Pleeeeasse, I can't even breathe !"))) | 291 self.loop.widget = urwid.Filler(urwid.Text(_("Pleeeeasse, I can't even breathe !"))) |
291 else: | 292 else: |
292 if 'save_main_widget' in dir(self): | 293 if 'save_main_widget' in dir(self): |
293 self.loop.widget = self.save_main_widget | 294 self.loop.widget = self.save_main_widget |
294 del self.save_main_widget | 295 del self.save_main_widget |
295 try: | 296 try: |
296 return self.menu_roller.checkShortcuts(input) | 297 return self.menu_roller.checkShortcuts(input_) |
297 except AttributeError: | 298 except AttributeError: |
298 return input | 299 return input_ |
299 | 300 |
300 def addMenus(self, menu, type_, menu_data=None): | 301 def addMenus(self, menu, type_, menu_data=None): |
301 """Add cached menus to instance | 302 """Add cached menus to instance |
302 @param menu: sat_widgets.Menu instance | 303 @param menu: sat_widgets.Menu instance |
303 @param type_: menu type like is sat.core.sat_main.importMenu | 304 @param type_: menu type like is sat.core.sat_main.importMenu |
318 general = _("General") | 319 general = _("General") |
319 menu.addMenu(general, _("Connect"), self.onConnectRequest) | 320 menu.addMenu(general, _("Connect"), self.onConnectRequest) |
320 menu.addMenu(general, _("Disconnect"), self.onDisconnectRequest) | 321 menu.addMenu(general, _("Disconnect"), self.onDisconnectRequest) |
321 menu.addMenu(general, _("Parameters"), self.onParam) | 322 menu.addMenu(general, _("Parameters"), self.onParam) |
322 menu.addMenu(general, _("About"), self.onAboutRequest) | 323 menu.addMenu(general, _("About"), self.onAboutRequest) |
323 menu.addMenu(general, _("Exit"), self.onExitRequest, 'ctrl x') | 324 menu.addMenu(general, _("Exit"), self.onExitRequest, a_key['APP_QUIT']) |
324 contact = _("Contacts") | 325 contact = _("Contacts") |
325 menu.addMenu(contact) | 326 menu.addMenu(contact) |
326 communication = _("Communication") | 327 communication = _("Communication") |
327 menu.addMenu(communication, _("Join room"), self.onJoinRoomRequest, 'meta j') | 328 menu.addMenu(communication, _("Join room"), self.onJoinRoomRequest, a_key['ROOM_JOIN']) |
328 #additionals menus | 329 #additionals menus |
329 #FIXME: do this in a more generic way (in quickapp) | 330 #FIXME: do this in a more generic way (in quickapp) |
330 self.addMenus(menu, C.MENU_GLOBAL) | 331 self.addMenus(menu, C.MENU_GLOBAL) |
331 | 332 |
332 menu_roller = sat_widgets.MenuRoller([(_('Main menu'),menu)]) | 333 menu_roller = sat_widgets.MenuRoller([(_('Main menu'),menu)]) |