diff --git a/components/turbopower_ipro/iphtml.pas b/components/turbopower_ipro/iphtml.pas
index cafbded899..6159be75fa 100644
--- a/components/turbopower_ipro/iphtml.pas
+++ b/components/turbopower_ipro/iphtml.pas
@@ -1457,16 +1457,24 @@ type
{ TIpHtmlNodeTR }
- TIpHtmlNodeTR = class(TIpHtmlNodeBlock)
+ TIpHtmlNodeTR = class(TIpHtmlNodeCore)
private
FAlign: TIpHtmlAlign;
FVAlign: TIpHtmlVAlign;
+ FBgColor: TColor;
+ FTextColor: TColor;
+ procedure SetBgColor(const AValue: TColor);
+ procedure SetTextColor(const AValue: TColor);
+ protected
+ procedure AppendSelection(var S: String); override;
public
constructor Create(ParentNode : TIpHtmlNode);
procedure SetProps(const RenderProps: TIpHtmlProps); override;
public
property Align : TIpHtmlAlign read FAlign write FAlign;
property VAlign : TIpHtmlVAlign read FVAlign write FVAlign;
+ property BgColor: TColor read FBgColor write SetBgColor;
+ property TextColor: TColor read FTextColor write SetTextColor;
end;
TIpHtmlCellScope = (hcsUnspec, hcsRow, hcsCol, hcsRowGroup, hcsColGroup);
@@ -1485,6 +1493,7 @@ type
FWidth: TIpHtmlLength;
FVAlign: TIpHtmlVAlign3;
protected
+ procedure AppendSelection(var S: String); override;
procedure DimChanged(Sender: TObject);
public
FPadRect : TRect;
@@ -2665,6 +2674,9 @@ function CalcMultiLength(const List: TIpHtmlMultiLengthList;
function GetAlignmentForStr(str: string; pDefault: TIpHtmlAlign = haDefault): TIpHtmlAlign;
function dbgs(et: TElementType): string; overload;
+function GetNextSiblingNode(ANode: TIpHtmlNode): TIpHtmlNode;
+function GetPrevSiblingNode(ANode: TIpHtmlNode): TIpHtmlNode;
+
procedure Register;
implementation
@@ -2798,6 +2810,56 @@ begin
writestr(Result,et);
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;
begin
RegisterComponents('IPro', [TIpHtmlPanel]);
@@ -9113,15 +9175,18 @@ end;
procedure TIpHtmlNodeP.Enqueue;
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.HardLF);
end;
end;
inherited Enqueue;
if FChildren.Count > 0 then begin
- EnqueueElement(Owner.SoftLF);
- EnqueueElement(Owner.HardLF);
+ if not (FParentNode is TIpHtmlNodeTD) then begin
+ EnqueueElement(Owner.SoftLF);
+ EnqueueElement(Owner.HardLF);
+ end;
end;
end;
@@ -9279,7 +9344,7 @@ begin
inherited Enqueue;
if FChildren.Count > 0 then begin
EnqueueElement(Owner.SoftLF);
- EnqueueElement(Owner.HardLF);
+// EnqueueElement(Owner.HardLF); // Remove large spacing after header line
end;
end;
@@ -10088,9 +10153,14 @@ begin
hiaCenter :
EnqueueElement(Owner.SoftLF);
end;
-}
+ }
+ EnqueueElement(Owner.SoftLF);
+
EnqueueElement(Element);
-{
+
+ EnqueueElement(Owner.SoftLF);
+ EnqueueElement(Owner.hardLF); // LFs needed otherwise next element is too close
+ {
case Align of
hiaTop,
hiaMiddle,
@@ -10098,7 +10168,7 @@ begin
hiaCenter :
EnqueueElement(Owner.SoftLF);
end;
-}
+ }
end;
procedure TIpHtmlNodeTABLE.SetBorder(const Value: Integer);
@@ -10198,6 +10268,8 @@ begin
end;
{$ENDIF}
+{ TIpNodeTR }
+
procedure TIpHtmlNodeTR.SetProps(const RenderProps: TIpHtmlProps);
begin
Props.Assign(RenderProps);
@@ -10212,6 +10284,33 @@ begin
FElementName := 'tr';
FAlign := haDefault;
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;
{ TIpHtmlNodeMAP }
@@ -12317,6 +12416,15 @@ begin
inherited;
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;
var Min, Max: Integer);
begin
@@ -12907,6 +13015,19 @@ begin
TIpHtmlCustomPanel(Owner).Scroll(hsaEnd);
Key := 0
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
begin
if (FHyper.FTabList.TabItem <> nil) and (FHyper.FTabList.TabItem is TIpHtmlNodeA) then
@@ -15504,6 +15625,7 @@ begin
FElementName := 'td';
end;
+
{ TIpHtmlNodeCAPTION }
constructor TIpHtmlNodeCAPTION.Create(ParentNode: TIpHtmlNode);
@@ -15514,5 +15636,6 @@ end;
initialization
InitScrollProcs;
+
end.