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,8 +1348,17 @@ var
begin
Data := FVST.GetNodeData(Node);
if Column = 0 then
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;
var
@ -1374,6 +1385,20 @@ var
Data: PData;
begin
Data := FVST.GetNodeData(Node);
if TextType = ttStatic then
begin
if Column = 0 then
begin
if DaysBetween(Now, Data^.RepositoryDate) <= 31 then
CellText := '- ' + FormatDateTime('YYYY.MM.DD', Data^.RepositoryDate)
else
CellText := '';
end
else
CellText := '';
end
else if TextType = ttNormal then
begin
if Column = 0 then
begin
case Data^.DataType of
@ -1503,6 +1528,7 @@ begin
CellText := '';
end
end;
end;
procedure TVisualTree.VSTHeaderClick(Sender: TVTHeader; Column: TColumnIndex;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
@ -1539,6 +1565,19 @@ var
Data: PData;
begin
Data := FVST.GetNodeData(Node);
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
@ -1599,6 +1638,7 @@ begin
TargetCanvas.Font.Color := clWhite;
end;
end;
end
end;
procedure TVisualTree.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);