Beispiel #1
0
        private void OnViewSizeChanged(object sender, SizeChangedEventArgs e)
        {
            if (Messages.ScrollingHost.ScrollableHeight > 0)
            {
                return;
            }

            //Arrow.Visibility = Visibility.Collapsed;
            VisualUtilities.SetIsVisible(Arrow, false);

            ViewVisibleMessages(false);
            UpdateHeaderDate(false);
        }
Beispiel #2
0
        private void OnViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
        {
            if (Messages.ScrollingHost.ScrollableHeight - Messages.ScrollingHost.VerticalOffset < 120 && ViewModel.IsFirstSliceLoaded != false)
            {
                //Arrow.Visibility = Visibility.Collapsed;
                VisualUtilities.SetIsVisible(Arrow, false);
            }
            else
            {
                //Arrow.Visibility = Visibility.Visible;
                VisualUtilities.SetIsVisible(Arrow, true);
            }

            ViewVisibleMessages(e.IsIntermediate);
            UpdateHeaderDate(e.IsIntermediate);
        }
Beispiel #3
0
        private void UpdateHeaderDate(bool intermediate)
        {
            var panel = Messages.ItemsPanelRoot as ItemsStackPanel;

            if (panel == null || panel.FirstVisibleIndex < 0)
            {
                return;
            }

            var minItem = true;
            var minDate = true;

            for (int i = panel.FirstVisibleIndex; i <= panel.LastVisibleIndex; i++)
            {
                var container = Messages.ContainerFromIndex(i) as SelectorItem;
                if (container == null)
                {
                    continue;
                }

                var message = Messages.ItemFromContainer(container) as MessageViewModel;
                if (message == null)
                {
                    continue;
                }

                if (minItem)
                {
                    var transform = container.TransformToVisual(DateHeaderRelative);
                    var point     = transform.TransformPoint(new Point());

                    if (point.Y + container.ActualHeight >= 0)
                    {
                        minItem = false;

                        if (message.SchedulingState is MessageSchedulingStateSendAtDate sendAtDate)
                        {
                            DateHeaderLabel.Text = string.Format(Strings.Resources.MessageScheduledOn, DateTimeToFormatConverter.ConvertDayGrouping(Utils.UnixTimestampToDateTime(sendAtDate.SendDate)));
                        }
                        else if (message.SchedulingState is MessageSchedulingStateSendWhenOnline)
                        {
                            DateHeaderLabel.Text = Strings.Resources.MessageScheduledUntilOnline;
                        }
                        else
                        {
                            DateHeaderLabel.Text = DateTimeToFormatConverter.ConvertDayGrouping(Utils.UnixTimestampToDateTime(message.Date));
                        }
                    }
                }

                if (message.Content is MessageHeaderDate && minDate)
                {
                    var transform = container.TransformToVisual(DateHeaderRelative);
                    var point     = transform.TransformPoint(new Point());
                    var height    = (float)DateHeader.ActualHeight;
                    var offset    = (float)point.Y + height;

                    minDate = false;

                    if (offset >= 0 && offset < height)
                    {
                        container.Opacity = 0;
                    }
                    else
                    {
                        container.Opacity = 1;
                    }

                    if (offset >= height && offset < height * 2)
                    {
                        _dateHeader.Offset = new Vector3(0, -height * 2 + offset, 0);
                    }
                    else
                    {
                        _dateHeader.Offset = new Vector3();
                    }
                }
                else
                {
                    container.Opacity = 1;
                }
            }

            _dateHeaderTimer.Stop();
            _dateHeaderTimer.Start();
            VisualUtilities.SetIsVisible(DateHeaderPanel, true);
        }
Beispiel #4
0
        private void UpdateHeaderDate(bool intermediate)
        {
            var panel = Messages.ItemsPanelRoot as ItemsStackPanel;

            if (panel == null || panel.FirstVisibleIndex < 0)
            {
                return;
            }

            var top    = 0d;
            var bottom = 0d;

            var knockout = SettingsService.Current.Diagnostics.BubbleKnockout;
            var start    = knockout ? panel.FirstCacheIndex : panel.FirstVisibleIndex;
            var end      = knockout ? panel.LastCacheIndex : panel.LastVisibleIndex;

            var minKnock = knockout;
            var minItem  = true;
            var minDate  = true;

            for (int i = start; i <= end; i++)
            {
                var container = Messages.ContainerFromIndex(i) as SelectorItem;
                if (container == null)
                {
                    continue;
                }

                var message = Messages.ItemFromContainer(container) as MessageViewModel;
                if (message == null)
                {
                    continue;
                }

                if (minKnock)
                {
                    var negative = Messages.TransformToVisual(container);
                    var relative = negative.TransformPoint(new Point());

                    top    = relative.Y;
                    bottom = relative.Y + Messages.ActualHeight;

                    minKnock = false;
                }

                if (minItem && i >= panel.FirstVisibleIndex)
                {
                    var transform = container.TransformToVisual(DateHeaderRelative);
                    var point     = transform.TransformPoint(new Point());

                    if (point.Y + container.ActualHeight >= 0)
                    {
                        minItem = false;

                        if (message.SchedulingState is MessageSchedulingStateSendAtDate sendAtDate)
                        {
                            DateHeaderLabel.Text = string.Format(Strings.Resources.MessageScheduledOn, DateTimeToFormatConverter.ConvertDayGrouping(Utils.UnixTimestampToDateTime(sendAtDate.SendDate)));
                        }
                        else if (message.SchedulingState is MessageSchedulingStateSendWhenOnline)
                        {
                            DateHeaderLabel.Text = Strings.Resources.MessageScheduledUntilOnline;
                        }
                        else
                        {
                            DateHeaderLabel.Text = DateTimeToFormatConverter.ConvertDayGrouping(Utils.UnixTimestampToDateTime(message.Date));
                        }
                    }
                }

                if (message.Content is MessageHeaderDate && minDate && i >= panel.FirstVisibleIndex)
                {
                    var transform = container.TransformToVisual(DateHeaderRelative);
                    var point     = transform.TransformPoint(new Point());
                    var height    = (float)DateHeader.ActualHeight;
                    var offset    = (float)point.Y + height;

                    minDate = false;

                    if (offset >= 0 && offset < height)
                    {
                        container.Opacity = 0;
                    }
                    else
                    {
                        container.Opacity = 1;
                    }

                    if (offset >= height && offset < height * 2)
                    {
                        _dateHeader.Offset = new Vector3(0, -height * 2 + offset, 0);
                    }
                    else
                    {
                        _dateHeader.Offset = new Vector3();
                    }
                }
                else
                {
                    container.Opacity = 1;
                }

                if (knockout && container.ContentTemplateRoot is MessageBubble bubble)
                {
                    bubble.UpdateKnockout(top / container.ActualHeight, bottom / container.ActualHeight);
                }

                top    -= container.ActualHeight;
                bottom -= container.ActualHeight;
            }

            _dateHeaderTimer.Stop();
            _dateHeaderTimer.Start();
            VisualUtilities.SetIsVisible(DateHeaderPanel, true);
        }