You've already forked lazarus-ccr
* Synchronize with main VTV repository up to svn rev 285
* Add file with v5 upgrade issues git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3290 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -27,7 +27,25 @@ unit VirtualTrees;
|
|||||||
// (C) 1999-2001 digital publishing AG. All Rights Reserved.
|
// (C) 1999-2001 digital publishing AG. All Rights Reserved.
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
|
// October 2010
|
||||||
|
// - Bug Fix: Now taking horizontal scroll position into account when drawing text of EmptyListMessage property
|
||||||
|
// - Bug Fix: Prevented potential "index out of bounds" exception in TVirtualTreeHintWindow.CalcHintRect
|
||||||
|
// - Bug Fix - Issue #187: Showing a dialog in OnChange or OnRemoveSelection event handlers can cause the VT to
|
||||||
|
// enter mode for drawing selection rectangle.
|
||||||
|
// - Improvement: Made inherited event OnCanResize published for TVirtualStringTree for Delphi 2010 and later
|
||||||
|
//
|
||||||
|
// - Improvement: TBaseVirtualTree.ToggleNode now tries to keep the visual position of the toggled node,
|
||||||
|
// even when toChildrenAbove is set
|
||||||
|
// September 2010
|
||||||
|
// - Improvement: Added additional check regarding the tree reference to TVirtualTreeHintWindow.AnimationCallback
|
||||||
|
// - Improvement: Made TBaseVirtualTree.AdjustImageBorder protected and virtual
|
||||||
|
// - Improvement: TVirtualTreeColumns now observes if the focused column is removed
|
||||||
|
// - Improvement: Made compatible with Delphi XE (Thanks to Roman Kassebaum)
|
||||||
// August 2010
|
// August 2010
|
||||||
|
// - Improvement: TCustomVirtualStringTree.DoTextMeasuring now returns TSize
|
||||||
|
// - Improvement: Renamed TVTMeasureTextWidthEvent to TVTMeasureTextEvent and introduced new
|
||||||
|
// event TCustomVirtualStringTree.OnMeasureTextHeight
|
||||||
|
// - Improvement: Made TBaseVirtualTree.GetMaxColumnWidth virtual
|
||||||
// - Bug fix: TBaseVirtualTree.OnRemoveFromSelection is now triggered by TBaseVirtualTree.RemoveFromSelection
|
// - Bug fix: TBaseVirtualTree.OnRemoveFromSelection is now triggered by TBaseVirtualTree.RemoveFromSelection
|
||||||
// as intended
|
// as intended
|
||||||
// July 2010
|
// July 2010
|
||||||
@@ -1414,6 +1432,7 @@ type
|
|||||||
procedure HandleClick(P: TPoint; Button: TMouseButton; Force, DblClick: Boolean); virtual;
|
procedure HandleClick(P: TPoint; Button: TMouseButton; Force, DblClick: Boolean); virtual;
|
||||||
procedure IndexChanged(OldIndex, NewIndex: Integer);
|
procedure IndexChanged(OldIndex, NewIndex: Integer);
|
||||||
procedure InitializePositionArray;
|
procedure InitializePositionArray;
|
||||||
|
procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); override;
|
||||||
procedure ReorderColumns(RTL: Boolean);
|
procedure ReorderColumns(RTL: Boolean);
|
||||||
procedure Update(Item: TCollectionItem); override;
|
procedure Update(Item: TCollectionItem); override;
|
||||||
procedure UpdatePositions(Force: Boolean = False);
|
procedure UpdatePositions(Force: Boolean = False);
|
||||||
@@ -2496,10 +2515,8 @@ type
|
|||||||
FOnEndOperation: TVTOperationEvent; // Called when an operation ends
|
FOnEndOperation: TVTOperationEvent; // Called when an operation ends
|
||||||
|
|
||||||
procedure AdjustCoordinatesByIndent(var PaintInfo: TVTPaintInfo; Indent: Integer);
|
procedure AdjustCoordinatesByIndent(var PaintInfo: TVTPaintInfo; Indent: Integer);
|
||||||
procedure AdjustImageBorder(ImageWidth, ImageHeight: Integer; BidiMode: TBidiMode; VAlign: Integer; var R: TRect;
|
procedure AdjustTotalCount(Node: PVirtualNode; Value: Integer; relative: Boolean = False);
|
||||||
var ImageInfo: TVTImageInfo);
|
procedure AdjustTotalHeight(Node: PVirtualNode; Value: Integer; relative: Boolean = False);
|
||||||
procedure AdjustTotalCount(Node: PVirtualNode; Value: Integer; Relative: Boolean = False);
|
|
||||||
procedure AdjustTotalHeight(Node: PVirtualNode; Value: Integer; Relative: Boolean = False);
|
|
||||||
function CalculateCacheEntryCount: Integer;
|
function CalculateCacheEntryCount: Integer;
|
||||||
procedure CalculateVerticalAlignments(ShowImages, ShowStateImages: Boolean; Node: PVirtualNode; out VAlign,
|
procedure CalculateVerticalAlignments(ShowImages, ShowStateImages: Boolean; Node: PVirtualNode; out VAlign,
|
||||||
VButtonAlign: Integer);
|
VButtonAlign: Integer);
|
||||||
@@ -2676,6 +2693,10 @@ type
|
|||||||
procedure SetEmptyListMessage(const Value: String);
|
procedure SetEmptyListMessage(const Value: String);
|
||||||
procedure AddToSelection(Node: PVirtualNode); overload; virtual;
|
procedure AddToSelection(Node: PVirtualNode); overload; virtual;
|
||||||
procedure AddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean = False); overload; virtual;
|
procedure AddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean = False); overload; virtual;
|
||||||
|
procedure AdjustImageBorder(Images: TCustomImageList; BidiMode: TBidiMode; VAlign: Integer; var R: TRect;
|
||||||
|
var ImageInfo: TVTImageInfo); virtual; overload;
|
||||||
|
procedure AdjustImageBorder(ImageWidth, ImageHeight: Integer; BidiMode: TBidiMode; VAlign: Integer; var R: TRect;
|
||||||
|
var ImageInfo: TVTImageInfo); overload;
|
||||||
procedure AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex); virtual;
|
procedure AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex); virtual;
|
||||||
procedure AdjustPanningCursor(X, Y: Integer); virtual;
|
procedure AdjustPanningCursor(X, Y: Integer); virtual;
|
||||||
procedure AdviseChangeEvent(StructureChange: Boolean; Node: PVirtualNode; Reason: TChangeReason); virtual;
|
procedure AdviseChangeEvent(StructureChange: Boolean; Node: PVirtualNode; Reason: TChangeReason); virtual;
|
||||||
@@ -2829,7 +2850,7 @@ type
|
|||||||
procedure FontChanged(AFont: TObject); virtual;
|
procedure FontChanged(AFont: TObject); virtual;
|
||||||
function GetBorderDimensions: TSize; virtual;
|
function GetBorderDimensions: TSize; virtual;
|
||||||
function GetCheckImage(Node: PVirtualNode; ImgCheckType: TCheckType = ctNone;
|
function GetCheckImage(Node: PVirtualNode; ImgCheckType: TCheckType = ctNone;
|
||||||
ImgCheckState: TCheckState = csUncheckedNormal; ImgEnabled: Boolean = False): Integer; virtual;
|
ImgCheckState: TCheckState = csUncheckedNormal; ImgEnabled: Boolean = True): Integer; virtual;
|
||||||
class function GetCheckImageListFor(Kind: TCheckImageKind): TCustomImageList; virtual;
|
class function GetCheckImageListFor(Kind: TCheckImageKind): TCustomImageList; virtual;
|
||||||
function GetClientRect: TRect; override;
|
function GetClientRect: TRect; override;
|
||||||
function GetColumnClass: TVirtualTreeColumnClass; virtual;
|
function GetColumnClass: TVirtualTreeColumnClass; virtual;
|
||||||
@@ -3161,7 +3182,7 @@ type
|
|||||||
function GetLastVisibleChildNoInit(Node: PVirtualNode; IncludeFiltered: Boolean = False): PVirtualNode;
|
function GetLastVisibleChildNoInit(Node: PVirtualNode; IncludeFiltered: Boolean = False): PVirtualNode;
|
||||||
function GetLastVisibleNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True;
|
function GetLastVisibleNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True;
|
||||||
IncludeFiltered: Boolean = False): PVirtualNode;
|
IncludeFiltered: Boolean = False): PVirtualNode;
|
||||||
function GetMaxColumnWidth(Column: TColumnIndex; UseSmartColumnWidth: Boolean = False): Integer;
|
function GetMaxColumnWidth(Column: TColumnIndex; UseSmartColumnWidth: Boolean = False): Integer; virtual;
|
||||||
function GetNext(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode;
|
function GetNext(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode;
|
||||||
function GetNextChecked(Node: PVirtualNode; State: TCheckState = csCheckedNormal;
|
function GetNextChecked(Node: PVirtualNode; State: TCheckState = csCheckedNormal;
|
||||||
ConsiderChildrenAbove: Boolean = False): PVirtualNode; overload;
|
ConsiderChildrenAbove: Boolean = False): PVirtualNode; overload;
|
||||||
@@ -3434,8 +3455,8 @@ type
|
|||||||
TVSTShortenStringEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
|
TVSTShortenStringEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
|
||||||
Column: TColumnIndex; const S: String; TextSpace: Integer; var Result: String;
|
Column: TColumnIndex; const S: String; TextSpace: Integer; var Result: String;
|
||||||
var Done: Boolean) of object;
|
var Done: Boolean) of object;
|
||||||
TVTMeasureTextWidthEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
|
TVTMeasureTextEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
|
||||||
Column: TColumnIndex; const Text: String; var Width: Integer) of object;
|
Column: TColumnIndex; const Text: String; var Extent: Integer) of object;
|
||||||
TVTDrawTextEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
|
TVTDrawTextEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
|
||||||
Column: TColumnIndex; const Text: String; const CellRect: TRect; var DefaultDraw: Boolean) of object;
|
Column: TColumnIndex; const Text: String; const CellRect: TRect; var DefaultDraw: Boolean) of object;
|
||||||
|
|
||||||
@@ -3477,7 +3498,8 @@ type
|
|||||||
FOnGetHint: TVSTGetHintEvent; // used to retrieve the hint to be displayed for a specific node
|
FOnGetHint: TVSTGetHintEvent; // used to retrieve the hint to be displayed for a specific node
|
||||||
FOnNewText: TVSTNewTextEvent; // used to notify the application about an edited node caption
|
FOnNewText: TVSTNewTextEvent; // used to notify the application about an edited node caption
|
||||||
FOnShortenString: TVSTShortenStringEvent; // used to allow the application a customized string shortage
|
FOnShortenString: TVSTShortenStringEvent; // used to allow the application a customized string shortage
|
||||||
FOnMeasureTextWidth: TVTMeasureTextWidthEvent; // used to adjust the width of the cells
|
FOnMeasureTextWidth: TVTMeasureTextEvent; // used to adjust the width of the cells
|
||||||
|
FOnMeasureTextHeight: TVTMeasureTextEvent;
|
||||||
FOnDrawText: TVTDrawTextEvent; // used to custom draw the node text
|
FOnDrawText: TVTDrawTextEvent; // used to custom draw the node text
|
||||||
|
|
||||||
procedure AddContentToBuffer(Buffer: TBufferedUTF8String; Source: TVSTTextSourceType; const Separator: String);
|
procedure AddContentToBuffer(Buffer: TBufferedUTF8String; Source: TVSTTextSourceType; const Separator: String);
|
||||||
@@ -3514,7 +3536,7 @@ type
|
|||||||
function DoShortenString(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const S: String; Width: Integer;
|
function DoShortenString(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const S: String; Width: Integer;
|
||||||
EllipsisWidth: Integer = 0): String; virtual;
|
EllipsisWidth: Integer = 0): String; virtual;
|
||||||
procedure DoTextDrawing(var PaintInfo: TVTPaintInfo; const Text: String; CellRect: TRect; DrawFormat: Cardinal); virtual;
|
procedure DoTextDrawing(var PaintInfo: TVTPaintInfo; const Text: String; CellRect: TRect; DrawFormat: Cardinal); virtual;
|
||||||
function DoTextMeasuring(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String): Integer; virtual;
|
function DoTextMeasuring(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String): TSize; virtual;
|
||||||
function GetOptionsClass: TTreeOptionsClass; override;
|
function GetOptionsClass: TTreeOptionsClass; override;
|
||||||
function InternalData(Node: PVirtualNode): Pointer;
|
function InternalData(Node: PVirtualNode): Pointer;
|
||||||
procedure MainColumnChanged; override;
|
procedure MainColumnChanged; override;
|
||||||
@@ -3532,7 +3554,8 @@ type
|
|||||||
property OnNewText: TVSTNewTextEvent read FOnNewText write FOnNewText;
|
property OnNewText: TVSTNewTextEvent read FOnNewText write FOnNewText;
|
||||||
property OnPaintText: TVTPaintText read FOnPaintText write FOnPaintText;
|
property OnPaintText: TVTPaintText read FOnPaintText write FOnPaintText;
|
||||||
property OnShortenString: TVSTShortenStringEvent read FOnShortenString write FOnShortenString;
|
property OnShortenString: TVSTShortenStringEvent read FOnShortenString write FOnShortenString;
|
||||||
property OnMeasureTextWidth: TVTMeasureTextWidthEvent read FOnMeasureTextWidth write FOnMeasureTextWidth;
|
property OnMeasureTextWidth: TVTMeasureTextEvent read FOnMeasureTextWidth write FOnMeasureTextWidth;
|
||||||
|
property OnMeasureTextHeight: TVTMeasureTextEvent read FOnMeasureTextHeight write FOnMeasureTextHeight;
|
||||||
property OnDrawText: TVTDrawTextEvent read FOnDrawText write FOnDrawText;
|
property OnDrawText: TVTDrawTextEvent read FOnDrawText write FOnDrawText;
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
@@ -3756,6 +3779,7 @@ type
|
|||||||
property OnLoadTree;
|
property OnLoadTree;
|
||||||
property OnMeasureItem;
|
property OnMeasureItem;
|
||||||
property OnMeasureTextWidth;
|
property OnMeasureTextWidth;
|
||||||
|
property OnMeasureTextHeight;
|
||||||
property OnMouseDown;
|
property OnMouseDown;
|
||||||
property OnMouseMove;
|
property OnMouseMove;
|
||||||
property OnMouseUp;
|
property OnMouseUp;
|
||||||
@@ -3785,6 +3809,8 @@ type
|
|||||||
property OnStructureChange;
|
property OnStructureChange;
|
||||||
property OnUpdating;
|
property OnUpdating;
|
||||||
property OnUTF8KeyPress;
|
property OnUTF8KeyPress;
|
||||||
|
//delphi only
|
||||||
|
//property OnCanResize;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TVTDrawHintEvent = procedure(Sender: TBaseVirtualTree; HintCanvas: TCanvas; Node: PVirtualNode; const R: TRect;
|
TVTDrawHintEvent = procedure(Sender: TBaseVirtualTree; HintCanvas: TCanvas; Node: PVirtualNode; const R: TRect;
|
||||||
@@ -8174,6 +8200,17 @@ end;
|
|||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
procedure TVirtualTreeColumns.Notify(Item: TCollectionItem; Action: TCollectionNotification);
|
||||||
|
|
||||||
|
begin
|
||||||
|
if Action in [cnExtracting, cnDeleting] then
|
||||||
|
with Header.Treeview do
|
||||||
|
if not (csLoading in ComponentState) and (FFocusedColumn = Item.Index) then
|
||||||
|
FFocusedColumn := NoColumn;
|
||||||
|
end;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
procedure TVirtualTreeColumns.ReorderColumns(RTL: Boolean);
|
procedure TVirtualTreeColumns.ReorderColumns(RTL: Boolean);
|
||||||
|
|
||||||
var
|
var
|
||||||
@@ -11741,28 +11778,7 @@ end;
|
|||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
procedure TBaseVirtualTree.AdjustImageBorder(ImageWidth, ImageHeight: Integer; BidiMode: TBidiMode; VAlign: Integer; var R: TRect;
|
procedure TBaseVirtualTree.AdjustTotalCount(Node: PVirtualNode; Value: Integer; relative: Boolean = False);
|
||||||
var ImageInfo: TVTImageInfo);
|
|
||||||
|
|
||||||
// Depending on the width of the image list as well as the given bidi mode R must be adjusted.
|
|
||||||
|
|
||||||
begin
|
|
||||||
if BidiMode = bdLeftToRight then
|
|
||||||
begin
|
|
||||||
ImageInfo.XPos := R.Left;
|
|
||||||
Inc(R.Left, ImageWidth + 2);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
ImageInfo.XPos := R.Right - Images.Width;
|
|
||||||
Dec(R.Right, ImageWidth + 2);
|
|
||||||
end;
|
|
||||||
ImageInfo.YPos := R.Top + VAlign - ImageHeight div 2;
|
|
||||||
end;
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
procedure TBaseVirtualTree.AdjustTotalCount(Node: PVirtualNode; Value: Integer; Relative: Boolean = False);
|
|
||||||
|
|
||||||
// Sets a node's total count to the given value and recursively adjusts the parent's total count
|
// Sets a node's total count to the given value and recursively adjusts the parent's total count
|
||||||
// (actually, the adjustment is done iteratively to avoid function call overheads).
|
// (actually, the adjustment is done iteratively to avoid function call overheads).
|
||||||
@@ -17332,6 +17348,39 @@ end;
|
|||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
procedure TBaseVirtualTree.AdjustImageBorder(Images: TCustomImageList; BidiMode: TBidiMode; VAlign: Integer; var R: TRect;
|
||||||
|
var ImageInfo: TVTImageInfo);
|
||||||
|
|
||||||
|
// Depending on the width of the image list as well as the given bidi mode R must be adjusted.
|
||||||
|
|
||||||
|
begin
|
||||||
|
AdjustImageBorder(Images.Width, Images.Height, BidiMode, VAlign, R, ImageInfo);
|
||||||
|
end;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
procedure TBaseVirtualTree.AdjustImageBorder(ImageWidth, ImageHeight: Integer; BidiMode: TBidiMode; VAlign: Integer; var R: TRect;
|
||||||
|
var ImageInfo: TVTImageInfo);
|
||||||
|
|
||||||
|
// Depending on the width of the image list as well as the given bidi mode R must be adjusted.
|
||||||
|
|
||||||
|
begin
|
||||||
|
if BidiMode = bdLeftToRight then
|
||||||
|
begin
|
||||||
|
ImageInfo.XPos := R.Left;
|
||||||
|
Inc(R.Left, ImageWidth + 2);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
ImageInfo.XPos := R.Right - Images.Width;
|
||||||
|
Dec(R.Right, ImageWidth + 2);
|
||||||
|
end;
|
||||||
|
ImageInfo.YPos := R.Top + VAlign - ImageHeight div 2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
procedure TBaseVirtualTree.AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex);
|
procedure TBaseVirtualTree.AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex);
|
||||||
|
|
||||||
// Used in descendants to modify the paint rectangle of the current column while painting a certain node.
|
// Used in descendants to modify the paint rectangle of the current column while painting a certain node.
|
||||||
@@ -20693,7 +20742,7 @@ end;
|
|||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
function TBaseVirtualTree.GetCheckImage(Node: PVirtualNode; ImgCheckType: TCheckType = ctNone; ImgCheckState:
|
function TBaseVirtualTree.GetCheckImage(Node: PVirtualNode; ImgCheckType: TCheckType = ctNone; ImgCheckState:
|
||||||
TCheckState = csUncheckedNormal; ImgEnabled: Boolean = False): Integer;
|
TCheckState = csUncheckedNormal; ImgEnabled: Boolean = True): Integer;
|
||||||
|
|
||||||
// Determines the index into the check image list for the given node depending on the check type
|
// Determines the index into the check image list for the given node depending on the check type
|
||||||
// and enabled state.
|
// and enabled state.
|
||||||
@@ -21577,6 +21626,21 @@ begin
|
|||||||
CanClear := not AutoDrag and
|
CanClear := not AutoDrag and
|
||||||
(not (tsRightButtonDown in FStates) or not HasPopupMenu(HitNode, HitColumn, Point(XPos, YPos)));
|
(not (tsRightButtonDown in FStates) or not HasPopupMenu(HitNode, HitColumn, Point(XPos, YPos)));
|
||||||
|
|
||||||
|
// User starts a selection with a selection rectangle.
|
||||||
|
if not (toDisableDrawSelection in FOptions.FSelectionOptions) and not (IsHit or FullRowDrag) and MultiSelect then
|
||||||
|
begin
|
||||||
|
SetCapture(Handle);
|
||||||
|
DoStateChange([tsDrawSelPending]);
|
||||||
|
FDrawSelShiftState := ShiftState;
|
||||||
|
FNewSelRect := Rect(Message.XPos + FEffectiveOffsetX, Message.YPos - FOffsetY, Message.XPos + FEffectiveOffsetX,
|
||||||
|
Message.YPos - FOffsetY);
|
||||||
|
//lclheader
|
||||||
|
if hoVisible in FHeader.Options then
|
||||||
|
OffsetRect(FNewSelRect, 0, -FHeader.Height);
|
||||||
|
{$ifdef DEBUG_VTV}Logger.Send([lcSelection],'FNewSelRect', FNewSelRect);{$endif}
|
||||||
|
FLastSelRect := Rect(0, 0, 0, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
//lcl
|
//lcl
|
||||||
FocusCanChange := DoFocusChanging(FFocusedNode, HitInfo.HitNode, FFocusedColumn, Column);
|
FocusCanChange := DoFocusChanging(FFocusedNode, HitInfo.HitNode, FFocusedColumn, Column);
|
||||||
|
|
||||||
@@ -21610,20 +21674,10 @@ begin
|
|||||||
(hiOnItem in HitInfo.HitPositions))) and NodeSelected and not NewColumn and ShiftEmpty then
|
(hiOnItem in HitInfo.HitPositions))) and NodeSelected and not NewColumn and ShiftEmpty then
|
||||||
DoStateChange([tsEditPending]);
|
DoStateChange([tsEditPending]);
|
||||||
|
|
||||||
// User starts a selection with a selection rectangle.
|
|
||||||
if not (toDisableDrawSelection in FOptions.FSelectionOptions) and not (IsHit or FullRowDrag) and MultiSelect then
|
if not (toDisableDrawSelection in FOptions.FSelectionOptions) and not (IsHit or FullRowDrag) and MultiSelect then
|
||||||
begin
|
begin
|
||||||
SetCapture(Handle);
|
// The original code here was moved up to fix issue #187.
|
||||||
DoStateChange([tsDrawSelPending]);
|
// In order not to break the semantics of this procedure, we are leaving these if statements here
|
||||||
FDrawSelShiftState := ShiftState;
|
|
||||||
FNewSelRect := Rect(Message.XPos + FEffectiveOffsetX, Message.YPos - FOffsetY, Message.XPos + FEffectiveOffsetX,
|
|
||||||
Message.YPos - FOffsetY);
|
|
||||||
//lclheader
|
|
||||||
if hoVisible in FHeader.Options then
|
|
||||||
OffsetRect(FNewSelRect, 0, -FHeader.Height);
|
|
||||||
{$ifdef DEBUG_VTV}Logger.Send([lcSelection],'FNewSelRect', FNewSelRect);{$endif}
|
|
||||||
|
|
||||||
FLastSelRect := Rect(0, 0, 0, 0);
|
|
||||||
if not IsCellHit then
|
if not IsCellHit then
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
@@ -29434,7 +29488,7 @@ begin
|
|||||||
// output a message if no items are to display
|
// output a message if no items are to display
|
||||||
Canvas.Font := Self.Font;
|
Canvas.Font := Self.Font;
|
||||||
SetBkMode(TargetCanvas.Handle, TRANSPARENT);
|
SetBkMode(TargetCanvas.Handle, TRANSPARENT);
|
||||||
TextOut(TargetCanvas.Handle, 2, 2, PAnsiChar(FEmptyListMessage), Length(FEmptyListMessage));
|
TextOut(TargetCanvas.Handle, 2 - Window.Left, 2 - Window.Top, PAnsiChar(FEmptyListMessage), Length(FEmptyListMessage));
|
||||||
end;//if
|
end;//if
|
||||||
|
|
||||||
DoAfterPaint(TargetCanvas);
|
DoAfterPaint(TargetCanvas);
|
||||||
@@ -30435,6 +30489,8 @@ begin
|
|||||||
begin
|
begin
|
||||||
NeedUpdate := True;
|
NeedUpdate := True;
|
||||||
|
|
||||||
|
// Calculate the height delta right now as we need it for toChildrenAbove anyway.
|
||||||
|
HeightDelta := -Integer(Node.TotalHeight) + Integer(NodeHeight[Node]);
|
||||||
if (FUpdateCount = 0) and (toAnimatedToggle in FOptions.FAnimationOptions) and not
|
if (FUpdateCount = 0) and (toAnimatedToggle in FOptions.FAnimationOptions) and not
|
||||||
(tsCollapsing in FStates) then
|
(tsCollapsing in FStates) then
|
||||||
begin
|
begin
|
||||||
@@ -30448,7 +30504,6 @@ begin
|
|||||||
// on the position of the node to be collapsed.
|
// on the position of the node to be collapsed.
|
||||||
R1 := GetDisplayRect(Node, NoColumn, False);
|
R1 := GetDisplayRect(Node, NoColumn, False);
|
||||||
Mode2 := tamNoScroll;
|
Mode2 := tamNoScroll;
|
||||||
HeightDelta := -Integer(Node.TotalHeight) + Integer(NodeHeight[Node]);
|
|
||||||
if toChildrenAbove in FOptions.FPaintOptions then
|
if toChildrenAbove in FOptions.FPaintOptions then
|
||||||
begin
|
begin
|
||||||
PosHoldable := (FOffsetY + (Integer(Node.TotalHeight - NodeHeight[Node]))) <= 0;
|
PosHoldable := (FOffsetY + (Integer(Node.TotalHeight - NodeHeight[Node]))) <= 0;
|
||||||
@@ -31995,7 +32050,7 @@ begin
|
|||||||
Canvas.Font := Font;
|
Canvas.Font := Font;
|
||||||
DoPaintText(Node, Canvas, Column, ttNormal);
|
DoPaintText(Node, Canvas, Column, ttNormal);
|
||||||
|
|
||||||
Inc(Result, DoTextMeasuring(Canvas, Node, Column, Text));
|
Inc(Result, DoTextMeasuring(Canvas, Node, Column, Text).cx);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -32234,28 +32289,28 @@ end;
|
|||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
function TCustomVirtualStringTree.DoTextMeasuring(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
|
function TCustomVirtualStringTree.DoTextMeasuring(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
|
||||||
const Text: String): Integer;
|
const Text: String): TSize;
|
||||||
|
|
||||||
var
|
var
|
||||||
Size: TSize;
|
|
||||||
R: TRect;
|
R: TRect;
|
||||||
DrawFormat: Integer;
|
DrawFormat: Integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
GetTextExtentPoint32(Canvas.Handle, PChar(Text), Length(Text), Size);
|
GetTextExtentPoint32(Canvas.Handle, PChar(Text), Length(Text), Result);
|
||||||
if vsMultiLine in Node.States then
|
if vsMultiLine in Node.States then
|
||||||
begin
|
begin
|
||||||
DrawFormat := DT_CALCRECT or DT_NOPREFIX or DT_WORDBREAK or DT_END_ELLIPSIS or DT_EDITCONTROL or AlignmentToDrawFlag[Alignment];
|
DrawFormat := DT_CALCRECT or DT_NOPREFIX or DT_WORDBREAK or DT_END_ELLIPSIS or DT_EDITCONTROL or AlignmentToDrawFlag[Alignment];
|
||||||
if BidiMode <> bdLeftToRight then
|
if BidiMode <> bdLeftToRight then
|
||||||
DrawFormat := DrawFormat or DT_RTLREADING;
|
DrawFormat := DrawFormat or DT_RTLREADING;
|
||||||
|
|
||||||
R := Rect(0, 0, Size.cx, MaxInt);
|
R := Rect(0, 0, Result.cx, MaxInt);
|
||||||
DrawText(Canvas.Handle, PChar(Text), Length(Text), R, DrawFormat);
|
DrawText(Canvas.Handle, PChar(Text), Length(Text), R, DrawFormat);
|
||||||
Size.cx := R.Right - R.Left;
|
Result.cx := R.Right - R.Left;
|
||||||
end;
|
end;
|
||||||
Result := Size.cx;
|
|
||||||
if Assigned(FOnMeasureTextWidth) then
|
if Assigned(FOnMeasureTextWidth) then
|
||||||
FOnMeasureTextWidth(Self, Canvas, Node, Column, Text, Result);
|
FOnMeasureTextWidth(Self, Canvas, Node, Column, Text, Result.cx);
|
||||||
|
if Assigned(FOnMeasureTextHeight) then
|
||||||
|
FOnMeasureTextHeight(Self, Canvas, Node, Column, Text, Result.cy);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
|
@@ -0,0 +1,2 @@
|
|||||||
|
* Use TImageList in checkbox support
|
||||||
|
* Review ContentTo* methods
|
Reference in New Issue
Block a user