Example #1
0
        /// <summary>
        /// Searching a contact upwards the treeview
        /// </summary>
        /// <param name="node"></param>
        /// <param name="pattern"></param>
        private void FindPrevious(RosterNode node, string pattern)
        {
            if (node.PrevVisibleNode != null)
            {
                while (
                    (((RosterNode)node.PrevVisibleNode).NodeType == RosterNodeType.RootNode || ((RosterNode)node.PrevVisibleNode).NodeType == RosterNodeType.GroupNode) &&
                    node.PrevVisibleNode.Nodes.Count > 0 &&
                    !node.PrevVisibleNode.IsExpanded
                    )
                {
                    node.PrevVisibleNode.Expand();
                }

                node = node.PrevVisibleNode as RosterNode;
                if (node.NodeType == RosterNodeType.RosterNode &&
                    node.Text.ToLower().Contains(pattern.ToLower()))
                {
                    treeView.SelectedNode = node;
                    node.EnsureVisible();
                    treeView.Focus();
                }
                else
                {
                    FindPrevious(node, pattern);
                }
            }
        }
Example #2
0
        private void toolStripButtonFindPrevious_Click(object sender, EventArgs e)
        {
            RosterNode node = treeView.SelectedNode as RosterNode;

            if (node != null)
            {
                FindPrevious(node, this.toolStripTextBox.Text);
            }
        }
Example #3
0
        /// <summary>
        /// Override the Clone function to Clone() the inherited RosterNode.
        /// </summary>
        /// <returns>cloned object</returns>
        public override object Clone()
        {
            RosterNode n = base.Clone() as RosterNode;

            n.NodeType   = this.NodeType;
            n.RosterItem = this.RosterItem;
            //n.Presence      = this.Presence;

            return(n);
        }
Example #4
0
        private void toolStripButtonFindNext_Click(object sender, EventArgs e)
        {
            RosterNode node = treeView.SelectedNode as RosterNode;

            if (node == null)
            {
                node = this.treeView.Nodes[0] as RosterNode;
            }

            FindNext(node, this.toolStripTextBox.Text);
        }
Example #5
0
        private void treeView_AfterExpand(object sender, TreeViewEventArgs e)
        {
            RosterNode rn = e.Node as RosterNode;

            if (rn.NodeType == RosterNodeType.RootNode ||
                rn.NodeType == RosterNodeType.GroupNode)
            {
                rn.ImageIndex         = IMAGE_EXPAND;
                rn.SelectedImageIndex = IMAGE_EXPAND;
            }
        }
Example #6
0
        private void treeView_AfterCollapse(object sender, TreeViewEventArgs e)
        {
            RosterNode rn = e.Node as RosterNode;

            if (rn.NodeType == RosterNodeType.RootNode ||
                rn.NodeType == RosterNodeType.GroupNode)
            {
                rn.ImageIndex         = IMAGE_COLLAPSE;
                rn.SelectedImageIndex = IMAGE_COLLAPSE;
            }
        }
Example #7
0
 private RosterNode GetGroup(RosterNode node, string group)
 {
     foreach (RosterNode n in node.Nodes)
     {
         if (n.NodeType == RosterNodeType.GroupNode && n.Name == group)
         {
             return(n);
         }
     }
     return(null);
 }
Example #8
0
        /// <summary>
        /// Adds a Group
        /// </summary>
        /// <param name="group"></param>
        /// <returns></returns>
        private RosterNode AddGroup(string group, RosterNode rn)
        {
            RosterNode n = new RosterNode();

            n.NodeType = RosterNodeType.GroupNode;
            n.Text     = group;
            // The groupname is stored in the the Name property
            n.Name               = group;
            n.ImageIndex         = IMAGE_COLLAPSE;
            n.SelectedImageIndex = IMAGE_COLLAPSE;
            rn.Nodes.Add(n);

            return(n);
        }
Example #9
0
        public int Compare(object x, object y)
        {
            RosterNode nodeX = x as RosterNode;
            RosterNode nodeY = y as RosterNode;

            if (nodeX.NodeType == RosterNodeType.RootNode &&
                nodeY.NodeType == RosterNodeType.RootNode)
            {
                // don't sort this nodes,
                // they should always be in the order we added them in the Init() function
                // od the Roster Tree Control
                return(0);
            }
            else
            {
                return(string.Compare(nodeX.Text, nodeY.Text, true));
            }
        }
Example #10
0
        public void Clear()
        {
            m_Roster.Clear();

            treeView.Nodes.Clear();

            m_RootOnline                    = new RosterNode("Online");
            m_RootOnline.NodeType           = RosterNodeType.RootNode;
            m_RootOnline.SelectedImageIndex = IMAGE_COLLAPSE;
            m_RootOnline.ImageIndex         = IMAGE_COLLAPSE;

            m_RootOffline                    = new RosterNode("Offline");
            m_RootOffline.NodeType           = RosterNodeType.RootNode;
            m_RootOffline.SelectedImageIndex = IMAGE_COLLAPSE;
            m_RootOffline.ImageIndex         = IMAGE_COLLAPSE;

            treeView.Nodes.Add(m_RootOnline);
            treeView.Nodes.Add(m_RootOffline);
        }
Example #11
0
        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;
                        }
                    }
                }
            }
        }
Example #12
0
        /// <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 PresenceData(RosterNode node)
 {
     m_Node = node;
 }
Example #14
0
 public PresenceData(RosterNode node, Presence pres)
 {
     m_Node = node;
     m_Presence = pres;
 }
Example #15
0
 public PresenceData(RosterNode node)
 {
     m_Node = node;
 }
Example #16
0
 public RosterData(RosterNode node)
 {
     m_RosterNode = node;
 }
Example #17
0
        /// <summary>
        /// Searching a contact upwards the treeview
        /// </summary>
        /// <param name="node"></param>
        /// <param name="pattern"></param>
        private void FindPrevious(RosterNode node, string pattern)
        {            
            if (node.PrevVisibleNode != null)
            {
                while (
                        (((RosterNode)node.PrevVisibleNode).NodeType == RosterNodeType.RootNode || ((RosterNode)node.PrevVisibleNode).NodeType == RosterNodeType.GroupNode)
                        && node.PrevVisibleNode.Nodes.Count > 0
                        && !node.PrevVisibleNode.IsExpanded
                    )
                    node.PrevVisibleNode.Expand();

                node = node.PrevVisibleNode as RosterNode;
                if ( node.NodeType == RosterNodeType.RosterNode
                     && node.Text.ToLower().Contains(pattern.ToLower()) )
                {
                    treeView.SelectedNode = node;
                    node.EnsureVisible();
                    treeView.Focus();
                }
                else
                    FindPrevious(node, pattern);
            }
        }
Example #18
0
        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));
                        }
                    }
                }
            }
        }
Example #19
0
        private void treeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
        {
            // colors that depend if the row is currently selected or not,
            // assign to a system brush so should not be disposed
            // not selected colors
            RosterNode node = e.Node as RosterNode;

            Brush brushBack = SystemBrushes.Window;
            Brush brushText = null;

            switch (node.NodeType)
            {
            case RosterNodeType.GroupNode:
                brushText = new SolidBrush(m_ColorGroup);
                break;

            case RosterNodeType.RootNode:
                brushText = new SolidBrush(m_ColorRoot);
                break;

            case RosterNodeType.ResourceNode:
                brushText = new SolidBrush(m_ColorResource);
                break;

            case RosterNodeType.RosterNode:
                brushText = new SolidBrush(m_ColorRoster);
                break;

            default:
                brushText = new SolidBrush(SystemColors.ControlText);
                break;
            }

            Font textFont;

            if (node.NodeType == RosterNodeType.GroupNode ||
                node.NodeType == RosterNodeType.RootNode)
            {
                textFont = new Font(this.Font.FontFamily, this.Font.Size, FontStyle.Bold);
            }
            else
            {
                textFont = this.Font;
            }

            if ((e.State & TreeNodeStates.Selected) != 0)
            {
                if ((e.State & TreeNodeStates.Focused) != 0)
                {
                    // selected and has focus
                    brushBack = SystemBrushes.Highlight;
                    brushText = SystemBrushes.HighlightText;
                }
                else
                {
                    // selected and does not have focus
                    brushBack = SystemBrushes.Control;
                }
            }

            SizeF      textSize = e.Graphics.MeasureString(e.Node.Text, textFont);
            RectangleF rc       = new RectangleF(e.Bounds.X, e.Bounds.Y, textSize.Width + 2, e.Bounds.Height);

            // draw node background
            e.Graphics.FillRectangle(brushBack, rc);

            if (rc.Width > 0 && rc.Height > 0)
            {
                rc = new RectangleF(e.Bounds.X, e.Bounds.Y + (int)(e.Bounds.Height - this.Font.Height) / 2,
                                    textSize.Width, e.Bounds.Height);
                e.Graphics.DrawString(e.Node.Text, textFont, brushText, rc);
            }
        }
Example #20
0
 private RosterNode GetGroup(RosterNode node, string group)
 {
     foreach (RosterNode n in node.Nodes)
     {
         if (n.NodeType == RosterNodeType.GroupNode && n.Name == group)
             return n;
     }
     return null;
 }
Example #21
0
        /// <summary>
        /// Adds a Group
        /// </summary>
        /// <param name="group"></param>
        /// <returns></returns>
        private RosterNode AddGroup(string group, RosterNode rn)
        {
            RosterNode n = new RosterNode();

            n.NodeType = RosterNodeType.GroupNode;
            n.Text = group;
            // The groupname is stored in the the Name property
            n.Name = group;
            n.ImageIndex = IMAGE_COLLAPSE;
            n.SelectedImageIndex = IMAGE_COLLAPSE;
            rn.Nodes.Add(n);                      
                                    
            return n;
        }
Example #22
0
        public RosterNode AddRosterItem(agsXMPP.protocol.iq.roster.RosterItem ritem)
        {
            string nodeText = ritem.Name != null ? ritem.Name : ritem.Jid.ToString();
            RosterNode node;

            if (!m_Roster.ContainsKey(ritem.Jid.ToString()))
            {
                node = new RosterNode();

                node.Text = nodeText;
                node.RosterItem = ritem;
                node.NodeType = RosterNodeType.RosterNode;
                node.ImageIndex = IMAGE_OFFLINE;
                node.SelectedImageIndex = IMAGE_OFFLINE;

                string groupname;
                if (ritem.GetGroups().Count > 0)
                {
                    Group g = (Group)ritem.GetGroups().Item(0);
                    groupname = g.Name;
                }
                else
                {
                    groupname = m_DefaultGroupName;
                }

                RosterNode group = GetGroup(m_RootOffline, groupname);
                if (group == null)
                    group = AddGroup(groupname, m_RootOffline);

                group.Nodes.Add(node);
                //group.Text = group.Name + " (" + group.Nodes.Count.ToString() + ")";
                m_Roster.Add(ritem.Jid.ToString(), new RosterData(node));

                return node;
            }
            else
            {
                if (m_Roster[ritem.Jid.ToString()].Online)
                {                   
                    // We upate a rosterItem which is online and has Presences
                    // So store this Presences before we remove this item and add them to the 
                    // new Node again                  
                    Presence[] pres = new Presence[m_Roster[ritem.Jid.ToString()].Presences.Count];
                    int i= 0;
                    Dictionary<string, PresenceData>.Enumerator myEnum = m_Roster[ritem.Jid.ToString()].Presences.GetEnumerator();
                    while (myEnum.MoveNext())
                    {
                       pres[i] = myEnum.Current.Value.Presence;
                       i++;
                    }
                    RemoveRosterItem(ritem);
                    node = AddRosterItem(ritem);
                    foreach (Presence p in pres)
                    {
                        SetPresence(p);
                    }
                    return node;
                }
                else
                {
                    RemoveRosterItem(ritem);
                    return AddRosterItem(ritem);
                }
            }
        }
Example #23
0
        public void Clear()
        {
            m_Roster.Clear();

            treeView.Nodes.Clear();

            m_RootOnline = new RosterNode("Online");
            m_RootOnline.NodeType = RosterNodeType.RootNode;
            m_RootOnline.SelectedImageIndex = IMAGE_COLLAPSE;
            m_RootOnline.ImageIndex = IMAGE_COLLAPSE;

            m_RootOffline = new RosterNode("Offline");
            m_RootOffline.NodeType = RosterNodeType.RootNode;
            m_RootOffline.SelectedImageIndex = IMAGE_COLLAPSE;
            m_RootOffline.ImageIndex = IMAGE_COLLAPSE;

            treeView.Nodes.Add(m_RootOnline);
            treeView.Nodes.Add(m_RootOffline);     
        }
Example #24
0
        public RosterNode AddRosterItem(agsXMPP.protocol.iq.roster.RosterItem ritem)
        {
            string     nodeText = ritem.Name != null ? ritem.Name : ritem.Jid.ToString();
            RosterNode node;

            if (!m_Roster.ContainsKey(ritem.Jid.ToString()))
            {
                node = new RosterNode();

                node.Text               = nodeText;
                node.RosterItem         = ritem;
                node.NodeType           = RosterNodeType.RosterNode;
                node.ImageIndex         = IMAGE_OFFLINE;
                node.SelectedImageIndex = IMAGE_OFFLINE;

                string groupname;
                if (ritem.GetGroups().Count > 0)
                {
                    Group g = (Group)ritem.GetGroups().Item(0);
                    groupname = g.Name;
                }
                else
                {
                    groupname = m_DefaultGroupName;
                }

                RosterNode group = GetGroup(m_RootOffline, groupname);
                if (group == null)
                {
                    group = AddGroup(groupname, m_RootOffline);
                }

                group.Nodes.Add(node);
                //group.Text = group.Name + " (" + group.Nodes.Count.ToString() + ")";
                m_Roster.Add(ritem.Jid.ToString(), new RosterData(node));

                return(node);
            }
            else
            {
                if (m_Roster[ritem.Jid.ToString()].Online)
                {
                    // We upate a rosterItem which is online and has Presences
                    // So store this Presences before we remove this item and add them to the
                    // new Node again
                    Presence[] pres = new Presence[m_Roster[ritem.Jid.ToString()].Presences.Count];
                    int        i    = 0;
                    Dictionary <string, PresenceData> .Enumerator myEnum = m_Roster[ritem.Jid.ToString()].Presences.GetEnumerator();
                    while (myEnum.MoveNext())
                    {
                        pres[i] = myEnum.Current.Value.Presence;
                        i++;
                    }
                    RemoveRosterItem(ritem);
                    node = AddRosterItem(ritem);
                    foreach (Presence p in pres)
                    {
                        SetPresence(p);
                    }
                    return(node);
                }
                else
                {
                    RemoveRosterItem(ritem);
                    return(AddRosterItem(ritem));
                }
            }
        }
 public PresenceData(RosterNode node, Presence pres)
 {
     m_Node     = node;
     m_Presence = pres;
 }
Example #26
0
        /// <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();
            }
        }
Example #27
0
 public RosterData(RosterNode node)
 {
     m_RosterNode = node;
 }
Example #28
0
        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));
                        }
                    }
                }
            }
        }