⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree_widget_buddy.cs

📁 破解的飞信源代码
💻 CS
📖 第 1 页 / 共 3 页
字号:
namespace Imps.Client.Pc.BizControls
{
    using Imps.Client;
    using Imps.Client.Core;
    using Imps.Client.Pc;
    using Imps.Client.Pc.BizControls.Common;
    using Imps.Client.Resource;
    using Imps.Client.Utils;
    using Imps.Utils;
    using System;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;

    public class tree_widget_buddy : tree_widget.item_type
    {
        private Imps.Client.Core.Contact m_contact;
        private Size m_crbt_to_contact_size = Size.Empty;
        private bool m_crbt_to_me_changed = true;
        private Size m_crbt_to_me_size = Size.Empty;
        private bool m_focused;
        private Image m_head_icon;
        private bool m_hover;
        private int m_inner_space = 2;
        private area_type m_last_leftdown_area;
        private area_type m_mouse_location_area = area_type.outside;
        private bool m_online;
        private int? m_relation_status = null;
        private bool m_relation_status_changed = true;
        private Size m_relation_status_size = Size.Empty;
        private rich_string m_rich_name = new rich_string();
        private rich_string m_rich_personal_message = new rich_string();
        private int m_Singleinner_space = 4;
        private string m_status = string.Empty;
        private bool m_status_changed = true;
        private AmigoImage m_status_img;
        private Size m_status_size = Size.Empty;
        private static ImageList ms_crbt_to_contact_imgl = ThemeManager.GetImageList(ImpsIcons.CrbtToBuddyIl, 4, 1, false);
        private static ImageList ms_crbt_to_me_imgl = ThemeManager.GetImageList(ImpsIcons.CrbtToMeIl, 4, 1, false);

        public tree_widget_buddy(Imps.Client.Core.Contact contact)
        {
            if (contact == null)
            {
                throw new ArgumentNullException("contact");
            }
            this.update_contact_info(contact, ContactEventType.InfoChanged, false);
        }

        internal override void dispose()
        {
            this.m_contact = null;
            this.m_status_img = null;
            this.m_head_icon = null;
            this.m_status_img = null;
            this.m_rich_personal_message.clear();
        }

        internal override void draw(Graphics g, Rectangle rc, tree_widget.item_state state)
        {
            if (base.host != null)
            {
                this.m_focused = (tree_widget.item_state.focused & state) == tree_widget.item_state.focused;
                this.m_hover = (tree_widget.item_state.hover & state) == tree_widget.item_state.hover;
                int height = rc.Height;
                switch (((buddytree_widget) base.host).DisplayMode)
                {
                    case BuddyTreeDisplayMode.SingleLine:
                        this.draw_single_line_mode(g, rc, state);
                        return;

                    case BuddyTreeDisplayMode.DoubleLine:
                        this.draw_double_lines_mode(g, rc, state);
                        return;

                    case BuddyTreeDisplayMode.LargeIcon:
                        this.draw_icon_mode(g, rc, state, 0x60);
                        return;
                }
                this.draw_icon_mode(g, rc, state, 0x30);
            }
        }

        private void draw_double_lines_mode(Graphics g, Rectangle rc, tree_widget.item_state state)
        {
            Rectangle rect = Rectangle.FromLTRB(rc.Left + this.m_inner_space, rc.Top + this.m_inner_space, (rc.Left + rc.Height) - this.m_inner_space, rc.Bottom - this.m_inner_space);
            if ((rect.Left < rect.Right) && (rect.Top < rect.Bottom))
            {
                using (Pen pen = new Pen(Color.FromArgb(0xff, 180, 0xc6, 0xd6)))
                {
                    if (this.m_head_icon != null)
                    {
                        g.DrawImage(this.m_head_icon, rect);
                    }
                    g.DrawRectangle(pen, rect);
                }
            }
            Rectangle rectangle2 = Rectangle.FromLTRB(rect.Right + this.m_inner_space, rc.Top + this.m_inner_space, (rect.Right + this.m_inner_space) + 0x10, (rc.Top + this.m_inner_space) + 0x10);
            if (rectangle2.Left <= rc.Right)
            {
                if ((this.m_status_img != null) && (this.m_status_img.Image != null))
                {
                    g.DrawImage(this.m_status_img.Image, rectangle2);
                }
                using (StringFormat fmt = new StringFormat())
                {
                    fmt.Alignment = StringAlignment.Near;
                    fmt.LineAlignment = StringAlignment.Center;
                    fmt.FormatFlags |= StringFormatFlags.NoWrap;
                    fmt.Trimming = StringTrimming.EllipsisCharacter;
                    int offset = rectangle2.Right + this.m_inner_space;
                    int left = offset;
                    int right = rc.Right - this.m_inner_space;
                    Rectangle rectangle3 = Rectangle.FromLTRB(rectangle2.Right + this.m_inner_space, rc.Top + this.m_inner_space, right, rc.Bottom - (rc.Height / 2));
                    this.m_rich_name.Draw(g, base.host.Font, Color.Black, rectangle3, fmt, ref offset);
                    SizeF ef = this.m_rich_name.MeasureText(g, base.host.Font);
                    bool flag = true;
                    if (ef.Width >= rectangle3.Width)
                    {
                        flag = false;
                    }
                    bool flag2 = this.crbt_to_me.IsValid() || this.crbt_to_contact.IsValid();
                    if (this.m_contact.RelationStatusIsAgree)
                    {
                        if (flag2)
                        {
                            Rectangle rectangle4 = Rectangle.FromLTRB(offset + this.m_inner_space, rectangle3.Top, right, rectangle3.Bottom);
                            this.m_rich_personal_message.Draw(g, base.host.Font, Color.Gray, rectangle4, fmt, ref offset);
                        }
                        else
                        {
                            Rectangle rectangle5 = Rectangle.FromLTRB(left, rectangle3.Bottom + this.m_inner_space, right, rc.Bottom - this.m_inner_space);
                            this.m_rich_personal_message.Draw(g, base.host.Font, Color.Gray, rectangle5, fmt, ref left);
                        }
                        offset += this.m_inner_space;
                        if ((offset >= (rc.Right - this.m_inner_space)) || !flag)
                        {
                            goto Label_04E8;
                        }
                        using (Brush brush = new SolidBrush(Color.Silver))
                        {
                            if (this.m_status_changed)
                            {
                                SizeF ef2 = g.MeasureString(this.m_status, base.host.Font);
                                this.m_status_size = new Size(((int) ef2.Width) + 2, ((int) ef2.Height) + 2);
                                this.m_status_changed = false;
                            }
                            Rectangle layoutRectangle = Rectangle.FromLTRB(offset, rc.Top + this.m_inner_space, ((offset + this.m_status_size.Width) > (rc.Right - this.m_inner_space)) ? (rc.Right - this.m_inner_space) : (offset + this.m_status_size.Width), rc.Bottom - (rc.Height / 2));
                            g.DrawString(this.m_status, base.host.Font, brush, layoutRectangle, fmt);
                            goto Label_04E8;
                        }
                    }
                    if (offset < right)
                    {
                        using (Brush brush2 = new SolidBrush(Color.Silver))
                        {
                            string text = string.Empty;
                            if (0 < this.m_contact.Postfix.Length)
                            {
                                text = string.Format("({0})", this.m_contact.Postfix);
                            }
                            if (this.m_relation_status_changed)
                            {
                                SizeF ef3 = g.MeasureString(text, base.host.Font);
                                this.m_relation_status_size = new Size(((int) ef3.Width) + 2, ((int) ef3.Height) + 2);
                                this.m_relation_status_changed = false;
                            }
                            if (offset < right)
                            {
                                Rectangle rectangle7 = Rectangle.FromLTRB(offset, rectangle3.Top, offset + this.m_relation_status_size.Width, rectangle3.Bottom);
                                if (rectangle7.Right > right)
                                {
                                    rectangle7.Width = right - rectangle7.Left;
                                }
                                g.DrawString(text, base.host.Font, brush2, rectangle7, fmt);
                            }
                            offset += this.m_relation_status_size.Width;
                        }
                    }
                Label_04E8:
                    if (left < (rc.Right - this.m_inner_space))
                    {
                        if (this.crbt_to_me.IsValid())
                        {
                            int num4 = 0;
                            num4 = ((rc.Right - left) - 0x10) - this.m_inner_space;
                            left += 0x10;
                            if (0 >= num4)
                            {
                                return;
                            }
                            using (Brush brush3 = new SolidBrush(Color.Blue))
                            {
                                if (this.m_crbt_to_me_changed)
                                {
                                    SizeF ef4 = g.MeasureString(this.crbt_to_me.ToneName, base.host.Font);
                                    this.m_crbt_to_me_size = new Size(((int) ef4.Width) + 2, ((int) ef4.Height) + 2);
                                    this.m_crbt_to_me_changed = false;
                                }
                                Rectangle rectangle8 = Rectangle.FromLTRB(left, (rc.Top + (rc.Height / 2)) + this.m_inner_space, left + num4, rc.Bottom - this.m_inner_space);
                                if ((area_type.crbt_to_me == this.mouse_location_area) && this.m_hover)
                                {
                                    g.DrawImage(ms_crbt_to_me_imgl.Images[1], rectangle8.Left - 0x10, rectangle8.Top, 0x10, 0x10);
                                    using (Font font = new Font(base.host.Font, FontStyle.Underline))
                                    {
                                        g.DrawString(this.crbt_to_me.ToneName, font, brush3, rectangle8, fmt);
                                        goto Label_068E;
                                    }
                                }
                                g.DrawImage(ms_crbt_to_me_imgl.Images[0], rectangle8.Left - 0x10, rectangle8.Top, 0x10, 0x10);
                                g.DrawString(this.crbt_to_me.ToneName, base.host.Font, brush3, rectangle8, fmt);
                            Label_068E:
                                left += (this.m_crbt_to_me_size.Width < num4) ? this.m_crbt_to_me_size.Width : num4;
                                return;
                            }
                        }
                        left += (((rc.Right - (this.m_inner_space * 2)) - left) / 2) + this.m_inner_space;
                    }
                }
            }
        }

        private void draw_icon_mode(Graphics g, Rectangle rc, tree_widget.item_state state, int iconSize)
        {
            int num;
            int depth;
            Rectangle rect;
            Color color = Color.FromArgb(0xd1, 0xd8, 0xe0);
            if (iconSize == 0x60)
            {
                rect = Rectangle.FromLTRB(rc.Left + 5, rc.Top + 1, rc.Right - 5, rc.Bottom - 8);
                depth = 3;
                num = 5;
            }
            else
            {
                rect = Rectangle.FromLTRB(rc.Left + 2, rc.Top, rc.Right - 2, rc.Bottom - 4);
                depth = 2;
                num = 4;
            }
            if ((state & tree_widget.item_state.selected) == tree_widget.item_state.selected)
            {
                crystal_band_tools.draw_crystal_band(g, rect, base.host.select_band_colors, false);
            }
            if (this.m_hover && (base.host != null))
            {
                crystal_band_tools.draw_crystal_band(g, rect, base.host.hover_band_colors, false);
            }
            if ((state & tree_widget.item_state.focused) == tree_widget.item_state.focused)
            {
                using (Pen pen = new Pen(Color.FromArgb(160, 160, 160)))
                {
                    pen.DashStyle = DashStyle.Dash;
                    g.DrawRectangle(pen, rect);
                    goto Label_014A;
                }
            }
            if ((state & tree_widget.item_state.selected) == tree_widget.item_state.selected)
            {
                using (Pen pen2 = new Pen(Color.FromArgb(0x98, 210, 0xde)))
                {
                    g.DrawRectangle(pen2, rect);
                    goto Label_014A;
                }
            }
            using (Pen pen3 = new Pen(color))
            {
                g.DrawRectangle(pen3, rect);
            }
        Label_014A:
            Imps.Client.Utils.DrawHelper.DrawRectangleShadow(g, rect, depth, color);
            Rectangle rectangle2 = new Rectangle(rect.Left + num, rect.Top + num, iconSize, iconSize);
            if (this.m_head_icon != null)
            {
                g.DrawImage(this.m_head_icon, rectangle2);
            }
            using (Pen pen4 = new Pen(color))
            {
                rectangle2 = new Rectangle(rectangle2.Left - 1, rectangle2.Top - 1, rectangle2.Width + 1, rectangle2.Height + 1);
                g.DrawRectangle(pen4, rectangle2);
            }
            int right = rectangle2.Right;
            if ((this.m_status_img != null) && (this.m_status_img.Image != null))
            {
                Rectangle rectangle3;
                if (iconSize == 0x60)
                {
                    int y = rect.Bottom - 0x10;
                    rectangle3 = new Rectangle((rect.Right - num) - 0x10, y, 0x10, 0x10);
                    right = rectangle3.Left - this.m_inner_space;
                }
                else
                {
                    int num5 = rectangle2.Bottom - 0x10;
                    rectangle3 = new Rectangle(rectangle2.Right - 0x10, num5, 0x10, 0x10);
                }
                g.DrawImage(this.m_status_img.Image, rectangle3);
            }
            using (StringFormat fmt = new StringFormat())
            {
                fmt.Alignment = StringAlignment.Near;
                fmt.LineAlignment = StringAlignment.Center;
                fmt.FormatFlags |= StringFormatFlags.NoWrap;
                fmt.Trimming = StringTrimming.EllipsisCharacter;
                int left = rect.Left + num;
                int top = rect.Bottom - 0x10;
                int num8 = right;
                Rectangle rectangle4 = Rectangle.FromLTRB(left, top, num8, rect.Bottom);
                if (iconSize < 0x60)
                {
                    this.m_rich_name.DrawEx(g, base.host.Font, Color.Black, rectangle4, fmt, ref left, true);
                }
                else
                {
                    this.m_rich_name.Draw(g, base.host.Font, Color.Black, rectangle4, fmt, ref left);
                }
            }
        }

        private void draw_single_line_mode(Graphics g, Rectangle rc, tree_widget.item_state state)
        {
            Rectangle rect = Rectangle.FromLTRB(rc.Left + this.m_inner_space, rc.Top + this.m_inner_space, (rc.Left + this.m_inner_space) + 0x10, (rc.Top + this.m_inner_space) + 0x10);
            if ((this.m_status_img != null) && (this.m_status_img.Image != null))
            {
                g.DrawImage(this.m_status_img.Image, rect);
            }
            using (StringFormat fmt = new StringFormat())
            {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -