예제 #1
0
 private void OnItemsChanged(object sender, NotifyCollectionEventArgs e)
 {
     if (IsAttachedToListBox && IsPresented)
     {
         ListBox.OnItemsChanged(sender, e);
     }
 }
예제 #2
0
        private void OnChanged(object sender, NotifyCollectionEventArgs e)
        {
            switch (e.Event)
            {
            case NotifyEvent.Insert:
                for (int i = e.StartIndex; i <= e.EndIndex; ++i)
                {
                    var item = _itemConverter(_boundCollection[i]);
                    _itemsCollection.InsertSafe(i, item);
                }
                break;

            case NotifyEvent.Remove:
                _itemsCollection.RemoveRangeSafe(e.StartIndex, e.ModifiedItems);
                break;

            case NotifyEvent.Set:
                for (int i = e.StartIndex; i <= e.EndIndex; ++i)
                {
                    var item = _itemConverter(_boundCollection[i]);
                    _itemsCollection[i] = item;
                }
                break;

            case NotifyEvent.Clear:
                _itemsCollection.ClearSafe();
                break;
            }
        }
예제 #3
0
 private void OnPanelsChanged(object sender, NotifyCollectionEventArgs e)
 {
     _sizes.Clear();
     if (!IsUpdating)
     {
         NotifyContentSizeChanged();
     }
 }
예제 #4
0
 private void OnGroupsChanged(object sender, NotifyCollectionEventArgs e)
 {
     switch(e.Event)
     {
         case NotifyEvent.Insert:
             for(int i = e.StartIndex; i <= e.EndIndex; ++i)
             {
                 var group = _group.Groups[i];
                 var item  = new RepositoryGroupListItem(group);
                 _groupsMapping.Add(group, item);
                 _items.Insert(i, item);
             }
             break;
         case NotifyEvent.Remove:
             for(int i = e.StartIndex; i <= e.EndIndex; ++i)
             {
                 var item = _items[i] as RepositoryGroupListItem;
                 if(item != null)
                 {
                     _groupsMapping.Remove(item.DataContext);
                 }
             }
             _items.RemoveRange(e.StartIndex, e.ModifiedItems);
             break;
         case NotifyEvent.Set:
             for(int i = e.StartIndex; i <= e.EndIndex; ++i)
             {
                 var item = _items[i] as RepositoryGroupListItem;
                 if(item != null)
                 {
                     _groupsMapping.Remove(item.DataContext);
                 }
                 var group = _group.Groups[i];
                 item = new RepositoryGroupListItem(group);
                 _groupsMapping.Add(group, item);
                 _items[i] = item;
             }
             break;
         case NotifyEvent.Clear:
             _groupsMapping.Clear();
             _items.RemoveRange(0, e.ModifiedItems);
             break;
     }
 }
예제 #5
0
        private void OnPanelsChanging(object sender, NotifyCollectionEventArgs e)
        {
            switch (e.Event)
            {
            case NotifyEvent.Clear:
                _panelHover.Drop();
                break;

            case NotifyEvent.Remove:
                if (_panelHover.Index >= e.StartIndex)
                {
                    if (_panelHover.Index <= e.EndIndex)
                    {
                        _panelHover.Drop();
                    }
                    else
                    {
                        _panelHover.ResetIndex(_panelHover.Index - e.ModifiedItems);
                    }
                }
                break;

            case NotifyEvent.Set:
                if (_panelHover.Index >= e.StartIndex)
                {
                    if (_panelHover.Index <= e.EndIndex)
                    {
                        _panelHover.Drop();
                    }
                    else
                    {
                        _panelHover.ResetIndex(_panelHover.Index - e.ModifiedItems);
                    }
                }
                break;
            }
        }
예제 #6
0
 private void OnItemsChanging(object sender, NotifyCollectionEventArgs e)
 {
     if(IsAttachedToListBox && IsPresented)
     {
         ListBox.OnItemsChanging(sender, e);
     }
 }
예제 #7
0
 private void OnRepositoriesChanged(object sender, NotifyCollectionEventArgs e)
 {
     switch(e.Event)
     {
         case NotifyEvent.Insert:
             for(int i = e.StartIndex; i <= e.EndIndex; ++i)
             {
                 var repo = _group.Respositories[i];
                 var item = new RepositoryListItem(repo);
                 _repositoriesMapping.Add(repo, item);
                 _items.Insert(i + _groupsMapping.Count, item);
             }
             break;
         case NotifyEvent.Remove:
             for(int i = e.StartIndex; i <= e.EndIndex; ++i)
             {
                 var item = _items[i + _groupsMapping.Count] as RepositoryListItem;
                 if(item != null)
                 {
                     _repositoriesMapping.Remove(item.DataContext);
                 }
             }
             _items.RemoveRange(e.StartIndex + _groupsMapping.Count, e.ModifiedItems);
             break;
         case NotifyEvent.Set:
             for(int i = e.StartIndex; i <= e.EndIndex; ++i)
             {
                 var item = _items[i + _groupsMapping.Count] as RepositoryListItem;
                 if(item != null)
                 {
                     _repositoriesMapping.Remove(item.DataContext);
                 }
                 var repo = _group.Respositories[i];
                 item = new RepositoryListItem(repo);
                 _repositoriesMapping.Add(repo, item);
                 _items[i + _groupsMapping.Count] = item;
             }
             break;
         case NotifyEvent.Clear:
             _repositoriesMapping.Clear();
             _items.RemoveRange(_groupsMapping.Count, e.ModifiedItems);
             break;
     }
 }
예제 #8
0
 internal void OnItemsChanging(object sender, NotifyCollectionEventArgs e)
 {
     bool plainListChanged = false;
     var items = (CustomListBoxItemsCollection)sender;
     var item = items.Parent;
     switch(e.Event)
     {
         case NotifyEvent.Clear:
             if(item == null)
             {
                 _lastClickedItemIndex = -1;
                 _itemFocus.Drop();
                 _itemHover.Drop();
                 if(_itemPlainList.Count != 0)
                 {
                     plainListChanged = true;
                     _itemPlainList.Clear();
                     _selectedItems.Clear();
                     if(Created)
                     {
                         NotifyContentSizeChanged();
                     }
                 }
             }
             else
             {
                 if(item.IsPresented)
                 {
                     if(items.Count != 0)
                     {
                         if(item.IsExpanded)
                         {
                             RemoveItems(items, 0, items.Count - 1);
                             plainListChanged = true;
                         }
                         else
                         {
                             _oldItem = item;
                         }
                     }
                 }
             }
             break;
         case NotifyEvent.Set:
             if((item == null) || (item.IsPresented && item.IsExpanded))
             {
                 _oldItem = items[e.StartIndex];
                 _setItemPos = _itemPlainList.IndexOf(_oldItem);
             }
             break;
         case NotifyEvent.Remove:
             if((item == null) || (item.IsPresented && item.IsExpanded))
             {
                 RemoveItems(items, e.StartIndex, e.EndIndex);
                 plainListChanged = true;
             }
             if(_itemPlainList.Count == 0)
             {
                 Invalidate(_itemsArea);
             }
             break;
     }
     if(_haveAutoSizeColumns && plainListChanged)
     {
         InvalidateAutoSizeColumns();
     }
 }
예제 #9
0
 internal void OnItemsChanged(object sender, NotifyCollectionEventArgs e)
 {
     bool plainListChanged = false;
     var items = (CustomListBoxItemsCollection)sender;
     var item = items.Parent;
     switch(e.Event)
     {
         case NotifyEvent.Clear:
             if(_oldItem != null)
             {
                 InvalidateItem(_oldItem);
                 _oldItem = null;
             }
             break;
         case NotifyEvent.Remove:
             break;
         case NotifyEvent.Set:
             if(_setItemPos != -1)
             {
                 var newitem = items[e.StartIndex];
                 _itemPlainList[_setItemPos] = newitem;
                 var y1 = GetItemY1Offset(_setItemPos);
                 int id = _setItemPos + 1;
                 if(_oldItem.IsExpanded && _oldItem.Items.Count != 0)
                 {
                     int level = _oldItem.Level;
                     int end = id + 1;
                     while(end < _itemPlainList.Count && _itemPlainList[end].Level > level)
                     {
                         ++end;
                     }
                     if(_itemFocus.IsTracked)
                     {
                         if(_itemFocus.Index >= id)
                         {
                             if(_itemFocus.Index >= end)
                             {
                                 _itemFocus.ResetIndex(_itemFocus.Index - (end - id));
                             }
                             else
                             {
                                 _itemFocus.Drop();
                             }
                         }
                     }
                     if(_itemHover.IsTracked)
                     {
                         if(_itemHover.Index >= id)
                         {
                             if(_itemHover.Index >= end)
                             {
                                 _itemHover.ResetIndex(_itemHover.Index - (end - id));
                             }
                             else
                             {
                                 _itemHover.Drop();
                             }
                         }
                     }
                     _itemPlainList.RemoveRange(id, end - id);
                     plainListChanged = true;
                 }
                 if(newitem.IsExpanded && newitem.Items.Count != 0)
                 {
                     int end = id;
                     foreach(var i in newitem.Items)
                     {
                         end = InsertItem(id, i);
                     }
                     plainListChanged = true;
                 }
                 NotifyContentSizeChanged();
                 _setItemPos = -1;
                 _oldItem = null;
             }
             break;
         case NotifyEvent.Insert:
             {
                 bool noitems = _itemPlainList.Count == 0;
                 if(item == null)
                 {
                     int start = e.StartIndex;
                     int end = e.EndIndex;
                     int id = 0;
                     if(start != 0)
                     {
                         if(end == items.Count - 1)
                         {
                             id = _itemPlainList.Count - (end - start);
                         }
                         else
                         {
                             var sitem = items[start - 1];
                             while(sitem.Items.Count != 0 && sitem.IsExpanded)
                             {
                                 sitem = sitem.Items[sitem.Items.Count - 1];
                             }
                             id = _itemPlainList.IndexOf(sitem) + 1;
                         }
                     }
                     int startId = id;
                     bool renderAll = id != _itemPlainList.Count;
                     for(int i = start; i <= end; ++i)
                     {
                         id = InsertItem(id, items[i]);
                     }
                     plainListChanged = true;
                     NotifyContentSizeChanged();
                 }
                 else
                 {
                     if(item.IsPresented)
                     {
                         if(item.IsExpanded)
                         {
                             int start = e.StartIndex;
                             int end = e.EndIndex;
                             int id = 0;
                             if(start == 0)
                             {
                                 id = _itemPlainList.IndexOf(item) + 1;
                             }
                             else
                             {
                                 var sitem = items[start - 1];
                                 while(sitem.Items.Count != 0 && sitem.IsExpanded)
                                 {
                                     sitem = sitem.Items[sitem.Items.Count - 1];
                                 }
                                 id = _itemPlainList.IndexOf(sitem) + 1;
                             }
                             int startid = id;
                             for(int i = start; i <= end; ++i)
                             {
                                 id = InsertItem(id, items[i]);
                             }
                             NotifyContentSizeChanged();
                             plainListChanged = true;
                         }
                         else
                         {
                             if(items.Count == e.ModifiedItems)
                             {
                                 InvalidateItem(item);
                             }
                         }
                     }
                 }
                 if(noitems) Invalidate(_itemsArea);
             }
             break;
     }
     if(_haveAutoSizeColumns && plainListChanged)
     {
         InvalidateAutoSizeColumns();
     }
 }
예제 #10
0
 private void OnSelectedItemsChanged(object sender, NotifyCollectionEventArgs e)
 {
     OnSelectionChanged();
 }
예제 #11
0
 private void OnColumnsChanged(object sender, NotifyCollectionEventArgs e)
 {
     UpdateAutoSizeColumnsContentWidth();
     NotifyContentSizeChanged();
 }