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; }
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(); }
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); } }