LCL: TTreeView: set overlay if none is set

git-svn-id: trunk@42882 -
This commit is contained in:
mattias 2013-09-19 18:23:23 +00:00
parent 6e22b78c6b
commit 5c566f9437
3 changed files with 39 additions and 9 deletions

View File

@ -119,6 +119,7 @@ type
FChanged: boolean;
FUpdateCount: integer;
FOverlays: array[TOverlay] of Integer;
fHasOverlays: boolean;
procedure AllocData(ACount: Integer);
function GetReference: TWSCustomImageListReference;
@ -174,10 +175,10 @@ type
AEnabled: Boolean = True); overload;
procedure Draw(ACanvas: TCanvas; AX, AY, AIndex: Integer; ADrawingStyle: TDrawingStyle; AImageType: TImageType;
ADrawEffect: TGraphicsDrawEffect); overload; virtual;
procedure DrawOverlay(ACanvas: TCanvas; AX, AY, AIndex: Integer; AOverlay: TOverlay; AEnabled: Boolean = True);
procedure DrawOverlay(ACanvas: TCanvas; AX, AY, AIndex: Integer; AOverlay: TOverlay; ADrawEffect: TGraphicsDrawEffect);
procedure DrawOverlay(ACanvas: TCanvas; AX, AY, AIndex: Integer; AOverlay: TOverlay; AEnabled: Boolean = True); overload;
procedure DrawOverlay(ACanvas: TCanvas; AX, AY, AIndex: Integer; AOverlay: TOverlay; ADrawEffect: TGraphicsDrawEffect); overload;
procedure DrawOverlay(ACanvas: TCanvas; AX, AY, AIndex: Integer; AOverlay: TOverlay; ADrawingStyle:
TDrawingStyle; AImageType: TImageType; ADrawEffect: TGraphicsDrawEffect); virtual;
TDrawingStyle; AImageType: TImageType; ADrawEffect: TGraphicsDrawEffect); virtual; overload;
procedure FillDescription(out ADesc: TRawImageDescription);
procedure GetBitmap(Index: Integer; Image: TCustomBitmap); overload;
@ -195,6 +196,7 @@ type
procedure InsertMasked(Index: Integer; AImage: TCustomBitmap; MaskColor: TColor);
procedure Move(ACurIndex, ANewIndex: Integer);
procedure Overlay(AIndex: Integer; Overlay: TOverlay);
property HasOverlays: boolean read fHasOverlays;
procedure Replace(AIndex: Integer; AImage, AMask: TCustomBitmap);
procedure ReplaceMasked(Index: Integer; NewImage: TCustomBitmap; MaskColor: TColor);
procedure RegisterChanges(Value: TChangeLink);

View File

@ -1361,8 +1361,21 @@ begin
end;
procedure TCustomImageList.Overlay(AIndex: Integer; Overlay: TOverlay);
var
i: Integer;
begin
FOverlays[Overlay] := AIndex;
if AIndex>=0 then
fHasOverlays:=true
else if fHasOverlays then begin
fHasOverlays:=false;
for i:=Low(TOverlay) to high(TOverlay) do
begin
if FOverlays[i]<0 then continue;
fHasOverlays:=true;
break;
end;
end;
end;
{------------------------------------------------------------------------------

View File

@ -4882,6 +4882,7 @@ var
CurTextRect: TRect;
DrawState: TCustomDrawState;
PaintImages: boolean;
OverlayIndex: Integer;
begin
NodeRect := Node.DisplayRect(False);
if (NodeRect.Bottom < 0) or (NodeRect.Top >= (ClientHeight - ScrollBarWidth)) then
@ -4937,13 +4938,27 @@ begin
begin
if PaintImages then
begin
if (Node.OverlayIndex < 0) or (Node.OverlayIndex>=Images.Count) then
if (Node.OverlayIndex >= 0) then begin
OverlayIndex:=Node.OverlayIndex;
if Images.HasOverlays then begin
Images.DrawOverlay(Canvas, x + 1, (NodeRect.Top + NodeRect.Bottom - Images.Height) div 2,
ImgIndex, OverlayIndex, Node.FNodeEffect);
end else begin
// draw the Overlay using the image from the list
// set an Overlay
Images.OverLay(OverlayIndex,0);
// draw overlay
Images.DrawOverlay(Canvas, x + 1, (NodeRect.Top + NodeRect.Bottom - Images.Height) div 2,
ImgIndex, 0, Node.FNodeEffect);
// reset the Overlay
Images.OverLay(-1,0);
end;
end
else begin
Images.Draw(Canvas, x + 1, (NodeRect.Top + NodeRect.Bottom - Images.Height) div 2,
ImgIndex, Node.FNodeEffect)
else
Images.DrawOverlay(Canvas, x + 1, (NodeRect.Top + NodeRect.Bottom - Images.Height) div 2,
ImgIndex, Node.OverlayIndex, Node.FNodeEffect);
end;
ImgIndex, Node.FNodeEffect);
end;
end;
inc(x, Images.Width + 2);
end;
end;