# HG changeset patch # User Goffi # Date 1364216950 -3600 # Node ID 0f5c2f799913ac5c59a1e74d29cc1396f27b889e # Parent 39311c7dad77cfeb459cd87dcda2f1766dd0f11f browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog diff -r 39311c7dad77 -r 0f5c2f799913 browser_side/contact.py --- a/browser_side/contact.py Wed Mar 20 23:42:53 2013 +0100 +++ b/browser_side/contact.py Mon Mar 25 14:09:10 2013 +0100 @@ -23,31 +23,43 @@ from pyjamas.ui.SimplePanel import SimplePanel from pyjamas.ui.ScrollPanel import ScrollPanel from pyjamas.ui.VerticalPanel import VerticalPanel +from pyjamas.ui.ClickListener import ClickHandler from pyjamas.ui.Label import Label from pyjamas.ui.HTML import HTML from pyjamas import Window from pyjamas import DOM +from browser_side.panels import ChatPanel, MicroblogPanel from browser_side.tools import DragLabel, html_sanitize from __pyjamas__ import doc -class GroupLabel(DragLabel, Label): - def __init__(self, group): +class GroupLabel(DragLabel, Label, ClickHandler): + def __init__(self, host, group): self.group = group + self.host = host Label.__init__(self, group) #, Element=DOM.createElement('div') self.setStyleName('group') DragLabel.__init__(self, group, "GROUP") + ClickHandler.__init__(self) + self.addClickListener(self) + + def onClick(self, sender): + new_wid = MicroblogPanel.createGroup(self.host, self.group) + self.host.addWidget(new_wid) -class ContactLabel(DragLabel, HTML): - def __init__(self, jid, name=None): +class ContactLabel(DragLabel, HTML, ClickHandler): + def __init__(self, host, jid, name=None): HTML.__init__(self) + self.host = host self.name = name or jid self.waiting = False self.jid=jid self._fill() self.setStyleName('contact') DragLabel.__init__(self, jid, "CONTACT") + ClickHandler.__init__(self) + self.addClickListener(self) def _fill(self): if self.waiting: @@ -61,6 +73,10 @@ self.waiting = waiting self._fill() + def onClick(self, sender): + new_wid = ChatPanel.createChat(self.host, self.jid) + self.host.addWidget(new_wid) + class GroupList(VerticalPanel): def __init__(self, parent): @@ -69,7 +85,7 @@ self._parent = parent def add(self, group): - _item = GroupLabel(group) + _item = GroupLabel(self._parent.host, group) _item.addMouseListener(self._parent) DOM.setStyleAttribute(_item.getElement(), "cursor", "pointer") VerticalPanel.add(self, _item) @@ -81,15 +97,16 @@ class ContactList(VerticalPanel): - def __init__(self): + def __init__(self, host): VerticalPanel.__init__(self) + self.host = host self.contacts = set() def add(self, jid, name=None): if jid in self.contacts: return self.contacts.add(jid) - _item = ContactLabel(jid, name) + _item = ContactLabel(self.host, jid, name) DOM.setStyleAttribute(_item.getElement(), "cursor", "pointer") VerticalPanel.add(self, _item) @@ -134,11 +151,18 @@ elif type == 'messageWaiting': _item.setMessageWaiting(state) -class ContactTitleLabel(DragLabel, Label): - def __init__(self, text): +class ContactTitleLabel(DragLabel, Label, ClickHandler): + def __init__(self, host, text): Label.__init__(self, text) #, Element=DOM.createElement('div') + self.host = host self.setStyleName('contactTitle') DragLabel.__init__(self, text, "CONTACT_TITLE") + ClickHandler.__init__(self) + self.addClickListener(self) + + def onClick(self, sender): + new_wid = MicroblogPanel.createMeta(self.host, None) + self.host.addWidget(new_wid) class ContactPanel(SimplePanel): """Manage the contacts and groups""" @@ -153,10 +177,10 @@ self.connected = {} #jid connected as key and their status self.vPanel = VerticalPanel() - _title = ContactTitleLabel('Contacts') + _title = ContactTitleLabel(host, 'Contacts') DOM.setStyleAttribute(_title.getElement(), "cursor", "pointer") - self._contact_list = ContactList() + self._contact_list = ContactList(host) self._contact_list.setStyleName('contactList') self._groupList = GroupList(self) self._groupList.setStyleName('groupList') diff -r 39311c7dad77 -r 0f5c2f799913 browser_side/panels.py --- a/browser_side/panels.py Wed Mar 20 23:42:53 2013 +0100 +++ b/browser_side/panels.py Mon Mar 25 14:09:10 2013 +0100 @@ -263,11 +263,11 @@ @classmethod def registerClass(cls): - base_widget.LiberviaWidget.addDropKey("GROUP", cls.onDropCreateGroup) - base_widget.LiberviaWidget.addDropKey("CONTACT_TITLE", cls.onDropCreateMeta) + base_widget.LiberviaWidget.addDropKey("GROUP", cls.createGroup) + base_widget.LiberviaWidget.addDropKey("CONTACT_TITLE", cls.createMeta) @classmethod - def onDropCreateGroup(cls, host, item): + def createGroup(cls, host, item): _new_panel = MicroblogPanel(host, [item]) #XXX: pyjamas doesn't support use of cls directly _new_panel.setAcceptedGroup(item) host.FillMicroblogPanel(_new_panel) @@ -275,7 +275,7 @@ return _new_panel @classmethod - def onDropCreateMeta(cls, host, item): + def createMeta(cls, host, item): _new_panel = MicroblogPanel(host, []) #XXX: pyjamas doesn't support use of cls directly host.FillMicroblogPanel(_new_panel) host.bridge.call('getMassiveLastMblogs', _new_panel.massiveInsert, 'ALL', [], 10) @@ -476,10 +476,10 @@ @classmethod def registerClass(cls): - base_widget.LiberviaWidget.addDropKey("CONTACT", cls.onDropCreate) + base_widget.LiberviaWidget.addDropKey("CONTACT", cls.createChat) @classmethod - def onDropCreate(cls, host, item): + def createChat(cls, host, item): _contact = JID(item) host.contact_panel.setContactMessageWaiting(_contact.bare, False) _new_panel = ChatPanel(host, _contact) #XXX: pyjamas doesn't seems to support creating with cls directly diff -r 39311c7dad77 -r 0f5c2f799913 libervia.py --- a/libervia.py Wed Mar 20 23:42:53 2013 +0100 +++ b/libervia.py Mon Mar 25 14:09:10 2013 +0100 @@ -234,6 +234,12 @@ self.tab_panel.add(_widgets_panel, label) self.tab_panel.selectTab(self.tab_panel.getWidgetCount() - 1) + def addWidget(self, wid): + """ Add a widget at the bottom of the current tab + @param wid: LiberviaWidget to add """ + panel = self.tab_panel.getCurrentPanel() + panel.addWidget(wid) + def _isRegisteredCB(self, registered): if not registered: self._register_box = RegisterBox(self.logged)