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) |
|
47 self.sizer.Add(wx.StaticText(self, -1, "Profile:"), 0, flag=wx.ALIGN_CENTER) |
|
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) |
|
52 button_new = wx.Button(button_panel, -1, "New") |
|
53 button_del = wx.Button(button_panel, -1, "Delete") |
|
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 |
|
60 login_box = wx.StaticBox(self, -1, "Login") |
|
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) |
|
67 self.login_sizer.Add(wx.StaticText(self, -1, "Password:"), 0, flag=wx.ALIGN_CENTER) |
|
68 self.login_sizer.Add(self.login_pass, flag=wx.EXPAND) |
|
69 |
|
70 loggin_button = wx.Button(self, -1, "Connect") |
|
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): |
|
96 dlg = wx.TextEntryDialog(self, "Please enter the new profile name", "New profile", style = wx.OK | wx.CANCEL) |
|
97 if dlg.ShowModal() == wx.ID_OK: |
|
98 name = dlg.GetValue() |
|
99 if name: |
|
100 if name[0]=='@': |
|
101 wx.MessageDialog(self, "A profile name can't start with a @", "Bad profile name", wx.ICON_ERROR).ShowModal() |
|
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 |
|
112 dlg = wx.MessageDialog(self, "Are you sure to delete the profile [%s]" % name, "Confirmation", wx.ICON_QUESTION | wx.YES_NO) |
|
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: |
|
130 wx.MessageDialog(self, "You must select a profile a create a new one before connecting", "No profile selected", wx.ICON_ERROR).ShowModal() |
|
131 return |
|
132 if name[0]=='@': |
|
133 wx.MessageDialog(self, "A profile name can't start with a @", "Bad profile name", wx.ICON_ERROR).ShowModal() |
|
134 return |
|
135 profile = None # gof |
|
136 profile = self.host.bridge.getProfileName(name) |
|
137 if not profile: |
|
138 debug("The profile is new, we create it") |
|
139 old_jid = self.host.bridge.getParamA("JabberID", "Connection", profile_key=profile) |
|
140 old_pass = self.host.bridge.getParamA("Password", "Connection", profile_key=profile) |
|
141 new_jid = self.login_jid.GetValue() |
|
142 new_pass = self.login_pass.GetValue() |
|
143 if old_jid != new_jid: |
|
144 debug('Saving new JID') |
|
145 self.host.bridge.setParam("JabberID", new_jid, "Connection", profile) |
|
146 if old_pass != new_pass: |
|
147 debug('Saving new password') |
|
148 self.host.bridge.setParam("JabberID", new_pass, "Connection", profile) |
|
149 self.host.plug_profile(name) |
|
150 |