public static void AddControl(SWF.Control control, SWF.Control parent, SWF.ErrorProvider provider) { if (dictionary == null) { dictionary = new ErrorProviderControlDictionary(); parentDictionary = new ParentDictionary(); } dictionary [control] = provider; ErrorProviderControlList parentControls; if (parentDictionary.TryGetValue(parent, out parentControls) == false) { parentControls = new ErrorProviderControlList(); parentDictionary [parent] = parentControls; } if (parentControls.Contains(control) == false) { parentControls.Add(control); ErrorProvider errorProvider = (ErrorProvider)ProviderFactory.FindProvider(provider); if (errorProvider == null) { errorProvider = (ErrorProvider)ProviderFactory.GetProvider(provider); } errorProvider.AddControl(control); } }
static void OnFormAdded(object sender, EventArgs args) { var f = (Form)sender; if (formProviders.ContainsKey(f)) { return; } var provider = (FormProvider)ProviderFactory.GetProvider(f); // NOTE: Form Provider Releasing is done by FormProvider // Pass false in last argument so that InitializeChildControlStructure // isn't called when the provider is created. We'll do // that manually after alerting the bridge to the presence // of the new form. formProviders [f] = provider; if (f.Owner == null) //For example is not MessageBox, f.ShowDialog or XXXXXDialog // TODO: Fill in rest of eventargs { Helper.RaiseStructureChangedEvent(StructureChangeType.ChildAdded, provider); provider.InitializeChildControlStructure(); } else { var ownerProvider = (FormProvider)ProviderFactory.FindProvider(f.Owner); ownerProvider.AddChildProvider(provider); } }
void HandleContextMenuCollapse(object sender, EventArgs e) { FragmentControlProvider contextMenuProvider = (FragmentControlProvider) ProviderFactory.FindProvider(contextMenu); if (contextMenuProvider == null) { return; } contextMenuProvider.Terminate(); RemoveChildProvider(contextMenuProvider); ProviderFactory.ReleaseProvider(contextMenu); // TODO: Need to handle disposal of some parent without close happening? }
public override void FinalizeChildControlStructure() { toolBar.Buttons.UIACollectionChanged -= new CollectionChangeEventHandler(OnCollectionChanged); for (int index = 0; index < toolBar.Buttons.Count; index++) { ToolBarButtonProvider buttonProvider = (ToolBarButtonProvider)ProviderFactory.FindProvider(toolBar.Buttons [index]); RemoveChildProvider(buttonProvider); } OnNavigationChildrenCleared(); base.FinalizeChildControlStructure(); }
public static void HandleContextMenuStripClosed(object sender, EventArgs e) { var contextMenuStrip = (ContextMenuStrip)sender; var contextMenuStripProvider = (FragmentControlProvider)ProviderFactory.FindProvider(contextMenuStrip); if (contextMenuStripProvider == null) { return; } GetParentProvider(contextMenuStrip).RemoveChildProvider(contextMenuStripProvider); contextMenuStripProvider.Terminate(); ProviderFactory.ReleaseProvider(contextMenuStrip); // TODO: Need to handle disposal of some parent without close happening? }
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; }
public void Close() { if (AutomationInteropProvider.ClientsAreListening && !AlreadyClosed) { alreadyClosed = true; if (owner == null) { Helper.RaiseStructureChangedEvent(StructureChangeType.ChildRemoved, this); } else { var ownerProvider = ProviderFactory.FindProvider(owner) as FormProvider; if (ownerProvider != null) { ownerProvider.RemoveChildProvider(this); } } } }
protected void HandleChildComponentAdded(Component childComponent) { if (Navigation.ChildrenContains(childComponent)) { return; } /* * At some not totally explored condition a Provider object has not been removed from a hidden/deleted * parent one properly. This not-removed Provider stais with a `Navigation` object storing uncleared * refrrences to ancestor, siblings and descendants. As a consequence this not-removed Provider leads to * deeper refrrences breaking while it is an argument of the `HandleChildComponentAdded` method call. * To deal with this case let's check the `Parent` refence and use `HandleChildComponentRemoved` * in case of any confusion. */ var provider = (FragmentControlProvider)ProviderFactory.FindProvider(childComponent); if (provider != null && provider.Navigation.Parent != null) { provider.Navigation.Parent.HandleChildComponentRemoved(childComponent); } if (childComponent is SWF.Control childCcontrol) { if (Mono.UIAutomation.Winforms.ErrorProvider.InstancesTracker.IsControlFromErrorProvider(childCcontrol)) { return; } childCcontrol.VisibleChanged += OnChildControlVisibleChanged; } if (IsComponentVisible(childComponent)) { var childProvider = (FragmentControlProvider)ProviderFactory.GetProvider(childComponent); if (childProvider == null) { return; } InsertChildProvider(childProvider, FAKE_INDEX_TREATED_AS_END); } }
internal static bool IsOffScreen(Rect bounds, SWF.Control referenceControl, bool scrollable) { Rect screen; if (scrollable) { screen = Helper.GetControlScreenBounds(referenceControl.Bounds, referenceControl); } else { screen = Helper.RectangleToRect(SWF.Screen.GetWorkingArea(referenceControl)); } IRawElementProviderFragment formProvider = null; if ((formProvider = ProviderFactory.FindProvider(referenceControl.FindForm())) != null) { return(!formProvider.BoundingRectangle.IntersectsWith(bounds) || !bounds.IntersectsWith(screen)); } return(!bounds.IntersectsWith(screen)); }
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; } } }
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; } }
private static bool IsFormProviderAlreadyCreated(Form form) { var provider = (FormProvider)ProviderFactory.FindProvider(form); return(provider != null && provider.Navigate(NavigateDirection.Parent) != null); }