comparison browser_side/base_panels.py @ 403:ec6f7581b453

browser_side: microblogs edition: <shift> + <enter> makes a new line, <esc> finishes the edition
author souliane <souliane@mailoo.org>
date Fri, 14 Mar 2014 21:00:13 +0100
parents d7e78cb78dfc
children c393e7dc9ae6
comparison
equal deleted inserted replaced
402:d7e78cb78dfc 403:ec6f7581b453
27 from pyjamas.ui.SimplePanel import SimplePanel 27 from pyjamas.ui.SimplePanel import SimplePanel
28 from pyjamas.ui.PopupPanel import PopupPanel 28 from pyjamas.ui.PopupPanel import PopupPanel
29 from pyjamas.ui.StackPanel import StackPanel 29 from pyjamas.ui.StackPanel import StackPanel
30 from pyjamas.ui.TextArea import TextArea 30 from pyjamas.ui.TextArea import TextArea
31 from pyjamas.ui.Event import BUTTON_LEFT, BUTTON_MIDDLE, BUTTON_RIGHT 31 from pyjamas.ui.Event import BUTTON_LEFT, BUTTON_MIDDLE, BUTTON_RIGHT
32 from pyjamas.ui.KeyboardListener import KEY_ENTER, KEY_ESCAPE, KeyboardHandler 32 from pyjamas.ui.KeyboardListener import KEY_ENTER, KEY_ESCAPE, KEY_SHIFT, KeyboardHandler
33 from pyjamas.ui.FocusListener import FocusHandler 33 from pyjamas.ui.FocusListener import FocusHandler
34 from pyjamas.ui.ClickListener import ClickHandler 34 from pyjamas.ui.ClickListener import ClickHandler
35 from pyjamas import DOM 35 from pyjamas import DOM
36 36
37 from datetime import datetime 37 from datetime import datetime
454 """ 454 """
455 self.__single_line = single_line 455 self.__single_line = single_line
456 self.__enhance_display = enhance_display 456 self.__enhance_display = enhance_display
457 self.__listen_focus = single_line if listen_focus is None else listen_focus 457 self.__listen_focus = single_line if listen_focus is None else listen_focus
458 self.__listen_click = listen_click 458 self.__listen_click = listen_click
459 self.__shift_down = False
459 if self.__listen_focus: 460 if self.__listen_focus:
460 FocusHandler.__init__(self) 461 FocusHandler.__init__(self)
461 if self.__listen_click: 462 if self.__listen_click:
462 ClickHandler.__init__(self) 463 ClickHandler.__init__(self)
463 KeyboardHandler.__init__(self) 464 KeyboardHandler.__init__(self)
502 raise NotImplementedError 503 raise NotImplementedError
503 504
504 def onKeyDown(self, sender, keycode, modifiers): 505 def onKeyDown(self, sender, keycode, modifiers):
505 for listener in self.edit_listeners: 506 for listener in self.edit_listeners:
506 listener(self.textarea, keycode) 507 listener(self.textarea, keycode)
507
508 def onKeyPress(self, sender, keycode, modifiers):
509 if not self.__single_line: 508 if not self.__single_line:
510 return 509 return
511 # XXX: it seems that pyjamas never catches the escape key 510 if keycode == KEY_SHIFT or self.__shift_down: # allow input a new line with <shift> + <enter>
511 self.__shift_down = True
512 return
512 if keycode in (KEY_ENTER, KEY_ESCAPE): # finish the edition 513 if keycode in (KEY_ENTER, KEY_ESCAPE): # finish the edition
513 self.textarea.setFocus(False) 514 self.textarea.setFocus(False)
514 if not self.__listen_focus: 515 if not self.__listen_focus:
515 self.edit(False) 516 self.edit(False)
517
518 def onKeyUp(self, sender, keycode, modifiers):
519 if keycode == KEY_SHIFT:
520 self.__shift_down = False
516 521
517 def onLostFocus(self, sender): 522 def onLostFocus(self, sender):
518 """Finish the edition when focus is lost""" 523 """Finish the edition when focus is lost"""
519 if self.__listen_focus: 524 if self.__listen_focus:
520 self.edit(False) 525 self.edit(False)
575 self.textarea.setText(self._original_content['text']) 580 self.textarea.setText(self._original_content['text'])
576 self.setWidget(self.textarea if edit else self.display) 581 self.setWidget(self.textarea if edit else self.display)
577 SimpleTextEditor.edit(self, edit, abort, sync) 582 SimpleTextEditor.edit(self, edit, abort, sync)
578 583
579 def setFocus(self, focus): 584 def setFocus(self, focus):
585 if focus:
586 self.textarea.setCursorPos(len(self.textarea.getText()))
580 self.textarea.setFocus(focus) 587 self.textarea.setFocus(focus)