[corlib] Avoid unnecessary ephemeron array resizes
[mono.git] / mcs / class / referencesource / System.Activities.Presentation / System.Activities.Presentation / System / Activities / Presentation / Base / Core / Internal / PropertyEditing / Automation / CategoryListAutomationPeer.cs
1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //----------------------------------------------------------------
4 namespace System.Activities.Presentation.Internal.PropertyEditing.Automation 
5 {
6     using System;
7     using System.Collections.Generic;
8     using System.Diagnostics;
9     using System.Globalization;
10     using System.Text;
11     using System.Windows;
12     using System.Windows.Automation;
13     using System.Windows.Automation.Peers;
14     using System.Windows.Automation.Provider;
15     using System.Windows.Controls;
16     using System.Windows.Media;
17
18     using System.Activities.Presentation.PropertyEditing;
19     using System.Activities.Presentation;
20
21     using System.Activities.Presentation.Internal.PropertyEditing.FromExpression.Framework.PropertyInspector;
22     using System.Activities.Presentation.Internal.PropertyEditing.Model;
23     using System.Activities.Presentation.Internal.PropertyEditing.Selection;
24     using System.Activities.Presentation.Internal.Properties;
25
26     // <summary>
27     // AutomationPeer for CategoryList class
28     // </summary>
29     internal class CategoryListAutomationPeer : ItemsControlAutomationPeer, IAutomationFocusChangedEventSource 
30     {
31
32         private CategoryList _control;
33         // Children list.
34         private List<AutomationPeer> _children;
35
36         // <summary>
37         // Basic ctor
38         // </summary>
39         // <param name="owner">Contained CategoryList</param>
40         public CategoryListAutomationPeer(CategoryList owner)
41             : base(owner) 
42         {
43             if (owner == null)
44             {
45                 throw FxTrace.Exception.ArgumentNull("owner");
46             }
47
48             _control = owner;
49             _children = new List<AutomationPeer>();
50         }
51
52         protected override ItemAutomationPeer CreateItemAutomationPeer(object item) 
53         {
54
55             ItemAutomationPeer peer = CategoryContainerAutomationPeer.CreateItemAutomationPeer(
56                 item as ModelCategoryEntry,
57                 _control.ItemContainerGenerator.ContainerFromItem(item) as CiderCategoryContainer,
58                 this);
59
60             //Add each item to the children's list
61             _children.Add(peer);
62
63             return peer;
64         }
65
66         protected override string GetClassNameCore() 
67         {
68             return typeof(ItemsControl).Name;
69         }
70
71         protected override string GetNameCore() 
72         {
73             return Resources.PropertyEditing_CategoryList;
74         }
75
76         // We use the ItemStatus to convey read-only property selection status
77         protected override string GetItemStatusCore() 
78         {
79             FrameworkElement selection = _control.Selection;
80             string status;
81
82             if (selection != null) 
83             {
84                 ISelectionStop selectionStop = PropertySelection.GetSelectionStop(selection);
85                 status = selectionStop == null ? null : selectionStop.Description;
86
87                 if (status == null) 
88                 {
89                     status = string.Format(
90                         CultureInfo.CurrentCulture,
91                         Resources.PropertyEditing_SelectionStatus_Unknown,
92                         selection.GetType().Name);
93                 }
94             }
95             else 
96             {
97                 status = Resources.PropertyEditing_SelectionStatus_Empty;
98             }
99
100             return status;
101         }
102
103         // IAutomationFocusChangedEventSource Members
104         public void UnloadEventHook() 
105         {
106             if (_children != null) 
107             {
108                 foreach (AutomationPeer peer in _children) 
109                 {
110                     IAutomationFocusChangedEventSource unhookEventPeer = peer as IAutomationFocusChangedEventSource;
111                     if (unhookEventPeer != null) 
112                     {
113                         unhookEventPeer.UnloadEventHook();
114                     }
115                 }
116             }
117         }
118
119     }
120 }