private void GenerateComments(double topMargin) { if (this._commentsCountItem == null) { this._commentsCountItem = CommentsItemsGeneratorHelper.CreateCommentsCountItem(this.Width, new Func <string>(this.GetCommentsHeaderText), 0.0, Application.Current.Resources["PhoneNewsBackgroundBrush"] as SolidColorBrush); this.VirtualizableChildren.Add((IVirtualizable)this._commentsCountItem); } this._commentsCountItem.ViewMargin = new Thickness(0.0, topMargin, 0.0, 0.0); topMargin += this._commentsCountItem.FixedHeight; if (this._commentItems == null) { this._commentItems = new List <CommentItem>(); Comments comments = this._newsItemData.NewsItem.comments; if ((comments != null ? comments.list : null) != null) { using (IEnumerator <Comment> enumerator = ((IEnumerable <Comment>)ListExtensions.TakeLast <Comment>(Enumerable.OrderBy <Comment, int>(new List <Comment>((IEnumerable <Comment>) this._newsItemData.NewsItem.comments.list), (Func <Comment, int>)(c => c.date)), 1)).GetEnumerator()) { while (((IEnumerator)enumerator).MoveNext()) { Comment comment = enumerator.Current; Stopwatch stopwatch = Stopwatch.StartNew(); CommentItem commentItem = new CommentItem(448.0, new Thickness(), LikeObjectType.comment, null, null, null, this._newsItemData.NewsItem.source_id, comment, Enumerable.FirstOrDefault <User>(this._newsItemData.Profiles, (Func <User, bool>)(u => u.uid == comment.from_id)), null, (Group)Enumerable.FirstOrDefault <Group>(this._newsItemData.Groups, (Func <Group, bool>)(g => g.id == comment.from_id)), null, "", "", null, true, false, ""); stopwatch.Stop(); this.VirtualizableChildren.Add((IVirtualizable)commentItem); commentItem.ViewMargin = new Thickness(16.0, topMargin, 0.0, 0.0); topMargin += commentItem.FixedHeight + 16.0; this._commentItems.Add(commentItem); } } } } else { foreach (CommentItem commentItem in this._commentItems) { commentItem.ViewMargin = new Thickness(16.0, topMargin, 0.0, 0.0); topMargin += commentItem.FixedHeight + 16.0; } } this._fixedHeight = topMargin; }
private double CreateActivityItem(NewsActivity activity, bool addSeparator) { VirtualizableItemBase virtualizableItemBase = (VirtualizableItemBase)null; switch (activity.Type) { case NewsActivityType.likes: virtualizableItemBase = this._createdItems.FirstOrDefault <KeyValuePair <NewsActivity, VirtualizableItemBase> >((Func <KeyValuePair <NewsActivity, VirtualizableItemBase>, bool>)(i => { if (i.Key.likes != null) { return(i.Key.likes == activity.likes); } return(false); })).Value; break; case NewsActivityType.comment: virtualizableItemBase = this._createdItems.FirstOrDefault <KeyValuePair <NewsActivity, VirtualizableItemBase> >((Func <KeyValuePair <NewsActivity, VirtualizableItemBase>, bool>)(i => { if (i.Key.comment != null) { return(i.Key.comment == activity.comment); } return(false); })).Value; break; } if (virtualizableItemBase == null) { switch (activity.Type) { case NewsActivityType.likes: virtualizableItemBase = (VirtualizableItemBase) new UCItem(this.Width, new Thickness(), (Func <UserControlVirtualizable>)(() => { VKClient.Common.UC.NewsActivityLikesUC newsActivityLikesUc = new VKClient.Common.UC.NewsActivityLikesUC(); double width = this.Width; NewsActivityLikes likes = activity.likes; List <User> users = this._users; int num = addSeparator ? 1 : 0; newsActivityLikesUc.Initialize(width, likes, users, num != 0); EventHandler <System.Windows.Input.GestureEventArgs> eventHandler = (EventHandler <System.Windows.Input.GestureEventArgs>)((sender, e) => { e.Handled = (true); Action likesTapAction = this._likesTapAction; if (likesTapAction == null) { return; } likesTapAction(); }); ((UIElement)newsActivityLikesUc).Tap += (eventHandler); return((UserControlVirtualizable)newsActivityLikesUc); }), (Func <double>)(() => VKClient.Common.UC.NewsActivityLikesUC.CalculateHeight(this.Width, activity.likes, this._users)), null, 0.0, false); break; case NewsActivityType.comment: virtualizableItemBase = (VirtualizableItemBase) new UCItem(this.Width, new Thickness(), (Func <UserControlVirtualizable>)(() => { VKClient.Common.UC.NewsActivityCommentUC activityCommentUc = new VKClient.Common.UC.NewsActivityCommentUC(); NewsActivityComment comment = activity.comment; List <User> users = this._users; List <Group> groups = this._groups; int num = addSeparator ? 1 : 0; activityCommentUc.Initialize(comment, (IEnumerable <User>)users, (IEnumerable <Group>)groups, num != 0); EventHandler <System.Windows.Input.GestureEventArgs> eventHandler = (EventHandler <System.Windows.Input.GestureEventArgs>)((sender, e) => { e.Handled = (true); Action commentsTapAction = this._commentsTapAction; if (commentsTapAction == null) { return; } commentsTapAction(); }); ((UIElement)activityCommentUc).Tap += (eventHandler); return((UserControlVirtualizable)activityCommentUc); }), (Func <double>)(() => VKClient.Common.UC.NewsActivityCommentUC.CalculateHeight(activity.comment)), null, 0.0, false); break; default: return(0.0); } this.VirtualizableChildren.Add((IVirtualizable)virtualizableItemBase); if (!this._createdItems.ContainsKey(activity)) { this._createdItems.Add(activity, virtualizableItemBase); } else { this._createdItems[activity] = virtualizableItemBase; } } return(virtualizableItemBase.FixedHeight); }