changeset 52:4419ef07bb2b

browser side: adding contact, first draft
author Goffi <goffi@goffi.org>
date Fri, 27 May 2011 01:52:29 +0200
parents 9f19e16187ff
children dc7861390f10
files browser_side/dialog.py browser_side/panels.py public/libervia.css
diffstat 3 files changed, 102 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/browser_side/dialog.py	Thu May 26 23:03:45 2011 +0200
+++ b/browser_side/dialog.py	Fri May 27 01:52:29 2011 +0200
@@ -25,9 +25,11 @@
 from pyjamas.ui.DialogBox import DialogBox
 from pyjamas.ui.ListBox import ListBox
 from pyjamas.ui.Button import Button
+from pyjamas.ui.TextBox import TextBox
+from pyjamas.ui.Label import Label
 from pyjamas.ui.HTML import HTML
 from pyjamas.ui import HasAlignment
-from pyjamas.ui.KeyboardListener import KEY_ESCAPE
+from pyjamas.ui.KeyboardListener import KEY_ESCAPE, KEY_ENTER
 
 class ContactsChooser(DialogBox):
 
@@ -152,3 +154,83 @@
             #needed to prevent request cancellation in Firefox
             event.preventDefault()
         return PopupPanel.onEventPreview(self, event)
+
+class ExtTextBox(TextBox):
+    """Extended TextBox"""
+
+    def __init__(self, *args, **kwargs):
+        if 'enter_cb' in kwargs:
+            self.enter_cb = kwargs['enter_cb']
+            del kwargs['enter_cb']
+        TextBox.__init__(self, *args, **kwargs)
+        self.addKeyboardListener(self)
+
+    def onKeyUp(self, sender, keycode, modifiers):
+        pass
+    
+    def onKeyDown(self, sender, keycode, modifiers):
+        pass
+    
+    def onKeyPress(self, sender, keycode, modifiers):
+        if self.enter_cb and keycode == KEY_ENTER:
+            self.enter_cb(self)
+
+class GroupSelector(DialogBox):
+    
+    def __init__(self, top_widgets, initial_groups, selected_groups, ok_cb = None, cancel_cb = None):
+        DialogBox.__init__(self, centered = True)
+        main_panel = VerticalPanel()
+        self.ok_cb = ok_cb
+        self.cancel_cb = cancel_cb
+        
+        for wid in top_widgets:
+            main_panel.add(wid)
+        
+        main_panel.add(Label('Select in which groups your contact is:'))
+        self.list_box = ListBox()
+        self.list_box.setMultipleSelect(True)
+        self.list_box.setVisibleItemCount(5)
+        self.setAvailableGroups(initial_groups)
+        self.setGroupsSelected(selected_groups)
+        main_panel.add(self.list_box)
+        
+        add_group_panel = HorizontalPanel()
+        add_group_lb = Label('Add group:')
+        add_group_tb = ExtTextBox(enter_cb = self.onGroupInput)
+        add_group_panel.add(add_group_lb)
+        add_group_panel.add(add_group_tb)
+        main_panel.add(add_group_panel)
+        
+        button_panel = HorizontalPanel()
+        button_panel.add(Button("Add", self.onOK))
+        button_panel.add(Button("Cancel", self.onCancel))
+        main_panel.add(button_panel)
+        
+        self.setWidget(main_panel)
+
+    def setAvailableGroups(self, groups):
+        _groups = list(set(groups))
+        _groups.sort()
+        self.list_box.clear()
+        for group in _groups:
+            self.list_box.addItem(group)
+
+    def setGroupsSelected(self, groups):
+        if groups:
+            self.list_box.setItemTextSelection(selected_groups)
+    
+    def onOK(self, sender):
+        self.hide()
+        if self.ok_cb:
+            self.ok_cb(self)
+
+    def onCancel(self, sender):
+        self.hide()
+        if self.cancel_cb:
+            self.cancel_cb(self)
+
+    def onGroupInput(self, sender):
+        self.list_box.addItem(sender.getText())
+        sender.setText('')
+        self.list_box.setItemSelected(self.list_box.getItemCount()-1, "selected")
+
--- a/browser_side/panels.py	Thu May 26 23:03:45 2011 +0200
+++ b/browser_side/panels.py	Fri May 27 01:52:29 2011 +0200
@@ -33,6 +33,7 @@
 from pyjamas.ui.AutoComplete import AutoCompleteTextBox
 from pyjamas.ui.MenuBar import MenuBar
 from pyjamas.ui.MenuItem import MenuItem
+from pyjamas.ui.ListBox import ListBox
 from pyjamas.ui.Label import Label
 from pyjamas.ui.TextBox import TextBox
 from pyjamas.ui.Button import Button
@@ -115,9 +116,21 @@
     #Contact menu
     def onAddContact(self):
         """Q&D contact addition"""
-        Window.alert("Add contact !")
+        _dialog = None
+        edit = TextBox()
+
+        def addContactCb(sender):
+            if not edit.getText():
+                Window.alert('You must enter a contact JID')
+                _dialog.show()
 
-    
+        label = Label("new contact identifier (JID):")
+        edit.setText('@libervia.org')
+        edit.setWidth('100%')
+        _dialog = dialog.GroupSelector([label, edit], self.host.contact_panel.getGroups(), [], addContactCb)
+        _dialog.setHTML('<b>Adding contact</b>')
+        _dialog.show()
+
     #Group menu
     def onJoinRoom(self):
         _dialog = None
--- a/public/libervia.css	Thu May 26 23:03:45 2011 +0200
+++ b/public/libervia.css	Fri May 27 01:52:29 2011 +0200
@@ -140,6 +140,10 @@
     padding: 10px;
 }
 
+.gwt-ListBox {
+    width: 100%;
+}
+
 /* Custom Dialogs */
 
 .formWarning { /* used when a form is not valid and must be corrected before submission */