Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/MultiSelectListView.cs @ 3068

Last change on this file since 3068 was 3068, checked in by gkronber, 15 years ago

Worked on multi-select behavior of list views in deployment server interfaces. #891 (Refactor GUI for plugin management)

File size: 2.4 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Drawing;
5using System.Data;
6using System.Linq;
7using System.Text;
8using System.Windows.Forms;
9
10namespace HeuristicLab.PluginInfrastructure.Advanced {
11  internal partial class MultiSelectListView : ListView {
12    public MultiSelectListView() {
13      InitializeComponent();
14    }
15
16    private bool inhibitAutoCheck;
17    protected override void OnMouseDown(MouseEventArgs e) {
18      inhibitAutoCheck = true;
19      base.OnMouseDown(e);
20    }
21
22    protected override void OnMouseUp(MouseEventArgs e) {
23      base.OnMouseUp(e);
24      inhibitAutoCheck = false;
25    }
26
27    // item check is raised for each selected item that was not directly clicked (those should be ignored)
28    // and then one the item whose checkbox was clicked
29    protected override void OnItemCheck(ItemCheckEventArgs ice) {
30      // don't change the checked state of items that were not clicked directly
31      if (inhibitAutoCheck) {
32        ice.NewValue = ice.CurrentValue;
33      }
34      // if this item was directly clicked then check if it is selected as well
35      var item = Items[ice.Index];
36      if (!item.Selected) {
37        // when the item was not selected previously
38        // clear any selection
39        List<ListViewItem> selectedItems = new List<ListViewItem>(SelectedItems.OfType<ListViewItem>());
40        selectedItems.ForEach(x => x.Selected = false);
41        // select only the clicked item
42        item.Selected = true;
43      }
44      base.OnItemCheck(ice);
45    }
46
47    private bool suppressItemCheckedEvents;
48    public bool SuppressItemCheckedEvents {
49      get {
50        return suppressItemCheckedEvents;
51      }
52      set {
53        suppressItemCheckedEvents = value;
54      }
55    }
56    protected override void OnItemChecked(ItemCheckedEventArgs e) {
57      if (!suppressItemCheckedEvents)
58        base.OnItemChecked(e);
59    }
60
61    public void CheckItems(IEnumerable<ListViewItem> items) {
62      suppressItemCheckedEvents = true;
63
64      foreach (var item in items)
65        item.Checked = true;
66      suppressItemCheckedEvents = false;
67    }
68
69    public void UncheckItems(IEnumerable<ListViewItem> items) {
70      suppressItemCheckedEvents = true;
71
72      foreach (var item in items)
73        item.Checked = false;
74      suppressItemCheckedEvents = false;
75    }
76
77  }
78}
Note: See TracBrowser for help on using the repository browser.