68
|
1 #!/usr/bin/python |
|
2 # -*- coding: utf-8 -*- |
|
3 |
|
4 """ |
|
5 wix: a SAT frontend |
|
6 Copyright (C) 2009, 2010 Jérôme Poisson (goffi@goffi.org) |
|
7 |
|
8 This program is free software: you can redistribute it and/or modify |
|
9 it under the terms of the GNU General Public License as published by |
|
10 the Free Software Foundation, either version 3 of the License, or |
|
11 (at your option) any later version. |
|
12 |
|
13 This program is distributed in the hope that it will be useful, |
|
14 but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
16 GNU General Public License for more details. |
|
17 |
|
18 You should have received a copy of the GNU General Public License |
|
19 along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
20 """ |
|
21 |
|
22 |
|
23 |
|
24 import wx |
|
25 import pdb |
|
26 from logging import debug, info, error |
|
27 from tools.jid import JID |
|
28 import pdb |
|
29 |
|
30 |
|
31 class ProfileManager(wx.Panel): |
|
32 def __init__(self, host): |
|
33 super(ProfileManager, self).__init__(host) |
|
34 self.host = host |
|
35 |
|
36 #self.sizer = wx.FlexGridSizer(cols=2) |
|
37 self.sizer = wx.BoxSizer(wx.VERTICAL) |
|
38 self.SetSizer(self.sizer) |
|
39 |
|
40 profiles = self.host.bridge.getProfilesList() |
|
41 self.profile_name = wx.ComboBox(self, -1, style=wx.CB_READONLY|wx.CB_SORT) |
|
42 self.__refillProfiles() |
|
43 self.Bind(wx.EVT_COMBOBOX, self.onProfileChange) |
|
44 self.panel_id = wx |
|
45 |
|
46 self.sizer.Add(wx.Window(self, -1), 1) |
70
|
47 self.sizer.Add(wx.StaticText(self, -1, _("Profile:")), 0, flag=wx.ALIGN_CENTER) |
68
|
48 self.sizer.Add(self.profile_name, 0, flag=wx.ALIGN_CENTER) |
|
49 button_panel = wx.Panel(self) |
|
50 button_panel.sizer = wx.BoxSizer(wx.HORIZONTAL) |
|
51 button_panel.SetSizer(button_panel.sizer) |
70
|
52 button_new = wx.Button(button_panel, -1, _("New")) |
|
53 button_del = wx.Button(button_panel, -1, _("Delete")) |
68
|
54 button_panel.sizer.Add(button_new) |
|
55 button_panel.sizer.Add(button_del) |
|
56 self.sizer.Add(button_panel, flag=wx.CENTER) |
|
57 self.Bind(wx.EVT_BUTTON, self.onNewProfile, button_new) |
|
58 self.Bind(wx.EVT_BUTTON, self.onDeleteProfile, button_del) |
|
59 |
70
|
60 login_box = wx.StaticBox(self, -1, _("Login")) |
68
|
61 self.login_sizer = wx.StaticBoxSizer(login_box, wx.VERTICAL) |
|
62 self.sizer.Add(self.login_sizer, 1, wx.EXPAND | wx.ALL) |
|
63 self.login_jid = wx.TextCtrl(self, -1) |
|
64 self.login_sizer.Add(wx.StaticText(self, -1, "JID:"), 0, flag=wx.ALIGN_CENTER) |
|
65 self.login_sizer.Add(self.login_jid, flag=wx.EXPAND) |
|
66 self.login_pass = wx.TextCtrl(self, -1, style = wx.TE_PASSWORD) |
70
|
67 self.login_sizer.Add(wx.StaticText(self, -1, _("Password:")), 0, flag=wx.ALIGN_CENTER) |
68
|
68 self.login_sizer.Add(self.login_pass, flag=wx.EXPAND) |
|
69 |
70
|
70 loggin_button = wx.Button(self, -1, _("Connect")) |
68
|
71 self.Bind(wx.EVT_BUTTON, self.onConnectButton, loggin_button) |
|
72 self.login_sizer.Add(loggin_button, flag=wx.ALIGN_CENTER) |
|
73 |
|
74 self.sizer.Add(wx.Window(self, -1), 1) |
|
75 |
|
76 #Now we can set the default value |
|
77 self.__setDefault() |
|
78 |
|
79 |
|
80 def __setDefault(self): |
|
81 profile_default = self.host.bridge.getProfileName("@DEFAULT@") |
|
82 if profile_default: |
|
83 self.profile_name.SetValue(profile_default) |
|
84 self.onProfileChange(None) |
|
85 |
|
86 def __refillProfiles(self): |
|
87 """Update profiles with current names. Must be called after a profile change""" |
|
88 self.profile_name.Clear() |
|
89 profiles = self.host.bridge.getProfilesList() |
|
90 profiles.sort() |
|
91 for profile in profiles: |
|
92 self.profile_name.Append(profile) |
|
93 |
|
94 |
|
95 def onNewProfile(self, event): |
70
|
96 dlg = wx.TextEntryDialog(self, _("Please enter the new profile name"), _("New profile"), style = wx.OK | wx.CANCEL) |
68
|
97 if dlg.ShowModal() == wx.ID_OK: |
|
98 name = dlg.GetValue() |
|
99 if name: |
|
100 if name[0]=='@': |
70
|
101 wx.MessageDialog(self, _("A profile name can't start with a @"), _("Bad profile name"), wx.ICON_ERROR).ShowModal() |
68
|
102 else: |
|
103 profile = self.host.bridge.createProfile(name) |
|
104 self.__refillProfiles() |
|
105 self.profile_name.SetValue(name) |
|
106 dlg.Destroy() |
|
107 |
|
108 def onDeleteProfile(self, event): |
|
109 name = self.profile_name.GetValue() |
|
110 if not name: |
|
111 return |
70
|
112 dlg = wx.MessageDialog(self, _("Are you sure to delete the profile [%s]") % name, _("Confirmation"), wx.ICON_QUESTION | wx.YES_NO) |
68
|
113 if dlg.ShowModal() == wx.ID_YES: |
|
114 self.host.bridge.deleteProfile(name) |
|
115 self.__refillProfiles() |
|
116 self.__setDefault() |
|
117 dlg.Destroy() |
|
118 |
|
119 def onProfileChange(self, event): |
|
120 """Called when a profile is choosen in the combo box""" |
|
121 jabberID = self.host.bridge.getParamA("JabberID", "Connection", profile_key=self.profile_name.GetValue()) |
|
122 password = self.host.bridge.getParamA("Password", "Connection", profile_key=self.profile_name.GetValue()) |
|
123 self.login_jid.SetValue(jabberID) |
|
124 self.login_pass.SetValue(password) |
|
125 |
|
126 def onConnectButton(self, event): |
|
127 """Called when the Connect button is pressed""" |
|
128 name = self.profile_name.GetValue() |
|
129 if not name: |
70
|
130 wx.MessageDialog(self, _("You must select a profile or create a new one before connecting"), _("No profile selected"), wx.ICON_ERROR).ShowModal() |
68
|
131 return |
|
132 if name[0]=='@': |
70
|
133 wx.MessageDialog(self, _("A profile name can't start with a @"), _("Bad profile name"), wx.ICON_ERROR).ShowModal() |
68
|
134 return |
|
135 profile = self.host.bridge.getProfileName(name) |
|
136 if not profile: |
70
|
137 debug(_("The profile is new, we create it")) |
68
|
138 old_jid = self.host.bridge.getParamA("JabberID", "Connection", profile_key=profile) |
|
139 old_pass = self.host.bridge.getParamA("Password", "Connection", profile_key=profile) |
|
140 new_jid = self.login_jid.GetValue() |
|
141 new_pass = self.login_pass.GetValue() |
|
142 if old_jid != new_jid: |
72
|
143 debug(_('Saving new JID and server')) |
68
|
144 self.host.bridge.setParam("JabberID", new_jid, "Connection", profile) |
72
|
145 self.host.bridge.setParam("Server", JID(new_jid).domain, "Connection", profile) |
68
|
146 if old_pass != new_pass: |
70
|
147 debug(_('Saving new password')) |
72
|
148 self.host.bridge.setParam("Password", new_pass, "Connection", profile) |
68
|
149 self.host.plug_profile(name) |
|
150 |