Fix bugs in sizing TableLayoutPanel (Xamarin bug 18638)
[mono.git] / mcs / class / System.ComponentModel.Composition / Tests / ComponentModelUnitTest / System / ComponentModel / Composition / Factories / CatalogFactory.FilteredComposablePartCatalog.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.ComponentModel.Composition.Hosting;\r
7 using System.Linq;\r
8 using System.Linq.Expressions;\r
9 \r
10 namespace System.ComponentModel.Composition.Factories\r
11 {\r
12     partial class CatalogFactory\r
13     {\r
14         public class FilteredCatalog : ComposablePartCatalog, INotifyComposablePartCatalogChanged\r
15         {\r
16             private readonly ComposablePartCatalog _inner;\r
17             private readonly INotifyComposablePartCatalogChanged _innerNotifyChange;\r
18             private readonly IQueryable<ComposablePartDefinition> _partsQuery;\r
19 \r
20             public FilteredCatalog(ComposablePartCatalog inner,\r
21                                    Func<ComposablePartDefinition, bool> filter)\r
22             {\r
23                 _inner = inner;\r
24                 _innerNotifyChange = inner as INotifyComposablePartCatalogChanged;\r
25                 _partsQuery = inner.Parts.Where(filter).AsQueryable();\r
26             }\r
27 \r
28             public override IQueryable<ComposablePartDefinition> Parts\r
29             {\r
30                 get\r
31                 {\r
32                     return _partsQuery;\r
33                 }\r
34             }\r
35 \r
36             public event EventHandler<ComposablePartCatalogChangeEventArgs> Changed\r
37             {\r
38                 add\r
39                 {\r
40                     if (_innerNotifyChange != null)\r
41                         _innerNotifyChange.Changed += value;\r
42                 }\r
43                 remove\r
44                 {\r
45                     if (_innerNotifyChange != null)\r
46                         _innerNotifyChange.Changed -= value;\r
47                 }\r
48             }\r
49 \r
50             public event EventHandler<ComposablePartCatalogChangeEventArgs> Changing\r
51             {\r
52                 add\r
53                 {\r
54                     if (_innerNotifyChange != null)\r
55                         _innerNotifyChange.Changing += value;\r
56                 }\r
57                 remove\r
58                 {\r
59                     if (_innerNotifyChange != null)\r
60                         _innerNotifyChange.Changing -= value;\r
61                 }\r
62             }\r
63         }\r
64     }\r
65 }\r