예제 #1
0
        public Main()
        {
            listContacts = new List <ContactListEntryData>();

            InitializeComponent();

            UpdatePersonalInformation();

            menuItemIconArrowAvailable.Source = LoadResource.GetSmallIconFromStatus(UserStatus.Available);
            menuItemIconArrowBusy.Source      = LoadResource.GetSmallIconFromStatus(UserStatus.Busy);
            menuItemIconArrowAway.Source      = LoadResource.GetSmallIconFromStatus(UserStatus.Away);
            menuItemIconArrowOffline.Source   = LoadResource.GetSmallIconFromStatus(UserStatus.Offline);

            isEnterKeyDownInComment = false;
            isCommentEditSubmitted  = false;
            isCommentBeingEdited    = false;
        }
예제 #2
0
        public void UpdateContact(UserInfo userInfo)
        {
            lock (Personal.USER_CONTACTS)
            {
                UserInfo userFound = Personal.USER_CONTACTS.FirstOrDefault(p => p.id == userInfo.id.Trim());

                if (userFound == null)
                {
                    Personal.USER_CONTACTS.Add(userInfo);
                    AddContactToList(userInfo);
                }
                else
                {
                    bool userJustLoggedOn  = false;
                    bool userJustLoggedOff = false;

                    ManageChatWindows.UpdateChatWindowUser(userInfo);

                    if (userFound.status != userInfo.status & userFound.status == Convert.ToInt16(UserStatus.Offline)
                        & userInfo.status != Convert.ToInt16(UserStatus.Offline))
                    {
                        userJustLoggedOn = true;
                    }

                    if (userFound.status != userInfo.status & userFound.status != Convert.ToInt16(UserStatus.Offline)
                        & userInfo.status == Convert.ToInt16(UserStatus.Offline))
                    {
                        userJustLoggedOff = true;
                    }

                    userFound.name    = userInfo.name;
                    userFound.status  = userInfo.status;
                    userFound.avatar  = userInfo.avatar;
                    userFound.comment = userInfo.comment;

                    userFound = userInfo;

                    foreach (ContactListEntryData contact in listContacts)
                    {
                        if (contact.richTextBox.ToolTip.ToString() == userFound.id.ToString())
                        {
                            contact.image.Source = LoadResource.GetSmallIconFromStatus((UserStatus)userInfo.status);
                            if (userInfo.comment.Length == 0)
                            {
                                contact.name.Text = userInfo.name;
                            }
                            else
                            {
                                contact.name.Text = userInfo.name + " - ";
                            }


                            if (userJustLoggedOn)
                            {
                                contactListView.Items.Remove(contact.richTextBox);
                                contactListView.Items.Insert(0, contact.richTextBox);
                            }

                            if (userJustLoggedOff)
                            {
                                contactListView.Items.Remove(contact.richTextBox);
                                contactListView.Items.Insert(contactListView.Items.Count, contact.richTextBox);
                            }

                            contact.comment.Text = userInfo.comment;

                            TextParser.ParseText(contact.name, false);
                            TextParser.ParseText(contact.comment, true);

                            break;
                        }
                    }

                    if (userJustLoggedOn & Personal.USER_INFO.status == Convert.ToInt16(UserStatus.Available) & !userInfo.blocked)
                    {
                        Notification.NotificationManager.Showpopup(userInfo.name, "has just signed in.", null);

                        Resource.Sounds.Player.PlaySound(Resource.Sounds.Identifiers.ONLINE);
                    }
                }
            }

            UpdateContactCount();
        }
예제 #3
0
        public void AddContactToList(UserInfo contact)
        {
            RichTextBox txtContact = new RichTextBox();

            txtContact.PreviewMouseDoubleClick += TxtContact_PreviewMouseDoubleClick;

            txtContact.IsDocumentEnabled = true;

            ContextMenu context      = new ContextMenu();
            MenuItem    blockItem    = new MenuItem(); blockItem.Tag = contact.id;
            MenuItem    deleteItem   = new MenuItem(); deleteItem.Tag = contact.id;
            MenuItem    openChatItem = new MenuItem(); openChatItem.Tag = contact.id;

            if (contact.blocked)
            {
                blockItem.Header = "Unblock";
            }
            else
            {
                blockItem.Header = "Block";
            }

            openChatItem.Header = "Send Message";
            deleteItem.Header   = "Remove Contact";

            context.Items.Add(openChatItem);
            context.Items.Add(new Separator());
            context.Items.Add(blockItem);
            context.Items.Add(deleteItem);

            blockItem.Click    += BlockItem_Click;
            deleteItem.Click   += DeleteItem_Click;
            openChatItem.Click += OpenChatItem_Click;

            txtContact.ContextMenu = context;

            txtContact.PreviewMouseDown += new MouseButtonEventHandler(txtContact_PreviewMouseDown);
            txtContact.MouseEnter       += new MouseEventHandler(txtContact_MouseEnter);
            txtContact.MouseLeave       += new MouseEventHandler(txtContact_MouseLeave);
            txtContact.Document.Blocks.Clear();
            txtContact.Margin            = new Thickness(0, 0, 0, 2);
            txtContact.BorderThickness   = new Thickness(0);
            txtContact.Background        = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FCFCFC"));
            txtContact.VerticalAlignment = VerticalAlignment.Top;
            txtContact.IsReadOnly        = true;
            txtContact.Height            = 30;
            txtContact.Tag     = contact.id;
            txtContact.ToolTip = contact.id;

            Style style = this.FindResource("txtContactStyle") as Style;

            txtContact.Style  = style;
            txtContact.Cursor = Cursors.Arrow;

            Image imgStatus = new Image();

            imgStatus.SnapsToDevicePixels = true;
            imgStatus.Source  = LoadResource.GetSmallIconFromStatus((UserStatus)contact.status);
            imgStatus.Width   = 16;
            imgStatus.Height  = 16;
            imgStatus.Stretch = Stretch.Fill;
            imgStatus.Margin  = new Thickness(0, 4, 0, 0);

            RenderOptions.SetBitmapScalingMode(imgStatus, BitmapScalingMode.NearestNeighbor);
            RenderOptions.SetEdgeMode(imgStatus, EdgeMode.Aliased);
            InlineUIContainer container = new InlineUIContainer(imgStatus);

            Paragraph paragraph = new Paragraph(container);

            paragraph.Padding       = new Thickness(0, 0, 0, 0);
            paragraph.Margin        = new Thickness(6, 0, 0, 0);
            paragraph.TextAlignment = TextAlignment.Left;

            txtContact.Document.Blocks.Add(paragraph);

            TextPointer tp      = paragraph.ContentEnd;
            TextBlock   txtName = new TextBlock();

            if (contact.comment.Length > 0)
            {
                txtName.Text = contact.name + " - ";
            }
            else
            {
                txtName.Text = contact.name;
            }

            txtName.Margin     = new Thickness(5, 0, 0, 1);
            txtName.FontFamily = new FontFamily("Segoe UI");
            txtName.FontSize   = 12;
            txtName.Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#333333"));
            txtName.FontWeight = FontWeights.Normal;

            InlineUIContainer iui = new InlineUIContainer(txtName, tp);

            iui.BaselineAlignment = BaselineAlignment.TextBottom;
            TextParser.ParseText(txtName, false);

            TextBlock txtQuickMessage = new TextBlock();

            tp = paragraph.ContentEnd;
            txtQuickMessage.Text       = contact.comment;
            txtQuickMessage.Margin     = new Thickness(5, 0, 0, 1);
            txtQuickMessage.FontFamily = new FontFamily("Segoe UI");
            txtQuickMessage.FontSize   = 12;
            txtQuickMessage.Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#888888"));
            txtQuickMessage.FontWeight = FontWeights.Normal;

            iui = new InlineUIContainer(txtQuickMessage, tp);
            iui.BaselineAlignment = BaselineAlignment.TextBottom;

            TextParser.ParseText(txtQuickMessage, true);

            listContacts.Add(new ContactListEntryData(txtContact, imgStatus, txtName, txtQuickMessage));

            if (contact.status != 0)
            {
                contactListView.Items.Insert(0, txtContact);
            }
            else
            {
                contactListView.Items.Insert(contactListView.Items.Count, txtContact);
            }
        }