Quaneu
2015-06-08T09:00:41Z
Hello,

i want to test my application with Ranorex (capture and replay tool). Has somebody tested his tool with Ranorex? If yes, who do you select or analyse a for example a row or cell?
In code of iGrid I do not see that CreateAccessibilityInstance() was overwritten, this helps tools to analyse the control...

With best regards
GeCi

For example (!!!not tested, not refactored!!!):

sealed class FilterGridCellAccessibleObject : AccessibleObject
{
	private readonly iGCell _cell;
	private readonly FilterGridAccessibleObject _grid;

	public FilterGridCellAccessibleObject(iGCell cell, FilterGridAccessibleObject grid)
	{
		_cell = cell;
		_grid = grid;
	}

	public override AccessibleRole Role
	{
		get { return AccessibleRole.Cell; }
	}

	public override Rectangle Bounds
	{
		get
		{
			Point location = new Point(_grid.Bounds.X + _cell.Bounds.X, _grid.Bounds.Y + _cell.Bounds.Y);
			return new Rectangle(location, new Size(_cell.Bounds.Width, _cell.Bounds.Height));
		}
	}

	public override string Value
	{
		get { return _cell.Value.ToString(); }
		set { throw new NotSupportedException("Set Value is not supported in FilterGridCellAccessibleObject."); }
	}
}

sealed class FilterGridRowAccessibleObject : AccessibleObject
{
	private readonly iGRow _row;
	private readonly FilterGridAccessibleObject _grid;
	private readonly Dictionary<iGCell, AccessibleObject> _cells;

	public ARFilterGridRowAccessibleObject(iGRow row, FilterGridAccessibleObject grid)
	{
		_row = row;
		_grid = grid;
		_cells = new Dictionary<iGCell, AccessibleObject>();
	}

	public override AccessibleRole Role
	{
		get { return AccessibleRole.Row; }
	}

	public override int GetChildCount()
	{
		return _row.Cells.Count;
	}

	public override Rectangle Bounds
	{
		get
		{
			Point location = new Point(_grid.Bounds.X, _grid.Bounds.Y + _row.Y);
			int width = _grid._grid.VScrollBar.Visible
				? _grid._grid.ClientRectangle.Width - _grid._grid.VScrollBar.Width
				: _grid._grid.ClientRectangle.Width;
			return new Rectangle(location, new Size(width, _row.Height));
		}
	}

	public override AccessibleObject GetChild(int index)
	{
		if (index >= 0 && index < _row.Cells.Count)
		{
			iGCell cell = _row.Cells[index];
			AccessibleObject accessibleObject;
			if (!_cells.TryGetValue(cell, out accessibleObject))
			{
				accessibleObject = new FilterGridCellAccessibleObject(cell, _grid);
				_cells.Add(cell, accessibleObject);
			}
			return accessibleObject;
		}
		return null;
	}
}

sealed class FilterGridAccessibleObject : Control.ControlAccessibleObject
{
	internal readonly iGrid _grid;
	private readonly Dictionary<iGRow, AccessibleObject> _rows;

	public FilterGridAccessibleObject(iGrid control)
		: base(control)
	{
		_grid = control;
		_rows = new Dictionary<iGRow, AccessibleObject>();
	}

	public override AccessibleRole Role
	{
		get { return AccessibleRole.Table; }
	}

	public override int GetChildCount()
	{
		return _grid.Rows.Count;
	}

	public override Rectangle Bounds
	{
		get { return new Rectangle(_grid.Parent.PointToScreen(_grid.Bounds.Location), _grid.Bounds.Size); }
	}

	public override AccessibleObject GetChild(int index)
	{
		if (index >= 0 && index < _grid.Rows.Count)
		{
			iGRow row = _grid.Rows[index];
			AccessibleObject accessibleObject;
			if (!_rows.TryGetValue(row, out accessibleObject))
			{
				accessibleObject = new FilterGridRowAccessibleObject(row, this);
				_rows.Add(row, accessibleObject);
			}
			return accessibleObject;
		}
		return null;
	}
}