Opkman: Highlight recently added packages + sort package list by name.

git-svn-id: trunk@54035 -
This commit is contained in:
balazs 2017-01-30 09:34:56 +00:00
parent f51dd9a202
commit 6d610db93b
6 changed files with 314 additions and 172 deletions

1
.gitattributes vendored
View File

@ -3262,6 +3262,7 @@ components/onlinepackagemanager/images/Tree_Buttons/Database.png -text svneol=un
components/onlinepackagemanager/images/Tree_Buttons/Error.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/FileVersion.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/Info.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/New_Package.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/Ok.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/Refresh.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/Refresh1.png -text svneol=unset#image/png

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

View File

@ -525,6 +525,14 @@ object MainFrm: TMainFrm
Caption = 'Hide JSON'
OnClick = miJSONShowClick
end
object miJSONSort: TMenuItem
Caption = 'Sort by name'
OnClick = miJSONSortClick
end
object miSaveToFile: TMenuItem
Caption = 'Save to file'
OnClick = miSaveToFileClick
end
end
object pmCreate: TPopupMenu
left = 144
@ -546,7 +554,7 @@ object MainFrm: TMainFrm
left = 64
top = 163
Bitmap = {
4C69190000001000000010000000A38D780095806C12B3A18B9FC5B49FFEC6B5
4C691A0000001000000010000000A38D780095806C12B3A18B9FC5B49FFEC6B5
A0FFC6B5A0FFC6B5A0FFC6B5A1FFBEAD98E3A5917C4BFFFFFF00988674000000
0000000000000000000000000000FFEAD300AC9A886AD5C9BBF9E3D9CBFFE2D9
CAFFE2D9CAFFE2D9CAFFE3D9CAFFE0D6C8FFC3B4A4CB84715C189B8874000000
@ -1346,7 +1354,39 @@ object MainFrm: TMainFrm
B3F4A1A1A18D717171164F4F4F014F4F4F0170707016A0A0A08DB3B3B3F4B6B6
B6F56D6D6D064D4D4D004D4D4D004D4D4D004D4D4D006565650B9C9C9C877676
761F515151014D4D4D004D4D4D004D4D4D004D4D4D00505050017575751F9C9C
9C876767670B4D4D4D004D4D4D00
9C876767670B4D4D4D004D4D4D00FFFFFF00DD790000FFE8DD00FFE8DD00FFE8
DD00DD790080E08417FFE69537FFEBA658FFEEB06FFFEEB06FFFEBA658FFE695
37FFE08417FFDD7900BFFFFFFF00FFFFFF00DB780000FFE8DD00FFE8DD00FFE8
DD00DB7800FFFFE8DDFFFFE8DDFFFFE8DDFFFFE8DDFFFFE8DDFFFFE8DDFFF6CC
A6FFDB7800FFDB780000FFFFFF00FFFFFF00D8770000FFE1CF00FFE1CF00D877
0080ECAD68FFFFE1CFFFFFE1CFFFFFE1CFFFFFE1CFFFFFE1CFFFF5C79BFFD877
00FFFFE1CF00D8770000FFFFFF00FFFFFF00D5760000FFD9BB00FFD9BB00D576
00FFFFD9BBFFFFD9BBFFFFD9BBFFFFD9BBFFFFD9BBFFF4BF8CFFD57600FFFFD9
BB00FFD9BB00D5760000FFFFFF00FFFFFF00D2760000FFCEA400D2760080E9A2
52FFFFCEA4FFFFCEA4FFFFCEA4FFFFCEA4FFF4B87BFFD27600FFFFCEA400FFCE
A400FFCEA400D2760000FFFFFF00FFFFFF00CE740000FFC28A00CE7400FFFFC2
8AFFFFC28AFFFFC28AFFFFC28AFFF3AE67FFDA8823FFCE7400FFCE7400FFCE74
00FFCE7400FFCE7400BFFFFFFF00FFFFFF00CA730000CA730080E59638FFFFB7
6FFFFFB76FFFFFB76FFFFFCFA6FFFFE8DDFFFFE8DDFFFFE8DDFFFFE8DDFFF2CB
A6FFCA7300FFCA730000FFFFFF00FFFFFF00C6720000C67200FFF29633FFF297
33FFF49939FFFAA347FFFEA850FFFEA850FFFBA449FFFAA246FFF19C3EFFC672
00FFFFA95300C6720000FFFFFF00FFFFFF00C1700080E0871DFFEE8C1CFFEE8C
1CFFEE8C1CFFEA8615FFE37F0BFFDD7900FFE5810EFFEF922BFFC17000FFFF9E
3900FF9E3900C1700000FFFFFF00FFFFFF00BD6F00BFBD6F00FFBD6F00FFBD6F
00FFBD6F00FFCE7809FFE27D05FFE8810BFFEE8919FFBD6F00FFFF932200FF93
2200FF932200BD6F0000FFFFFF00FFFFFF00B96E0000FF8A0E00FF840000FF84
0000B96E0080DC7B07FFEB8006FFED820AFFB96E00FFFF840000FF8A0E00FF8A
0E00FF8A0E00B96E0000FFFFFF00FFFFFF00B56C0000FF840000FF840000FF84
0000B56C00FFEE7E00FFEC7E00FFB56C00FFDD790000DD790000FF840000FF84
0000FF840000B56C0000FFFFFF00FFFFFF00B26B0000FF840000FF840000B26B
0080D97800FFEC7E00FFB26B00FFFF840000FF840000FF840000FF840000FF84
0000FF840000B26B0000FFFFFF00FFFFFF00AF6A0000FF840000FF840000AF6A
00FFEB7D00FFAF6A00FFFF840000FF840000FF840000FF840000FF840000FF84
0000FF840000AF6A0000FFFFFF00FFFFFF00AC690000AC690000AC690080AC69
00FFAC6900FFAC690000AC690000AC690000AC690000AC690000AC690000AC69
0000AC690000AC690000FFFFFF00FFFFFF00AA690000AA690000AA6900BFAA69
00FFAA690000AA690000AA690000AA690000AA690000AA690000AA690000AA69
0000AA690000AA690000FFFFFF00
}
end
object imTBNor: TImageList
@ -3415,4 +3455,10 @@ object MainFrm: TMainFrm
FF00FFFFFF00FFFFFF00FFFFFF00
}
end
object SD: TSaveDialog
DefaultExt = '.*.json'
Filter = '*.json|*.json'
left = 248
top = 288
end
end

View File

@ -44,10 +44,13 @@ type
cbPackageType: TComboBox;
imTBDis: TImageList;
MenuItem1: TMenuItem;
miSaveToFile: TMenuItem;
miJSONSort: TMenuItem;
miResetRating: TMenuItem;
miCopyToClpBrd: TMenuItem;
miCreateRepository: TMenuItem;
miCreateRepositoryPackage: TMenuItem;
SD: TSaveDialog;
tbCleanUp1: TToolButton;
tbOptions: TToolButton;
cbAll: TCheckBox;
@ -82,7 +85,9 @@ type
procedure miCopyToClpBrdClick(Sender: TObject);
procedure miCreateRepositoryClick(Sender: TObject);
procedure miCreateRepositoryPackageClick(Sender: TObject);
procedure miJSONSortClick(Sender: TObject);
procedure miResetRatingClick(Sender: TObject);
procedure miSaveToFileClick(Sender: TObject);
procedure pnToolBarResize(Sender: TObject);
procedure tbCleanUpClick(Sender: TObject);
procedure tbDownloadClick(Sender: TObject);
@ -920,6 +925,42 @@ begin
end;
end;
procedure TMainFrm.miJSONSortClick(Sender: TObject);
var
JSON: TJSONStringType;
begin
JSON := '';
SerializablePackages.Sort;
SerializablePackages.PackagesToJSON(JSON);
mJSON.Lines.BeginUpdate;
try
mJSON.Clear;
mJSON.Text := JSON;
finally
mJSON.Lines.EndUpdate;
end;
end;
procedure TMainFrm.miSaveToFileClick(Sender: TObject);
var
JSON: TJSONStringType;
Ms: TMemoryStream;
begin
if SD.Execute then
begin
JSON := '';
SerializablePackages.PackagesToJSON(JSON);
Ms := TMemoryStream.Create;
try
Ms.Write(Pointer(JSON)^, Length(JSON));
Ms.Position := 0;
Ms.SaveToFile(SD.FileName);
finally
Ms.Free;
end;
end;
end;
procedure TMainFrm.SetupControls;
var
I: Integer;

View File

@ -291,6 +291,7 @@ type
function IsInstalledVersionOk(PackageDependency: TPackageDependency; InstalledVersion: String): Boolean;
function GetPackageInstallState(const APackage: TPackage): Integer; overload;
procedure DeleteDownloadedZipFiles;
procedure Sort;
public
property Count: Integer read GetCount;
property DownloadCount: Integer read GetDownloadCount;
@ -1439,6 +1440,19 @@ begin
end;
end;
function SortByName(Item1, Item2: TCollectionItem): Integer;
var
Package1, Package2: TPackage;
begin
Package1 := TPackage(Item1);
Package2 := TPackage(Item2);
Result := CompareText(Package1.FDisplayName, Package2.FDisplayName);
end;
procedure TSerializablePackages.Sort;
begin
FPackages.Sort(@SortByName);
end;
function TSerializablePackages.IsDependencyOk(PackageDependency: TPackageDependency;
DependencyPackage: TPackageFile): Boolean;

View File

@ -31,7 +31,7 @@ interface
uses
Classes, SysUtils, Controls, Graphics, Menus, Dialogs, Forms, LCLIntf, contnrs,
PackageIntf, Buttons, Math, opkman_VirtualTrees, opkman_common,
PackageIntf, Buttons, Math, dateutils, opkman_VirtualTrees, opkman_common,
opkman_serializablepackages;
@ -247,6 +247,7 @@ begin
TreeOptions.MiscOptions := [toCheckSupport, toFullRepaintOnResize, toInitOnSave, toWheelPanning];
TreeOptions.PaintOptions := [toHideFocusRect, toAlwaysHideSelection, toPopupMode, toShowButtons, toShowDropmark, toShowRoot, toThemeAware];
TreeOptions.SelectionOptions := [toFullRowSelect, toRightClickSelect];
TreeOptions.StringOptions := [toShowStaticText];
TreeOptions.AutoOptions := [toAutoTristateTracking];
OnBeforeCellPaint := @VSTBeforeCellPaint;
OnChecking := @VSTChecking;
@ -322,6 +323,7 @@ begin
Data^.HasUpdate := SerializablePackages.Items[I].HasUpdate;
Data^.DisableInOPM := SerializablePackages.Items[I].DisableInOPM;
Data^.Rating := SerializablePackages.Items[I].Rating;
Data^.RepositoryDate := SerializablePackages.Items[I].RepositoryDate;
FVST.IsDisabled[Node] := Data^.DisableInOPM;
Data^.DataType := 1;
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
@ -1346,7 +1348,16 @@ var
begin
Data := FVST.GetNodeData(Node);
if Column = 0 then
ImageIndex := Data^.DataType
begin
case Data^.DataType of
1: if DaysBetween(Now, Data^.RepositoryDate) <= 31 then
ImageIndex := 25
else
ImageIndex := 1;
else
ImageIndex := Data^.DataType
end;
end;
end;
function TVisualTree.GetDisplayString(const AStr: String): String;
@ -1374,134 +1385,149 @@ var
Data: PData;
begin
Data := FVST.GetNodeData(Node);
if Column = 0 then
if TextType = ttStatic then
begin
case Data^.DataType of
0: CellText := Data^.Repository;
1: if Trim(Data^.PackageDisplayName) = '' then
CellText := Data^.PackageName
else
CellText := Data^.PackageDisplayName;
2: CellText := Data^.PackageFileName;
3: CellText := rsMainFrm_VSTText_Description;
4: CellText := rsMainFrm_VSTText_Author;
5: CellText := rsMainFrm_VSTText_LazCompatibility;
6: CellText := rsMainFrm_VSTText_FPCCompatibility;
7: CellText := rsMainFrm_VSTText_SupportedWidgetsets;
8: CellText := rsMainFrm_VSTText_Packagetype;
9: CellText := rsMainFrm_VSTText_License;
10: CellText := rsMainFrm_VSTText_Dependecies;
11: CellText := rsMainFrm_VSTText_PackageInfo;
12: CellText := rsMainFrm_VSTText_Category;
13: CellText := rsMainFrm_VSTText_RepositoryFilename;
14: CellText := rsMainFrm_VSTText_RepositoryFileSize;
15: CellText := rsMainFrm_VSTText_RepositoryFileHash;
16: CellText := rsMainFrm_VSTText_RepositoryFileDate;
17: CellText := rsMainFrm_VSTText_HomePageURL;
18: CellText := rsMainFrm_VSTText_DownloadURL;
19: CellText := rsMainFrm_VSTText_SVNURL;
end;
end
else if Column = 1 then
begin
case Data^.DataType of
1: case Data^.InstallState of
//0: CellText := rsMainFrm_VSTText_Install0;
1: CellText := rsMainFrm_VSTText_Install1;
2: CellText := rsMainFrm_VSTText_Install2;
end;
2: begin
if Data^.InstalledVersion <> '' then
CellText := Data^.InstalledVersion
else
CellText := '-';
end
if Column = 0 then
begin
if DaysBetween(Now, Data^.RepositoryDate) <= 31 then
CellText := '- ' + FormatDateTime('YYYY.MM.DD', Data^.RepositoryDate)
else
CellText := '';
end
end
else if Column = 2 then
begin
if Data^.DataType = 2 then
CellText := Data^.Version
else
CellText := '';
end
else if Column = 3 then
else if TextType = ttNormal then
begin
case Data^.DataType of
1: if Data^.HasUpdate then
CellText := 'NEW';
2: begin
if (Data^.InstalledVersion <> '') and (Data^.UpdateVersion <> '') then
CellText := Data^.UpdateVersion
if Column = 0 then
begin
case Data^.DataType of
0: CellText := Data^.Repository;
1: if Trim(Data^.PackageDisplayName) = '' then
CellText := Data^.PackageName
else
CellText := '-';
end
CellText := Data^.PackageDisplayName;
2: CellText := Data^.PackageFileName;
3: CellText := rsMainFrm_VSTText_Description;
4: CellText := rsMainFrm_VSTText_Author;
5: CellText := rsMainFrm_VSTText_LazCompatibility;
6: CellText := rsMainFrm_VSTText_FPCCompatibility;
7: CellText := rsMainFrm_VSTText_SupportedWidgetsets;
8: CellText := rsMainFrm_VSTText_Packagetype;
9: CellText := rsMainFrm_VSTText_License;
10: CellText := rsMainFrm_VSTText_Dependecies;
11: CellText := rsMainFrm_VSTText_PackageInfo;
12: CellText := rsMainFrm_VSTText_Category;
13: CellText := rsMainFrm_VSTText_RepositoryFilename;
14: CellText := rsMainFrm_VSTText_RepositoryFileSize;
15: CellText := rsMainFrm_VSTText_RepositoryFileHash;
16: CellText := rsMainFrm_VSTText_RepositoryFileDate;
17: CellText := rsMainFrm_VSTText_HomePageURL;
18: CellText := rsMainFrm_VSTText_DownloadURL;
19: CellText := rsMainFrm_VSTText_SVNURL;
end;
end
else if Column = 1 then
begin
case Data^.DataType of
1: case Data^.InstallState of
//0: CellText := rsMainFrm_VSTText_Install0;
1: CellText := rsMainFrm_VSTText_Install1;
2: CellText := rsMainFrm_VSTText_Install2;
end;
2: begin
if Data^.InstalledVersion <> '' then
CellText := Data^.InstalledVersion
else
CellText := '-';
end
else
CellText := '';
end
end
else if Column = 2 then
begin
if Data^.DataType = 2 then
CellText := Data^.Version
else
CellText := '';
end
end
else if Column = 4 then
begin
case Data^.DataType of
0: CellText := '';
1: CellText := '';
2: case Ord(Data^.PackageState) of
0: CellText := rsMainFrm_VSTText_PackageState0;
1: CellText := rsMainFrm_VSTText_PackageState1;
2: CellText := rsMainFrm_VSTText_PackageState2;
3: begin
if not Data^.HasUpdate then
begin
if (Data^.UpdateVersion = '') then
else if Column = 3 then
begin
case Data^.DataType of
1: if Data^.HasUpdate then
CellText := 'NEW';
2: begin
if (Data^.InstalledVersion <> '') and (Data^.UpdateVersion <> '') then
CellText := Data^.UpdateVersion
else
CellText := '-';
end
else
CellText := '';
end
end
else if Column = 4 then
begin
case Data^.DataType of
0: CellText := '';
1: CellText := '';
2: case Ord(Data^.PackageState) of
0: CellText := rsMainFrm_VSTText_PackageState0;
1: CellText := rsMainFrm_VSTText_PackageState1;
2: CellText := rsMainFrm_VSTText_PackageState2;
3: begin
if not Data^.HasUpdate then
begin
if Data^.InstalledVersion >= Data^.Version then
CellText := rsMainFrm_VSTText_PackageState4
if (Data^.UpdateVersion = '') then
begin
if Data^.InstalledVersion >= Data^.Version then
CellText := rsMainFrm_VSTText_PackageState4
else
CellText := rsMainFrm_VSTText_PackageState5
end
else
CellText := rsMainFrm_VSTText_PackageState5
begin
if (Data^.InstalledVersion >= Data^.UpdateVersion) then
CellText := rsMainFrm_VSTText_PackageState4
else
CellText := rsMainFrm_VSTText_PackageState6
end;
end
else
begin
if (Data^.InstalledVersion >= Data^.UpdateVersion) then
CellText := rsMainFrm_VSTText_PackageState4
else
CellText := rsMainFrm_VSTText_PackageState6
end;
end
else
CellText := rsMainFrm_VSTText_PackageState6;
Data^.IsUpdated := CellText = rsMainFrm_VSTText_PackageState4;
end;
end;
3: CellText := GetDisplayString(Data^.Description);
4: CellText := Data^.Author;
5: CellText := Data^.LazCompatibility;
6: CellText := Data^.FPCCompatibility;
7: CellText := Data^.SupportedWidgetSet;
8: case Data^.PackageType of
ptRunAndDesignTime: CellText := rsMainFrm_VSTText_PackageType0;
ptDesignTime: CellText := rsMainFrm_VSTText_PackageType1;
ptRunTime: CellText := rsMainFrm_VSTText_PackageType2;
ptRunTimeOnly: CellText := rsMainFrm_VSTText_PackageType3;
end;
9: CellText := GetDisplayString(Data^.License);
10: CellText := Data^.Dependencies;
11: CellText := '';
12: CellText := TranslateCategories(Data^.Category);
13: CellText := Data^.RepositoryFileName;
14: CellText := FormatSize(Data^.RepositoryFileSize);
15: CellText := Data^.RepositoryFileHash;
16: CellText := FormatDateTime('YYYY.MM.DD', Data^.RepositoryDate);
17: CellText := Data^.HomePageURL;
18: CellText := Data^.DownloadURL;
19: CellText := Data^.SVNURL;
end;
end
else if Column = 5 then
begin
CellText := '';
end
CellText := rsMainFrm_VSTText_PackageState6;
Data^.IsUpdated := CellText = rsMainFrm_VSTText_PackageState4;
end;
end;
3: CellText := GetDisplayString(Data^.Description);
4: CellText := Data^.Author;
5: CellText := Data^.LazCompatibility;
6: CellText := Data^.FPCCompatibility;
7: CellText := Data^.SupportedWidgetSet;
8: case Data^.PackageType of
ptRunAndDesignTime: CellText := rsMainFrm_VSTText_PackageType0;
ptDesignTime: CellText := rsMainFrm_VSTText_PackageType1;
ptRunTime: CellText := rsMainFrm_VSTText_PackageType2;
ptRunTimeOnly: CellText := rsMainFrm_VSTText_PackageType3;
end;
9: CellText := GetDisplayString(Data^.License);
10: CellText := Data^.Dependencies;
11: CellText := '';
12: CellText := TranslateCategories(Data^.Category);
13: CellText := Data^.RepositoryFileName;
14: CellText := FormatSize(Data^.RepositoryFileSize);
15: CellText := Data^.RepositoryFileHash;
16: CellText := FormatDateTime('YYYY.MM.DD', Data^.RepositoryDate);
17: CellText := Data^.HomePageURL;
18: CellText := Data^.DownloadURL;
19: CellText := Data^.SVNURL;
end;
end
else if Column = 5 then
begin
CellText := '';
end
end;
end;
procedure TVisualTree.VSTHeaderClick(Sender: TVTHeader; Column: TColumnIndex;
@ -1539,66 +1565,80 @@ var
Data: PData;
begin
Data := FVST.GetNodeData(Node);
case column of
2: begin
if Data^.DataType = 2 then
begin
if (Data^.InstalledVersion = '') or ((Data^.InstalledVersion <> '') and (Data^.InstalledVersion < Data^.Version)) then
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold]
else
TargetCanvas.Font.Style := TargetCanvas.Font.Style - [fsBold];
end;
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := clBlack
else
TargetCanvas.Font.Color := clWhite;
end;
3: begin
case Data^.DataType of
1: TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
2: if Data^.HasUpdate then
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold]
else
TargetCanvas.Font.Style := TargetCanvas.Font.Style - [fsBold];
end;
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := clBlack
else
TargetCanvas.Font.Color := clWhite;
end;
4: begin
if (FHoverNode = Node) and (FHoverColumn = Column) and ((Data^.DataType = 17) or (Data^.DataType = 18)) then
begin
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsUnderline];
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := clBlue
else
TargetCanvas.Font.Color := clWhite;
end
else if (Data^.DataType = 2) and (Data^.IsUpdated) then
begin
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := clGreen
else
TargetCanvas.Font.Color := clWhite;
end
else
begin
if Node <> Sender.FocusedNode then
if TextType = ttStatic then
begin
if Column = 0 then
begin
if DaysBetween(Now, Data^.RepositoryDate) <= 31 then
begin
TargetCanvas.Font.Style := TargetCanvas.Font.Style - [fsBold];
TargetCanvas.Font.Color := clBlack;
end
end
end
else if TextType = ttNormal then
begin
case column of
2: begin
if Data^.DataType = 2 then
begin
if (Data^.InstalledVersion = '') or ((Data^.InstalledVersion <> '') and (Data^.InstalledVersion < Data^.Version)) then
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold]
else
TargetCanvas.Font.Style := TargetCanvas.Font.Style - [fsBold];
end;
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := clBlack
else
TargetCanvas.Font.Color := clWhite;
end;
end
else
begin
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := FVST.Font.Color
else
TargetCanvas.Font.Color := clWhite;
end;
end;
3: begin
case Data^.DataType of
1: TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
2: if Data^.HasUpdate then
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold]
else
TargetCanvas.Font.Style := TargetCanvas.Font.Style - [fsBold];
end;
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := clBlack
else
TargetCanvas.Font.Color := clWhite;
end;
4: begin
if (FHoverNode = Node) and (FHoverColumn = Column) and ((Data^.DataType = 17) or (Data^.DataType = 18)) then
begin
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsUnderline];
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := clBlue
else
TargetCanvas.Font.Color := clWhite;
end
else if (Data^.DataType = 2) and (Data^.IsUpdated) then
begin
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := clGreen
else
TargetCanvas.Font.Color := clWhite;
end
else
begin
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := clBlack
else
TargetCanvas.Font.Color := clWhite;
end;
end
else
begin
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := FVST.Font.Color
else
TargetCanvas.Font.Color := clWhite;
end;
end;
end
end;
procedure TVisualTree.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);