comparison browser_side/panels.py @ 314:70ac3067d641

browser_side: status can be edited with a click on it
author souliane <souliane@mailoo.org>
date Mon, 30 Dec 2013 13:02:03 +0100
parents 5ad70625867a
children 09205b410a53
comparison
equal deleted inserted replaced
313:5ad70625867a 314:70ac3067d641
889 if self.host.contact_panel.isContactInGroup(group, jid): 889 if self.host.contact_panel.isContactInGroup(group, jid):
890 return True 890 return True
891 return False 891 return False
892 892
893 893
894 class StatusPanel(HTMLPanel): 894 class StatusPanel(HTMLPanel, ClickHandler, FocusHandler, KeyboardHandler):
895
896 EMPTY_STATUS = '<click to set a status>'
897
895 def __init__(self, host, status=''): 898 def __init__(self, host, status=''):
896 self.host = host 899 self.host = host
897 self.status = status or '&nbsp;' 900 self.status = status
898 HTMLPanel.__init__(self, self.__getContent()) 901 HTMLPanel.__init__(self, self.__getContent())
899 self.setStyleName('statusPanel') 902 self.setStyleName('statusPanel')
903 ClickHandler.__init__(self)
904 FocusHandler.__init__(self)
905 KeyboardHandler.__init__(self)
906 self.addClickListener(self)
900 907
901 def __getContent(self): 908 def __getContent(self):
902 return "<span class='status'>%(status)s</span>" % {'status': html_sanitize(self.status)} 909 return "<span class='status'>%(status)s</span>" % {'status': html_sanitize(self.status or self.EMPTY_STATUS)}
903 910
904 def changeStatus(self, new_status): 911 def changeStatus(self, new_status):
905 self.status = new_status or '&nbsp;' 912 self.status = new_status
906 self.setHTML(self.__getContent()) 913 self.setHTML(self.__getContent())
914
915 def onClick(self, sender):
916 self.textarea = TextArea()
917 self.textarea.setStyleName('status-edit')
918 self.textarea.setText(self.status)
919 self.textarea.addKeyboardListener(self)
920 self.setVisible(False)
921 self.parent.insert(self.textarea, self.parent.getWidgetIndex(self))
922 self.textarea.setFocus(True)
923 self.textarea.setSelectionRange(0, len(self.status))
924 self.textarea.addFocusListener(self)
925 self.textarea.addKeyboardListener(self)
926
927 def onKeyPress(self, sender, keycode, modifiers):
928 text = self.textarea.getText()
929
930 if keycode == KEY_ENTER:
931 if text != self.status:
932 self.host.bridge.call('setStatus', None, self.host.status_panel.presence, text)
933 self.parent.remove(self.textarea)
934 self.setVisible(True)
935
936 def onLostFocus(self, sender):
937 FocusHandler.onLostFocus(self, sender)
938 if sender == self.textarea:
939 self.onKeyPress(self, KEY_ENTER, None)
907 940
908 941
909 class PresenceStatusPanel(HorizontalPanel, ClickHandler): 942 class PresenceStatusPanel(HorizontalPanel, ClickHandler):
910 943
911 def __init__(self, host, presence="", status=""): 944 def __init__(self, host, presence="", status=""):
927 self.presence_list.registerClickSender(self.presence_button) 960 self.presence_list.registerClickSender(self.presence_button)
928 961
929 panel = HorizontalPanel() 962 panel = HorizontalPanel()
930 panel.add(self.presence_button) 963 panel.add(self.presence_button)
931 panel.add(self.status_panel) 964 panel.add(self.status_panel)
965 panel.setCellVerticalAlignment(self.presence_button, 'baseline')
966 panel.setCellVerticalAlignment(self.status_panel, 'baseline')
932 panel.setStyleName("marginAuto") 967 panel.setStyleName("marginAuto")
933 self.add(panel) 968 self.add(panel)
934 969
935 ClickHandler.__init__(self) 970 ClickHandler.__init__(self)
936 self.addClickListener(self) 971 self.addClickListener(self)