Changeset 61
- Timestamp:
- 03/13/02 22:23:38 (7 years ago)
- Files:
-
- trunk/RBJabber/RBJabber/Client.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/JabberConnection.py (modified) (1 diff)
- trunk/RBPrivate/Prototypes/ChatClient/ChatFrame.skin (modified) (1 diff)
- trunk/RBPrivate/Prototypes/ChatClient/ChatMediator.py (modified) (2 diffs)
- trunk/RBPrivate/Prototypes/ChatClient/MainFrame.skin (modified) (2 diffs)
- trunk/RBPrivate/Prototypes/ChatClient/MainframeBuddyList.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBJabber/RBJabber/Client.py
r59 r61 139 139 strXML += '<body>%s</body>' % escape(body) 140 140 strXML += '</message>' 141 self.SendXML(strXML)141 return self.SendXML(strXML) 142 142 143 143 def Presence(self, toJID='', status='', show='', type='available'): … … 152 152 strXML += '<status>%s</status>' % escape(status) 153 153 strXML += '</presence>' 154 self.SendXML(strXML)154 return self.SendXML(strXML) 155 155 156 156 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBJabber/RBJabber/JabberConnection.py
r53 r61 66 66 def SendXML(self, xmlData): 67 67 self._sendData += xmlData 68 return xmlData 68 69 69 70 def Shutdown(self): trunk/RBPrivate/Prototypes/ChatClient/ChatFrame.skin
r59 r61 4 4 <py:script contextvar='Mediator' module='ChatMediator' call='ChatMediator' /> 5 5 <layout sizerOption='1' sizerFlag='wxEXPAND'> 6 <text sizerOption='1' sizerFlag='wxEXPAND' style='wxTE_RICH | wxTE_MULTILINE | wxTE_READONLY | wxTE_AUTO_URL' > 7 <py:obj_variable owner='Mediator' name='ChatOutput' /> 8 </text> 6 <notebook sizerOption='1' sizerFlag='wxEXPAND'> 7 <text pagename='Text' style='wxTE_RICH | wxTE_MULTILINE | wxTE_READONLY | wxTE_AUTO_URL' > 8 <py:obj_variable owner='Mediator' name='ChatOutput' /> 9 </text> 10 <text pagename='XML' style='wxTE_RICH | wxTE_MULTILINE | wxTE_READONLY | wxTE_AUTO_URL' > 11 <py:obj_variable owner='Mediator' name='XMLChatOutput' /> 12 </text> 13 </notebook> 9 14 <line size='5,5' sizerFlag='wxEXPAND'/> 10 15 <layout sizerFlag='wxEXPAND'> trunk/RBPrivate/Prototypes/ChatClient/ChatMediator.py
r60 r61 27 27 strBodyText = ''.join([str(x) for x in getattr(message, 'body', [])]) 28 28 self._AddOutputText(strFrom, strBodyText, 0) 29 self._AddOutputXML(''.join(message._toXML()), 0) 29 30 30 31 def Initialize(self): … … 55 56 self.ChatInput.SetValue('') 56 57 if strBodyText: 57 self.JC().Message(self._ChatJID, body=strBodyText, type=self._ChatType, xml='<thread>%s</thread>' % self._Thread) 58 xml = self.JC().Message(self._ChatJID, body=strBodyText, type=self._ChatType, xml='<thread>%s</thread>' % self._Thread) 59 self._AddOutputXML(xml, 1) 58 60 self._AddOutputText(self.JC().information.username, strBodyText, 1) 59 61 60 62 def OnCloseFrame(self, evt): 61 63 self.context.frame.Show(0) 64 65 def _AddOutputXML(self, xml, bStyleSet): 66 style = self.XMLChatOutput.GetDefaultStyle() 67 if bStyleSet: style.SetTextColour(wx.wxColour(0, 128, 64)) 68 else: style.SetTextColour(wx.wxColour(0, 64, 128)) 69 self.XMLChatOutput.SetDefaultStyle(style) 70 self.XMLChatOutput.AppendText('%s%s' % (xml, os.linesep)) 62 71 63 72 def _AddOutputText(self, strFrom, strBodyText, bStyleSet): trunk/RBPrivate/Prototypes/ChatClient/MainFrame.skin
r56 r61 1 1 <?xml version='1.0'?> 2 2 <skin:skin xmlns:skin='http://namespaces.runeblade.com/skin' xmlns:py='http://namespaces.runeblade.com/xmlPython' xmlns='http://namespaces.runeblade.com/wxPythonSkin'> 3 <frame title='RuneBlade Chat Client' show='1' >3 <frame title='RuneBlade Chat Client' show='1' style='wxCLIP_CHILDREN | wxDEFAULT_FRAME_STYLE'> 4 4 <py:script contextvar='Mediator' module='MainframeMediator' call='MainframeMediator' /> 5 5 <menu_bar> … … 37 37 <layout sizerFit='1' sizerOption='1' sizerFlag='wxEXPAND'> 38 38 <layout sizerOption='1' sizerFlag='wxEXPAND'> 39 <notebook size='(200, 400)' s izerOption='1' sizerFlag='wxEXPAND'>39 <notebook size='(200, 400)' style='wxCLIP_CHILDREN' sizerOption='1' sizerFlag='wxEXPAND'> 40 40 <column_list pagename='Buddy List' bgcolor='(250, 250, 255)' columns='"Contact", "Status", "JID"' > 41 41 <py:script module='MainframeBuddyList' call='MainframeBuddyList'> trunk/RBPrivate/Prototypes/ChatClient/MainframeBuddyList.py
r59 r61 5 5 import weakref 6 6 from wxPython import wx 7 from Foundation.Skinning import SkinFile 7 8 8 9 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 10 11 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 12 12 class BuddyList: 13 def __init__(self, Owner, JC): 14 self.Owner = weakref.ref(Owner) 13 class BuddyListEntryBase: 14 def __init__(self, ListOwner, JC): 15 15 self.JC = weakref.ref(JC) 16 self.ListOwner = weakref.ref(ListOwner) 17 self.winBuddyList = self.ListOwner().winBuddyList 18 19 def SetupDisplay(self): 20 self.idxBuddyList = self.ListOwner().AddBuddyEntry(self) 21 self.winBuddyList.InsertStringItem(self.idxBuddyList, '') 22 self.UpdateDisplay() # Call to Update Content 23 24 def UpdateDisplay(self): 25 pass 26 27 def OnItemRClick(self, evt): 28 print "Item Right Clicked", self.__class__.__name__ 29 30 def OnItemDblClick(self, evt): 31 print "Item Double Clicked", self.__class__.__name__ 32 33 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 34 35 class JIDBuddyListEntry(BuddyListEntryBase): 36 def __init__(self, RosterItem, PresenceItem, ListOwner, JC): 37 BuddyListEntryBase.__init__(self, ListOwner, JC) 38 self.RosterItem = RosterItem 39 self.PresenceItem = PresenceItem 40 41 def UpdateDisplay(self): 42 # Get Data 43 if self.PresenceItem: 44 strJID = self.PresenceItem.from_ 45 strPresence = self.PresenceItem.type 46 strName = getattr(self.RosterItem, 'name', strJID) 47 else: 48 strJID = self.RosterItem.jid 49 strName = getattr(self.RosterItem, 'name', strJID) 50 strPresence = "unavailable" 51 52 # Set Data 53 self.winBuddyList.SetStringItem(self.idxBuddyList, 0, ' %s' % strName) 54 self.winBuddyList.SetStringItem(self.idxBuddyList, 1, strPresence) 55 self.winBuddyList.SetStringItem(self.idxBuddyList, 2, strJID) 56 57 # Set Colors 58 item = self.winBuddyList.GetItem(self.idxBuddyList) 59 if strPresence != "unavailable": 60 item.SetTextColour(wx.wxColour(0, 64, 128)) 61 else: 62 item.SetTextColour(wx.wxColour(160, 128, 128)) 63 self.winBuddyList.SetItem(item) 64 65 def OnItemRClick(self, evt): 66 print "Item Right Clicked", self.__class__.__name__ 67 68 def OnItemDblClick(self, evt): 69 if self.PresenceItem: strJID = self.PresenceItem.from_ 70 else: strJID = self.RosterItem.jid 71 72 skin = SkinFile('ChatFrame.skin', self.ListOwner().context._OwnerContext('application'), JC=self.JC, ChatJID=strJID, ChatType='chat') 73 74 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 75 76 class JCBuddyListEntry(BuddyListEntryBase): 77 def __init__(self, ListOwner, AccountName, JC): 78 BuddyListEntryBase.__init__(self, ListOwner, JC) 79 self.AccountName = AccountName 16 80 self.JC().Roster.AddObserver(self) 17 81 self.JC().PresenceCtr.Map.AddObserver(self) … … 20 84 if 'Roster' in UpdateDict: 21 85 #print UpdateDict['Roster'] 22 self. Owner().UpdateBuddyList()86 self.ListOwner().UpdateBuddyList() 23 87 elif 'PresenceFrom' in UpdateDict: 24 88 #print subject.Map[UpdateDict['PresenceFrom']]._toPrettyXML() 25 self. Owner().UpdateBuddyList()89 self.ListOwner().UpdateBuddyList() 26 90 27 def UpdateBuddyList(self, winList, idx): 91 def UpdateDisplay(self): 92 self.winBuddyList.SetStringItem(self.idxBuddyList, 0, self.AccountName) 93 item = self.winBuddyList.GetItem(self.idxBuddyList) 94 item.SetBackgroundColour(wx.wxColour(0, 64, 128)) 95 item.SetTextColour(wx.wxColour(212, 212, 255)) 96 self.winBuddyList.SetItem(item) 97 98 def SetupDisplay(self): 99 BuddyListEntryBase.SetupDisplay(self) 100 28 101 PresenceMap = self.JC().PresenceCtr.Map.ByResource 29 102 Roster = self.JC().Roster.ByJID 30 for each in Roster.itervalues(): 31 winList.InsertStringItem(idx, ' %s' % getattr(each, 'name', each.jid)) 32 if each.jid in PresenceMap: 33 lstTypes = [x.type for x in PresenceMap[each.jid].itervalues() if x.type != "unavailable"] 34 bAvailable = lstTypes and 1 or 0 35 winList.SetStringItem(idx, 1, lstTypes and lstTypes[0] or "unavailable") 36 else: 37 winList.SetStringItem(idx, 1, "unavailable") 38 bAvailable = 0 39 winList.SetStringItem(idx, 2, each.jid) 40 41 item = winList.GetItem(idx) 42 if bAvailable: 43 item.SetBackgroundColour(wx.wxColour(224, 224, 224)) 44 item.SetTextColour(wx.wxColour(0, 64, 128)) 45 else: 46 item.SetBackgroundColour(wx.wxColour(224, 224, 224)) 47 item.SetTextColour(wx.wxColour(160, 128, 128)) 48 winList.SetItem(item) 49 50 idx += 1 51 return idx 103 self.BuddyListEntries = [] 104 for RosterItem in Roster.itervalues(): 105 for PresenceItem in PresenceMap.get(RosterItem.jid, {'':None}).itervalues(): 106 self.BuddyListEntries.append(JIDBuddyListEntry(RosterItem, PresenceItem, self.ListOwner(), self.JC())) 107 self.BuddyListEntries[-1].SetupDisplay() 52 108 53 109 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 60 116 61 117 def Initialize(self): 118 self.winBuddyList.SetBackgroundColour(wx.wxColour(224, 224, 224)) 119 wx.EVT_LIST_ITEM_ACTIVATED(self.winBuddyList, self.winBuddyList.GetId(), self.OnItemDblClick) 120 wx.EVT_LIST_ITEM_RIGHT_CLICK(self.winBuddyList, self.winBuddyList.GetId(), self.OnItemRClick) 121 62 122 self.dictBuddyLists = {} 63 123 self.context.Model.AddObserver('JabberClients', self) 124 125 def OnItemRClick(self, evt): 126 BuddyListEntry = self.BuddyListEntries.get(evt.GetIndex(), None) 127 if BuddyListEntry: 128 BuddyListEntry.OnItemRClick(evt) 129 else: evt.Skip() 130 131 def OnItemDblClick(self, evt): 132 BuddyListEntry = self.BuddyListEntries.get(evt.GetIndex(), None) 133 if BuddyListEntry: 134 BuddyListEntry.OnItemDblClick(evt) 135 else: evt.Skip() 64 136 65 137 def Update(self, subject, UpdateDict): … … 71 143 for AccountName, JC in JabberClients.iteritems(): 72 144 if AccountName not in self.dictBuddyLists: 73 self.dictBuddyLists[AccountName] = BuddyList(self, JC)145 self.dictBuddyLists[AccountName] = JCBuddyListEntry(self, AccountName, JC) 74 146 else: 75 147 self.dictBuddyLists = {} 76 148 77 def UpdateBuddyList(self, winList=None, idx=0): 78 winList = winList or self.winBuddyList 79 winList.DeleteAllItems() 80 for AccountName, BuddyList in self.dictBuddyLists.iteritems(): 81 winList.InsertStringItem(idx, AccountName) 82 item = winList.GetItem(idx) 83 item.SetBackgroundColour(wx.wxColour(0, 64, 128)) 84 item.SetTextColour(wx.wxColour(212, 212, 255)) 85 winList.SetItem(item) 86 87 idx = BuddyList.UpdateBuddyList(winList, idx+1) 149 def AddBuddyEntry(self, BuddyEntry): 150 idx = self.winBuddyList.GetItemCount() 151 self.BuddyListEntries[idx] = BuddyEntry 152 return idx 153 154 def UpdateBuddyList(self): 155 self.winBuddyList.DeleteAllItems() 156 self.BuddyListEntries = {} 88 157 89 winList.SetColumnWidth(0, wx.wxLIST_AUTOSIZE) 90 winList.SetColumnWidth(1, wx.wxLIST_AUTOSIZE) 91 winList.SetColumnWidth(2, wx.wxLIST_AUTOSIZE) 92 return idx 158 for BuddyList in self.dictBuddyLists.itervalues(): 159 BuddyList.SetupDisplay() 160 161 self.winBuddyList.SetColumnWidth(0, wx.wxLIST_AUTOSIZE) 162 self.winBuddyList.SetColumnWidth(1, wx.wxLIST_AUTOSIZE) 163 self.winBuddyList.SetColumnWidth(2, wx.wxLIST_AUTOSIZE)
