Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/22/19 14:12:15 (5 years ago)
Author:
abeham
Message:

#3010: merged to stable (17009, 17126)

Location:
stable
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Core.Views

  • stable/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs

    r17097 r17147  
    3434  [Content(typeof(ReadOnlyCheckedItemCollection<>), true)]
    3535  public partial class CheckedItemCollectionView<T> : ItemCollectionView<T> where T : class, IItem {
     36    private bool suppressCheckedEvents;
     37
    3638    public new ICheckedItemCollection<T> Content {
    3739      get { return (ICheckedItemCollection<T>)base.Content; }
     
    8284      if (doubleClick) {
    8385        e.NewValue = e.CurrentValue;
    84         doubleClick = false;
    8586      } else {
     87        bool check = e.NewValue == CheckState.Checked;
    8688        var checkedItem = (T)itemsListView.Items[e.Index].Tag;
    87         bool check = e.NewValue == CheckState.Checked;
    88         if (Content.ItemChecked(checkedItem) != check) {
    89           if (!ReadOnly && !Locked) Content.SetItemCheckedState(checkedItem, check);
    90           else e.NewValue = e.CurrentValue;
    91         }
     89        if (Content.ItemChecked(checkedItem) == check) return;
     90
     91        suppressCheckedEvents = true;
     92        try {
     93          if (itemsListView.SelectedIndices.Count > 1
     94            && itemsListView.SelectedIndices.Contains(e.Index)) {
     95            if (!ReadOnly && !Locked) Content.SetItemCheckedState(itemsListView.SelectedItems.Cast<ListViewItem>().Select(x => (T)x.Tag), check);
     96            else e.NewValue = e.CurrentValue;
     97          } else {
     98            if (!ReadOnly && !Locked) Content.SetItemCheckedState(checkedItem, check);
     99            else e.NewValue = e.CurrentValue;
     100          }
     101        } finally { suppressCheckedEvents = false; }
    92102      }
    93103    }
    94     protected void itemsListView_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
    95       if (e.Clicks > 1)
    96         doubleClick = true;
     104    protected void itemsListView_MouseDown(object sender, MouseEventArgs e) {
     105      doubleClick = e.Clicks > 1;
    97106    }
    98107    #endregion
     
    103112        Invoke(new CollectionItemsChangedEventHandler<T>(Content_CheckedItemsChanged), sender, e);
    104113      else {
    105         UpdateCheckedItemState(e.Items);
     114        if (!suppressCheckedEvents) UpdateCheckedItemState(e.Items);
    106115        SetNumberOfCheckItems();
    107116      }
     
    130139
    131140    private void UpdateCheckedItemState(IEnumerable<T> items) {
    132       foreach (T item in items) {
    133         foreach (ListViewItem listViewItem in GetListViewItemsForItem(item)) {
    134           var isChecked = Content.ItemChecked(item);
    135           if (listViewItem.Checked != isChecked)
    136             listViewItem.Checked = isChecked;
     141      itemsListView.BeginUpdate();
     142      try {
     143        foreach (T item in items) {
     144          foreach (ListViewItem listViewItem in GetListViewItemsForItem(item)) {
     145            var isChecked = Content.ItemChecked(item);
     146            if (listViewItem.Checked != isChecked)
     147              listViewItem.Checked = isChecked;
     148          }
    137149        }
    138       }
     150      } finally { itemsListView.EndUpdate(); itemsListView.Refresh(); }
    139151    }
    140152  }
Note: See TracChangeset for help on using the changeset viewer.