Mercurial > libervia-web
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 ' ' | 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 ' ' | 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) |