From 5b98ba7981efeafba36a8ef105b479f53f7ae3cf Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Mon, 9 Jan 2012 13:25:26 +0000 Subject: [PATCH] Upgrades the Accessibility structure to support roles, name, description and more easily extensible notifications git-svn-id: trunk@34678 - --- lcl/controls.pp | 9 ++++++ lcl/include/intfbaselcl.inc | 4 +-- lcl/include/lclintf.inc | 8 ++--- lcl/include/lclintfh.inc | 4 +-- lcl/include/wincontrol.inc | 18 +++++++++++ .../customdrawnlclintf_android.inc | 4 +-- .../customdrawn/customdrawnlclintf_cocoa.inc | 4 +-- .../customdrawn/customdrawnlclintf_win.inc | 4 +-- .../customdrawn/customdrawnlclintf_x11.inc | 4 +-- .../customdrawn/customdrawnlclintfh.inc | 4 +-- lcl/lcltype.pp | 31 +++++++++++++++++++ 11 files changed, 76 insertions(+), 18 deletions(-) diff --git a/lcl/controls.pp b/lcl/controls.pp index 7396035c6c..aaa0e30ebf 100644 --- a/lcl/controls.pp +++ b/lcl/controls.pp @@ -1700,6 +1700,9 @@ type TWinControl = class(TControl) private + FAccessibleDescription: TCaption; + FAccessibleName: TCaption; + FAccessibleRole: TLazAccessibilityRole; FAlignOrder: TFPList; // list of TControl. Last moved (SetBounds) comes first. Used by AlignControls. FBorderWidth: TBorderWidth; FBoundsLockCount: integer; @@ -1749,6 +1752,9 @@ type function GetIsResizing: boolean; function GetTabOrder: TTabOrder; function GetVisibleDockClientCount: Integer; + procedure SetAccessibleDescription(AValue: TCaption); + procedure SetAccessibleName(AValue: TCaption); + procedure SetAccessibleRole(AValue: TLazAccessibilityRole); procedure SetChildSizing(const AValue: TControlChildSizing); procedure SetDockSite(const NewDockSite: Boolean); procedure SetHandle(NewHandle: HWND); @@ -1932,6 +1938,9 @@ type property OnGetDockCaption: TGetDockCaptionEvent read FOnGetDockCaption write FOnGetDockCaption; public // properties which are supported by all descendents + property AccessibleDescription: TCaption read FAccessibleDescription write SetAccessibleDescription; + property AccessibleName: TCaption read FAccessibleName write SetAccessibleName; + property AccessibleRole: TLazAccessibilityRole read FAccessibleRole write SetAccessibleRole; property BorderWidth: TBorderWidth read FBorderWidth write SetBorderWidth default 0; property BoundsLockCount: integer read FBoundsLockCount; property Brush: TBrush read GetBrush; diff --git a/lcl/include/intfbaselcl.inc b/lcl/include/intfbaselcl.inc index 982bc33e78..c6af239c95 100644 --- a/lcl/include/intfbaselcl.inc +++ b/lcl/include/intfbaselcl.inc @@ -524,12 +524,12 @@ begin // But Forms is not in the uses clause end; -procedure TWidgetSet.LazAccessibility_SendTextChangedNotification(const ANewText: string); +procedure TWidgetSet.LazAccessibility_SendNotification(ANotification: TLazAccessibilityNotification; const ATextParam: string; const AIntParam1, AIntParam2: Integer); begin end; -procedure TWidgetSet.LazAccessibility_SendSelectionChangedNotification(const ASelStart, ASelEnd: Integer); +procedure TWidgetSet.LazAccessibility_SetFields(AHandle: HWND; const ADescription, AName: string; ARole: TLazAccessibilityRole); begin end; diff --git a/lcl/include/lclintf.inc b/lcl/include/lclintf.inc index 3fe7d0e760..3d92064e5f 100644 --- a/lcl/include/lclintf.inc +++ b/lcl/include/lclintf.inc @@ -356,14 +356,14 @@ begin Result := WidgetSet.IsMobilePlatform(); end; -procedure LazAccessibility_SendTextChangedNotification(const ANewText: string); +procedure LazAccessibility_SendNotification(ANotification: TLazAccessibilityNotification; const ATextParam: string; const AIntParam1, AIntParam2: Integer); begin - WidgetSet.LazAccessibility_SendTextChangedNotification(ANewText); + WidgetSet.LazAccessibility_SendNotification(ANotification, ATextParam, AIntParam1, AIntParam2); end; -procedure LazAccessibility_SendSelectionChangedNotification(const ASelStart, ASelEnd: Integer); +procedure LazAccessibility_SetFields(AHandle: HWND; const ADescription, AName: string; ARole: TLazAccessibilityRole); begin - WidgetSet.LazAccessibility_SendSelectionChangedNotification(ASelStart, ASelEnd); + WidgetSet.LazAccessibility_SetFields(AHandle, ADescription, AName, ARole); end; procedure LazDeviceAPIs_RequestPositionInfo(AMethod: TLazPositionMethod); diff --git a/lcl/include/lclintfh.inc b/lcl/include/lclintfh.inc index 0b4e39384f..894ea91a6a 100644 --- a/lcl/include/lclintfh.inc +++ b/lcl/include/lclintfh.inc @@ -94,8 +94,8 @@ function InvalidateFrame(aHandle : HWND; ARect : pRect; bErase : Boolean; Border function IsDesignerDC(WindowHandle: HWND; DC: HDC): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} function IsMobilePlatform: Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} -procedure LazAccessibility_SendTextChangedNotification(const ANewText: string); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} -procedure LazAccessibility_SendSelectionChangedNotification(const ASelStart, ASelEnd: Integer); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} +procedure LazAccessibility_SendNotification(ANotification: TLazAccessibilityNotification; const ATextParam: string; const AIntParam1, AIntParam2: Integer); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} +procedure LazAccessibility_SetFields(AHandle: HWND; const ADescription, AName: string; ARole: TLazAccessibilityRole); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} procedure LazDeviceAPIs_RequestPositionInfo(AMethod: TLazPositionMethod); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} procedure LazDeviceAPIs_SendMessage(AMsg: TLazDeviceMessage); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} procedure LazDeviceAPIs_StartReadingAccelerometerData(); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} diff --git a/lcl/include/wincontrol.inc b/lcl/include/wincontrol.inc index 85c680e88c..0397de7e74 100644 --- a/lcl/include/wincontrol.inc +++ b/lcl/include/wincontrol.inc @@ -7754,6 +7754,24 @@ begin if TControl(FDockClients[I]).Visible then inc(Result); end; +procedure TWinControl.SetAccessibleDescription(AValue: TCaption); +begin + if FAccessibleDescription=AValue then Exit; + FAccessibleDescription:=AValue; +end; + +procedure TWinControl.SetAccessibleName(AValue: TCaption); +begin + if FAccessibleName=AValue then Exit; + FAccessibleName:=AValue; +end; + +procedure TWinControl.SetAccessibleRole(AValue: TLazAccessibilityRole); +begin + if FAccessibleRole=AValue then Exit; + FAccessibleRole:=AValue; +end; + {------------------------------------------------------------------------------ procedure TWinControl.SetChildSizing(const AValue: TControlChildSizing); ------------------------------------------------------------------------------} diff --git a/lcl/interfaces/customdrawn/customdrawnlclintf_android.inc b/lcl/interfaces/customdrawn/customdrawnlclintf_android.inc index 8e01c4109d..bf99aea724 100644 --- a/lcl/interfaces/customdrawn/customdrawnlclintf_android.inc +++ b/lcl/interfaces/customdrawn/customdrawnlclintf_android.inc @@ -168,12 +168,12 @@ begin Result := True; end; -procedure TCDWidgetSet.LazAccessibility_SendTextChangedNotification(const ANewText: string); +procedure TCDWidgetSet.LazAccessibility_SendNotification(ANotification: TLazAccessibilityNotification; const ATextParam: string; const AIntParam1, AIntParam2: Integer); begin end; -procedure TCDWidgetSet.LazAccessibility_SendSelectionChangedNotification(const ASelStart, ASelEnd: Integer); +procedure TCDWidgetSet.LazAccessibility_SetFields(AHandle: HWND; const ADescription, AName: string; ARole: TLazAccessibilityRole); begin end; diff --git a/lcl/interfaces/customdrawn/customdrawnlclintf_cocoa.inc b/lcl/interfaces/customdrawn/customdrawnlclintf_cocoa.inc index 6603226c46..72c511f3d0 100644 --- a/lcl/interfaces/customdrawn/customdrawnlclintf_cocoa.inc +++ b/lcl/interfaces/customdrawn/customdrawnlclintf_cocoa.inc @@ -118,12 +118,12 @@ begin Result := Application.ApplicationType in [atPDA, atKeyPadDevice, atTV, atMobileEmulator]; end; -procedure TCDWidgetSet.LazAccessibility_SendTextChangedNotification(const ANewText: string); +procedure TCDWidgetSet.LazAccessibility_SendNotification(ANotification: TLazAccessibilityNotification; const ATextParam: string; const AIntParam1, AIntParam2: Integer); begin end; -procedure TCDWidgetSet.LazAccessibility_SendSelectionChangedNotification(const ASelStart, ASelEnd: Integer); +procedure TCDWidgetSet.LazAccessibility_SetFields(AHandle: HWND; const ADescription, AName: string; ARole: TLazAccessibilityRole); begin end; diff --git a/lcl/interfaces/customdrawn/customdrawnlclintf_win.inc b/lcl/interfaces/customdrawn/customdrawnlclintf_win.inc index 3b27ec986d..a0b215099e 100644 --- a/lcl/interfaces/customdrawn/customdrawnlclintf_win.inc +++ b/lcl/interfaces/customdrawn/customdrawnlclintf_win.inc @@ -119,12 +119,12 @@ begin Result := Application.ApplicationType in [atPDA, atKeyPadDevice, atTV, atMobileEmulator]; end; -procedure TCDWidgetSet.LazAccessibility_SendTextChangedNotification(const ANewText: string); +procedure TCDWidgetSet.LazAccessibility_SendNotification(ANotification: TLazAccessibilityNotification; const ATextParam: string; const AIntParam1, AIntParam2: Integer); begin end; -procedure TCDWidgetSet.LazAccessibility_SendSelectionChangedNotification(const ASelStart, ASelEnd: Integer); +procedure TCDWidgetSet.LazAccessibility_SetFields(AHandle: HWND; const ADescription, AName: string; ARole: TLazAccessibilityRole); begin end; diff --git a/lcl/interfaces/customdrawn/customdrawnlclintf_x11.inc b/lcl/interfaces/customdrawn/customdrawnlclintf_x11.inc index 37fe021beb..2de45b6e21 100644 --- a/lcl/interfaces/customdrawn/customdrawnlclintf_x11.inc +++ b/lcl/interfaces/customdrawn/customdrawnlclintf_x11.inc @@ -119,12 +119,12 @@ begin Result := Application.ApplicationType in [atPDA, atKeyPadDevice, atTV, atMobileEmulator]; end; -procedure TCDWidgetSet.LazAccessibility_SendTextChangedNotification(const ANewText: string); +procedure TCDWidgetSet.LazAccessibility_SendNotification(ANotification: TLazAccessibilityNotification; const ATextParam: string; const AIntParam1, AIntParam2: Integer); begin end; -procedure TCDWidgetSet.LazAccessibility_SendSelectionChangedNotification(const ASelStart, ASelEnd: Integer); +procedure TCDWidgetSet.LazAccessibility_SetFields(AHandle: HWND; const ADescription, AName: string; ARole: TLazAccessibilityRole); begin end; diff --git a/lcl/interfaces/customdrawn/customdrawnlclintfh.inc b/lcl/interfaces/customdrawn/customdrawnlclintfh.inc index 277c57608c..1beda3dcd1 100644 --- a/lcl/interfaces/customdrawn/customdrawnlclintfh.inc +++ b/lcl/interfaces/customdrawn/customdrawnlclintfh.inc @@ -57,8 +57,8 @@ procedure HideVirtualKeyboard(); function IsDesignerDC(WindowHandle: HWND; DC: HDC): Boolean; override;*) function IsMobilePlatform: Boolean; override; -procedure LazAccessibility_SendTextChangedNotification(const ANewText: string); override; -procedure LazAccessibility_SendSelectionChangedNotification(const ASelStart, ASelEnd: Integer); override; +procedure LazAccessibility_SendNotification(ANotification: TLazAccessibilityNotification; const ATextParam: string; const AIntParam1, AIntParam2: Integer); override; +procedure LazAccessibility_SetFields(AHandle: HWND; const ADescription, AName: string; ARole: TLazAccessibilityRole); override; procedure LazDeviceAPIs_RequestPositionInfo(AMethod: TLazPositionMethod); override; procedure LazDeviceAPIs_SendMessage(AMsg: TLazDeviceMessage); override; procedure LazDeviceAPIs_StartReadingAccelerometerData(); override; diff --git a/lcl/lcltype.pp b/lcl/lcltype.pp index 6a8b54ef88..e87b3dce66 100644 --- a/lcl/lcltype.pp +++ b/lcl/lcltype.pp @@ -125,6 +125,37 @@ type destructor Destroy; override; end; + { LazAccessibility } + + TLazAccessibilityNotification = ( + lanTextChanged, // The text or current line of text of the object has changed + lanCursorOrSelectionChanged // The cursor or the text selection changed + ); + + TLazAccessibilityRole = ( + larAlertMessage, // An object that is used to alert the user. + larAnimation, // An object that displays an animation. + larButton, // A button. + larButtonDropDown, // A button that drops down a list of items or drops down something else + larCell, // A cell in a table. + larChart, // An object that displays a graphical representation of data. + larCheckBox, // An object that can be checked or unchecked, or sometimes in an intermediary state + larClock, // A clock displaying time. + larComboBox, // A list of choices that the user can select from. + larEditableText, // Editable text + larIgnore, // Something to be ignored. For example a blank space between other objects. + larImage, // A graphic or picture or an icon. + larGrip, // A grip that the user can drag to change the size of widgets. + larHotkeyField, // A hotkey field that allows the user to enter a key sequence. + larHotLink, // A link to something else. + larLabel, // A text label as usually placed near other widgets. + larList, // A list of items, from which the user can select one or more items. + larListItem, // An item in a list of items. + larTree, // A list of items in a tree structure. + larTreeItem, // An item in a tree structure. + larWindow // A top level window. + ); + {$ifndef WINDOWS} THandle = type PtrUInt; // define our own, because the SysUtils.THandle = System.THandle is a longint HANDLE = THandle;