mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 12:29:24 +02:00
Opkman: Highlight recently added packages + sort package list by name.
git-svn-id: trunk@54035 -
This commit is contained in:
parent
f51dd9a202
commit
6d610db93b
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -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/Error.png -text svneol=unset#image/png
|
||||||
components/onlinepackagemanager/images/Tree_Buttons/FileVersion.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/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/Ok.png -text svneol=unset#image/png
|
||||||
components/onlinepackagemanager/images/Tree_Buttons/Refresh.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
|
components/onlinepackagemanager/images/Tree_Buttons/Refresh1.png -text svneol=unset#image/png
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 573 B |
@ -525,6 +525,14 @@ object MainFrm: TMainFrm
|
|||||||
Caption = 'Hide JSON'
|
Caption = 'Hide JSON'
|
||||||
OnClick = miJSONShowClick
|
OnClick = miJSONShowClick
|
||||||
end
|
end
|
||||||
|
object miJSONSort: TMenuItem
|
||||||
|
Caption = 'Sort by name'
|
||||||
|
OnClick = miJSONSortClick
|
||||||
|
end
|
||||||
|
object miSaveToFile: TMenuItem
|
||||||
|
Caption = 'Save to file'
|
||||||
|
OnClick = miSaveToFileClick
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object pmCreate: TPopupMenu
|
object pmCreate: TPopupMenu
|
||||||
left = 144
|
left = 144
|
||||||
@ -546,7 +554,7 @@ object MainFrm: TMainFrm
|
|||||||
left = 64
|
left = 64
|
||||||
top = 163
|
top = 163
|
||||||
Bitmap = {
|
Bitmap = {
|
||||||
4C69190000001000000010000000A38D780095806C12B3A18B9FC5B49FFEC6B5
|
4C691A0000001000000010000000A38D780095806C12B3A18B9FC5B49FFEC6B5
|
||||||
A0FFC6B5A0FFC6B5A0FFC6B5A1FFBEAD98E3A5917C4BFFFFFF00988674000000
|
A0FFC6B5A0FFC6B5A0FFC6B5A1FFBEAD98E3A5917C4BFFFFFF00988674000000
|
||||||
0000000000000000000000000000FFEAD300AC9A886AD5C9BBF9E3D9CBFFE2D9
|
0000000000000000000000000000FFEAD300AC9A886AD5C9BBF9E3D9CBFFE2D9
|
||||||
CAFFE2D9CAFFE2D9CAFFE3D9CAFFE0D6C8FFC3B4A4CB84715C189B8874000000
|
CAFFE2D9CAFFE2D9CAFFE3D9CAFFE0D6C8FFC3B4A4CB84715C189B8874000000
|
||||||
@ -1346,7 +1354,39 @@ object MainFrm: TMainFrm
|
|||||||
B3F4A1A1A18D717171164F4F4F014F4F4F0170707016A0A0A08DB3B3B3F4B6B6
|
B3F4A1A1A18D717171164F4F4F014F4F4F0170707016A0A0A08DB3B3B3F4B6B6
|
||||||
B6F56D6D6D064D4D4D004D4D4D004D4D4D004D4D4D006565650B9C9C9C877676
|
B6F56D6D6D064D4D4D004D4D4D004D4D4D004D4D4D006565650B9C9C9C877676
|
||||||
761F515151014D4D4D004D4D4D004D4D4D004D4D4D00505050017575751F9C9C
|
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
|
end
|
||||||
object imTBNor: TImageList
|
object imTBNor: TImageList
|
||||||
@ -3415,4 +3455,10 @@ object MainFrm: TMainFrm
|
|||||||
FF00FFFFFF00FFFFFF00FFFFFF00
|
FF00FFFFFF00FFFFFF00FFFFFF00
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
object SD: TSaveDialog
|
||||||
|
DefaultExt = '.*.json'
|
||||||
|
Filter = '*.json|*.json'
|
||||||
|
left = 248
|
||||||
|
top = 288
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -44,10 +44,13 @@ type
|
|||||||
cbPackageType: TComboBox;
|
cbPackageType: TComboBox;
|
||||||
imTBDis: TImageList;
|
imTBDis: TImageList;
|
||||||
MenuItem1: TMenuItem;
|
MenuItem1: TMenuItem;
|
||||||
|
miSaveToFile: TMenuItem;
|
||||||
|
miJSONSort: TMenuItem;
|
||||||
miResetRating: TMenuItem;
|
miResetRating: TMenuItem;
|
||||||
miCopyToClpBrd: TMenuItem;
|
miCopyToClpBrd: TMenuItem;
|
||||||
miCreateRepository: TMenuItem;
|
miCreateRepository: TMenuItem;
|
||||||
miCreateRepositoryPackage: TMenuItem;
|
miCreateRepositoryPackage: TMenuItem;
|
||||||
|
SD: TSaveDialog;
|
||||||
tbCleanUp1: TToolButton;
|
tbCleanUp1: TToolButton;
|
||||||
tbOptions: TToolButton;
|
tbOptions: TToolButton;
|
||||||
cbAll: TCheckBox;
|
cbAll: TCheckBox;
|
||||||
@ -82,7 +85,9 @@ type
|
|||||||
procedure miCopyToClpBrdClick(Sender: TObject);
|
procedure miCopyToClpBrdClick(Sender: TObject);
|
||||||
procedure miCreateRepositoryClick(Sender: TObject);
|
procedure miCreateRepositoryClick(Sender: TObject);
|
||||||
procedure miCreateRepositoryPackageClick(Sender: TObject);
|
procedure miCreateRepositoryPackageClick(Sender: TObject);
|
||||||
|
procedure miJSONSortClick(Sender: TObject);
|
||||||
procedure miResetRatingClick(Sender: TObject);
|
procedure miResetRatingClick(Sender: TObject);
|
||||||
|
procedure miSaveToFileClick(Sender: TObject);
|
||||||
procedure pnToolBarResize(Sender: TObject);
|
procedure pnToolBarResize(Sender: TObject);
|
||||||
procedure tbCleanUpClick(Sender: TObject);
|
procedure tbCleanUpClick(Sender: TObject);
|
||||||
procedure tbDownloadClick(Sender: TObject);
|
procedure tbDownloadClick(Sender: TObject);
|
||||||
@ -920,6 +925,42 @@ begin
|
|||||||
end;
|
end;
|
||||||
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;
|
procedure TMainFrm.SetupControls;
|
||||||
var
|
var
|
||||||
I: Integer;
|
I: Integer;
|
||||||
|
@ -291,6 +291,7 @@ type
|
|||||||
function IsInstalledVersionOk(PackageDependency: TPackageDependency; InstalledVersion: String): Boolean;
|
function IsInstalledVersionOk(PackageDependency: TPackageDependency; InstalledVersion: String): Boolean;
|
||||||
function GetPackageInstallState(const APackage: TPackage): Integer; overload;
|
function GetPackageInstallState(const APackage: TPackage): Integer; overload;
|
||||||
procedure DeleteDownloadedZipFiles;
|
procedure DeleteDownloadedZipFiles;
|
||||||
|
procedure Sort;
|
||||||
public
|
public
|
||||||
property Count: Integer read GetCount;
|
property Count: Integer read GetCount;
|
||||||
property DownloadCount: Integer read GetDownloadCount;
|
property DownloadCount: Integer read GetDownloadCount;
|
||||||
@ -1439,6 +1440,19 @@ begin
|
|||||||
end;
|
end;
|
||||||
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;
|
function TSerializablePackages.IsDependencyOk(PackageDependency: TPackageDependency;
|
||||||
DependencyPackage: TPackageFile): Boolean;
|
DependencyPackage: TPackageFile): Boolean;
|
||||||
|
@ -31,7 +31,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, Controls, Graphics, Menus, Dialogs, Forms, LCLIntf, contnrs,
|
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;
|
opkman_serializablepackages;
|
||||||
|
|
||||||
|
|
||||||
@ -247,6 +247,7 @@ begin
|
|||||||
TreeOptions.MiscOptions := [toCheckSupport, toFullRepaintOnResize, toInitOnSave, toWheelPanning];
|
TreeOptions.MiscOptions := [toCheckSupport, toFullRepaintOnResize, toInitOnSave, toWheelPanning];
|
||||||
TreeOptions.PaintOptions := [toHideFocusRect, toAlwaysHideSelection, toPopupMode, toShowButtons, toShowDropmark, toShowRoot, toThemeAware];
|
TreeOptions.PaintOptions := [toHideFocusRect, toAlwaysHideSelection, toPopupMode, toShowButtons, toShowDropmark, toShowRoot, toThemeAware];
|
||||||
TreeOptions.SelectionOptions := [toFullRowSelect, toRightClickSelect];
|
TreeOptions.SelectionOptions := [toFullRowSelect, toRightClickSelect];
|
||||||
|
TreeOptions.StringOptions := [toShowStaticText];
|
||||||
TreeOptions.AutoOptions := [toAutoTristateTracking];
|
TreeOptions.AutoOptions := [toAutoTristateTracking];
|
||||||
OnBeforeCellPaint := @VSTBeforeCellPaint;
|
OnBeforeCellPaint := @VSTBeforeCellPaint;
|
||||||
OnChecking := @VSTChecking;
|
OnChecking := @VSTChecking;
|
||||||
@ -322,6 +323,7 @@ begin
|
|||||||
Data^.HasUpdate := SerializablePackages.Items[I].HasUpdate;
|
Data^.HasUpdate := SerializablePackages.Items[I].HasUpdate;
|
||||||
Data^.DisableInOPM := SerializablePackages.Items[I].DisableInOPM;
|
Data^.DisableInOPM := SerializablePackages.Items[I].DisableInOPM;
|
||||||
Data^.Rating := SerializablePackages.Items[I].Rating;
|
Data^.Rating := SerializablePackages.Items[I].Rating;
|
||||||
|
Data^.RepositoryDate := SerializablePackages.Items[I].RepositoryDate;
|
||||||
FVST.IsDisabled[Node] := Data^.DisableInOPM;
|
FVST.IsDisabled[Node] := Data^.DisableInOPM;
|
||||||
Data^.DataType := 1;
|
Data^.DataType := 1;
|
||||||
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
|
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
|
||||||
@ -1346,8 +1348,17 @@ var
|
|||||||
begin
|
begin
|
||||||
Data := FVST.GetNodeData(Node);
|
Data := FVST.GetNodeData(Node);
|
||||||
if Column = 0 then
|
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
|
ImageIndex := Data^.DataType
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function TVisualTree.GetDisplayString(const AStr: String): String;
|
function TVisualTree.GetDisplayString(const AStr: String): String;
|
||||||
var
|
var
|
||||||
@ -1374,6 +1385,20 @@ var
|
|||||||
Data: PData;
|
Data: PData;
|
||||||
begin
|
begin
|
||||||
Data := FVST.GetNodeData(Node);
|
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
|
if Column = 0 then
|
||||||
begin
|
begin
|
||||||
case Data^.DataType of
|
case Data^.DataType of
|
||||||
@ -1503,6 +1528,7 @@ begin
|
|||||||
CellText := '';
|
CellText := '';
|
||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TVisualTree.VSTHeaderClick(Sender: TVTHeader; Column: TColumnIndex;
|
procedure TVisualTree.VSTHeaderClick(Sender: TVTHeader; Column: TColumnIndex;
|
||||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||||
@ -1539,6 +1565,19 @@ var
|
|||||||
Data: PData;
|
Data: PData;
|
||||||
begin
|
begin
|
||||||
Data := FVST.GetNodeData(Node);
|
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
|
case column of
|
||||||
2: begin
|
2: begin
|
||||||
if Data^.DataType = 2 then
|
if Data^.DataType = 2 then
|
||||||
@ -1599,6 +1638,7 @@ begin
|
|||||||
TargetCanvas.Font.Color := clWhite;
|
TargetCanvas.Font.Color := clWhite;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
end
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TVisualTree.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
procedure TVisualTree.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||||||
|
Loading…
Reference in New Issue
Block a user