carbon: fix selecting an item in a TListView on Carbon when OwnerDraw is true.patch by Joost van der Sluis. issue #25274

git-svn-id: trunk@43384 -
This commit is contained in:
zeljko 2013-11-07 06:20:19 +00:00
parent a5b518939b
commit cd29849872

View File

@ -134,6 +134,7 @@ type
Data: DataBrowserItemDataRef; ASetValue: Boolean): OSStatus; virtual;
procedure NotificationCallBack(ID: DataBrowserItemId;
AMessage: DataBrowserItemNotification); virtual;
function IsIndexOutOfRange(ID: DataBrowserItemId): boolean; virtual;
public
procedure BoundsChanged; override;
@ -235,6 +236,7 @@ type
function GetReadOnly: Boolean; override;
function MultiSelect: Boolean; override;
function IsOwnerDrawn: Boolean; override;
function IsIndexOutOfRange(ID: DataBrowserItemId): boolean; override;
public
constructor Create(const AObject: TWinControl; const AParams: TCreateParams);
destructor Destroy; override;
@ -819,7 +821,8 @@ begin
FItemIndex := -1;
FItemsCheck := TList.Create;
NotifySelectionChange := True;
inherited;
end;
@ -1165,7 +1168,7 @@ end;
procedure TCarbonDataBrowser.NotificationCallBack(ID: DataBrowserItemId;
AMessage: DataBrowserItemNotification);
begin
if (ID < 1) or (ID > DataBrowserItemId(GetItemsCount)) then Exit;
if IsIndexOutOfRange(ID) then Exit;
if NotifySelectionChange then
case AMessage of
@ -1180,6 +1183,11 @@ begin
end;
function TCarbonDataBrowser.IsIndexOutOfRange(ID: DataBrowserItemId): boolean;
begin
result := (ID < 1) or (ID > DataBrowserItemId(GetItemsCount));
end;
function TCarbonDataBrowser.GetTopItem: Integer;
begin
Result := GetItemAt(0, GetHeaderHeight);
@ -1273,7 +1281,7 @@ begin
end;
procedure TCarbonDataBrowser.SetItemState(AIndex: Integer;
AState: TListItemState; AIsSet: BooleaN);
AState: TListItemState; AIsSet: Boolean);
begin
case AState of
lisFocused:
@ -1620,6 +1628,14 @@ begin
Result := False; // TODO
end;
function TCarbonListView.IsIndexOutOfRange(ID: DataBrowserItemId): boolean;
begin
if not FOwnerData then
Result:=inherited IsIndexOutOfRange(ID)
else
result := (ID < 1 ) or (ID > TListView(LCLObject).Items.Count);
end;
constructor TCarbonListView.Create(const AObject: TWinControl;
const AParams: TCreateParams);
begin