View | Details | Raw Unified | Return to bug 513057
Collapse All | Expand All

(-)UiaAtkBridge/TextImplementorFactory.cs (+5 lines)
Lines 56-61 Link Here
56
					as IRangeValueProvider;
56
					as IRangeValueProvider;
57
			if (rangeValueProvider != null)
57
			if (rangeValueProvider != null)
58
				return new RangeValueProviderTextImplementor (adapter, rangeValueProvider);
58
				return new RangeValueProviderTextImplementor (adapter, rangeValueProvider);
59
60
			if (UIAWinformsTextPropertyTextImplementor.IsUIAWinformsControlProvider (prov))
61
			{
62
				return new UIAWinformsTextPropertyTextImplementor (adapter, prov);
63
			}
59
			
64
			
60
			return new NamePropertyTextImplementor (adapter, prov);
65
			return new NamePropertyTextImplementor (adapter, prov);
61
		}
66
		}
(-)UiaAtkBridge/UIAWinformsTextPropertyTextImplementor.cs (+94 lines)
Line 0 Link Here
1
// Permission is hereby granted, free of charge, to any person obtaining 
2
// a copy of this software and associated documentation files (the 
3
// "Software"), to deal in the Software without restriction, including 
4
// without limitation the rights to use, copy, modify, merge, publish, 
5
// distribute, sublicense, and/or sell copies of the Software, and to 
6
// permit persons to whom the Software is furnished to do so, subject to 
7
// the following conditions: 
8
//  
9
// The above copyright notice and this permission notice shall be 
10
// included in all copies or substantial portions of the Software. 
11
//  
12
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
13
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
14
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
15
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 
16
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
17
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
18
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
19
// 
20
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com) 
21
// 
22
// Authors: 
23
//      Matt Guo <matt@mattguo.com>
24
//
25
26
using System;
27
using System.Reflection;
28
using Mono.UIAutomation.Bridge;
29
using System.Windows.Automation;
30
using System.Windows.Automation.Text;
31
using System.Windows.Automation.Provider;
32
33
namespace UiaAtkBridge
34
{
35
	internal class UIAWinformsTextPropertyTextImplementor : BaseTextImplementor
36
	{
37
#region Public Properties
38
		public override string Text {
39
			get {
40
				var controlPropValue = GetPublicPropertyValue (provider, "Control");
41
				if (controlPropValue != null)
42
					return GetPublicPropertyValue (controlPropValue, "Text") as string;
43
				else
44
					return null;					
45
			}
46
		}
47
#endregion
48
49
#region Public Methods
50
		public UIAWinformsTextPropertyTextImplementor (Adapter resource, IRawElementProviderSimple provider)
51
			: base (resource)
52
		{
53
			this.provider = provider;
54
		}
55
56
		public static bool IsUIAWinformsControlProvider (IRawElementProviderSimple provider)
57
		{
58
			const string uiaWinformsAssemblyName =
59
				"UIAutomationWinforms, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f4ceacb585d99812";
60
			var assembly = provider.GetType().Assembly;
61
			if (assembly.FullName == uiaWinformsAssemblyName)
62
			{
63
				const string baseProviderName = "Mono.UIAutomation.Winforms.SimpleControlProvider";
64
				Type baseProvider = assembly.GetType (baseProviderName);
65
				if (baseProvider != null && baseProvider.IsInstanceOfType (provider))
66
				{
67
					var controlPropValue = GetPublicPropertyValue (provider, "Control");
68
					if (controlPropValue != null)
69
						return true;
70
				}
71
			}
72
			return false;
73
		}
74
#endregion
75
76
#region Private Methods
77
		private static object GetPublicPropertyValue (object obj, string propName)
78
	        {
79
	            Type referenceType = obj.GetType ();
80
	            PropertyInfo propertyInfo = referenceType.GetProperty (propName,
81
	                                                                   BindingFlags.Public
82
	                                                                   | BindingFlags.Instance
83
	                                                                   | BindingFlags.GetProperty);
84
	            if (propertyInfo == null)
85
	                throw new NotSupportedException ("Property not found: " + propName);
86
	            return propertyInfo.GetGetMethod ().Invoke (obj, new object[] { });
87
	        }
88
#endregion
89
				
90
#region Private Fields
91
		private IRawElementProviderSimple provider;
92
#endregion
93
	}
94
}
(-)UiaAtkBridge/Makefile.am (+1 lines)
Lines 108-113 Link Here
108
	TopLevelRootItem.cs \
108
	TopLevelRootItem.cs \
109
	Tree.cs \
109
	Tree.cs \
110
	TreeItem.cs \
110
	TreeItem.cs \
111
	UIAWinformsTextPropertyTextImplementor.cs \
111
	ValueProviderTextImplementor.cs \
112
	ValueProviderTextImplementor.cs \
112
	Window.cs \
113
	Window.cs \
113
	WrapperPanel.cs
114
	WrapperPanel.cs
(-)UiaAtkBridge/UiaAtkBridge.mdp (+1 lines)
Lines 87-92 Link Here
87
    <File name="ToolBar.cs" subtype="Code" buildaction="Compile" />
87
    <File name="ToolBar.cs" subtype="Code" buildaction="Compile" />
88
    <File name="ContextMenuWindow.cs" subtype="Code" buildaction="Compile" />
88
    <File name="ContextMenuWindow.cs" subtype="Code" buildaction="Compile" />
89
    <File name="TabPage.cs" subtype="Code" buildaction="Compile" />
89
    <File name="TabPage.cs" subtype="Code" buildaction="Compile" />
90
    <File name="UIAWinformsTextPropertyTextImplementor.cs" subtype="Code" buildaction="Compile" />
90
  </Contents>
91
  </Contents>
91
  <References>
92
  <References>
92
    <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
93
    <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

Return to bug 513057