Mercurial > libervia-backend
annotate frontends/src/wix/main_window.py @ 297:c5554e2939dd
plugin XEP 0277: author for in request + author, updated management for out request
- a workaround is now used to parse "nick" tag (Jappix behaviour)
- author and updated can now be used in data when sendind microblog. Is no author is given, user jid is used, if no updated is given, current timestamp is used
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 18 Feb 2011 22:32:02 +0100 |
parents | b1794cbb88e5 |
children | 0806a65a5fa9 |
rev | line source |
---|---|
0 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
4 """ | |
5 wix: a SAT frontend | |
228 | 6 Copyright (C) 2009, 2010, 2011 Jérôme Poisson (goffi@goffi.org) |
0 | 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 | |
227 | 23 from sat_frontends.quick_frontend.quick_chat_list import QuickChatList |
24 from sat_frontends.quick_frontend.quick_app import QuickApp | |
25 from sat_frontends.quick_frontend.quick_contact_management import QuickContactManagement | |
0 | 26 import wx |
227 | 27 from sat_frontends.wix.contact_list import ContactList |
28 from sat_frontends.wix.chat import Chat | |
29 from sat_frontends.wix.param import Param | |
30 from sat_frontends.wix.xmlui import XMLUI | |
31 from sat_frontends.wix.gateways import GatewaysManager | |
32 from sat_frontends.wix.profile import Profile | |
33 from sat_frontends.wix.profile_manager import ProfileManager | |
0 | 34 import gobject |
35 import os.path | |
36 import pdb | |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
37 from sat.tools.jid import JID |
72 | 38 from logging import debug, info, warning, error |
227 | 39 import sat_frontends.wix.constants |
0 | 40 |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
41 idCONNECT,\ |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
42 idDISCONNECT,\ |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
43 idEXIT,\ |
191 | 44 idABOUT,\ |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
45 idPARAM,\ |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
46 idADD_CONTACT,\ |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
47 idREMOVE_CONTACT,\ |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
48 idSHOW_PROFILE,\ |
72 | 49 idJOIN_ROOM,\ |
191 | 50 idFIND_GATEWAYS = range(10) |
0 | 51 |
52 class ChatList(QuickChatList): | |
53 """This class manage the list of chat windows""" | |
54 | |
55 def __init__(self, host): | |
56 QuickChatList.__init__(self, host) | |
57 | |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
58 def createChat(self, target): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
59 return Chat(target, self.host) |
0 | 60 |
61 class MainWindow(wx.Frame, QuickApp): | |
62 """main app window""" | |
63 | |
64 def __init__(self): | |
68 | 65 wx.Frame.__init__(self,None, title="SàT Wix", size=(300,500)) |
56 | 66 self.CM = QuickContactManagement() #FIXME: not the best place |
0 | 67 |
68 | 68 #sizer |
69 self.sizer = wx.BoxSizer(wx.VERTICAL) | |
70 self.SetSizer(self.sizer) | |
71 | |
0 | 72 #Frame elements |
72 | 73 self.contactList = ContactList(self, self) |
0 | 74 self.contactList.registerActivatedCB(self.onContactActivated) |
68 | 75 self.contactList.Hide() |
76 self.sizer.Add(self.contactList, 1, flag=wx.EXPAND) | |
77 | |
0 | 78 self.chat_wins=ChatList(self) |
79 self.CreateStatusBar() | |
80 | |
81 #ToolBar | |
82 self.tools=self.CreateToolBar() | |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
83 self.statusBox = wx.ComboBox(self.tools, -1, "Online", choices=[status[1] for status in const_STATUS], |
0 | 84 style=wx.CB_DROPDOWN | wx.CB_READONLY) |
85 self.tools.AddControl(self.statusBox) | |
86 self.tools.AddSeparator() | |
87 self.statusTxt=wx.TextCtrl(self.tools, -1, style = wx.TE_PROCESS_ENTER) | |
88 self.tools.AddControl(self.statusTxt) | |
89 self.Bind(wx.EVT_COMBOBOX, self.onStatusChange, self.statusBox) | |
90 self.Bind(wx.EVT_TEXT_ENTER, self.onStatusChange, self.statusTxt) | |
91 self.tools.Disable() | |
11 | 92 |
93 #tray icon | |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
94 ticon = wx.Icon(IMAGE_DIR+'/crystal/tray_icon.xpm', wx.BITMAP_TYPE_XPM) |
11 | 95 self.tray_icon = wx.TaskBarIcon() |
70 | 96 self.tray_icon.SetIcon(ticon, _("Wix jabber client")) |
11 | 97 wx.EVT_TASKBAR_LEFT_UP(self.tray_icon, self.onTrayClick) |
98 | |
0 | 99 |
100 #events | |
101 self.Bind(wx.EVT_CLOSE, self.onClose, self) | |
102 | |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
105
diff
changeset
|
103 |
0 | 104 QuickApp.__init__(self) |
68 | 105 |
101 | 106 #menus |
107 self.createMenus() | |
108 for i in range(self.menuBar.GetMenuCount()): | |
109 self.menuBar.EnableTop(i, False) | |
110 | |
68 | 111 #profile panel |
112 self.profile_pan = ProfileManager(self) | |
113 self.sizer.Add(self.profile_pan, 1, flag=wx.EXPAND) | |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
105
diff
changeset
|
114 |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
105
diff
changeset
|
115 self.postInit() |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
105
diff
changeset
|
116 |
0 | 117 self.Show() |
118 | |
68 | 119 def plug_profile(self, profile_key='@DEFAULT@'): |
120 """Hide profile panel then plug profile""" | |
89
23caf1051099
multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents:
85
diff
changeset
|
121 debug (_('plugin profile %s' % profile_key)) |
68 | 122 self.profile_pan.Hide() |
123 self.contactList.Show() | |
124 self.sizer.Layout() | |
125 for i in range(self.menuBar.GetMenuCount()): | |
126 self.menuBar.EnableTop(i, True) | |
127 super(MainWindow, self).plug_profile(profile_key) | |
128 | |
0 | 129 def createMenus(self): |
70 | 130 info(_("Creating menus")) |
0 | 131 connectMenu = wx.Menu() |
70 | 132 connectMenu.Append(idCONNECT, _("&Connect CTRL-c"),_(" Connect to the server")) |
133 connectMenu.Append(idDISCONNECT, _("&Disconnect CTRL-d"),_(" Disconnect from the server")) | |
134 connectMenu.Append(idPARAM,_("&Parameters"),_(" Configure the program")) | |
0 | 135 connectMenu.AppendSeparator() |
191 | 136 connectMenu.Append(idABOUT,_("A&bout"),_(" About %s") % APP_NAME) |
70 | 137 connectMenu.Append(idEXIT,_("E&xit"),_(" Terminate the program")) |
0 | 138 contactMenu = wx.Menu() |
70 | 139 contactMenu.Append(idADD_CONTACT, _("&Add contact"),_(" Add a contact to your list")) |
140 contactMenu.Append(idREMOVE_CONTACT, _("&Remove contact"),_(" Remove the selected contact from your list")) | |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
141 contactMenu.AppendSeparator() |
70 | 142 contactMenu.Append(idSHOW_PROFILE, _("&Show profile"), _(" Show contact's profile")) |
25
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
143 communicationMenu = wx.Menu() |
72 | 144 communicationMenu.Append(idJOIN_ROOM, _("&Join Room"),_(" Join a Multi-User Chat room")) |
70 | 145 communicationMenu.Append(idFIND_GATEWAYS, _("&Find Gateways"),_(" Find gateways to legacy IM")) |
68 | 146 self.menuBar = wx.MenuBar() |
70 | 147 self.menuBar.Append(connectMenu,_("&General")) |
148 self.menuBar.Append(contactMenu,_("&Contacts")) | |
149 self.menuBar.Append(communicationMenu,_("&Communication")) | |
68 | 150 self.SetMenuBar(self.menuBar) |
0 | 151 |
101 | 152 #additionals menus |
153 #FIXME: do this in a more generic way (in quickapp) | |
154 add_menus = self.bridge.getMenus() | |
155 for menu in add_menus: | |
156 category,item,type = menu | |
157 assert(type=="NORMAL") #TODO: manage other types | |
158 menu_idx = self.menuBar.FindMenu(category) | |
159 current_menu = None | |
160 if menu_idx == wx.NOT_FOUND: | |
161 #the menu is new, we create it | |
162 current_menu = wx.Menu() | |
163 self.menuBar.Append(current_menu, category) | |
164 else: | |
165 current_menu = self.menuBar.GetMenu(menu_idx) | |
166 assert(current_menu != None) | |
167 item_id = wx.NewId() | |
168 help_string = self.bridge.getMenuHelp(category, item, type) | |
169 current_menu.Append(item_id, item, help = help_string) | |
170 #now we register the event | |
171 def event_answer(e): | |
219
782319a64ac6
primitivus, wix: added forgotten profile
Goffi <goffi@goffi.org>
parents:
204
diff
changeset
|
172 id = self.bridge.callMenu(category, item, type, self.profile) |
101 | 173 self.current_action_ids.add(id) |
174 wx.EVT_MENU(self, item_id, event_answer) | |
175 | |
176 | |
0 | 177 #events |
178 wx.EVT_MENU(self, idCONNECT, self.onConnectRequest) | |
1 | 179 wx.EVT_MENU(self, idDISCONNECT, self.onDisconnectRequest) |
0 | 180 wx.EVT_MENU(self, idPARAM, self.onParam) |
191 | 181 wx.EVT_MENU(self, idABOUT, self.onAbout) |
0 | 182 wx.EVT_MENU(self, idEXIT, self.onExit) |
183 wx.EVT_MENU(self, idADD_CONTACT, self.onAddContact) | |
184 wx.EVT_MENU(self, idREMOVE_CONTACT, self.onRemoveContact) | |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
185 wx.EVT_MENU(self, idSHOW_PROFILE, self.onShowProfile) |
72 | 186 wx.EVT_MENU(self, idJOIN_ROOM, self.onJoinRoom) |
25
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
187 wx.EVT_MENU(self, idFIND_GATEWAYS, self.onFindGateways) |
0 | 188 |
189 | |
67
0e50dd3a234a
message sending bug fixes + sortilege update
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
190 def newMessage(self, from_jid, msg, type, to_jid, profile): |
0e50dd3a234a
message sending bug fixes + sortilege update
Goffi <goffi@goffi.org>
parents:
66
diff
changeset
|
191 QuickApp.newMessage(self, from_jid, msg, type, to_jid, profile) |
0 | 192 |
72 | 193 def roomJoined(self, room_id, room_service, room_nicks, user_nick, profile): |
194 super(MainWindow, self).roomJoined(room_id, room_service, room_nicks, user_nick, profile) | |
195 | |
0 | 196 def showAlert(self, message): |
197 # TODO: place this in a separate class | |
198 popup=wx.PopupWindow(self) | |
199 ### following code come from wxpython demo | |
200 popup.SetBackgroundColour("CADET BLUE") | |
201 st = wx.StaticText(popup, -1, message, pos=(10,10)) | |
202 sz = st.GetBestSize() | |
203 popup.SetSize( (sz.width+20, sz.height+20) ) | |
204 x=(wx.DisplaySize()[0]-popup.GetSize()[0])/2 | |
205 popup.SetPosition((x,0)) | |
206 popup.Show() | |
207 wx.CallLater(5000,popup.Destroy) | |
208 | |
182
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
180
diff
changeset
|
209 def showDialog(self, message, title="", type="info", answer_cb = None, answer_data = None): |
0 | 210 if type == 'info': |
211 flags = wx.OK | wx.ICON_INFORMATION | |
212 elif type == 'error': | |
213 flags = wx.OK | wx.ICON_ERROR | |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
214 elif type == 'yes/no': |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
215 flags = wx.YES_NO | wx.ICON_QUESTION |
0 | 216 else: |
217 flags = wx.OK | wx.ICON_INFORMATION | |
70 | 218 error(_('unmanaged dialog type: %s'), type) |
0 | 219 dlg = wx.MessageDialog(self, message, title, flags) |
220 answer = dlg.ShowModal() | |
221 dlg.Destroy() | |
182
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
180
diff
changeset
|
222 if answer_cb: |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
180
diff
changeset
|
223 data = [answer_data] if answer_data else [] |
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
180
diff
changeset
|
224 answer_cb(True if (answer == wx.ID_YES or answer == wx.ID_OK) else False, *data) |
0 | 225 |
226 def setStatusOnline(self, online=True): | |
227 """enable/disable controls, must be called when local user online status change""" | |
228 if online: | |
229 self.SetStatusText(msgONLINE) | |
230 self.tools.Enable() | |
231 else: | |
232 self.SetStatusText(msgOFFLINE) | |
233 self.tools.Disable() | |
234 return | |
235 | |
236 def askConfirmation(self, type, id, data): | |
237 #TODO: refactor this in QuickApp | |
70 | 238 debug (_("Confirmation asked")) |
0 | 239 answer_data={} |
240 if type == "FILE_TRANSFERT": | |
70 | 241 debug (_("File transfert confirmation asked")) |
242 dlg = wx.MessageDialog(self, _("The contact %(jid)s wants to send you the file %(filename)s\nDo you accept ?") % {'jid':data["from"], 'filename':data["filename"]}, | |
243 _('File Request'), | |
0 | 244 wx.YES_NO | wx.ICON_QUESTION |
245 ) | |
246 answer=dlg.ShowModal() | |
247 if answer==wx.ID_YES: | |
70 | 248 filename = wx.FileSelector(_("Where do you want to save the file ?"), flags = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) |
0 | 249 if filename: |
250 answer_data["dest_path"] = filename | |
251 self.bridge.confirmationAnswer(id, True, answer_data) | |
70 | 252 self.waitProgress(id, _("File Transfer"), _("Copying %s") % os.path.basename(filename)) |
0 | 253 else: |
254 answer = wx.ID_NO | |
255 if answer==wx.ID_NO: | |
256 self.bridge.confirmationAnswer(id, False, answer_data) | |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
257 |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
258 dlg.Destroy() |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
259 |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
260 elif type == "YES/NO": |
70 | 261 debug (_("Yes/No confirmation asked")) |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
262 dlg = wx.MessageDialog(self, data["message"], |
70 | 263 _('Confirmation'), |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
264 wx.YES_NO | wx.ICON_QUESTION |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
265 ) |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
266 answer=dlg.ShowModal() |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
267 if answer==wx.ID_YES: |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
268 self.bridge.confirmationAnswer(id, True, {}) |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
269 if answer==wx.ID_NO: |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
270 self.bridge.confirmationAnswer(id, False, {}) |
0 | 271 |
272 dlg.Destroy() | |
273 | |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
274 def actionResult(self, type, id, data): |
70 | 275 debug (_("actionResult: type = [%(type)s] id = [%(id)s] data = [%(data)s]") % {'type':type, 'id':id, 'data':data}) |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
276 if not id in self.current_action_ids: |
70 | 277 debug (_('unknown id, ignoring')) |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
278 return |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
279 if type == "SUPPRESS": |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
280 self.current_action_ids.remove(id) |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
281 elif type == "SUCCESS": |
23
925ab466c5ec
better presentation for register new account
Goffi <goffi@goffi.org>
parents:
22
diff
changeset
|
282 self.current_action_ids.remove(id) |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
283 dlg = wx.MessageDialog(self, data["message"], |
70 | 284 _('Success'), |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
285 wx.OK | wx.ICON_INFORMATION |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
286 ) |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
287 dlg.ShowModal() |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
288 dlg.Destroy() |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
289 elif type == "ERROR": |
23
925ab466c5ec
better presentation for register new account
Goffi <goffi@goffi.org>
parents:
22
diff
changeset
|
290 self.current_action_ids.remove(id) |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
291 dlg = wx.MessageDialog(self, data["message"], |
70 | 292 _('Error'), |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
293 wx.OK | wx.ICON_ERROR |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
294 ) |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
295 dlg.ShowModal() |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
296 dlg.Destroy() |
103 | 297 elif type == "XMLUI": |
33
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
28
diff
changeset
|
298 self.current_action_ids.remove(id) |
103 | 299 debug (_("XML user interface received")) |
91 | 300 misc = {} |
301 #FIXME FIXME FIXME: must clean all this crap ! | |
302 title = _('Form') | |
303 if data['type'] == _('registration'): | |
103 | 304 title = _('Registration') |
91 | 305 misc['target'] = data['target'] |
306 misc['action_back'] = self.bridge.gatewayRegister | |
103 | 307 XMLUI(self, title=title, xml_data = data['xml'], misc = misc) |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
308 elif type == "RESULT": |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
309 self.current_action_ids.remove(id) |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
310 if self.current_action_ids_cb.has_key(id): |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
311 callback = self.current_action_ids_cb[id] |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
312 del self.current_action_ids_cb[id] |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
313 callback(data) |
25
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
314 elif type == "DICT_DICT": |
28 | 315 self.current_action_ids.remove(id) |
316 if self.current_action_ids_cb.has_key(id): | |
317 callback = self.current_action_ids_cb[id] | |
318 del self.current_action_ids_cb[id] | |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
319 callback(data) |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
320 else: |
70 | 321 error (_("FIXME FIXME FIXME: type [%s] not implemented") % type) |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
322 raise NotImplementedError |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
323 |
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
324 |
0 | 325 |
326 def progressCB(self, id, title, message): | |
327 data = self.bridge.getProgress(id) | |
328 if data: | |
329 if not self.pbar: | |
330 #first answer, we must construct the bar | |
180
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
120
diff
changeset
|
331 self.pbar = wx.ProgressDialog(title, message, float(data['size']), None, |
0 | 332 wx.PD_SMOOTH | wx.PD_ELAPSED_TIME | wx.PD_ESTIMATED_TIME | wx.PD_REMAINING_TIME) |
180
fdb961f27ae9
Primitivus: file sending and progress management
Goffi <goffi@goffi.org>
parents:
120
diff
changeset
|
333 self.pbar.finish_value = float(data['size']) |
0 | 334 |
335 self.pbar.Update(int(data['position'])) | |
336 elif self.pbar: | |
337 self.pbar.Update(self.pbar.finish_value) | |
338 return | |
339 | |
340 wx.CallLater(10, self.progressCB, id, title, message) | |
341 | |
342 def waitProgress (self, id, title, message): | |
343 self.pbar = None | |
344 wx.CallLater(10, self.progressCB, id, title, message) | |
345 | |
346 | |
347 | |
348 ### events ### | |
349 | |
350 def onContactActivated(self, jid): | |
70 | 351 debug (_("onContactActivated: %s"), jid) |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
352 if self.chat_wins[jid.short].IsShown(): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
353 self.chat_wins[jid.short].Hide() |
0 | 354 else: |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
355 self.chat_wins[jid.short].Show() |
0 | 356 |
357 def onConnectRequest(self, e): | |
68 | 358 self.bridge.connect(self.profile) |
0 | 359 |
1 | 360 def onDisconnectRequest(self, e): |
68 | 361 self.bridge.disconnect(self.profile) |
1 | 362 |
0 | 363 def __updateStatus(self): |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
42
diff
changeset
|
364 show = filter(lambda x:x[1] == self.statusBox.GetValue(), const_STATUS)[0][0] |
0 | 365 status = self.statusTxt.GetValue() |
89
23caf1051099
multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents:
85
diff
changeset
|
366 self.bridge.setPresence(show=show, statuses={'default':status}, profile_key=self.profile) #FIXME: manage multilingual statuses |
0 | 367 |
368 def onStatusChange(self, e): | |
70 | 369 debug(_("Status change request")) |
0 | 370 self.__updateStatus() |
371 | |
372 def onParam(self, e): | |
70 | 373 debug(_("Param request")) |
105 | 374 #xmlui = self.bridge.getParamsUI(self.profile) |
375 #XMLUI(self, xml_data = xmlui) | |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
376 param=Param(self) |
0 | 377 |
191 | 378 def onAbout(self, e): |
379 about = wx.AboutDialogInfo() | |
380 about.SetName(APP_NAME) | |
381 about.SetVersion (unicode(self.bridge.getVersion())) | |
228 | 382 about.SetCopyright(u"(C) 2009, 2010, 2011 Jérôme Poisson aka Goffi") |
191 | 383 about.SetDescription( _(u"%(name)s is a SàT (Salut à Toi) frontend\n"+ |
384 u"%(name)s is based on WxPython, and is the standard graphic interface of SàT") % {'name':APP_NAME}) | |
385 about.SetWebSite(("http://www.goffi.org", "Goffi's non-hebdo (french)")) | |
386 about.SetDevelopers([ "Goffi (Jérôme Poisson)"]) | |
387 try: | |
388 with open(LICENCE_PATH,"r") as licence: | |
389 about.SetLicence(''.join(licence.readlines())) | |
390 except: | |
391 pass | |
392 | |
393 wx.AboutBox(about) | |
394 | |
0 | 395 def onExit(self, e): |
396 self.Close() | |
397 | |
398 def onAddContact(self, e): | |
70 | 399 debug(_("Add contact request")) |
0 | 400 dlg = wx.TextEntryDialog( |
70 | 401 self, _('Please enter new contact JID'), |
402 _('Adding a contact'), _('name@server.tld')) | |
0 | 403 |
404 if dlg.ShowModal() == wx.ID_OK: | |
405 jid=JID(dlg.GetValue()) | |
406 if jid.is_valid(): | |
89
23caf1051099
multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents:
85
diff
changeset
|
407 self.bridge.addContact(jid.short, profile_key=self.profile) |
0 | 408 else: |
70 | 409 error (_("'%s' is an invalid JID !"), jid) |
0 | 410 #TODO: notice the user |
411 | |
412 dlg.Destroy() | |
413 | |
414 def onRemoveContact(self, e): | |
70 | 415 debug(_("Remove contact request")) |
0 | 416 target = self.contactList.getSelection() |
417 if not target: | |
70 | 418 dlg = wx.MessageDialog(self, _("You haven't selected any contact !"), |
419 _('Error'), | |
0 | 420 wx.OK | wx.ICON_ERROR |
421 ) | |
422 dlg.ShowModal() | |
423 dlg.Destroy() | |
424 return | |
425 | |
70 | 426 dlg = wx.MessageDialog(self, _("Are you sure you want to delete %s from your roster list ?") % target.short, |
427 _('Contact suppression'), | |
0 | 428 wx.YES_NO | wx.ICON_QUESTION |
429 ) | |
430 | |
431 if dlg.ShowModal() == wx.ID_YES: | |
70 | 432 info(_("Unsubscribing %s presence"), target.short) |
89
23caf1051099
multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents:
85
diff
changeset
|
433 self.bridge.delContact(target.short, profile_key=self.profile) |
0 | 434 |
435 dlg.Destroy() | |
436 | |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
437 def onShowProfile(self, e): |
70 | 438 debug(_("Show contact's profile request")) |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
439 target = self.contactList.getSelection() |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
440 if not target: |
70 | 441 dlg = wx.MessageDialog(self, _("You haven't selected any contact !"), |
442 _('Error'), | |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
443 wx.OK | wx.ICON_ERROR |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
444 ) |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
445 dlg.ShowModal() |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
446 dlg.Destroy() |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
447 return |
89
23caf1051099
multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents:
85
diff
changeset
|
448 id = self.bridge.getCard(target.short, profile_key=self.profile) |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
449 self.current_action_ids.add(id) |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
450 self.current_action_ids_cb[id] = self.onProfileReceived |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
451 |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
452 def onProfileReceived(self, data): |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
453 """Called when a profile is received""" |
70 | 454 debug (_('Profile received: [%s]') % data) |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
455 profile=Profile(self, data) |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
456 |
72 | 457 def onJoinRoom(self, e): |
458 warning('FIXME: temporary menu, must be improved') | |
80
9681f18d06bd
wix: basic dialog to join MUC room, jid node is now displayed in conversations instead of full jid
Goffi <goffi@goffi.org>
parents:
75
diff
changeset
|
459 #TODO: a proper MUC room joining dialog with nickname etc |
9681f18d06bd
wix: basic dialog to join MUC room, jid node is now displayed in conversations instead of full jid
Goffi <goffi@goffi.org>
parents:
75
diff
changeset
|
460 dlg = wx.TextEntryDialog( |
9681f18d06bd
wix: basic dialog to join MUC room, jid node is now displayed in conversations instead of full jid
Goffi <goffi@goffi.org>
parents:
75
diff
changeset
|
461 self, _("Please enter MUC's JID"), |
204 | 462 #_('Entering a MUC room'), 'test@conference.necton2.int') |
463 _('Entering a MUC room'), 'room@muc_service.server.tld') | |
80
9681f18d06bd
wix: basic dialog to join MUC room, jid node is now displayed in conversations instead of full jid
Goffi <goffi@goffi.org>
parents:
75
diff
changeset
|
464 if dlg.ShowModal() == wx.ID_OK: |
9681f18d06bd
wix: basic dialog to join MUC room, jid node is now displayed in conversations instead of full jid
Goffi <goffi@goffi.org>
parents:
75
diff
changeset
|
465 room_jid=JID(dlg.GetValue()) |
9681f18d06bd
wix: basic dialog to join MUC room, jid node is now displayed in conversations instead of full jid
Goffi <goffi@goffi.org>
parents:
75
diff
changeset
|
466 if room_jid.is_valid(): |
9681f18d06bd
wix: basic dialog to join MUC room, jid node is now displayed in conversations instead of full jid
Goffi <goffi@goffi.org>
parents:
75
diff
changeset
|
467 self.bridge.joinMUC(room_jid.domain, room_jid.node, self.profiles[self.profile]['whoami'].node, self.profile) |
9681f18d06bd
wix: basic dialog to join MUC room, jid node is now displayed in conversations instead of full jid
Goffi <goffi@goffi.org>
parents:
75
diff
changeset
|
468 else: |
9681f18d06bd
wix: basic dialog to join MUC room, jid node is now displayed in conversations instead of full jid
Goffi <goffi@goffi.org>
parents:
75
diff
changeset
|
469 error (_("'%s' is an invalid JID !"), room_jid) |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
470 |
25
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
471 def onFindGateways(self, e): |
70 | 472 debug(_("Find Gateways request")) |
102 | 473 id = self.bridge.findGateways(self.profiles[self.profile]['whoami'].domain, self.profile) |
28 | 474 self.current_action_ids.add(id) |
475 self.current_action_ids_cb[id] = self.onGatewaysFound | |
476 | |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
477 def onGatewaysFound(self, data): |
28 | 478 """Called when SàT has found the server gateways""" |
42
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
479 target = data['__private__']['target'] |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
480 del data['__private__'] |
874de3020e1c
Initial VCard (XEP-0054) support + misc fixes
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
481 gatewayManager = GatewaysManager(self, data, server=target) |
25
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
482 |
0 | 483 def onClose(self, e): |
183
9ee4a1d0d7fb
Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents:
182
diff
changeset
|
484 QuickApp.onExit(self) |
70 | 485 info(_("Exiting...")) |
183
9ee4a1d0d7fb
Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents:
182
diff
changeset
|
486 for win in self.chat_wins: |
9ee4a1d0d7fb
Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents:
182
diff
changeset
|
487 self.chat_wins[win].Destroy() |
0 | 488 e.Skip() |
11 | 489 |
490 def onTrayClick(self, e): | |
70 | 491 debug(_("Tray Click")) |
11 | 492 if self.IsShown(): |
493 self.Hide() | |
494 else: | |
495 self.Show() | |
496 self.Raise() | |
497 e.Skip() | |
0 | 498 |