Changeset 17147
- Timestamp:
- 07/22/19 14:12:15 (5 years ago)
- Location:
- stable
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk merged: 17009,17126
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Core
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Core merged: 17009
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Core.Views
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Core.Views merged: 17009,17126
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs
r17097 r17147 34 34 [Content(typeof(ReadOnlyCheckedItemCollection<>), true)] 35 35 public partial class CheckedItemCollectionView<T> : ItemCollectionView<T> where T : class, IItem { 36 private bool suppressCheckedEvents; 37 36 38 public new ICheckedItemCollection<T> Content { 37 39 get { return (ICheckedItemCollection<T>)base.Content; } … … 82 84 if (doubleClick) { 83 85 e.NewValue = e.CurrentValue; 84 doubleClick = false;85 86 } else { 87 bool check = e.NewValue == CheckState.Checked; 86 88 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; } 92 102 } 93 103 } 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; 97 106 } 98 107 #endregion … … 103 112 Invoke(new CollectionItemsChangedEventHandler<T>(Content_CheckedItemsChanged), sender, e); 104 113 else { 105 UpdateCheckedItemState(e.Items);114 if (!suppressCheckedEvents) UpdateCheckedItemState(e.Items); 106 115 SetNumberOfCheckItems(); 107 116 } … … 130 139 131 140 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 } 137 149 } 138 } 150 } finally { itemsListView.EndUpdate(); itemsListView.Refresh(); } 139 151 } 140 152 } -
stable/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs
r17097 r17147 37 37 [Content(typeof(ReadOnlyCheckedItemList<>), true)] 38 38 public partial class CheckedItemListView<T> : ItemListView<T> where T : class, IItem { 39 private bool suppressCheckedEvents; 40 39 41 public new ICheckedItemList<T> Content { 40 42 get { return (ICheckedItemList<T>)base.Content; } … … 84 86 if (doubleClick) { 85 87 e.NewValue = e.CurrentValue; 86 doubleClick = false;87 88 } else { 88 var checkedItem = (T)itemsListView.Items[e.Index].Tag;89 89 bool check = e.NewValue == CheckState.Checked; 90 if (Content.ItemChecked(checkedItem) != check) { 91 if (!ReadOnly && !Locked) Content.SetItemCheckedState(checkedItem, check); 92 else e.NewValue = e.CurrentValue; 93 } 90 if (Content.ItemChecked(e.Index) == check) return; 91 92 suppressCheckedEvents = true; 93 try { 94 if (itemsListView.SelectedIndices.Count > 1 95 && itemsListView.SelectedIndices.Contains(e.Index)) { 96 if (!ReadOnly && !Locked) Content.SetItemCheckedState(itemsListView.SelectedIndices.Cast<int>(), check); 97 else e.NewValue = e.CurrentValue; 98 } else { 99 var checkedItem = (T)itemsListView.Items[e.Index].Tag; 100 if (!ReadOnly && !Locked) Content.SetItemCheckedState(checkedItem, check); 101 else e.NewValue = e.CurrentValue; 102 } 103 } finally { suppressCheckedEvents = false; } 94 104 } 95 105 } 96 106 97 107 protected void itemsListView_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { 98 if (e.Clicks > 1) 99 doubleClick = true; 108 doubleClick = e.Clicks > 1; 100 109 } 101 110 … … 139 148 Invoke(new CollectionItemsChangedEventHandler<IndexedItem<T>>(Content_CheckedItemsChanged), sender, e); 140 149 else { 141 UpdateCheckedItemState(e.Items);150 if (!suppressCheckedEvents) UpdateCheckedItemState(e.Items); 142 151 SetNumberOfCheckItems(); 143 152 } … … 175 184 176 185 private void UpdateCheckedItemState(IEnumerable<IndexedItem<T>> items) { 177 foreach (var item in items) { 178 var isChecked = Content.ItemChecked(item.Value); 179 if (itemsListView.Items[item.Index].Checked != isChecked) 180 itemsListView.Items[item.Index].Checked = isChecked; 181 } 186 itemsListView.BeginUpdate(); 187 try { 188 foreach (var item in items) { 189 var isChecked = Content.ItemChecked(item.Value); 190 if (itemsListView.Items[item.Index].Checked != isChecked) 191 itemsListView.Items[item.Index].Checked = isChecked; 192 } 193 } finally { itemsListView.EndUpdate(); itemsListView.Refresh(); } 182 194 } 183 195 } -
stable/HeuristicLab.Core/3.3/Collections/CheckedItemCollection.cs
r17097 r17147 23 23 using System.Collections.Generic; 24 24 using System.Linq; 25 using HEAL.Attic; 25 26 using HeuristicLab.Collections; 26 27 using HeuristicLab.Common; 27 using HEAL.Attic;28 28 29 29 namespace HeuristicLab.Core { … … 108 108 109 109 /// <summary> 110 /// Sets the checked state of <paramref name="items"/> to <paramref name="checkedState"/>. 111 /// </summary> 112 /// <param name="items">The items to set the checked state for.</param> 113 /// <param name="checkedState">The new checked state of <paramref name="item"/></param> 114 public void SetItemCheckedState(IEnumerable<T> items, bool checkedState) { 115 var changed = new List<T>(); 116 foreach (var item in items) { 117 if (!this.checkedState.TryGetValue(item, out bool currentState)) throw new ArgumentException(); 118 if (currentState != checkedState) { 119 this.checkedState[item] = checkedState; 120 changed.Add(item); 121 } 122 } 123 if (changed.Count > 0) OnCheckedItemsChanged(changed); 124 } 125 126 /// <summary> 110 127 /// Adds a new <paramref name="item"/> with the given <paramref name="checkedState"/>. 111 128 /// </summary> -
stable/HeuristicLab.Core/3.3/Collections/CheckedItemList.cs
r17097 r17147 23 23 using System.Collections.Generic; 24 24 using System.Linq; 25 using HEAL.Attic; 25 26 using HeuristicLab.Collections; 26 27 using HeuristicLab.Common; 27 using HEAL.Attic;28 28 29 29 namespace HeuristicLab.Core { … … 111 111 /// Sets the checked state of <paramref name="item"/> to <paramref name="checkedState"/>. 112 112 /// </summary> 113 /// <remarks> 114 /// This method is slower than <see cref="SetItemCheckedState(int, bool)"/>. 115 /// </remarks> 113 116 /// <param name="item">The item to set the checked state for.</param> 114 117 /// <param name="checkedState">The new checked state of <paramref name="item"/></param> 115 118 public void SetItemCheckedState(T item, bool checkedState) { 116 if (!this.checkedState.ContainsKey(item)) throw new ArgumentException(); 117 if (this.checkedState[item] != checkedState) { 118 this.checkedState[item] = checkedState; 119 OnCheckedItemsChanged(new IndexedItem<T>[] { new IndexedItem<T>(IndexOf(item), item) }); 120 } 119 SetItemCheckedState(IndexOf(item), checkedState); 120 } 121 122 /// <summary> 123 /// Sets the checked state of <paramref name="items"/> to <paramref name="checkedState"/>. 124 /// </summary> 125 /// <remarks> 126 /// This method is slower than <see cref="SetItemCheckedState(IEnumerable{int}, bool)"/>. 127 /// </remarks> 128 /// <param name="items">The items to set the checked state for.</param> 129 /// <param name="checkedState">The new checked state of <paramref name="item"/></param> 130 public void SetItemCheckedState(IEnumerable<T> items, bool checkedState) { 131 var changed = new List<IndexedItem<T>>(); 132 foreach (var item in items) { 133 if (!this.checkedState.TryGetValue(item, out bool currentState)) throw new ArgumentException(); 134 if (currentState != checkedState) { 135 this.checkedState[item] = checkedState; 136 changed.Add(new IndexedItem<T>(IndexOf(item), item)); 137 } 138 } 139 if (changed.Count > 0) OnCheckedItemsChanged(changed); 121 140 } 122 141 … … 127 146 /// <param name="checkedState">The new checked state of the item.</param> 128 147 public void SetItemCheckedState(int itemIndex, bool checkedState) { 129 SetItemCheckedState(this[itemIndex], checkedState); 148 var item = list[itemIndex]; 149 if (!this.checkedState.TryGetValue(item, out bool currentState)) throw new ArgumentException(); 150 if (currentState != checkedState) { 151 this.checkedState[item] = checkedState; 152 OnCheckedItemsChanged(new IndexedItem<T>[] { new IndexedItem<T>(itemIndex, item) }); 153 } 154 } 155 156 /// <summary> 157 /// Sets the checked state of all <paramref name="itemIndices"/> to <paramref name="checkedState"/>. 158 /// </summary> 159 /// <param name="itemIndices">The indices of all items to set the checked state for.</param> 160 /// <param name="checkedState">The new checked state of the item.</param> 161 public void SetItemCheckedState(IEnumerable<int> itemIndices, bool checkedState) { 162 var changed = new List<IndexedItem<T>>(); 163 foreach (var index in itemIndices) { 164 var item = list[index]; 165 if (!this.checkedState.TryGetValue(item, out bool currentState)) throw new ArgumentException(); 166 if (currentState != checkedState) { 167 this.checkedState[item] = checkedState; 168 changed.Add(new IndexedItem<T>(index, item)); 169 } 170 } 171 if (changed.Count > 0) OnCheckedItemsChanged(changed); 130 172 } 131 173 -
stable/HeuristicLab.Core/3.3/Collections/ReadOnlyCheckedItemCollection.cs
r17097 r17147 22 22 using System; 23 23 using System.Collections.Generic; 24 using HEAL.Attic; 24 25 using HeuristicLab.Collections; 25 26 using HeuristicLab.Common; 26 using HEAL.Attic;27 27 28 28 namespace HeuristicLab.Core { … … 75 75 } 76 76 77 public void SetItemCheckedState(IEnumerable<T> items, bool checkedState) { 78 CheckedItemCollection.SetItemCheckedState(items, checkedState); 79 } 80 77 81 public void Add(T item, bool checkedState) { 78 82 throw new NotSupportedException(); -
stable/HeuristicLab.Core/3.3/Collections/ReadOnlyCheckedItemList.cs
r17097 r17147 22 22 using System; 23 23 using System.Collections.Generic; 24 using HEAL.Attic; 24 25 using HeuristicLab.Collections; 25 26 using HeuristicLab.Common; 26 using HEAL.Attic;27 27 28 28 namespace HeuristicLab.Core { … … 72 72 } 73 73 74 public bool ItemChecked(int itemIndex) { 75 return CheckedItemList.ItemChecked(itemIndex); 76 } 77 74 78 public void SetItemCheckedState(T item, bool checkedState) { 75 79 CheckedItemList.SetItemCheckedState(item, checkedState); 80 } 81 82 public void SetItemCheckedState(IEnumerable<T> items, bool checkedState) { 83 CheckedItemList.SetItemCheckedState(items, checkedState); 84 } 85 86 public void SetItemCheckedState(int itemIndex, bool checkedState) { 87 CheckedItemList.SetItemCheckedState(itemIndex, checkedState); 88 } 89 90 public void SetItemCheckedState(IEnumerable<int> itemIndices, bool checkedState) { 91 CheckedItemList.SetItemCheckedState(itemIndices, checkedState); 76 92 } 77 93 -
stable/HeuristicLab.Core/3.3/Interfaces/ICheckedItemCollection.cs
r17097 r17147 21 21 22 22 using System.Collections.Generic; 23 using HEAL.Attic; 23 24 using HeuristicLab.Collections; 24 using HEAL.Attic;25 25 26 26 namespace HeuristicLab.Core { … … 31 31 bool ItemChecked(T item); 32 32 void SetItemCheckedState(T item, bool checkedState); 33 void SetItemCheckedState(IEnumerable<T> item, bool checkedState); 33 34 void Add(T item, bool checkedState); 34 35 } -
stable/HeuristicLab.Core/3.3/Interfaces/ICheckedItemList.cs
r17097 r17147 21 21 22 22 using System.Collections.Generic; 23 using HEAL.Attic; 23 24 using HeuristicLab.Collections; 24 using HEAL.Attic;25 25 26 26 namespace HeuristicLab.Core { … … 30 30 IEnumerable<IndexedItem<T>> CheckedItems { get; } 31 31 bool ItemChecked(T item); 32 bool ItemChecked(int itemIndex); 32 33 void SetItemCheckedState(T item, bool checkedState); 34 void SetItemCheckedState(IEnumerable<T> items, bool checkedState); 35 void SetItemCheckedState(int itemIndex, bool checkedState); 36 void SetItemCheckedState(IEnumerable<int> itemIndices, bool checkedState); 33 37 void Add(T item, bool checkedState); 34 38 void Insert(int index, T item, bool checkedState);
Note: See TracChangeset
for help on using the changeset viewer.