Qt: fixed TQtWSWinControl.SetChildZPosition().Partially fixes #17298

git-svn-id: trunk@27268 -
This commit is contained in:
zeljko 2010-09-04 17:00:08 +00:00
parent b542879b49
commit 4cc5ab25bf
2 changed files with 36 additions and 17 deletions

View File

@ -228,6 +228,7 @@ type
procedure move(ANewLeft, ANewTop: Integer); virtual;
procedure preferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); virtual;
procedure raiseWidget; virtual;
procedure stackUnder(AWidget: QWidgetH); virtual;
procedure frame_resize(ANewWidth, ANewHeight: Integer);
procedure resize(ANewWidth, ANewHeight: Integer); virtual;
procedure releaseMouse;
@ -420,6 +421,7 @@ type
function CanPaintBackground: Boolean; override;
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
procedure scroll(dx, dy: integer; ARect: PRect = nil); override;
procedure stackUnder(AWidget: QWidgetH); override;
end;
{ TQtGraphicView }
@ -3479,6 +3481,11 @@ begin
QWidget_raise(Widget);
end;
procedure TQtWidget.stackUnder(AWidget: QWidgetH);
begin
QWidget_stackUnder(Widget, AWidget);
end;
procedure TQtWidget.frame_resize(ANewWidth, ANewHeight: Integer);
var
R1, R2: TRect;
@ -11056,6 +11063,12 @@ begin
FScrollY := FScrollY + dy;
end;
procedure TQtViewPort.stackUnder(AWidget: QWidgetH);
begin
// do nothing for TQtViewPort
// inherited stackUnder(AWidget);
end;
{------------------------------------------------------------------------------
Function: TQtAbstractScrollArea.horizontalScrollbar
Params: None

View File

@ -316,28 +316,34 @@ class procedure TQtWSWinControl.SetChildZPosition(const AWinControl,
AChild: TWinControl; const AOldPos, ANewPos: Integer; const AChildren: TFPList);
var
n: Integer;
child: TWinControl;
Child: TWinControl;
Reorder: TFPList;
begin
if not WSCheckHandleAllocated(AWincontrol, 'SetChildZPosition') then
Exit;
if not WSCheckHandleAllocated(AChild, 'SetChildZPosition (child)') then
Exit;
if ANewPos < AChildren.Count div 2
then begin
// move down (and others below us)
for n := ANewPos downto 0 do
if (ANewPos <= 0) or (ANewPos >= AChildren.Count - 1) then
begin
// simple
if ANewPos <= 0 then // bottom
TQtWidget(AChild.Handle).lowerWidget
else
TQtWidget(AChild.Handle).raiseWidget;
end else
begin
if (ANewPos >= 0) and (ANewPos < AChildren.Count -1) then
begin
child := TWinControl(AChildren[n]);
if child.HandleAllocated then
TQtWidget(child.Handle).lowerWidget;
end;
end
else begin
// move up (and others above us)
for n := ANewPos to AChildren.Count - 1 do
begin
child := TWinControl(AChildren[n]);
if child.HandleAllocated then
TQtWidget(child.Handle).raiseWidget;
Reorder := TFPList.Create;
for n := AChildren.Count - 1 downto 0 do
Reorder.Add(AChildren[n]);
Child := TWinControl(Reorder[ANewPos + 1]);
if Child.HandleAllocated then
TQtWidget(AChild.Handle).stackUnder(TQtWidget(Child.Handle).Widget)
else
TQtWidget(AChild.Handle).lowerWidget;
Reorder.Free;
end;
end;
end;