public override void InsertChildProvider(bool raiseEvent, FragmentControlProvider childProvider, int index) { base.InsertChildProvider(raiseEvent, childProvider, index); // TODO: Figure out exactly when to do this (talk to bridge guys) CheckForRadioButtonChild(childProvider); }
public override IRawElementProviderFragment ElementProviderFromPoint(double x, double y) { if (x > form.Width || y > form.Height) { return(null); } Control child = form.GetChildAtPoint(new Point((int)x, (int)y)); if (child != null) { Log.Debug(child.ToString()); FragmentControlProvider childFragmentProvider = Navigation.TryGetChild(child); if (childFragmentProvider != null) { return(childFragmentProvider); } } else { Log.Debug("ElementProviderFromPoint: Child is null"); } return(this); }
private void OnItemAdded(object sender, ToolStripItemEventArgs e) { FragmentControlProvider itemProvider = GetItemProvider(e.Item); if (itemProvider != null) { AddChildProvider(itemProvider); } }
protected override void InsertChildProvider(bool raiseEvent, FragmentControlProvider childProvider, int index) { if (childProvider is FragmentProviderWrapper) { InsertChildProvider(raiseEvent, childProvider, index, false); } else { base.InsertChildProvider(raiseEvent, childProvider, index); } }
private void OnItemRemoved(object sender, ToolStripItemEventArgs e) { FragmentControlProvider itemProvider = GetItemProvider(e.Item); if (itemProvider != null) { itemProviders.Remove(e.Item); itemProvider.Terminate(); RemoveChildProvider(itemProvider); } }
public override void InitializeChildControlStructure() { dropDrownItem.DropDown.ItemAdded += OnItemAdded; dropDrownItem.DropDown.ItemRemoved += OnItemRemoved; foreach (ToolStripItem item in dropDrownItem.DropDownItems) { FragmentControlProvider itemProvider = GetItemProvider(item); if (itemProvider != null) { AddChildProvider(itemProvider); } } }
public override IRawElementProviderFragment GetFocus() { foreach (Control control in form.Controls) { if (control.Focused) { // TODO: Necessary to delve into child control // for focused element? FragmentControlProvider childFragmentProvider = Navigation.TryGetChild(control); if (childFragmentProvider != null) { return(childFragmentProvider); } } } return(null); }
public override void InitializeChildControlStructure() { //base.InitializeChildControlStructure (); strip.ItemAdded += OnItemAdded; strip.ItemRemoved += OnItemRemoved; //clone to avoid IOE:"List has changed" foreach (ToolStripItem item in new ArrayList(strip.Items)) { FragmentControlProvider itemProvider = GetItemProvider(item); if (itemProvider != null) { AddChildProvider(itemProvider); } } }
private void RaiseNavigationEvent(StructureChangeType type, ref FragmentControlProvider provider, SWF.ScrollBar scrollbar) { if (type == StructureChangeType.ChildAdded) { provider = subject.GetScrollbarProvider(scrollbar); provider.Initialize(); subject.AddChildProvider(provider); } else { subject.RemoveChildProvider(provider); provider.Terminate(); provider = null; } }
private static void OnUIAToolTipUnhookUp (object sender, ControlEventArgs args) { ToolTip tooltip = (ToolTip) sender; List<Control> list = null; if (tooltips.TryGetValue (tooltip, out list) == true) { list.Remove (args.Control); if (list.Count == 0) { tooltips.Remove (tooltip); tooltip.Popup -= new PopupEventHandler (OnUIAPopup); } //Let's disassociate ToolTip if Provider for Control already exists FragmentControlProvider provider = (FragmentControlProvider) ProviderFactory.FindProvider (args.Control); if (provider != null) provider.ToolTip = tooltip; } }
private static void OnUIAToolTipHookUp (object sender, ControlEventArgs args) { ToolTip tooltip = (ToolTip) sender; List<Control> list = null; if (tooltips.TryGetValue (tooltip, out list) == false) { list = new List<Control> (); tooltips [tooltip] = list; tooltip.Popup += new PopupEventHandler (OnUIAPopup); } if (list.Contains (args.Control) == false) list.Add (args.Control); //Let's associate ToolTip if Provider for Control already exists FragmentControlProvider provider = (FragmentControlProvider) ProviderFactory.FindProvider (args.Control); if (provider != null) provider.ToolTip = tooltip; }
private void AddSegmentItems() { for (int i = 0; i < control.part_data.Length; i++) { DateTimePicker.PartData part_data = control.part_data [i]; FragmentControlProvider prov = null; switch (part_data.date_time_part) { case DateTimePicker.DateTimePart.Month: case DateTimePicker.DateTimePart.DayName: case DateTimePicker.DateTimePart.AMPMSpecifier: prov = new DateTimePickerListPartProvider( this, part_data, i ); break; case DateTimePicker.DateTimePart.Day: case DateTimePicker.DateTimePart.Hour: case DateTimePicker.DateTimePart.Year: case DateTimePicker.DateTimePart.Seconds: case DateTimePicker.DateTimePart.Minutes: case DateTimePicker.DateTimePart.AMPMHour: prov = new DateTimePickerSpinnerPartProvider( this, part_data, i ); break; default: // DateTimePicker.DateTimePart.Literal prov = new DateTimePickerPartProvider( this, part_data, i ); break; } prov.Initialize(); AddChildProvider(prov); children.Add(prov); } }
private static void OnUIAErrorProviderUnhookUp(object sender, SWF.ControlEventArgs args) { SWF.ErrorProvider errorProvider = (SWF.ErrorProvider)sender; List <Control> list = null; if (errorProviders.TryGetValue(errorProvider, out list) == true) { list.Remove(args.Control); if (list.Count == 0) { errorProviders.Remove(errorProvider); } //Let's disassociate ErrorProvider if Provider for Control already exists FragmentControlProvider provider = (FragmentControlProvider)ProviderFactory.FindProvider(args.Control); if (provider != null) { provider.ErrorProvider = null; } } }
internal static Rect GetToolBarButtonImageBounds(FragmentControlProvider provider, SWF.ToolBarButton buttonBase) { //Implementation highly based in ThemeWin32Classic.ButtonBase_DrawImage method Image image; int imageX; int imageY; int imageWidth; int imageHeight; Rect buttonRect = (Rect)provider.GetPropertyValue(AutomationElementIdentifiers.BoundingRectangleProperty.Id); int width = (int)buttonRect.Width; image = buttonBase.Image; if (image == null) { return(Rect.Empty); } imageWidth = image.Width; imageHeight = image.Height; GetXYFromWidthInTopCenterAlignment(width, imageWidth, out imageX, out imageY); imageX += (int)buttonRect.X; imageY += (int)buttonRect.Y; Rect imageRect = new Rect(imageX, imageY, imageWidth, imageHeight); buttonRect.Intersect(imageRect); return(buttonRect); }
private static void OnUIAErrorProviderHookUp(object sender, SWF.ControlEventArgs args) { SWF.ErrorProvider errorProvider = (SWF.ErrorProvider)sender; List <Control> list = null; if (errorProviders.TryGetValue(errorProvider, out list) == false) { list = new List <Control> (); errorProviders [errorProvider] = list; } if (list.Contains(args.Control) == false) { list.Add(args.Control); } //Let's associate ErrorProvider if Provider for Control already exists FragmentControlProvider provider = (FragmentControlProvider)ProviderFactory.FindProvider(args.Control); if (provider != null) { provider.ErrorProvider = errorProvider; } }
public override void RemoveChildProvider(bool raiseEvent, FragmentControlProvider removedProvider) { base.RemoveChildProvider(raiseEvent, removedProvider); if (hasRadioButtonChild) { bool radioButtonFound = false; foreach (FragmentControlProvider childProvider in componentProviders.Values) { if (childProvider != removedProvider && (int)childProvider.GetPropertyValue(AutomationElementIdentifiers.ControlTypeProperty.Id) == ControlType.RadioButton.Id) { radioButtonFound = true; break; } } if (!radioButtonFound) { SetBehavior(SelectionPatternIdentifiers.Pattern, null); hasRadioButtonChild = false; } } }
internal static Rect GetButtonBaseImageBounds(FragmentControlProvider provider, SWF.ButtonBase buttonBase) { //Implementation highly based in ThemeWin32Classic.ButtonBase_DrawImage method Image image; int imageX; int imageY; int imageWidth; int imageHeight; int width = buttonBase.Width; int height = buttonBase.Height; if (buttonBase.ImageIndex != -1) { image = buttonBase.ImageList.Images [buttonBase.ImageIndex]; } else { image = buttonBase.Image; } if (image == null) { return(Rect.Empty); } imageWidth = image.Width; imageHeight = image.Height; switch (buttonBase.ImageAlign) { case ContentAlignment.TopLeft: { imageX = 5; imageY = 5; break; } case ContentAlignment.TopCenter: { GetXYFromWidthInTopCenterAlignment(width, imageWidth, out imageX, out imageY); break; } case ContentAlignment.TopRight: { imageX = width - imageWidth - 5; imageY = 5; break; } case ContentAlignment.MiddleLeft: { imageX = 5; imageY = (height - imageHeight) / 2; break; } case ContentAlignment.MiddleCenter: { imageX = (width - imageWidth) / 2; imageY = (height - imageHeight) / 2; break; } case ContentAlignment.MiddleRight: { imageX = width - imageWidth - 4; imageY = (height - imageHeight) / 2; break; } case ContentAlignment.BottomLeft: { imageX = 5; imageY = height - imageHeight - 4; break; } case ContentAlignment.BottomCenter: { imageX = (width - imageWidth) / 2; imageY = height - imageHeight - 4; break; } case ContentAlignment.BottomRight: { imageX = width - imageWidth - 4; imageY = height - imageHeight - 4; break; } default: { imageX = 5; imageY = 5; break; } } Rect buttonRect = (Rect)provider.GetPropertyValue(AutomationElementIdentifiers.BoundingRectangleProperty.Id); imageX += (int)buttonRect.X; imageY += (int)buttonRect.Y; Rect imageRect = new Rect(imageX, imageY, imageWidth, imageHeight); buttonRect.Intersect(imageRect); return(buttonRect); }
public UserCustomComponent(IRawElementProviderFragment provider, FragmentControlProvider parentProvider) { Provider = ProviderFactory.GetWrapper(this, provider); ParentProvider = parentProvider; }
public static IRawElementProviderFragment GetProvider(Component component, bool initialize, bool forceInitializeChildren) { if (component == null) { //FIXME: we should throw new ArgumentNullException ("component"); return(null); } // First check if we've seen this component before IRawElementProviderFragment provider = FindProvider(component); if (provider != null) { return(provider); } // Send a WndProc message to see if the control // implements it's own provider. if (component is SWF.Control // Sending WndProc to a form is broken for some reason && !(component is SWF.Form)) { SWF.Control control = component as SWF.Control; IRawElementProviderSimple simpleProvider; IntPtr result; result = SWF.NativeWindow.WndProc(control.Handle, SWF.Msg.WM_GETOBJECT, IntPtr.Zero, new IntPtr(AutomationInteropProvider.RootObjectId)); if (result != IntPtr.Zero) { simpleProvider = AutomationInteropProvider .RetrieveAndDeleteProvider(result); provider = simpleProvider as IRawElementProviderFragment; if (provider == null) { provider = new FragmentControlProviderWrapper(component, simpleProvider); } } } ComponentProviderMapperHandler handler = null; Type providerType = null; if (provider == null) { Type typeIter = component.GetType(); // Chain up the type hierarchy until we find // either a type or handler for mapping, or we // hit Control or Component. do { // First see if there's a mapping handler if (componentProviderMappers.TryGetValue(typeIter, out handler)) { break; } // Next, see if we have a type mapping if (providerComponentMap.TryGetValue(typeIter, out providerType)) { break; } typeIter = typeIter.BaseType; } while (typeIter != null && typeIter != typeof(System.ComponentModel.Component) && typeIter != typeof(SWF.Control)); } if (handler != null) { provider = handler(component); } // Create the provider if we found a mapping type if (provider == null) { // We meet a unknown custom control type, // then we count it as a Pane if (providerType == null) { var dialog = component as SWF.CommonDialog; if (dialog != null) { return(GetProvider(dialog.form, initialize, forceInitializeChildren)); } providerType = typeof(PaneProvider); } try { provider = (FragmentControlProvider) Activator.CreateInstance(providerType, new object [] { component }); } catch (MissingMethodException) { Log.Error( "Provider {0} does not have a valid single parameter constructor to handle {1}.", providerType, component.GetType() ); return(null); } } if (provider != null) { // TODO: Abstract this out? if (component is SWF.Form) { formProviders.Add((IRawElementProviderFragmentRoot)provider); } // TODO: Make tracking in dictionary optional componentProviders [component] = provider; if (provider is FragmentControlProvider) { FragmentControlProvider frag = (FragmentControlProvider)provider; if (initialize) { frag.Initialize(); } if (forceInitializeChildren) { frag.InitializeChildControlStructure(); } } } else { //FIXME: let's not throw while we are developing, a big WARNING will suffice //throw new NotImplementedException ("Provider not implemented for control " + component.GetType().Name); Log.Warn("Provider not implemented for component " + component.GetType()); return(null); } return(provider); }