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)])