Fix bugs in sizing TableLayoutPanel (Xamarin bug 18638)
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / Factories / CatalogFactory.MutableComposablePartCatalog.cs
1 // -----------------------------------------------------------------------\r
2 // Copyright (c) Microsoft Corporation.  All rights reserved.\r
3 // -----------------------------------------------------------------------\r
4 using System;\r
5 using System.ComponentModel.Composition.Primitives;\r
6 using System.Linq;\r
7 using System.Collections.Generic;\r
8 using System.Collections.ObjectModel;\r
9 using System.ComponentModel.Composition.Hosting;\r
10 \r
11 namespace System.ComponentModel.Composition.Factories\r
12 {\r
13     partial class CatalogFactory\r
14     {\r
15         public class MutableComposablePartCatalog : ComposablePartCatalog, INotifyComposablePartCatalogChanged\r
16         {\r
17             private readonly HashSet<ComposablePartDefinition> _definitions;\r
18 \r
19             public MutableComposablePartCatalog(IEnumerable<ComposablePartDefinition> definitions)\r
20             {\r
21                 _definitions = new HashSet<ComposablePartDefinition>(definitions);\r
22             }\r
23 \r
24             public void AddDefinition(ComposablePartDefinition definition)\r
25             {\r
26                 OnDefinitionsChanged(definition, true);\r
27             }\r
28 \r
29             public void RemoveDefinition(ComposablePartDefinition definition)\r
30             {\r
31                 OnDefinitionsChanged(definition, false);\r
32             }\r
33 \r
34             public override IQueryable<ComposablePartDefinition> Parts\r
35             {\r
36                 get { return _definitions.AsQueryable(); }\r
37             }\r
38 \r
39             private void OnDefinitionsChanged(ComposablePartDefinition definition, bool added)\r
40             {\r
41                 ComposablePartDefinition[] addedDefinitions = added ? new ComposablePartDefinition[] { definition } : new ComposablePartDefinition[0];\r
42                 ComposablePartDefinition[] removeDefinitions = added ? new ComposablePartDefinition[0] : new ComposablePartDefinition[] { definition };\r
43 \r
44                 var e = new ComposablePartCatalogChangeEventArgs(addedDefinitions, removeDefinitions, null);\r
45                 Changing(this, e);\r
46 \r
47                 if (added)\r
48                 {\r
49                     _definitions.Add(definition);\r
50                 }\r
51                 else\r
52                 {\r
53                     _definitions.Remove(definition);\r
54                 }\r
55 \r
56                 if (Changed != null)\r
57                 {\r
58                     Changed(this, e);\r
59                 }\r
60             }\r
61 \r
62             public event EventHandler<ComposablePartCatalogChangeEventArgs> Changed;\r
63 \r
64             public event EventHandler<ComposablePartCatalogChangeEventArgs> Changing;\r
65         }\r
66     }\r
67 }