Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/LocalPluginManager.cs @ 3083

Last change on this file since 3083 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: 4.6 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;
9using HeuristicLab.PluginInfrastructure.Manager;
10
11namespace HeuristicLab.PluginInfrastructure.Advanced {
12  public partial class LocalPluginManager : UserControl {
13
14    public event ItemCheckedEventHandler ItemChecked;
15
16    private BackgroundWorker refreshPluginListBackgroundWorker = new BackgroundWorker();
17
18    private ListViewGroup enabledPluginsGroup;
19    private ListViewGroup disabledPluginsGroup;
20
21    public LocalPluginManager() {
22      InitializeComponent();
23
24      imageListForLocalItems.Images.Add(HeuristicLab.PluginInfrastructure.Resources.Resources.Assembly);
25      imageListForLocalItems.Images.Add(HeuristicLab.PluginInfrastructure.Resources.Resources.Remove);
26
27      enabledPluginsGroup = localPluginsListView.Groups["activePluginsGroup"];
28      disabledPluginsGroup = localPluginsListView.Groups["disabledPluginsGroup"];
29    }
30
31    private IEnumerable<PluginDescription> plugins;
32    public IEnumerable<PluginDescription> Plugins {
33      get { return plugins; }
34      set {
35        if (value != plugins) {
36          this.plugins = value;
37          UpdateControl();
38        }
39      }
40    }
41
42    public IEnumerable<IPluginDescription> CheckedPlugins {
43      get {
44        return (from item in localPluginsListView.Items.OfType<ListViewItem>()
45                where item.Checked
46                let plugin = item.Tag as IPluginDescription
47                where plugin != null
48                select plugin).ToList();
49      }
50    }
51
52    private void UpdateControl() {
53      ClearPluginList();
54      localPluginsListView.SuppressItemCheckedEvents = true;
55      foreach (var plugin in plugins) {
56        var item = CreateListViewItem(plugin);
57        if (plugin.PluginState == PluginState.Enabled) {
58          item.Group = enabledPluginsGroup;
59        } else if (plugin.PluginState == PluginState.Disabled) {
60          item.Group = disabledPluginsGroup;
61        }
62        localPluginsListView.Items.Add(item);
63      }
64      localPluginsListView.SuppressItemCheckedEvents = false;
65    }
66
67    private void ClearPluginList() {
68      List<ListViewItem> itemsToRemove = new List<ListViewItem>(from item in localPluginsListView.Items.OfType<ListViewItem>()
69                                                                select item);
70      itemsToRemove.ForEach(item => localPluginsListView.Items.Remove(item));
71    }
72
73    private ListViewItem CreateListViewItem(PluginDescription plugin) {
74      ListViewItem item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString(), plugin.Description });
75      item.Tag = plugin;
76      return item;
77    }
78
79    private void pluginsListView_ItemChecked(object sender, ItemCheckedEventArgs e) {
80      // checked items are marked for removal
81      if (e.Item.Checked) {
82        List<ListViewItem> modifiedItems = new List<ListViewItem>();
83        foreach (ListViewItem item in localPluginsListView.SelectedItems) {
84          var plugin = (IPluginDescription)item.Tag;
85          modifiedItems.Add(item);
86          // also uncheck all dependent plugins
87          foreach (ListViewItem dependentItem in localPluginsListView.Items) {
88            var dependent = (IPluginDescription)dependentItem.Tag;
89            if (!dependentItem.Checked && (from dep in dependent.Dependencies
90                                           where dep.Name == plugin.Name
91                                           where dep.Version == plugin.Version
92                                           select dep).Any()) {
93              modifiedItems.Add(dependentItem);
94            }
95          }
96        }
97        localPluginsListView.CheckItems(modifiedItems);
98      } else {
99        List<ListViewItem> modifiedItems = new List<ListViewItem>();
100        foreach (ListViewItem item in localPluginsListView.SelectedItems) {
101          var plugin = (IPluginDescription)item.Tag;
102          modifiedItems.Add(item);
103        }
104        localPluginsListView.UncheckItems(modifiedItems);
105      }
106      OnItemChecked(e);
107    }
108
109    private void OnItemChecked(ItemCheckedEventArgs e) {
110      if (ItemChecked != null) ItemChecked(this, e);
111    }
112
113    private void localPluginsListView_ItemActivate(object sender, EventArgs e) {
114      if (localPluginsListView.SelectedItems.Count > 0) {
115        var plugin = (PluginDescription)localPluginsListView.SelectedItems[0].Tag;
116        PluginView pluginView = new PluginView(plugin);
117        pluginView.ShowInForm();
118      }
119    }
120  }
121}
Note: See TracBrowser for help on using the repository browser.