Remove excessive shortcut key matching in ToolStrip
[mono.git] / mcs / class / System.ComponentModel.Composition / src / ComponentModel / System / ComponentModel / Composition / Hosting / CatalogExportProvider.PartCreatorExport.cs
1 // -----------------------------------------------------------------------\r
2 // Copyright (c) Microsoft Corporation.  All rights reserved.\r
3 // -----------------------------------------------------------------------\r
4 using System;\r
5 using System.Collections.Generic;\r
6 using System.ComponentModel.Composition.Primitives;\r
7 using System.ComponentModel.Composition.ReflectionModel;\r
8 using System.Linq;\r
9 \r
10 namespace System.ComponentModel.Composition.Hosting\r
11 {\r
12     public partial class CatalogExportProvider\r
13     {\r
14         internal class PartCreatorExport : Export\r
15         {\r
16             private readonly CatalogExportProvider _catalogExportProvider;\r
17             private readonly ComposablePartDefinition _partDefinition;\r
18             private readonly ExportDefinition _exportDefinition;\r
19             private ExportDefinition _partCreatorExportDefinition;\r
20             private PartCreatorPartDefinition _partCreatorPartDefinition;\r
21 \r
22             public PartCreatorExport(CatalogExportProvider catalogExportProvider, ComposablePartDefinition partDefinition, ExportDefinition exportDefinition)\r
23             {\r
24                 this._catalogExportProvider = catalogExportProvider;\r
25                 this._partDefinition = partDefinition;\r
26                 this._exportDefinition = exportDefinition;\r
27                 this._partCreatorExportDefinition = new PartCreatorExportDefinition(this._exportDefinition);\r
28             }\r
29 \r
30             public override ExportDefinition Definition\r
31             {\r
32                 get { return this._partCreatorExportDefinition; }\r
33             }\r
34 \r
35             protected override object GetExportedValueCore()\r
36             {\r
37                 if (this._partCreatorPartDefinition == null)\r
38                 {\r
39                     this._partCreatorPartDefinition = new PartCreatorPartDefinition(this);\r
40                 }\r
41                 return this._partCreatorPartDefinition;\r
42             }\r
43 \r
44             public Export CreateExportProduct()\r
45             {\r
46                 return new NonSharedCatalogExport(this._catalogExportProvider, this._partDefinition, this._exportDefinition);\r
47             }\r
48 \r
49             private class PartCreatorPartDefinition : ComposablePartDefinition\r
50             {\r
51                 private readonly PartCreatorExport _partCreatorExport;\r
52 \r
53                 public PartCreatorPartDefinition(PartCreatorExport partCreatorExport)\r
54                 {\r
55                     this._partCreatorExport = partCreatorExport;\r
56                 }\r
57 \r
58                 public override IEnumerable<ExportDefinition> ExportDefinitions\r
59                 {\r
60                     get { return new ExportDefinition[] { this._partCreatorExport.Definition }; }\r
61                 }\r
62 \r
63                 public override IEnumerable<ImportDefinition> ImportDefinitions\r
64                 {\r
65                     get { return Enumerable.Empty<ImportDefinition>(); }\r
66                 }\r
67 \r
68                 public ExportDefinition PartCreatorExportDefinition\r
69                 {\r
70                     get { return this._partCreatorExport.Definition; }\r
71                 }\r
72 \r
73                 public Export CreateProductExport()\r
74                 {\r
75                     return this._partCreatorExport.CreateExportProduct();\r
76                 }\r
77 \r
78                 public override ComposablePart CreatePart()\r
79                 {\r
80                     return new PartCreatorPart(this);\r
81                 }\r
82             }\r
83 \r
84             private sealed class PartCreatorPart : ComposablePart, IDisposable\r
85             {\r
86                 private readonly PartCreatorPartDefinition _definition;\r
87                 private readonly Export _export;\r
88 \r
89                 public PartCreatorPart(PartCreatorPartDefinition definition)\r
90                 {\r
91                     this._definition = definition;\r
92                     this._export = definition.CreateProductExport();\r
93                 }\r
94 \r
95                 public override IEnumerable<ExportDefinition> ExportDefinitions\r
96                 {\r
97                     get { return this._definition.ExportDefinitions; }\r
98                 }\r
99 \r
100                 public override IEnumerable<ImportDefinition> ImportDefinitions\r
101                 {\r
102                     get { return this._definition.ImportDefinitions; }\r
103                 }\r
104 \r
105                 public override object GetExportedValue(ExportDefinition definition)\r
106                 {\r
107                     if (definition != this._definition.PartCreatorExportDefinition)\r
108                     {\r
109                         throw ExceptionBuilder.CreateExportDefinitionNotOnThisComposablePart("definition");\r
110                     }\r
111 \r
112                     return this._export.Value;\r
113                 }\r
114 \r
115                 public override void SetImport(ImportDefinition definition, IEnumerable<Export> exports)\r
116                 {\r
117                     throw ExceptionBuilder.CreateImportDefinitionNotOnThisComposablePart("definition");\r
118                 }\r
119 \r
120                 public void Dispose()\r
121                 {\r
122                     IDisposable disposable = this._export as IDisposable;\r
123 \r
124                     if (disposable != null)\r
125                     {\r
126                         disposable.Dispose();\r
127                     }\r
128                 }\r
129             }\r
130         }\r
131     }\r
132 }\r