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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 4
0
 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);
                }
            }
        }
Exemplo n.º 7
0
 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);
 }
Exemplo n.º 8
0
        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);
                }
            }
        }
Exemplo n.º 9
0
 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;
     }
 }
Exemplo n.º 10
0
		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;
			}
		}
Exemplo n.º 11
0
		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;
		}
Exemplo n.º 12
0
        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);
            }
        }
Exemplo n.º 13
0
        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;
                }
            }
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        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;
            }
        }
Exemplo n.º 16
0
        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;
                }
            }
        }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
 public UserCustomComponent(IRawElementProviderFragment provider, FragmentControlProvider parentProvider)
 {
     Provider       = ProviderFactory.GetWrapper(this, provider);
     ParentProvider = parentProvider;
 }
Exemplo n.º 19
0
        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);
        }