예제 #1
0
        /// <summary>
        /// Recebe uma Mensagem e cria os TextBlock's para colocar no chat.
        /// <para>
        ///     Se a mensagem for criada pelo envio de um ficheiro, esta irá ter um comando ativado por Click para pedir
        ///     o ficheiro (download) ao servidor.
        /// </para>
        /// </summary>
        /// <param name="mensagem">Mensagem a mostrar</param>
        private void DisplayMensagem(Mensagem mensagem)
        {
            TabItem mensagemTabItem;

            if (mensagem.IdDestinatario.Contains("uc"))
            {
                // Se for uma mensagem para uma Aula
                mensagemTabItem = TabItems.Find(tabItem => tabItem.Name == mensagem.IdDestinatario);
            }
            else
            {
                // Se for uma mensagem privada
                mensagemTabItem =
                    mensagem.IdDestinatario == MainViewModel.ServerConnectService.UtilizadorLigado.Id.ToString()
                        ? TabItems.Find(tabItem => tabItem.Name == "id" + mensagem.IdRemetente)
                        : TabItems.Find(tabItem => tabItem.Name == "id" + mensagem.IdDestinatario);
            }

            if (mensagemTabItem == null)
            {
                // Se não existir separador de chat aberto
                if (mensagem.IdDestinatario.Contains("uc"))
                {
                    // Vai abrir um separador da UC
                    AddSeparadorChat(mensagem.NomeDestinatario, null, mensagem.IdDestinatario);
                    // Termina a execução da função porque ao fazer "AddSeparadorChat" todas as mensagens vão ser
                    // apresentadas logo a mensagem recebida não pode ser mostrada (senão fica duplicada)
                    return;
                }

                // OU Vai abrir um separador do Utilizador
                AddSeparadorChat(mensagem.NomeRemetente,
                                 mensagem.EmailRemetente.Substring(0,
                                                                   mensagem.EmailRemetente.IndexOf("@", StringComparison.Ordinal)),
                                 mensagem.IdRemetente.Insert(0, "id"));
                // Termina a execução da função porque ao fazer "AddSeparadorChat" todas as mensagens vão ser
                // apresentadas logo a mensagem recebida não pode ser mostrada (senão fica duplicada)
                return;
            }

            ScrollViewer destinatarioScrollViewer = (ScrollViewer)mensagemTabItem?.Content;
            ItemsControl destinatarioItemsControl = (ItemsControl)destinatarioScrollViewer?.Content;
            StackPanel   destinatarioStackPanel   = (StackPanel)destinatarioItemsControl?.Items.GetItemAt(0);

            TextBlock mensagemTextBlock = new TextBlock {
                FontSize = 15, TextWrapping = TextWrapping.Wrap
            };
            Thickness mensagemTextBlockThickness = mensagemTextBlock.Margin;

            mensagemTextBlockThickness.Top = 10;
            mensagemTextBlock.Margin       = mensagemTextBlockThickness;
            if (MainViewModel.ServerConnectService.UtilizadorLigado.Id.ToString() == mensagem.IdRemetente)
            {
                mensagemTextBlock.Inlines.Add(new Run(mensagem.NomeRemetente + ":")
                {
                    FontWeight = FontWeights.Bold, TextDecorations = TextDecorations.Underline
                });
            }
            else
            {
                mensagemTextBlock.Inlines.Add(new Run(mensagem.NomeRemetente + ":")
                {
                    FontWeight = FontWeights.Bold
                });
            }

            mensagemTextBlock.Inlines.Add(" ");

            if (!mensagem.IsFicheiro)
            {
                mensagemTextBlock.Inlines.Add(mensagem.Conteudo);
            }
            else
            {
                // Adiciona o Comando (ativado por Click) para pedir o ficheiro
                mensagemTextBlock.Inlines.Add(new Run(mensagem.Conteudo)
                {
                    TextDecorations = TextDecorations.Underline, Foreground = Brushes.Blue
                });
                mensagemTextBlock.Cursor = Cursors.Hand;
                mensagemTextBlock.InputBindings.Add(new MouseBinding
                {
                    Gesture          = new MouseGesture(MouseAction.LeftClick), Command = PedirFicheiroCommand,
                    CommandParameter = mensagem.Conteudo
                });
            }

            destinatarioStackPanel?.Children.Add(mensagemTextBlock);

            TextBlock dataHoraEnvioTextBlock = new TextBlock {
                FontSize = 9, Text = mensagem.DataHoraEnvio
            };

            destinatarioStackPanel?.Children.Add(dataHoraEnvioTextBlock);

            destinatarioScrollViewer?.ScrollToBottom();
        }