mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-07-06 06:45:56 +02:00
TurboPower_IPro: more general way to copy text to the clipboard. Add CTRL+A to "select all". Improved rendering of table, p and header nodes.
git-svn-id: trunk@50130 -
This commit is contained in:
parent
5fc7132693
commit
26a72d2bfc
@ -1457,16 +1457,24 @@ type
|
|||||||
|
|
||||||
{ TIpHtmlNodeTR }
|
{ TIpHtmlNodeTR }
|
||||||
|
|
||||||
TIpHtmlNodeTR = class(TIpHtmlNodeBlock)
|
TIpHtmlNodeTR = class(TIpHtmlNodeCore)
|
||||||
private
|
private
|
||||||
FAlign: TIpHtmlAlign;
|
FAlign: TIpHtmlAlign;
|
||||||
FVAlign: TIpHtmlVAlign;
|
FVAlign: TIpHtmlVAlign;
|
||||||
|
FBgColor: TColor;
|
||||||
|
FTextColor: TColor;
|
||||||
|
procedure SetBgColor(const AValue: TColor);
|
||||||
|
procedure SetTextColor(const AValue: TColor);
|
||||||
|
protected
|
||||||
|
procedure AppendSelection(var S: String); override;
|
||||||
public
|
public
|
||||||
constructor Create(ParentNode : TIpHtmlNode);
|
constructor Create(ParentNode : TIpHtmlNode);
|
||||||
procedure SetProps(const RenderProps: TIpHtmlProps); override;
|
procedure SetProps(const RenderProps: TIpHtmlProps); override;
|
||||||
public
|
public
|
||||||
property Align : TIpHtmlAlign read FAlign write FAlign;
|
property Align : TIpHtmlAlign read FAlign write FAlign;
|
||||||
property VAlign : TIpHtmlVAlign read FVAlign write FVAlign;
|
property VAlign : TIpHtmlVAlign read FVAlign write FVAlign;
|
||||||
|
property BgColor: TColor read FBgColor write SetBgColor;
|
||||||
|
property TextColor: TColor read FTextColor write SetTextColor;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TIpHtmlCellScope = (hcsUnspec, hcsRow, hcsCol, hcsRowGroup, hcsColGroup);
|
TIpHtmlCellScope = (hcsUnspec, hcsRow, hcsCol, hcsRowGroup, hcsColGroup);
|
||||||
@ -1485,6 +1493,7 @@ type
|
|||||||
FWidth: TIpHtmlLength;
|
FWidth: TIpHtmlLength;
|
||||||
FVAlign: TIpHtmlVAlign3;
|
FVAlign: TIpHtmlVAlign3;
|
||||||
protected
|
protected
|
||||||
|
procedure AppendSelection(var S: String); override;
|
||||||
procedure DimChanged(Sender: TObject);
|
procedure DimChanged(Sender: TObject);
|
||||||
public
|
public
|
||||||
FPadRect : TRect;
|
FPadRect : TRect;
|
||||||
@ -2665,6 +2674,9 @@ function CalcMultiLength(const List: TIpHtmlMultiLengthList;
|
|||||||
function GetAlignmentForStr(str: string; pDefault: TIpHtmlAlign = haDefault): TIpHtmlAlign;
|
function GetAlignmentForStr(str: string; pDefault: TIpHtmlAlign = haDefault): TIpHtmlAlign;
|
||||||
function dbgs(et: TElementType): string; overload;
|
function dbgs(et: TElementType): string; overload;
|
||||||
|
|
||||||
|
function GetNextSiblingNode(ANode: TIpHtmlNode): TIpHtmlNode;
|
||||||
|
function GetPrevSiblingNode(ANode: TIpHtmlNode): TIpHtmlNode;
|
||||||
|
|
||||||
procedure Register;
|
procedure Register;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -2798,6 +2810,56 @@ begin
|
|||||||
writestr(Result,et);
|
writestr(Result,et);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function GetNextSiblingNode(ANode: TIpHtmlNode): TIpHtmlNode;
|
||||||
|
var
|
||||||
|
node: TIpHtmlNode;
|
||||||
|
parent: TIpHtmlNodeMulti;
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
if ANode = nil then
|
||||||
|
exit;
|
||||||
|
if (ANode.FParentNode = nil) or not (ANode.ParentNode is TIpHtmlNodeMulti) then
|
||||||
|
exit;
|
||||||
|
parent := TIpHtmlNodeMulti(ANode.FParentNode);
|
||||||
|
if parent.ChildCount = 1 then
|
||||||
|
exit;
|
||||||
|
Result := parent.ChildNode[parent.ChildCount-1];
|
||||||
|
for i := parent.ChildCount-2 downto 0 do
|
||||||
|
begin
|
||||||
|
node := parent.ChildNode[i];
|
||||||
|
if node = ANode then
|
||||||
|
exit;
|
||||||
|
Result := node;
|
||||||
|
end;
|
||||||
|
Result := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetPrevSiblingNode(ANode: TIpHtmlNode): TIpHtmlNode;
|
||||||
|
var
|
||||||
|
node: TIpHtmlNode;
|
||||||
|
parent: TIpHtmlNodeMulti;
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
if ANode = nil then
|
||||||
|
exit;
|
||||||
|
if (ANode.FParentNode = nil) or not (ANode.ParentNode is TIpHtmlNodeMulti) then
|
||||||
|
exit;
|
||||||
|
parent := TIpHtmlNodeMulti(ANode.FParentNode);
|
||||||
|
if parent.ChildCount = 1 then
|
||||||
|
exit;
|
||||||
|
Result := parent.ChildNode[0];
|
||||||
|
for i:=1 to parent.ChildCount-1 do
|
||||||
|
begin
|
||||||
|
node := parent.ChildNode[i];
|
||||||
|
if node = ANode then
|
||||||
|
exit;
|
||||||
|
Result := node;
|
||||||
|
end;
|
||||||
|
Result := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure Register;
|
procedure Register;
|
||||||
begin
|
begin
|
||||||
RegisterComponents('IPro', [TIpHtmlPanel]);
|
RegisterComponents('IPro', [TIpHtmlPanel]);
|
||||||
@ -9113,16 +9175,19 @@ end;
|
|||||||
procedure TIpHtmlNodeP.Enqueue;
|
procedure TIpHtmlNodeP.Enqueue;
|
||||||
begin
|
begin
|
||||||
if FChildren.Count > 0 then begin
|
if FChildren.Count > 0 then begin
|
||||||
if not (FParentNode is TIpHtmlNodeLI) then begin
|
if not ((FParentNode is TIpHtmlNodeLI) or (FParentNode is TIpHtmlNodeTD)) then
|
||||||
|
begin
|
||||||
EnqueueElement(Owner.SoftLF);
|
EnqueueElement(Owner.SoftLF);
|
||||||
EnqueueElement(Owner.HardLF);
|
EnqueueElement(Owner.HardLF);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
inherited Enqueue;
|
inherited Enqueue;
|
||||||
if FChildren.Count > 0 then begin
|
if FChildren.Count > 0 then begin
|
||||||
|
if not (FParentNode is TIpHtmlNodeTD) then begin
|
||||||
EnqueueElement(Owner.SoftLF);
|
EnqueueElement(Owner.SoftLF);
|
||||||
EnqueueElement(Owner.HardLF);
|
EnqueueElement(Owner.HardLF);
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TIpHtmlNodeP.SetAlign(const Value: TIpHtmlAlign);
|
procedure TIpHtmlNodeP.SetAlign(const Value: TIpHtmlAlign);
|
||||||
@ -9279,7 +9344,7 @@ begin
|
|||||||
inherited Enqueue;
|
inherited Enqueue;
|
||||||
if FChildren.Count > 0 then begin
|
if FChildren.Count > 0 then begin
|
||||||
EnqueueElement(Owner.SoftLF);
|
EnqueueElement(Owner.SoftLF);
|
||||||
EnqueueElement(Owner.HardLF);
|
// EnqueueElement(Owner.HardLF); // Remove large spacing after header line
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -10088,9 +10153,14 @@ begin
|
|||||||
hiaCenter :
|
hiaCenter :
|
||||||
EnqueueElement(Owner.SoftLF);
|
EnqueueElement(Owner.SoftLF);
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
|
EnqueueElement(Owner.SoftLF);
|
||||||
|
|
||||||
EnqueueElement(Element);
|
EnqueueElement(Element);
|
||||||
{
|
|
||||||
|
EnqueueElement(Owner.SoftLF);
|
||||||
|
EnqueueElement(Owner.hardLF); // LFs needed otherwise next element is too close
|
||||||
|
{
|
||||||
case Align of
|
case Align of
|
||||||
hiaTop,
|
hiaTop,
|
||||||
hiaMiddle,
|
hiaMiddle,
|
||||||
@ -10098,7 +10168,7 @@ begin
|
|||||||
hiaCenter :
|
hiaCenter :
|
||||||
EnqueueElement(Owner.SoftLF);
|
EnqueueElement(Owner.SoftLF);
|
||||||
end;
|
end;
|
||||||
}
|
}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TIpHtmlNodeTABLE.SetBorder(const Value: Integer);
|
procedure TIpHtmlNodeTABLE.SetBorder(const Value: Integer);
|
||||||
@ -10198,6 +10268,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
|
{ TIpNodeTR }
|
||||||
|
|
||||||
procedure TIpHtmlNodeTR.SetProps(const RenderProps: TIpHtmlProps);
|
procedure TIpHtmlNodeTR.SetProps(const RenderProps: TIpHtmlProps);
|
||||||
begin
|
begin
|
||||||
Props.Assign(RenderProps);
|
Props.Assign(RenderProps);
|
||||||
@ -10212,6 +10284,33 @@ begin
|
|||||||
FElementName := 'tr';
|
FElementName := 'tr';
|
||||||
FAlign := haDefault;
|
FAlign := haDefault;
|
||||||
FValign := hvaMiddle;
|
FValign := hvaMiddle;
|
||||||
|
FBgColor := -1;
|
||||||
|
FTextColor := -1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TIpHtmlNodeTR.AppendSelection(var S: String);
|
||||||
|
var
|
||||||
|
prev: TIpHtmlNode;
|
||||||
|
begin
|
||||||
|
prev := GetPrevSiblingNode(Self);
|
||||||
|
if prev is TIpHtmlNodeTR then S := S + LineEnding;
|
||||||
|
inherited AppendSelection(S);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TIpHtmlNodeTR.SetBgColor(const AValue: TColor);
|
||||||
|
begin
|
||||||
|
if AValue <> FBgColor then begin
|
||||||
|
FBgColor := AValue;
|
||||||
|
InvalidateSize;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TIpHtmlNodeTR.SetTextColor(const AValue: TColor);
|
||||||
|
begin
|
||||||
|
if AValue <> FTextColor then begin
|
||||||
|
FTextColor := AValue;
|
||||||
|
InvalidateSize;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TIpHtmlNodeMAP }
|
{ TIpHtmlNodeMAP }
|
||||||
@ -12317,6 +12416,15 @@ begin
|
|||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TIpHtmlNodeTableHeaderOrCell.AppendSelection(var S: String);
|
||||||
|
var
|
||||||
|
prev: TIpHtmlNode;
|
||||||
|
begin
|
||||||
|
prev := GetPrevSiblingNode(self);
|
||||||
|
if prev is TIpHtmlNodeTableHeaderOrCell then S := S + #9;
|
||||||
|
inherited AppendSelection(S);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TIpHtmlNodeTableHeaderOrCell.CalcMinMaxPropWidth(RenderProps: TIpHtmlProps;
|
procedure TIpHtmlNodeTableHeaderOrCell.CalcMinMaxPropWidth(RenderProps: TIpHtmlProps;
|
||||||
var Min, Max: Integer);
|
var Min, Max: Integer);
|
||||||
begin
|
begin
|
||||||
@ -12907,6 +13015,19 @@ begin
|
|||||||
TIpHtmlCustomPanel(Owner).Scroll(hsaEnd);
|
TIpHtmlCustomPanel(Owner).Scroll(hsaEnd);
|
||||||
Key := 0
|
Key := 0
|
||||||
end
|
end
|
||||||
|
else if ((key = VK_C) or (key = VK_INSERT)) and (Shift = [ssCtrl]) then // copy to clipboard
|
||||||
|
begin
|
||||||
|
HtmlPanel.CopyToClipboard;
|
||||||
|
// FHyper.CopyToClipboard;
|
||||||
|
Key := 0;
|
||||||
|
end
|
||||||
|
else if (key = VK_A) and (Shift = [ssCtrl]) then // select all
|
||||||
|
begin
|
||||||
|
HtmlPanel.SelectAll;
|
||||||
|
// FHyper.SelectAll;
|
||||||
|
// Invalidate;
|
||||||
|
Key := 0;
|
||||||
|
end
|
||||||
else if key = VK_RETURN then // return
|
else if key = VK_RETURN then // return
|
||||||
begin
|
begin
|
||||||
if (FHyper.FTabList.TabItem <> nil) and (FHyper.FTabList.TabItem is TIpHtmlNodeA) then
|
if (FHyper.FTabList.TabItem <> nil) and (FHyper.FTabList.TabItem is TIpHtmlNodeA) then
|
||||||
@ -15504,6 +15625,7 @@ begin
|
|||||||
FElementName := 'td';
|
FElementName := 'td';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ TIpHtmlNodeCAPTION }
|
{ TIpHtmlNodeCAPTION }
|
||||||
|
|
||||||
constructor TIpHtmlNodeCAPTION.Create(ParentNode: TIpHtmlNode);
|
constructor TIpHtmlNodeCAPTION.Create(ParentNode: TIpHtmlNode);
|
||||||
@ -15514,5 +15636,6 @@ end;
|
|||||||
|
|
||||||
initialization
|
initialization
|
||||||
InitScrollProcs;
|
InitScrollProcs;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user