Changeset 3068 for branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.DeploymentService.AdminClient/PluginListView.cs
- Timestamp:
- 03/16/10 17:14:35 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DeploymentServer Prototype/HeuristicLab.Services/HeuristicLab.DeploymentService.AdminClient/PluginListView.cs
r3045 r3068 10 10 11 11 namespace HeuristicLab.DeploymentService.AdminClient { 12 /// <summary> 13 /// Wraps a ListView and adds functionality to automatically check and uncheck dependencies of plugins. 14 /// </summary> 12 15 public partial class PluginListView : UserControl { 13 16 public event ItemCheckedEventHandler ItemChecked; … … 18 21 set { 19 22 plugins = value; 23 checkedPlugins.Clear(); 20 24 UpdateControls(); 21 25 } 22 26 } 23 27 28 private List<IPluginDescription> checkedPlugins = new List<IPluginDescription>(); 24 29 public IEnumerable<IPluginDescription> CheckedPlugins { 25 30 get { 26 return from item in listView.Items.OfType<ListViewItem>() 27 where item.Checked 28 select item.Tag as IPluginDescription; 31 return checkedPlugins; 29 32 } 30 33 } 31 32 private bool suppressItemCheckedEvents = false;33 34 34 35 public PluginListView() { … … 37 38 38 39 public void CheckPlugin(IPluginDescription plugin) { 39 var items = FindItemsForPlugin(plugin); 40 if (items.Count() == 0) throw new ArgumentException(); 41 var item = items.Single(); 42 if (!item.Checked) { 43 suppressItemCheckedEvents = true; 44 item.Checked = true; 45 suppressItemCheckedEvents = false; 46 } 40 MarkPluginChecked(plugin); 41 listView.CheckItems(new IPluginDescription[] { plugin }.Select(x => FindItemsForPlugin(x).Single())); 47 42 } 43 48 44 49 45 private void UpdateControls() { 50 46 if (plugins != null) { 51 47 listView.Items.Clear(); 52 suppressItemCheckedEvents = true;48 listView.SuppressItemCheckedEvents = true; 53 49 foreach (var plugin in plugins) { 54 50 listView.Items.Add(CreateListViewItem(plugin)); 55 51 } 56 suppressItemCheckedEvents = false;52 listView.SuppressItemCheckedEvents = false; 57 53 } 58 54 } … … 60 56 private ListViewItem CreateListViewItem(IPluginDescription plugin) { 61 57 var item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString() }); 58 item.Checked = (from p in checkedPlugins where p.Name == plugin.Name where p.Version == plugin.Version select p).Any(); 62 59 item.Tag = plugin; 63 60 return item; … … 65 62 66 63 private void listView_ItemChecked(object sender, ItemCheckedEventArgs e) { 67 if (suppressItemCheckedEvents) return;64 List<IPluginDescription> modifiedPlugins = new List<IPluginDescription>(); 68 65 if (e.Item.Checked) { 69 // also check all dependencies 70 suppressItemCheckedEvents = true; 71 var dependencies = GetAllDependencies(e.Item.Tag as IPluginDescription); 72 foreach (var dep in dependencies) { 73 var item = FindItemsForPlugin(dep).Single(); 74 if (!item.Checked) item.Checked = true; 66 foreach (ListViewItem item in listView.SelectedItems) { 67 var plugin = (IPluginDescription)item.Tag; 68 // also check all dependencies 69 MarkPluginChecked(plugin); 70 modifiedPlugins.Add(plugin); 71 foreach (var dep in GetAllDependencies(plugin)) { 72 MarkPluginChecked(dep); 73 modifiedPlugins.Add(dep); 74 } 75 75 } 76 suppressItemCheckedEvents = false; 76 listView.CheckItems(modifiedPlugins.Select(x => FindItemsForPlugin(x).Single())); 77 OnItemChecked(e); 77 78 } else { 78 // also uncheck all dependencies 79 suppressItemCheckedEvents = true; 80 var dependents = GetAllDependents(e.Item.Tag as IPluginDescription); 81 foreach (var dep in dependents) { 82 var item = FindItemsForPlugin(dep).Single(); 83 if (item.Checked) item.Checked = false; 79 foreach (ListViewItem item in listView.SelectedItems) { 80 var plugin = (IPluginDescription)item.Tag; 81 // also uncheck all dependent plugins 82 MarkPluginUnchecked(plugin); 83 modifiedPlugins.Add(plugin); 84 foreach (var dep in GetAllDependents(plugin)) { 85 MarkPluginUnchecked(dep); 86 modifiedPlugins.Add(dep); 87 } 88 84 89 } 85 suppressItemCheckedEvents = false; 90 listView.UncheckItems(modifiedPlugins.Select(x => FindItemsForPlugin(x).Single())); 91 OnItemChecked(e); 86 92 } 87 OnItemChecked(e); 93 } 94 95 private void MarkPluginChecked(IPluginDescription plugin) { 96 var matching = from p in checkedPlugins 97 where p.Name == plugin.Name 98 where p.Version == plugin.Version 99 select p; 100 if (!matching.Any()) checkedPlugins.Add(plugin); 101 } 102 103 private void MarkPluginUnchecked(IPluginDescription plugin) { 104 checkedPlugins = (from p in checkedPlugins 105 where p.Name != plugin.Name || 106 p.Version != plugin.Version 107 select p).ToList(); 88 108 } 89 109 … … 116 136 117 137 private void OnItemChecked(ItemCheckedEventArgs e) { 118 if (ItemChecked != null && !suppressItemCheckedEvents) ItemChecked(this, e);138 if (ItemChecked != null) ItemChecked(this, e); 119 139 } 120 140 }
Note: See TracChangeset
for help on using the changeset viewer.