public RosterNode GetRosterItem(Jid jid) { if (m_Roster.ContainsKey(jid.Bare)) { RosterData d = m_Roster[jid.Bare]; return(d.RosterNode); } else { return(null); } }
private void treeView_MouseMove(object sender, MouseEventArgs e) { RosterNode rn = this.treeView.GetNodeAt(e.X, e.Y) as RosterNode; if (rn != null && rn.NodeType == RosterNodeType.RosterNode) { int currentNodeIndex = rn.Index; if (currentNodeIndex != oldNodeIndex) { // Node Changed tool.Active = false; oldNodeIndex = currentNodeIndex; if (rn.RosterItem != null) { if (m_Roster.ContainsKey(rn.RosterItem.Jid.Bare)) { tool.Tooltiptext = rn.RosterItem.Jid.ToString(); tool.Tooltiptext += "\r\nSubscription: " + rn.RosterItem.Subscription.ToString(); RosterData d = m_Roster[rn.RosterItem.Jid.Bare]; if (d != null) { foreach (PresenceData p in d.Presences.Values) { tool.Tooltiptext += "\r\n\r\n" + "Resource: " + p.Presence.From.Resource; if (p.Presence.Status != null) { tool.Tooltiptext += "\r\n" + "Status: " + p.Presence.Status; } } } tool.Active = true; } } } } }
/// <summary> /// Remove a RosterItem from the roster /// </summary> /// <param name="jid">The items Jid to remove</param> /// <returns /// >returns true if the item was removed, false if it didn't exist /// and could not be removed /// </returns> public bool RemoveRosterItem(Jid jid) { if (m_Roster.ContainsKey(jid.ToString())) { RosterData d = m_Roster[jid.ToString()]; TreeNode Parent = d.RosterNode.Parent; d.RosterNode.Remove(); m_Roster.Remove(jid.ToString()); if (m_HideEmptyGroups) { if (Parent.Nodes.Count == 0) { Parent.Remove(); } } return(true); } else { return(false); } }
/// <summary> /// Moves a Node from the online section to the offline section or vice versa /// </summary> /// <param name="rdata"></param> /// <param name="from"></param> /// <param name="to"></param> private void MoveRoster(RosterData rdata, RosterNode from, RosterNode to) { RosterNode groupNode; string groupName = rdata.Group; groupNode = GetGroup(to, groupName); if (groupNode == null) { groupNode = AddGroup(groupName, to); } RosterNode newNode = rdata.RosterNode.Clone() as RosterNode; groupNode.Nodes.Add(newNode); // Expand all groupes in the Online Node if (to == m_RootOnline) { groupNode.Expand(); m_RootOnline.Expand(); } TreeNode Parent = rdata.RosterNode.Parent; rdata.RosterNode.Remove(); rdata.RosterNode = null; rdata.RosterNode = newNode; if (m_HideEmptyGroups) { if (Parent.Nodes.Count == 0) { Parent.Remove(); } } }
/// <summary> /// Moves a Node from the online section to the offline section or vice versa /// </summary> /// <param name="rdata"></param> /// <param name="from"></param> /// <param name="to"></param> private void MoveRoster(RosterData rdata, RosterNode from, RosterNode to) { RosterNode groupNode; string groupName = rdata.Group; groupNode = GetGroup(to, groupName); if (groupNode == null) groupNode = AddGroup(groupName, to); RosterNode newNode = rdata.RosterNode.Clone() as RosterNode; groupNode.Nodes.Add(newNode); // Expand all groupes in the Online Node if (to == m_RootOnline) { groupNode.Expand(); m_RootOnline.Expand(); } TreeNode Parent = rdata.RosterNode.Parent; rdata.RosterNode.Remove(); rdata.RosterNode = null; rdata.RosterNode = newNode; if (m_HideEmptyGroups) { if (Parent.Nodes.Count == 0) Parent.Remove(); } }
public void SetPresence(Presence pres) { // Dont handle presence errors for now if (pres.Type == PresenceType.error) { return; } // We need a node all the time here RosterNode n; if (pres.Type == PresenceType.unavailable) { // The presence could also be a presence from a hroup chat. // So check here if its a presence from a rosterItem if (m_Roster.ContainsKey(pres.From.Bare)) { RosterData d = m_Roster[pres.From.Bare]; if (d != null) { if (d.Presences.ContainsKey(pres.From.ToString())) { PresenceData presData = d.Presences[pres.From.ToString()]; RosterNode parent = (RosterNode)presData.Node.Parent; presData.Node.Remove(); d.Presences.Remove(pres.From.ToString()); // Last Presence goes Offline if (d.Presences.Count == 0) { parent.ImageIndex = IMAGE_OFFLINE; parent.SelectedImageIndex = IMAGE_OFFLINE; // If Online Move it to the Offline Section if (GetRootFromLeaf(d.RosterNode) == m_RootOnline) { MoveRoster(d, m_RootOnline, m_RootOffline); } } } } } } else { // Online Presence // The presence could also be a presence from a hroup chat. // So check here if its a presence from a rosterItem if (m_Roster.ContainsKey(pres.From.Bare)) { RosterData d = m_Roster[pres.From.Bare]; // Check if the roster is in the online section, when not then move it from Offline to Online if (!d.Online) { MoveRoster(d, m_RootOffline, m_RootOnline); } if (d != null) { int img = (int)pres.Show; if (img == -1) { img = IMAGE_ONLINE; } if (d.Presences.ContainsKey(pres.From.ToString())) { // Presence for this item available PresenceData presData = (PresenceData)d.Presences[pres.From.ToString()]; presData.Node.SelectedImageIndex = img; presData.Node.ImageIndex = img; presData.Node.Presence = pres; presData.Node.Parent.SelectedImageIndex = img; presData.Node.Parent.ImageIndex = img; presData.Presence = pres; } else { // Presence not available yet, so add it n = new RosterNode(pres.From.Resource, RosterNodeType.ResourceNode); n.SelectedImageIndex = img; n.ImageIndex = img; n.Presence = pres; d.RosterNode.Nodes.Add(n); n.Parent.SelectedImageIndex = img; n.Parent.ImageIndex = img; n.Name = ((RosterNode)n.Parent).Name; d.Presences.Add(pres.From.ToString(), new PresenceData(n, pres)); } } } } }