diff browser_side/dialog.py @ 26:824516b247e6

browser side: added ContactsChooser dialog
author Goffi <goffi@goffi.org>
date Sat, 07 May 2011 23:52:44 +0200
parents
children 6b8da70b0799
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browser_side/dialog.py	Sat May 07 23:52:44 2011 +0200
@@ -0,0 +1,82 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+Libervia: a Salut à Toi frontend
+Copyright (C) 2011  Jérôme Poisson (goffi@goffi.org)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+"""
+
+from pyjamas.ui.VerticalPanel import VerticalPanel
+from pyjamas.ui.HorizontalPanel import HorizontalPanel
+from pyjamas.ui.DialogBox import DialogBox
+from pyjamas.ui.ListBox import ListBox
+from pyjamas.ui.Button import Button
+
+class ContactsChooser(DialogBox):
+
+    def __init__(self, host, callback, nb_contact=None, text='Please select contacts'):
+        """
+        ContactsChooser allow to select one or several connected contacts
+        @param host: SatWebFrontend instance
+        @param callback: method to call when contacts have been choosed
+        @param nb_contact: number of contacts that have to be selected, None for no limit
+        """
+        self.host = host
+        self.callback = callback
+        self.nb_contact = nb_contact
+        DialogBox.__init__(self, centered=True)
+
+        content = VerticalPanel()
+        content.setWidth('100%')
+        self.contacts_list = ListBox()
+        self.contacts_list.setVisibleItemCount(10)
+        self.contacts_list.setMultipleSelect(True)
+        self.contacts_list.setWidth("100%")
+        self.contacts_list.setStyleName('contactsChooser')
+        self.contacts_list.addChangeListener(self.onChange)
+        content.add(self.contacts_list)
+        button_panel = HorizontalPanel()
+        self.choose_button = Button("Choose", self.onChoose)
+        self.choose_button.setEnabled(False)
+        button_panel.add(self.choose_button)
+        button_panel.add(Button("Cancel", self.onCancel))
+        content.add(button_panel)
+        self.setHTML(text)
+        self.setWidget(content)	
+    
+    def onChange(self):
+        if self.nb_contact:
+            if len(self.contacts_list.getSelectedValues()) == self.nb_contact:
+                self.choose_button.setEnabled(True)
+            else:
+                self.choose_button.setEnabled(False)
+
+    def getContacts(self):
+        """
+        Actually ask to choose the contacts
+        """
+        self.contacts_list.clear()
+        for contact in self.host.contact_panel.getConnected():
+            self.contacts_list.addItem(contact)
+        self.show()
+
+    def onChoose(self):
+        self.hide()
+        self.callback(self.contacts_list.getSelectedValues())
+
+    def onCancel(self):
+        self.hide()
+