Qt: fixed wrong TQtTreeWidget.getClientBounds when header is visible, removed headerOffset from TQtWSCustomListView.getItemAt() since needed offset is wrong because of wrong getClientBounds which should take into account embedded header control.

git-svn-id: trunk@27749 -
This commit is contained in:
zeljko 2010-10-18 13:18:02 +00:00
parent e8d188bf55
commit 115f4ce243
2 changed files with 24 additions and 7 deletions

View File

@ -1232,7 +1232,7 @@ type
function takeTopLevelItem(AIndex: Integer): QTreeWidgetItemH;
function topLevelItem(AIndex: Integer): QTreeWidgetItemH;
function visualItemRect(AItem: QTreeWidgetItemH): TRect;
function getHeaderHeight: Integer;
function getHeaderHeight(out AOrientation: QtOrientation): Integer;
function getItemVisible(AItem: QTreeWidgetItemH): Boolean;
function getTopItem: integer; override;
function getVisibleRowCount(const AFirstVisibleOnly: boolean = false): integer; override;
@ -1248,6 +1248,7 @@ type
public
procedure AttachEvents; override;
procedure DetachEvents; override;
function getClientBounds: TRect; override;
procedure SignalItemClicked(item: QTreeWidgetItemH; column: Integer); cdecl;
procedure SignalItemDoubleClicked(item: QTreeWidgetItemH; column: Integer); cdecl;
@ -9855,15 +9856,17 @@ begin
Result := ItemRect;
end;
function TQtTreeWidget.getHeaderHeight: Integer;
function TQtTreeWidget.getHeaderHeight(out AOrientation: QtOrientation): Integer;
var
W: QHeaderViewH;
begin
Result := 0;
AOrientation := QtHorizontal;
W := QTreeView_header(QTreeViewH(Widget));
if QWidget_isVisible(W) and QWidget_isVisibleTo(W, Widget) then
begin
if QHeaderView_orientation(W) = QtHorizontal then
AOrientation := QHeaderView_orientation(W);
if AOrientation = QtHorizontal then
Result := QWidget_height(W)
else
Result := QWidget_width(W);
@ -10061,6 +10064,23 @@ begin
inherited DetachEvents;
end;
function TQtTreeWidget.getClientBounds: TRect;
var
H: QHeaderViewH;
Offset: Integer;
AOrientation: QtOrientation;
begin
Result := inherited getClientBounds;
Offset := getHeaderHeight(AOrientation);
if Offset > 0 then
begin
if AOrientation = QtHorizontal then
Inc(Result.Top, Offset)
else
Inc(Result.Left, Offset);
end;
end;
{------------------------------------------------------------------------------
Function: TQtTreeWidget.SignalItemClicked
Params: Integer

View File

@ -1458,7 +1458,6 @@ var
LWI: QListWidgetItemH;
QtTreeWidget: TQtTreeWidget;
TWI: QTreeWidgetItemH;
HeaderOffset: Integer;
begin
if not WSCheckHandleAllocated(ALV, 'GetItemAt') then
Exit;
@ -1469,10 +1468,8 @@ begin
Result := QtListWidget.getRow(LWI);
end else
begin
QtTreeWidget := TQtTreeWidget(ALV.Handle);
HeaderOffset := QtTreeWidget.GetHeaderHeight;
TWI := QtTreeWidget.itemAt(x, y - HeaderOffset);
TWI := QtTreeWidget.itemAt(x, y);
Result := QtTreeWidget.getRow(TWI);
end;
end;