# HG changeset patch # User Goffi # Date 1306453949 -7200 # Node ID 4419ef07bb2bf0035eb2221269a392af82e0f6ac # Parent 9f19e16187ffb27c7c03c9cf8912880910770fa5 browser side: adding contact, first draft diff -r 9f19e16187ff -r 4419ef07bb2b browser_side/dialog.py --- 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") + diff -r 9f19e16187ff -r 4419ef07bb2b browser_side/panels.py --- 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('Adding contact') + _dialog.show() + #Group menu def onJoinRoom(self): _dialog = None diff -r 9f19e16187ff -r 4419ef07bb2b public/libervia.css --- 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 */