public Object GetCurrentPropertyValue(AutomationProperty property,
bool ignoreDefaultValue)
{
// TODO: Is this tested? Also, add message
if (mode == AutomationElementMode.None)
{
throw new InvalidOperationException("Cannot request a property or pattern that is not cached");
}
object pattern;
// TODO: Throw ElementNotAvailableException if element no longer exists
// Default values already handled in IElement implementation
if (ignoreDefaultValue && !sourceElement.SupportsProperty(property))
{
return(NotSupported);
}
if (property == AEIds.AcceleratorKeyProperty)
{
return(sourceElement.AcceleratorKey);
}
else if (property == AEIds.AccessKeyProperty)
{
return(sourceElement.AccessKey);
}
else if (property == AEIds.AutomationIdProperty)
{
return(sourceElement.AutomationId);
}
else if (property == AEIds.BoundingRectangleProperty)
{
return(sourceElement.BoundingRectangle);
}
else if (property == AEIds.ClassNameProperty)
{
return(sourceElement.ClassName);
}
else if (property == AEIds.ClickablePointProperty)
{
Point clickablePoint;
if (TryGetClickablePoint(out clickablePoint))
{
return(clickablePoint);
}
return(null);
}
else if (property == AEIds.ControlTypeProperty)
{
return(sourceElement.ControlType);
}
else if (property == AEIds.CultureProperty)
{
return(null); // TODO: Implement (new IElement member? not used in UIAutomationWinforms)
}
else if (property == AEIds.FrameworkIdProperty)
{
return(sourceElement.FrameworkId);
}
else if (property == AEIds.HasKeyboardFocusProperty)
{
return(sourceElement.HasKeyboardFocus);
}
else if (property == AEIds.HelpTextProperty)
{
return(sourceElement.HelpText);
}
else if (property == AEIds.IsContentElementProperty)
{
return(sourceElement.IsContentElement);
}
else if (property == AEIds.IsControlElementProperty)
{
return(sourceElement.IsControlElement);
}
else if (property == AEIds.IsDockPatternAvailableProperty)
{
return(TryGetCurrentPattern(DockPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsEnabledProperty)
{
return(sourceElement.IsEnabled);
}
else if (property == AEIds.IsExpandCollapsePatternAvailableProperty)
{
return(TryGetCurrentPattern(ExpandCollapsePatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsGridItemPatternAvailableProperty)
{
return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsGridPatternAvailableProperty)
{
return(TryGetCurrentPattern(GridPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsInvokePatternAvailableProperty)
{
return(TryGetCurrentPattern(InvokePatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsKeyboardFocusableProperty)
{
return(sourceElement.IsKeyboardFocusable);
}
else if (property == AEIds.IsMultipleViewPatternAvailableProperty)
{
return(TryGetCurrentPattern(MultipleViewPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsOffscreenProperty)
{
return(sourceElement.IsOffscreen);
}
else if (property == AEIds.IsPasswordProperty)
{
return(sourceElement.IsPassword);
}
else if (property == AEIds.IsRangeValuePatternAvailableProperty)
{
return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsRequiredForFormProperty)
{
return(sourceElement.IsRequiredForForm);
}
else if (property == AEIds.IsScrollItemPatternAvailableProperty)
{
return(TryGetCurrentPattern(ScrollItemPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsScrollPatternAvailableProperty)
{
return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsSelectionItemPatternAvailableProperty)
{
return(TryGetCurrentPattern(SelectionItemPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsSelectionPatternAvailableProperty)
{
return(TryGetCurrentPattern(SelectionPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsTableItemPatternAvailableProperty)
{
return(TryGetCurrentPattern(TableItemPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsTablePatternAvailableProperty)
{
return(TryGetCurrentPattern(TablePatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsTextPatternAvailableProperty)
{
return(TryGetCurrentPattern(TextPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsTogglePatternAvailableProperty)
{
return(TryGetCurrentPattern(TogglePatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsTransformPatternAvailableProperty)
{
return(TryGetCurrentPattern(TransformPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsValuePatternAvailableProperty)
{
return(TryGetCurrentPattern(ValuePatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.IsWindowPatternAvailableProperty)
{
return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern));
}
else if (property == AEIds.ItemStatusProperty)
{
return(sourceElement.ItemStatus);
}
else if (property == AEIds.ItemTypeProperty)
{
return(sourceElement.ItemType);
}
else if (property == AEIds.LabeledByProperty)
{
// TODO: Caching behavior here should be tested more
return(SourceManager.GetOrCreateAutomationElement(sourceElement.LabeledBy));
}
else if (property == AEIds.LocalizedControlTypeProperty)
{
return(sourceElement.LocalizedControlType);
}
else if (property == AEIds.NameProperty)
{
return(sourceElement.Name);
}
else if (property == AEIds.NativeWindowHandleProperty)
{
return(sourceElement.NativeWindowHandle);
}
else if (property == AEIds.OrientationProperty)
{
return(sourceElement.Orientation);
}
else if (property == AEIds.ProcessIdProperty)
{
return(sourceElement.ProcessId);
}
else if (property == AEIds.RuntimeIdProperty)
{
return(GetRuntimeId());
}
else if (property == DockPatternIdentifiers.DockPositionProperty)
{
return(TryGetCurrentPattern(DockPatternIdentifiers.Pattern, out pattern)? ((DockPattern)pattern).Source.DockPosition: DockPosition.None);
}
else if (property == ExpandCollapsePatternIdentifiers.ExpandCollapseStateProperty)
{
return(TryGetCurrentPattern(ExpandCollapsePatternIdentifiers.Pattern, out pattern)? ((ExpandCollapsePattern)pattern).Source.ExpandCollapseState: ExpandCollapseState.LeafNode);
}
else if (property == GridItemPatternIdentifiers.ColumnProperty)
{
return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern)? ((GridItemPattern)pattern).Source.Column: 0);
}
else if (property == GridItemPatternIdentifiers.ColumnSpanProperty)
{
return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern)? ((GridItemPattern)pattern).Source.ColumnSpan: 1);
}
else if (property == GridItemPatternIdentifiers.ContainingGridProperty)
{
return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElement(((GridItemPattern)pattern).Source.ContainingGrid): null);
}
else if (property == GridItemPatternIdentifiers.RowProperty)
{
return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern)? ((GridItemPattern)pattern).Source.Row: 0);
}
else if (property == GridItemPatternIdentifiers.RowSpanProperty)
{
return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern)? ((GridItemPattern)pattern).Source.RowSpan: 1);
}
else if (property == GridPatternIdentifiers.ColumnCountProperty)
{
return(TryGetCurrentPattern(GridPatternIdentifiers.Pattern, out pattern)? ((GridPattern)pattern).Source.ColumnCount: 0);
}
else if (property == GridPatternIdentifiers.RowCountProperty)
{
return(TryGetCurrentPattern(GridPatternIdentifiers.Pattern, out pattern)? ((GridPattern)pattern).Source.RowCount: 0);
}
else if (property == MultipleViewPatternIdentifiers.CurrentViewProperty)
{
return(TryGetCurrentPattern(MultipleViewPatternIdentifiers.Pattern, out pattern)? ((MultipleViewPattern)pattern).Source.CurrentView: 0);
}
else if (property == MultipleViewPatternIdentifiers.SupportedViewsProperty)
{
return(TryGetCurrentPattern(MultipleViewPatternIdentifiers.Pattern, out pattern)? ((MultipleViewPattern)pattern).Source.GetSupportedViews(): new int [0]);
}
else if (property == RangeValuePatternIdentifiers.IsReadOnlyProperty)
{
return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.IsReadOnly: true);
}
else if (property == RangeValuePatternIdentifiers.LargeChangeProperty)
{
return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.LargeChange: 0);
}
else if (property == RangeValuePatternIdentifiers.MaximumProperty)
{
return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.Maximum: 0);
}
else if (property == RangeValuePatternIdentifiers.MinimumProperty)
{
return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.Minimum: 0);
}
else if (property == RangeValuePatternIdentifiers.SmallChangeProperty)
{
return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.SmallChange: 0);
}
else if (property == RangeValuePatternIdentifiers.ValueProperty)
{
return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.Value: 0);
}
else if (property == ScrollPatternIdentifiers.HorizontallyScrollableProperty)
{
return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.HorizontallyScrollable: false);
}
else if (property == ScrollPatternIdentifiers.HorizontalScrollPercentProperty)
{
return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.HorizontalScrollPercent: 0);
}
else if (property == ScrollPatternIdentifiers.HorizontalViewSizeProperty)
{
return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.HorizontalViewSize: 100);
}
else if (property == ScrollPatternIdentifiers.VerticallyScrollableProperty)
{
return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.VerticallyScrollable: false);
}
else if (property == ScrollPatternIdentifiers.VerticalScrollPercentProperty)
{
return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.VerticalScrollPercent: 0);
}
else if (property == ScrollPatternIdentifiers.VerticalViewSizeProperty)
{
return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.VerticalViewSize: 100);
}
else if (property == SelectionItemPatternIdentifiers.IsSelectedProperty)
{
return(TryGetCurrentPattern(SelectionItemPatternIdentifiers.Pattern, out pattern)? ((SelectionItemPattern)pattern).Source.IsSelected: false);
}
else if (property == SelectionItemPatternIdentifiers.SelectionContainerProperty)
{
return(TryGetCurrentPattern(SelectionItemPatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElement(((SelectionItemPattern)pattern).Source.SelectionContainer): null);
}
else if (property == SelectionPatternIdentifiers.CanSelectMultipleProperty)
{
return(TryGetCurrentPattern(SelectionPatternIdentifiers.Pattern, out pattern)? ((SelectionPattern)pattern).Source.CanSelectMultiple: false);
}
else if (property == SelectionPatternIdentifiers.IsSelectionRequiredProperty)
{
return(TryGetCurrentPattern(SelectionPatternIdentifiers.Pattern, out pattern)? ((SelectionPattern)pattern).Source.IsSelectionRequired: false);
}
else if (property == SelectionPatternIdentifiers.SelectionProperty)
{
return(TryGetCurrentPattern(SelectionPatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElements(((SelectionPattern)pattern).Source.GetSelection()): new AutomationElement [0]);
}
else if (property == TableItemPatternIdentifiers.ColumnHeaderItemsProperty)
{
return(TryGetCurrentPattern(TableItemPatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElements(((TableItemPattern)pattern).Source.GetColumnHeaderItems()): new AutomationElement [0]);
}
else if (property == TableItemPatternIdentifiers.RowHeaderItemsProperty)
{
return(TryGetCurrentPattern(TableItemPatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElements(((TableItemPattern)pattern).Source.GetRowHeaderItems()): new AutomationElement [0]);
}
else if (property == TablePatternIdentifiers.ColumnHeadersProperty)
{
return(TryGetCurrentPattern(TablePatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElements(((TablePattern)pattern).Source.GetColumnHeaders()): new AutomationElement [0]);
}
else if (property == TablePatternIdentifiers.RowHeadersProperty)
{
return(TryGetCurrentPattern(TablePatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElements(((TablePattern)pattern).Source.GetRowHeaders()): new AutomationElement [0]);
}
else if (property == TablePatternIdentifiers.RowOrColumnMajorProperty)
{
return(TryGetCurrentPattern(TablePatternIdentifiers.Pattern, out pattern)? ((TablePattern)pattern).Source.RowOrColumnMajor: RowOrColumnMajor.Indeterminate);
}
else if (property == TogglePatternIdentifiers.ToggleStateProperty)
{
return(TryGetCurrentPattern(TogglePatternIdentifiers.Pattern, out pattern)? ((TogglePattern)pattern).Source.ToggleState: ToggleState.Indeterminate);
}
else if (property == TransformPatternIdentifiers.CanMoveProperty)
{
return(TryGetCurrentPattern(TransformPatternIdentifiers.Pattern, out pattern)? (bool)((TransformPattern)pattern).Source.CanMove: false);
}
else if (property == TransformPatternIdentifiers.CanResizeProperty)
{
return(TryGetCurrentPattern(TransformPatternIdentifiers.Pattern, out pattern)? ((TransformPattern)pattern).Source.CanResize: false);
}
else if (property == TransformPatternIdentifiers.CanRotateProperty)
{
return(TryGetCurrentPattern(TransformPatternIdentifiers.Pattern, out pattern)? ((TransformPattern)pattern).Source.CanRotate: false);
}
else if (property == ValuePatternIdentifiers.IsReadOnlyProperty)
{
return(TryGetCurrentPattern(ValuePatternIdentifiers.Pattern, out pattern)? ((ValuePattern)pattern).Source.IsReadOnly: true);
}
else if (property == ValuePatternIdentifiers.ValueProperty)
{
return(TryGetCurrentPattern(ValuePatternIdentifiers.Pattern, out pattern)? ((ValuePattern)pattern).Source.Value: String.Empty);
}
else if (property == WindowPatternIdentifiers.CanMaximizeProperty)
{
return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? (bool)((WindowPattern)pattern).Source.CanMaximize: false);
}
else if (property == WindowPatternIdentifiers.CanMinimizeProperty)
{
return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? (bool)((WindowPattern)pattern).Source.CanMinimize: false);
}
else if (property == WindowPatternIdentifiers.IsModalProperty)
{
return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? ((WindowPattern)pattern).Source.IsModal: false);
}
else if (property == WindowPatternIdentifiers.IsTopmostProperty)
{
return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? ((WindowPattern)pattern).Source.IsTopmost: false);
}
else if (property == WindowPatternIdentifiers.WindowInteractionStateProperty)
{
return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? ((WindowPattern)pattern).Source.WindowInteractionState: WindowInteractionState.Running);
}
else if (property == WindowPatternIdentifiers.WindowVisualStateProperty)
{
return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? ((WindowPattern)pattern).Source.WindowVisualState: WindowVisualState.Normal);
}
Log.Debug("GetCurrentPropertyValue not implemented for: " + property.ProgrammaticName);
return(NotSupported);
}