diff frontends/src/primitivus/profile_manager.py @ 223:86d249b6d9b7

Files reorganisation
author Goffi <goffi@goffi.org>
date Wed, 29 Dec 2010 01:06:29 +0100
parents frontends/primitivus/profile_manager.py@3198bfd66daa
children fd9b7834d98a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frontends/src/primitivus/profile_manager.py	Wed Dec 29 01:06:29 2010 +0100
@@ -0,0 +1,124 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+Primitivus: a SAT frontend
+Copyright (C) 2009, 2010  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 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+"""
+
+import urwid
+from urwid_satext.sat_widgets import Password,List,InputDialog,ConfirmDialog,Alert,FocusFrame
+from tools.jid import JID
+
+
+class ProfileManager(urwid.WidgetWrap):
+
+    def __init__(self, host):
+        self.host = host
+        #profiles list
+        profiles = self.host.bridge.getProfilesList()
+        profiles.sort()
+        
+        #login & password box must be created before list because of onProfileChange
+        self.login_wid = urwid.Edit(_('Login:'),align='center')
+        self.pass_wid = Password(_('Password:'),align='center')
+        
+        self.list_profile = List(profiles, style=['single'], align='center', on_click=self.onProfileChange)
+
+        #new & delete buttons
+        buttons = [urwid.Button(_("New"), self.onNewProfile),
+                  urwid.Button(_("Delete"), self.onDeleteProfile)]
+        buttons_flow = urwid.GridFlow(buttons, max([len(button.get_label()) for button in buttons])+4, 1, 1, 'center')
+
+        #second part: login information:
+        divider = urwid.Divider('-')
+
+        #connect button
+        connect_button = urwid.Button(_("Connect"), self.onConnectProfile)
+
+        #we now build the widget
+        body_content = urwid.SimpleListWalker([buttons_flow,self.list_profile,divider,self.login_wid, self.pass_wid, connect_button])
+        frame_body = urwid.ListBox(body_content)
+        frame = urwid.Frame(frame_body,urwid.AttrMap(urwid.Text(_("Profile Manager"),align='center'),'title'))
+        self.main_widget = urwid.LineBox(frame)
+        urwid.WidgetWrap.__init__(self, self.main_widget)
+
+    def __refillProfiles(self):
+        """Update the list of profiles"""
+        profiles = self.host.bridge.getProfilesList()
+        profiles.sort()
+        self.list_profile.changeValues(profiles)
+
+    def cancelDialog(self, button):
+        self.host.removePopUp()
+
+    def newProfile(self, button, edit):
+        """Create the profile"""
+        name = edit.get_edit_text()
+        self.host.bridge.createProfile(name)
+        self.__refillProfiles()
+        #We select the profile created in the list
+        self.list_profile.selectValue(name)
+        self.host.removePopUp()
+
+    def deleteProfile(self, button):
+        profile_name = self.list_profile.getSelectedValue()
+        if profile_name:
+            self.host.bridge.deleteProfile(profile_name)
+            self.__refillProfiles()
+        self.host.removePopUp()
+        
+
+    def onNewProfile(self, e):
+        pop_up_widget = InputDialog(_("New profile"), _("Please enter a new profile name"), cancel_cb=self.cancelDialog, ok_cb=self.newProfile)
+        self.host.showPopUp(pop_up_widget)
+
+    def onDeleteProfile(self, e):
+        pop_up_widget = ConfirmDialog(_("Are you sure you want to delete the profile %s ?") % self.list_profile.getSelectedValue(), no_cb=self.cancelDialog, yes_cb=self.deleteProfile)
+        self.host.showPopUp(pop_up_widget)
+
+    def onProfileChange(self, list_wid):
+        profile_name = list_wid.getSelectedValue()
+        if profile_name:
+            jabberID = self.host.bridge.getParamA("JabberID", "Connection", profile_key=profile_name)
+            password = self.host.bridge.getParamA("Password", "Connection", profile_key=profile_name)
+            self.login_wid.set_edit_text(jabberID)
+            self.pass_wid.set_edit_text(password)
+        
+    def onConnectProfile(self, button):
+        profile_name = self.list_profile.getSelectedValue()
+        if not profile_name:
+            pop_up_widget = Alert(_('No profile selected'), _('You need to create and select a profile before connecting'), ok_cb=self.cancelDialog)
+            self.host.showPopUp(pop_up_widget)
+        elif profile_name[0] == '@':
+            pop_up_widget = Alert(_('Bad profile name'), _("A profile name can't start with a @"), ok_cb=self.cancelDialog)
+            self.host.showPopUp(pop_up_widget)
+        else:
+            profile = self.host.bridge.getProfileName(profile_name)
+            assert(profile)
+            #TODO: move this to quick_app
+            old_jid = self.host.bridge.getParamA("JabberID", "Connection", profile_key=profile)
+            old_pass = self.host.bridge.getParamA("Password", "Connection", profile_key=profile)
+            new_jid = self.login_wid.get_edit_text()
+            new_pass = self.pass_wid.get_edit_text()
+
+            if old_jid != new_jid:
+                self.host.bridge.setParam("JabberID", new_jid, "Connection", profile)
+                self.host.bridge.setParam("Server", JID(new_jid).domain, "Connection", profile)
+            if old_pass != new_pass:
+                self.host.bridge.setParam("Password", new_pass, "Connection", profile)
+            self.host.plug_profile(profile)
+