Advertisement
FrayxRulez

Follia

Sep 14th, 2016
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.58 KB | None | 0 0
  1.     public class MessageCollection : ObservableCollection<TLMessageBase>
  2.     {
  3.         public ObservableCollection<MessageGroup> Groups { get; private set; } = new ObservableCollection<MessageGroup>();
  4.  
  5.         protected override void InsertItem(int index, TLMessageBase item)
  6.         {
  7.             base.InsertItem(index, item);
  8.  
  9.             var group = GroupForIndex(index);
  10.             if (group == null || group?.FromId != item.FromId)
  11.             {
  12.                 group = new MessageGroup(this, item.From, item.FromId);
  13.                 Groups.Insert(0, group);
  14.             }
  15.  
  16.             group.Insert(index, item);
  17.         }
  18.  
  19.         protected override void RemoveItem(int index)
  20.         {
  21.             base.RemoveItem(index);
  22.  
  23.             var group = GroupForIndex(index);
  24.             if (group != null)
  25.             {
  26.                 group.RemoveAt(index);
  27.             }
  28.         }
  29.  
  30.         private MessageGroup GroupForIndex(int index)
  31.         {
  32.             if (index == 0)
  33.             {
  34.                 return Groups.FirstOrDefault();
  35.             }
  36.             else if (index == Count - 1)
  37.             {
  38.                 return Groups.LastOrDefault();
  39.             }
  40.             else
  41.             {
  42.                 return Groups.FirstOrDefault(x => x.StartIndex >= index && x.EndIndex <= index);
  43.             }
  44.         }
  45.     }
  46.  
  47.     public class MessageGroup : ObservableCollection<TLMessageBase>
  48.     {
  49.         private ObservableCollection<MessageGroup> _parent;
  50.  
  51.         public MessageGroup(MessageCollection parent, TLUser from, int? fromId)
  52.         {
  53.             _parent = parent.Groups;
  54.  
  55.             From = from;
  56.             FromId = fromId;
  57.         }
  58.  
  59.         public TLUser From { get; private set; }
  60.  
  61.         public int? FromId { get; private set; }
  62.  
  63.         public int StartIndex
  64.         {
  65.             get
  66.             {
  67.                 var count = 0;
  68.                 var index = _parent.IndexOf(this);
  69.                 if (index > 0)
  70.                 {
  71.                     count = _parent[index - 1].EndIndex;
  72.                 }
  73.  
  74.                 return count;
  75.             }
  76.         }
  77.  
  78.         public int EndIndex
  79.         {
  80.             get
  81.             {
  82.                 return StartIndex + Count - 1;
  83.             }
  84.         }
  85.  
  86.         protected override void InsertItem(int index, TLMessageBase item)
  87.         {
  88.             index -= StartIndex;
  89.             base.InsertItem(index, item);
  90.         }
  91.  
  92.         protected override void RemoveItem(int index)
  93.         {
  94.             index -= StartIndex;
  95.             base.RemoveItem(index);
  96.         }
  97.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement