Functional Specification
This document is intended to be a functional description of how System.Windows.Forms widgets are supposed to interact from a user perspective when viewed by Accerciser, or other AT-SPI Assistive Technologies.
Functionality
- Button
- Acts As: Push Button
- Similar To: GtkButton
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkImage, AtkText
- Default State: Enabled, Focusable, Sensitive, Showing, Visible
- Actions
- Click: State => +Focused
- Button Press: State => +Focused, +Armed
- Button Release: State => -Armed
- Click: State => +Focused
- CheckBox
- Acts As: Check Box
- Similar To: GtkCheckButton
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkImage, AtkText
- Default State: Enabled, Focusable, Sensitive, Showing, Visible
- Actions
- Click: State => +Focused, +Checked
- Button Press: State => +Focused
- Button Release: State => +Checked
- Click: State => +Focused, +Checked
- CheckedListBox
- Acts As: List
- Similar To: GtkList
- Provides: AtkAccessible, AtkComponent, AtkSelection
- Default State: Enabled, Focusable, Manages Descendants, Sensitive, Showing, Visible
- Children
- CheckBox
- Acts As: Check Box
- Provides: AtkAccessible, AtkAction, AtkComponent
- Default State: Enabled, Focusable, Selectable, Sensitive, Showing, Transient, Visible
- Actions: Toggle, Activate
- CheckBox
- (Inherits: GtkList
- ColorDialog
- Acts As: Color Chooser
- Similar To: GtkColorSelDialog
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Sensitive, Showing, Vertical, Visible
- Actions: None
- ColumnHeader
- Acts As: Table Column Header
- Similar To: GtkTreeViewColumn
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkImage, AtkText
- Default State: Enabled, Focusable, Selectable, Sensitive, Showing, Visible
- Actions
- Click: State => +Focused, +Armed, visible-data-changed, -Armed
- ComboBox
- Simple
- Acts As: Tree Table
- Similar To: GtkTreeView
- Provides:
- Actions
- DropDown
- Acts As: Combo Box
- Similar To: GtkComboBoxEntry
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkSelection
- Default State: Enabled, Sensitive, Showing, Visible
- Actions
- Button Press (on arrow): State => +Focused, bounds-changed
- Select Item: selection-changed
- DropDownList
- Acts As: Combo Box
- Similar To: GtkComboBox
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkSelection
- Default State: Enabled, Sensitive, Showing, Visible
- Actions
- Button Press: State => +Focused
- Button Release: selection-changed, State => +Focused
- Key Down: selection-changed
- Simple
- ContainerControl
- Acts As:
- Similar To: GtkLayout
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- ContextMenu (deprecated; new: ContextMenuStrip)
- Acts As: Menu Bar
- Similar To: GtkMenuBar?
- Provides: (Inherits: MenuStrip)
- Default State: (Inherits: MenuStrip)
- Actions: (Inherits: MenuStrip)
- ContextMenuStrip
- (Inherits: ContextMenu)
- DataGrid (deprecated; new: DataGridView)
- (Inherits: DataGridView)
- DataGridBoolColumn
- Acts As: Table Cell
- Similar To: GtkCellRendererToggle
- Provides: AtkAccessible, AtkAction, AtkComponent
- Default State: Enabled, Focusable, Manages Descendants, Sensitive, Showing, Visible
- Default Actions: Toggle, Activate
- Actions
- Toggled: state-changed:checked, state-changed:selected
- DataGridTextBoxColumn
- Acts As: Table Cell
- Similar To: GtkCellRendererText
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkText
- Default State: Active, Enabled, Focusable, Selectable, Selected, Sensitive, Showing, Single Line, Transient, Visible
- Actions
- Edit text: text-changed:delete, property-change:accessible-name, text-changed:insert, property-change:accessible-name
- DataGridView
- Acts As: Tree Table
- Similar To: GtkTreeView
- Default State: Enabled, Focusable, Sensitive, Showing, Visible
- Actions
- (Inherits: ListView)
- DateTimePicker
- Acts As: Calendar
- Similar To: GtkCalendar
- Default State: Enabled, Focusable, Sensitive, Showing, Visible
- Actions: None
- Note: GtkCalendar is not currently accessible.
- DomainUpDown
- Acts As: Spin Button
- Similar To: GtkSpinButton
- Provides: AtkAccessible, AtkComponent, AtkValue, AtkText, AtkEditableText
- Default State: Editable, Enabled, Focusable, Sensitive, Showing, Single Line, Visible
- Actions:
- Click (on arrow): selection-changed
- (Inherits: TextBox)
- ErrorProvider
- Acts As: Panel
- Similar To: N/A
- Provides: AtkAccessible, AtkComponent
- Note: This provider most likely shouldn't be exported, as it does nothing visibly.
- FileDialog
- Acts As: Dialog
- Similar To: GtkFileChooser
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Resizable, Sensitive, Showing, Visible
- Actions: None
- FlowLayoutPanel
- Acts As: Panel
- Similar To: GtkTable
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- FontDialog
- Acts As: Font Chooser
- Similar To: GtkFontSelectionDialog
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Resizable, Sensitive, Showing, Visible
- Actions: None
- Form
- Acts As: Frame
- Similar To: GtkWindow
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Resizable, Sensitive, Showing, Visible
- Actions: None
- GroupBox
- Acts As: Panel
- Similar To: GtkFrame
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- HelpProvider
- NOTE: It's not fully implemented in Mono. See note 1.
- HScrollBar
- Acts As: Scroll Bar
- Similar To: GtkHScrollBar
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkValue
- Default State: Enabled, Sensitive, Showing, Visible, Horizontal
- Actions
- Move scrollbar: property-change:accessible-value
- Label
- Acts As: Label
- Similar To: GtkLabel
- Provides: AtkAccessible, AtkComponent, AtkText
- Default State: Enabled, Multi Line, Sensitive, Showing, Visible
- Actions: None
- LinkLabel
- Acts As: Label
- Similar To: GtkLabel
- Provides: AtkAccessible, AtkComponent, AtkText, AtkHypertext, AtkAction
- Default State: Enabled, Multi Line, Sensitive, Showing, Visible
- ListBox
- Acts As: List
- Similar To: GtkList
- Provides: AtkAccessible, AtkComponent, AtkSelection
- Default State: Enabled, Focusable, Manages Descendants, Sensitive, Showing, Visible
- Children
- Text
- Acts As: List Item
- Provides: AtkAccessible, AtkAction AtkComponent, AtkText
- Actions: Activate
- Text
- ListView
- Acts As: Tree Table
- Similar To: GtkTreeView
- Provides: AtkAccessible, AtkComponent, AtkSelection, AtkTable
- Default State: Enabled, Focusable, Manages Descendants, Sensitive, Showing, Visible
- Children: column_0 (role: table column header), cell_0_in_column_0 (role: table cell), cell_1_in_column_0, ..., column_1, cell_0_in_column_1, ...
- Actions:
- Click on column header to cause row reordering: object:row-reordered, object:visible-data-changed
- MainMenu (deprecated; new: MenuStrip)
- Acts As: Menu Bar
- Similar To: GtkMenuBar
- Provides: AtkAccessible, AtkComponent, AtkSelection
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- MaskedTextBox
- (Inherits: TextBox)
- MenuItem (deprecated; new: ToolStripMenuItem)
- Acts As: Menu Item
- Similar To: GtkMenuItem
- Provides: AtkAccessible, AtkComponent, AtkAction, AtkText, AtkSelection
- Default State: Enabled, Selectable, Sensitive, Showing, Visible
- Actions:
- Click/Space(Activate) if child: -Selected
- Click/Space(Activate) if parent: +Selected
- KeyUp/Down to receive focus if child, or KeyLeft/Right to hover if parent: +Selected, +Focus
- KeyUp/Down to leave focus: -Focus, -Selected
- KeyX to select a child: selection-changed
- MenuStrip
- Acts As: Menu Bar
- Similar To: GtkMenuBar
- Provides: (Inherits: MainMenu)
- Actions: (Inherits: MainMenu)
- MonthCalendar
- Acts As: Calendar
- Similar To: GtkCalendar
- Default State: Enabled, Focusable, Sensitive, Showing, Visible
- Actions: None
- Note: GtkCalendar is not currently accessible.
- NotifyIcon
- Note: Notification icons are not currently accessible, although work is on-going.
- NumericUpDown
- Acts As: Spin Button
- Similar To: GtkSpinButton
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkText, AtkValue
- Default State: Editable, Enabled, Focusable, Sensitive, Showing, Single Line, Visible
- Actions
- Press Up/Down Button: text-changed:delete, property-change:accessible-value, text-changed:insert
- Page Up/Down: Same event sequence
- Panel
- Acts As: Panel
- Simila To: GtkContainer
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- OpenFileDialog
- (Inherits: FileDialog)
- PageSetupDialog
- Acts As: Dialog
- Similar To: GtkPageSetup
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Modal, Sensitive, Showing, Visible
- Actions: None
- PictureBox
- Acts As: Icon
- Similar To: GtkImage
- Provides: AtkAccessible, AtkComponent, AtkImage
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- PrintPreviewControl
- TODO: Research required, as Gtk+ doesn't currently provide accessible implementations of the Print Preview widget.
- PrintPreviewDialog
- TODO: Research required, as Gtk+ doesn't currently provide accessible implementations of the Print Preview widget.
- ProgressBar
- Acts As: Progress Bar
- Similar To: GtkProgressBar
- Provides: AtkAccessible, AtkComponent, AtkValue, AtkText
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- PropertyGrid
- (Inherits: TreeView)
- RadioButton
- Acts As: Radio Button
- Similar To: GtkRadioButton
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkText, AtkImage
- Default State: Armed, Checked, Enabled, Focusable, Sensitive, Showing, Visible
- Actions
- Option clicked: State => +Focused, +Checked (other RadioButton if previously checked: -Checked)
- RichTextBox
- Acts As: Text
- Similar To: GtkTextView
- Provides: AtkAccessible, AtkComponent, AtkStreamableContent, AtkText, AtkEditableText
- Default State: Editable, Enabled, Focusable, Multi-Line, Sensitive, Showing, Visible
- Actions
- (Inherits: TextBox)
- SaveFileDialog
- (Inherits: FileDialog)
- ScrollableControl
- (Inherits: ScrollBar)
- ScrollBar
- Acts As: Scroll Bar
- Similar To: GtkScrollBar
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkValue
- Default State: Enabled, Focusable, Sensitive, Showing, Visible
- Actions
- Move scrollbar: property-change:accessible-value
- Spinner
- Acts As: Spin Button
- Similar To: GtkSpinButton
- Provides: AtkAccessible, AtkComponent, AtkValue, AtkAction, AtkText, AtkEditableText
- Default State: Editable, Enabled, Focusable, Sensitive, Showing, Single Line, Visible
- Actions:
- Click (on arrow): property-change:accessible-value
- (Inherits: TextBox)
- SplitContainer
- Acts As: Split Pane
- Similar To: GtkHPaned (or GtkVPaned, depending on Orientation property)
- Provides: AtkAccessible, AtkComponent, AtkValue
- Default State: Enabled, Focusable, Sensitive, Showing, Vertical?, Visible
- Actions
- Move pane: property-changed:accessible-value
- Splitter
- Acts As: Split Pane
- Similar To: GtkHPaned (or GtkVPaned, depending on DockStyle property)
- Provides: AtkAccessible, AtkComponent, AtkValue
- Default State: Enabled, Focusable, Sensitive, Showing, Vertical?, Visible
- Actions
- Move pane: property-changed:accessible-value
- StatusBar
- Acts As: Statusbar
- Similar To: GtkStatusbar
- Provides: AtkAccessible, AtkComponent, AtkText
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- StatusBarPanel
- Acts As: Panel
- Similar To: GtkBin (?)
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- StatusStrip
- Acts As: Statusbar
- Similar To: GtkStatusbar
- Provides: AtkAccessible, AtkComponent, AtkText
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- TabControl
- Acts As: Page Tab List
- Similar To: GtkNotebook
- Provides: AtkAccessible, AtkComponent, AtkSelection
- Default State: Enabled, Focusable, Sensitive, Showing, Visible
- Actions
- Change tab: selection-changed, visibile-data-changed
- TableLayoutPanel
- Acts As: Panel
- Similar To: GtkTable
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- TabPage
- Acts As: Page Tab
- Similar To: GtkNotebookPage
- Provides: AtkAccessible, AtkComponent, AtkText
- Default State: Enabled, Multi Line, Selectable, Sensitive, Showing, Visible, Selected (if currently selected tab)
- Actions: None
- TextBox
- Acts As: Text
- Similar To: GtkTextView
- Provides: AtkAccessible, AtkComponent, AtkStreamableContent, AtkText, AtkEditableText
- Default State: Editable, Enabled, Focusable, Multi-Line, Sensitive, Showing, Visible
- Actions
- Click: State => +Focused, text-caret-moved
- Move cursor: text-caret-moved
- Insert a character: text-changed:insert, text-caret-moved
- Select a character: text-caret-moved, text-selection-changed
- Delete a character: text-changed:delete, text-caret-moved
- Drag and drop a character: text-changed:insert, text-changed:delete, text-caret-moved
- ThreadExceptionDialog
- Acts As: Dialog
- Similar To: None
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Modal, Resizable, Sensitive, Showing, Visible
- Actions: None
- ToolBar
- Acts As: Tool Bar
- Similar To: GtkToolbar
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- ToolBarButton
- Acts As: Panel with Push Button child
- Similar To: GtkToolbarButton
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkImage, AtkText
- Default State: Enabled, Focusable, Sensitive, Showing, Visible
- Actions
- Button Press: State => +Focused, +Armed
- Button Release: State => -Armed
- ToolStrip
- Acts As: Tool Bar
- Similar To: GtkToolbar
- Provides: AtkAccessible, AtkComponent
- Default State: Enabled, Sensitive, Showing, Visible
- Actions: None
- ToolStripMenuItem
- Acts As: Menu
- Similar To: GtkImageMenuItem
- (Inherits: MenuItem)
- ToolStripComboBox
- Acts As: Panel with Combo Box child
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkSelection
- Default State: (Inherits: ComboBox)
- Actions
- (Inherits: ComboBox)
- ToolStripDropDownButton
- (Inherits: Button)
- ToolStripLabel
- Acts As: Panel with Label child
- Provides: AtkAccessible, AtkComponent, AtkText
- Default State: Enabled, Multi Line, Sensitive, Showing, Visible
- Actions: None
- ToolStripProgressBar
- Acts As: Panel with ProgressBar child
- Provides: AtkAccessible, AtkComponent, AtkValue
- Default State: Enabled, Sensitive, Showing, Visible
- Action
- (Inherits: ProgressBar)
- ToolStripSeparator
- Acts As: Separator
- Similar To: SeparatorMenuItem
- Provides: AtkAccessible, AtkComponent, AtkText, AtkAction
- Default State: Enable, Selectable, Sensitive
- Actions: None
- ToolStripSplitButton
- A panel with two buttons: a regular Button with a ToolStripDropDownButton beside it
- ToolStripTextBox
- Acts As: Panel with TextBox child
- (Inherits: TextBox)
- ToolTip
- Acts As: Tool Tip
- Similar To: GtkTooltip
- (Inherits: Window)
- TrackBar
- Acts As: Slider
- Similar To: GtkHScale (or GtkVScale, depending on Orientation property)
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkText, AtkValue
- Actions
- Move slider: text-changed:delete, text-changed:insert, property-change:accessible-value
- TreeView
- (Inherits: ListView)
- Note: it should have a difference wrt ListView: cells that are below a parent cell should be children in the hierarchy, however, even the GtkTreeview in accerciser doesn't show this layout.
- Actions (apart from ListView's ones):
- Click on [+] to open a subtree: object:bounds-changed, object:visible-data-changed, object:active-descendant-changed, object:row-inserted
- VScrollBar
- Acts As: Scroll Bar
- Similar To: GtkVScrollBar
- Provides: AtkAccessible, AtkAction, AtkComponent, AtkValue
- Default State: Enabled, Sensitive, Showing, Visible, Vertical
- Actions
- Move scrollbar: property-change:accessible-value
- TODO: WebBrowser (comments on the discussion page)
Ideas
- Another thing that would be useful for QA is to know what the "default" states are for each control and each style of control if applicable. Maybe there are a few states that are common to all default controls? e.g., Visible, Enabled? Not sure on this one. -bgmerrell
Notes
- HelpProvider. Current implementation in mono supports HelpProvider, however the "?" button isn't shown in the titlebar, there's an explanation in Bug 412849 (https://bugzilla.novell.com/show_bug.cgi?id=412849) and the working example (http://forge.novell.com/mailman/private/mono-a11y/2008-September/000100.html) to fake "?" button if you want to test the implementation in mono.


