public static void AddNewMessageRow(this FlowDocument document, Tox tox, MessageData data, EmojiProvider emojiProvider) { document.IsEnabled = true; //Make a new row TableRow newTableRow = new TableRow(); //Make a new cell and create a paragraph in it TableCell usernameTableCell = new TableCell(); usernameTableCell.Name = "usernameTableCell"; usernameTableCell.Padding = new Thickness(10, 0, 0, 0); Paragraph usernameParagraph = new Paragraph(); usernameParagraph.TextAlignment = data.IsAction ? TextAlignment.Right : TextAlignment.Left; usernameParagraph.Foreground = new SolidColorBrush(Color.FromRgb(164, 164, 164)); if (data.Username != tox.GetSelfName()) usernameParagraph.SetResourceReference(Paragraph.ForegroundProperty, "AccentColorBrush"); usernameParagraph.Inlines.Add(data.Username); usernameTableCell.Blocks.Add(usernameParagraph); //Make a new cell and create a paragraph in it TableCell messageTableCell = new TableCell(); Paragraph messageParagraph = new Paragraph(); messageParagraph.TextAlignment = TextAlignment.Left; ProcessMessage(data, messageParagraph, false, emojiProvider); //messageParagraph.Inlines.Add(fakeHyperlink); messageTableCell.Blocks.Add(messageParagraph); TableCell timestampTableCell = new TableCell(); Paragraph timestamParagraph = new Paragraph(); timestampTableCell.TextAlignment = TextAlignment.Right; timestamParagraph.Inlines.Add(DateTime.Now.ToShortTimeString()); timestampTableCell.Blocks.Add(timestamParagraph); timestamParagraph.Foreground = new SolidColorBrush(Color.FromRgb(164, 164, 164)); //Add the two cells to the row we made before newTableRow.Cells.Add(usernameTableCell); newTableRow.Cells.Add(messageTableCell); newTableRow.Cells.Add(timestampTableCell); //Adds row to the Table > TableRowGroup TableRowGroup MessageRows = (TableRowGroup)document.FindName("MessageRows"); MessageRows.Rows.Add(newTableRow); }
public MainWindow() { InitializeComponent(); this.DataContext = new MainWindowViewModel(); tox = new Tox(false); tox.Invoker = Dispatcher.BeginInvoke; tox.OnNameChange += tox_OnNameChange; tox.OnFriendMessage += tox_OnFriendMessage; tox.OnFriendAction += tox_OnFriendAction; tox.OnFriendRequest += tox_OnFriendRequest; tox.OnUserStatus += tox_OnUserStatus; tox.OnStatusMessage += tox_OnStatusMessage; tox.OnTypingChange += tox_OnTypingChange; tox.OnConnectionStatusChanged += tox_OnConnectionStatusChanged; tox.OnFileSendRequest += tox_OnFileSendRequest; tox.OnFileData += tox_OnFileData; tox.OnFileControl += tox_OnFileControl; tox.OnGroupInvite += tox_OnGroupInvite; tox.OnGroupMessage += tox_OnGroupMessage; tox.OnGroupAction += tox_OnGroupAction; tox.OnGroupNamelistChange += tox_OnGroupNamelistChange; toxav = new ToxAv(tox.GetPointer(), ToxAv.DefaultCodecSettings, 1); toxav.Invoker = Dispatcher.BeginInvoke; toxav.OnInvite += toxav_OnInvite; toxav.OnStart += toxav_OnStart; toxav.OnStarting += toxav_OnStart; toxav.OnEnd += toxav_OnEnd; toxav.OnEnding += toxav_OnEnd; toxav.OnPeerTimeout += toxav_OnEnd; toxav.OnRequestTimeout += toxav_OnEnd; toxav.OnReject += toxav_OnEnd; toxav.OnCancel += toxav_OnEnd; toxav.OnReceivedAudio += toxav_OnReceivedAudio; toxav.OnMediaChange += toxav_OnMediaChange; bool bootstrap_success = false; foreach (ToxNode node in nodes) { if (tox.BootstrapFromNode(node)) bootstrap_success = true; } if (File.Exists("data")) { if (!tox.Load("data")) { MessageBox.Show("Could not load tox data, this program will now exit.", "Error"); Close(); } } tox.Start(); if (string.IsNullOrEmpty(tox.GetSelfName())) tox.SetName("Toxy User"); this.ViewModel.MainToxyUser.Name = tox.GetSelfName(); this.ViewModel.MainToxyUser.StatusMessage = tox.GetSelfStatusMessage(); InitializeNotifyIcon(); SetStatus(null); InitFriends(); if (tox.GetFriendlistCount() > 0) this.ViewModel.SelectedChatObject = this.ViewModel.ChatCollection.OfType<IFriendObject>().FirstOrDefault(); }