Refactoring.

git-svn-id: trunk@55792 -
This commit is contained in:
balazs 2017-09-07 06:52:22 +00:00
parent f0c3017757
commit f5b1616c88
9 changed files with 2437 additions and 8 deletions

4
.gitattributes vendored
View File

@ -3459,8 +3459,12 @@ components/onlinepackagemanager/opkman_const.pas svneol=native#text/pascal
components/onlinepackagemanager/opkman_contributors.txt svneol=native#text/plain
components/onlinepackagemanager/opkman_createjsonforupdates.lfm svneol=native#text/plain
components/onlinepackagemanager/opkman_createjsonforupdates.pas svneol=native#text/pascal
components/onlinepackagemanager/opkman_createjsonforupdatesfrm.lfm svneol=native#text/plain
components/onlinepackagemanager/opkman_createjsonforupdatesfrm.pas svneol=native#text/pascal
components/onlinepackagemanager/opkman_createrepositorypackage.lfm svneol=native#text/plain
components/onlinepackagemanager/opkman_createrepositorypackage.pas svneol=native#text/pascal
components/onlinepackagemanager/opkman_createrepositorypackagefrm.lfm svneol=native#text/plain
components/onlinepackagemanager/opkman_createrepositorypackagefrm.pas svneol=native#text/pascal
components/onlinepackagemanager/opkman_downloader.pas svneol=native#text/pascal
components/onlinepackagemanager/opkman_fpcdef.inc svneol=native#text/pascal
components/onlinepackagemanager/opkman_installer.pas svneol=native#text/pascal

View File

@ -83,8 +83,8 @@
<UnitName Value="opkman_options"/>
</Item14>
<Item15>
<Filename Value="opkman_createrepositorypackage.pas"/>
<UnitName Value="opkman_createrepositorypackage"/>
<Filename Value="opkman_createrepositorypackagefrm.pas"/>
<UnitName Value="opkman_createrepositorypackagefrm"/>
<ResourceBaseClass Value="Form"/>
</Item15>
<Item16>
@ -100,8 +100,8 @@
<UnitName Value="opkman_updates"/>
</Item18>
<Item19>
<Filename Value="opkman_createjsonforupdates.pas"/>
<UnitName Value="opkman_createjsonforupdates"/>
<Filename Value="opkman_createjsonforupdatesfrm.pas"/>
<UnitName Value="opkman_createjsonforupdatesfrm"/>
</Item19>
<Item20>
<Filename Value="opkman_uploader.pas"/>

View File

@ -12,8 +12,8 @@ uses
opkman_visualtree, opkman_serializablepackages, opkman_downloader,
opkman_common, opkman_progressfrm, opkman_zipper, opkman_timer,
opkman_installer, opkman_packagelistfrm, opkman_options,
opkman_createrepositorypackage, opkman_categoriesfrm,
opkman_packagedetailsfrm, opkman_updates, opkman_createjsonforupdates,
opkman_createrepositorypackagefrm, opkman_categoriesfrm,
opkman_packagedetailsfrm, opkman_updates, opkman_createjsonforupdatesfrm,
opkman_uploader, opkman_repositories, LazarusPackageIntf;
implementation

View File

@ -349,6 +349,8 @@ resourcestring
rsCreateRepositoryPackageFrm_bOptions_Hint = 'Open options dialog';
rsCreateRepositoryPackageFrm_bCreate_Caption = 'Create';
rsCreateRepositoryPackageFrm_bCreate_Hint = 'Create files locally';
rsCreateRepositoryPackageFrm_bCreate_Caption1 = 'Add';
rsCreateRepositoryPackageFrm_bCreate_Hint1 = 'Add package to repository';
rsCreateRepositoryPackageFrm_bSubmit_Caption = 'Submit';
rsCreateRepositoryPackageFrm_bSubmit_Hint = 'Submit files to remote server';
rsCreateRepositoryPackageFrm_bCancel_Caption = 'Cancel';

View File

@ -0,0 +1,173 @@
object CreateJSONForUpdatesFrm: TCreateJSONForUpdatesFrm
Left = 524
Height = 304
Top = 275
Width = 580
BorderIcons = [biSystemMenu]
Caption = 'CreateJSONForUpdatesFrm'
ClientHeight = 304
ClientWidth = 580
Constraints.MinHeight = 200
Constraints.MinWidth = 300
OnCreate = FormCreate
OnDestroy = FormDestroy
PopupMode = pmExplicit
Position = poOwnerFormCenter
LCLVersion = '1.9.0.0'
object pnButtons: TPanel
Left = 0
Height = 41
Top = 263
Width = 580
Align = alBottom
BevelOuter = bvNone
ClientHeight = 41
ClientWidth = 580
TabOrder = 1
object bCreate: TButton
Left = 415
Height = 26
Top = 8
Width = 75
Anchors = [akTop, akRight]
Caption = 'Create'
OnClick = bCreateClick
TabOrder = 0
end
object bClose: TButton
Left = 491
Height = 26
Top = 8
Width = 75
Anchors = [akTop, akRight]
Caption = 'Close'
ModalResult = 2
TabOrder = 1
end
object bHelp: TButton
Left = 339
Height = 26
Top = 8
Width = 75
Anchors = [akTop, akRight]
Caption = 'Help'
OnClick = bHelpClick
TabOrder = 2
end
end
object pnTop: TPanel
Left = 0
Height = 72
Top = 0
Width = 580
Align = alTop
BevelOuter = bvNone
ClientHeight = 72
ClientWidth = 580
TabOrder = 0
Visible = False
object lbLinkToZip: TLabel
Left = 15
Height = 15
Top = 16
Width = 104
Caption = 'Link to package zip:'
ParentColor = False
end
object edLinkToZip: TEdit
Left = 15
Height = 23
Top = 32
Width = 498
Anchors = [akTop, akLeft, akRight]
TabOrder = 0
end
object bTest: TButton
Left = 516
Height = 25
Top = 31
Width = 50
Anchors = [akTop, akRight]
Caption = 'Test'
OnClick = bTestClick
TabOrder = 1
end
end
object imTree: TImageList
left = 16
top = 144
Bitmap = {
4C69020000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00E1F2F8007DC3DCFF76C0DCFFDCEFF700FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F0F9
FC0099CEE00055B6D9FF9CD5EAFF88CCE7FF4DAFD6FF8FC7DD00ECF6FB00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFEFE00AFD8E60063BD
DBFF92CFE5FFE6F8FCFFE3F6FEFFAFDDF2FFB2E4F7FF72C0E1FF55ADD5FFA3CF
E100F8FCFD00FFFFFF00FFFFFF00FFFFFF00C7E4EE0076C4DEFF7EC6E0FFD1EE
F7FFF6FFFFFFF0FEFFFFCBEDFBFF50ADDAFF8BD7F7FFAAE1F9FF95D6F2FF62B2
DBFF61AED4FFBAD9E800FFFFFF0089CADE004EB5D9FFA5D9EDFFD2EBF5FFBEDE
EDFF95C9DEFF89C3DBFF70B8D6FF69B9DDFF90D7F5FF7FCFF5FF9DDBF8FFAAE3
FAFF84CAECFF51A6D5FF74B3D5004FB4D8FFE1F8FEFFCDEBF9FF92D2EDFF84CC
EBFF6FBFE5FF56B1DBFF3B94C8FFCEECFAFFD9F5FFFFB9EAFFFF95DFFEFF77D5
FFFFA5E4FFFF84DCFBFF3193C9FF55B6D8FFE2F8FDFFD4F3FFFFB0E4FAFF86CF
F1FF7FD0F5FF78D0F5FF4CB1E4FFB0E4FAFFB6E9FFFF9BE1FFFF78D6FEFF40BD
F5FF3DB5E9FF90D5F1FF3895CAFF53B4D7FFE2F6FDFFDAF4FFFFD5F3FFFFBDEB
FFFF89D5F7FF69C9F5FF4CB4E9FF8DDAFBFF8CDCFFFF009600FF009600FF0096
00FF4FBBE8FF8CD0F0FF3693C9FF51B1D6FFE2F6FCFFD7F4FFFFCEF2FFFFC8EF
FFFFBAEBFFFF92DBFBFF56C1F1FF48C2F9FF3BBDF0FF009600FF00C000FF0096
00FF47B1E6FF88CAEEFF3490C8FF4EAED6FFE2F6FCFFD4F3FFFFC9F0FFFFBEED
FFFFB3EAFFFFADE7FFFF7CD9FEFF48C7EFFF43C4EAFF009600FF00C000FF0096
00FF40A7E1FF83C5ECFF328DC7FF45A9D3FFE7FBFEFFDDF6FFFFC1EFFFFFB7EB
FFFFABE8FFFFA4E4FFFF009600FF009600FF009600FF009600FF00C000FF0096
00FF009600FF009600FF009600FF6FB8D80077BDDCFFBFE5F6FFDBF6FFFFC1EE
FFFFA5E5FFFF9FE3FFFF009600FF00C000FF00C000FF00C000FF00C000FF00C0
00FF00C000FF00C000FF009600FFFAFDFE00AFD8EB0055ABD5FF7DC0E0FFC7EE
FCFFCCF2FFFFA8E8FFFF009600FF009600FF009600FF009600FF00C000FF0096
00FF009600FF009600FF009600FFFFFFFF00FFFFFF00ECF4F90093C9E3FF3F9C
CEFF82C4E5FFCCF4FFFFC4EFFFFF8BD2F1FF8ACEF0FF009600FF00C000FF0096
00FFD1E9E100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D7E9
F20078B7DBFF2D8EC8FF8FCDEBFF6FB7E2FF408EC8FF009600FF00C000FF0096
00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BDD8E8005FA7D3FF56A2D0FFB5D3E500009600FF009600FF0096
00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF004DB4D82B4BB2D8AF4AB0D7BC48AED631FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004EB6
D9164DB4D8844BB2D7EF9CD5EAFF88CCE7FF45ACD5F344AAD48C42A7D31AFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004FB7DA054EB6D9654CB4
D8DB92CFE5FFE6F8FCFFE3F6FEFFAFDDF2FFB2E4F7FF72C0E1FF3FA4D1E03DA2
D06C3BA0CF09FFFFFF00FFFFFF00FFFFFF004FB7D9464EB5D9C27EC6E0FFD1EE
F7FFF6FFFFFFF0FEFFFFCBEDFBFF50ADDAFF8BD7F7FFAAE1F9FF95D6F2FF62B2
DBFF399DCEC8369ACD4DFFFFFF004FB7D99F4DB5D9FEA5D9EDFFD2EBF5FFBEDE
EDFF95C9DEFF89C3DBFF70B8D6FF6ABADEFF90D7F5FF7FCFF5FF9DDBF8FFAAE3
FAFF84CAECFF51A6D5FF3295CBA64DB4D8FBE1F8FEFFCDEBF9FF92D2EDFF84CC
EBFF6FBFE5FF56B1DBFF3B94C8FFCEECFAFFD9F5FFFFB9EAFFFF95DFFEFF77D5
FFFFA5E4FFFF84DCFBFF2F92C9FB4BB2D7F0E2F8FDFFD4F3FFFFB0E4FAFF86CF
F1FF7FD0F5FF78D0F5FF4CB1E4FFB0E4FAFFB6E9FFFF9BE1FFFF78D6FEFF40BD
F5FF3DB5E9FF90D5F1FF2D8FC8F049B0D6F8DBF6F8FFD9F3FFFFD5F3FFFFBDEB
FFFF89D5F7FF69C9F5FF4CB4E9FF8DDAFBFF8CDCFFFF48C4F9FF38B6ECFF48BF
E8FF48B8E7FF90D3F1FF2B8DC7FA47ADD5FB92E7D4FF80E5D8FFC8F1FDFFC8EF
FFFFBAEBFFFF92DBFBFF56C1F1FF48C2F9FF3BBDF0FF47C5ECFF45BDE9FF43B5
E6FF39ADD4FF88D2CCFF288AC6FF44AAD4F7A8EDE2FF41D6B3FF49D8BAFF8CE4
E4FFB3EAFFFFADE7FFFF7CD9FEFF48C7EFFF43C4EAFF43BEE8FF3DB3DCFF2DAE
A9FF29B188FF85D3BBFF2687C5FE42A8D3F9E7FBFEFFD0F3F9FF46D7B8FF39D4
AEFF50D9C3FF8EE2F2FF96E1FEFF48C6EBFF3FBCE3FF30AFB1FF24AC84FF24AD
81FF67BFC2FF83C4ECFF2485C4F840A5D2BB77BDDCFFBFE5F6FFDBF6FFFF9EE8
EBFF37D3ACFF37D2ACFF55D8D1FF37B8BCFF24AA85FF22AA7CFF4DB7A9FF86C6
EBFF74B3E4FF4A90CAFF2283C3C13DA2D0063BA0CF65399DCEDB7DC0E0FFC7EE
FCFFCBF2FEFF65DDD0FF33D1A8FF22AA7CFF35B091FF89CBE8FF82C1EBFF5397
D0FF2384C3E02282C26D2080C20AFFFFFF00FFFFFF00369ACD163498CC853295
CBEF82C4E5FFCCF4FFFFBCEEFAFF88D1E4FF8ACEF0FF5FA4D7FF2586C4F32384
C38D2182C21BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003093
CA2B2E90C9A52C8EC8FE8FCDEBFF6FB7E2FF408EC8FF2485C4AC2383C331FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF002A8BC6462889C5BE2687C5C42485C44DFFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00
}
end
object SD: TSaveDialog
DefaultExt = '.json'
Filter = '*.json|*.json'
left = 75
top = 145
end
end

View File

@ -0,0 +1,377 @@
{
***************************************************************************
* *
* This source is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This code is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. *
* *
***************************************************************************
Author: Balázs Székely
}
unit opkman_createjsonforupdatesfrm;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, fpjson,
// LCL
Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, LCLIntf,
// OpkMan
opkman_serializablepackages, opkman_const, opkman_common, opkman_updates,
opkman_VirtualTrees, opkman_options;
type
{ TCreateJSONForUpdatesFrm }
TCreateJSONForUpdatesFrm = class(TForm)
bClose: TButton;
bCreate: TButton;
bHelp: TButton;
bTest: TButton;
edLinkToZip: TEdit;
imTree: TImageList;
lbLinkToZip: TLabel;
pnTop: TPanel;
pnButtons: TPanel;
SD: TSaveDialog;
procedure bCreateClick(Sender: TObject);
procedure bHelpClick(Sender: TObject);
procedure bTestClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FVST: TVirtualStringTree;
FMetaPackage: TMetaPackage;
FSortCol: Integer;
FSortDir: opkman_VirtualTrees.TSortDirection;
procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; {%H-}TextType: TVSTTextType; var CellText: String);
procedure VSTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
{%H-}Kind: TVTImageKind; Column: TColumnIndex; var {%H-}Ghosted: Boolean;
var ImageIndex: Integer);
procedure VSTCompareNodes(Sender: TBaseVirtualTree; Node1,
Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
procedure VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
procedure VSTHeaderClick(Sender: TVTHeader; Column: TColumnIndex;
Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer);
public
procedure PopluateTree;
end;
var
CreateJSONForUpdatesFrm: TCreateJSONForUpdatesFrm;
implementation
{$R *.lfm}
{ TCreateJSONForUpdatesFrm }
type
PData = ^TData;
TData = record
FName: string;
FVersion: String;
FForceNotify: Boolean;
FInternalVersion: Integer;
FImageIndex: Integer;
end;
procedure TCreateJSONForUpdatesFrm.FormCreate(Sender: TObject);
begin
if not Options.UseDefaultTheme then
Self.Color := clBtnFace;
Caption := rsCreateJSONForUpdatesFrm_Caption;
lbLinkToZip.Caption := rsCreateJSONForUpdatesFrm_lbLinkToZip_Caption;
bTest.Caption := rsCreateJSONForUpdatesFrm_bTest_Caption;
bCreate.Caption := rsCreateJSONForUpdatesFrm_bCreate_Caption;
bHelp.Caption := rsCreateJSONForUpdatesFrm_bHelp_Caption;
bClose.Caption := rsCreateJSONForUpdatesFrm_bClose_Caption;
FVST := TVirtualStringTree.Create(nil);
with FVST do
begin
Parent := Self;
Align := alClient;
Anchors := [akLeft, akTop, akRight];
Images := imTree;
if not Options.UseDefaultTheme then
Color := clBtnFace;
DefaultNodeHeight := 25;
Indent := 0;
TabOrder := 1;
DefaultText := '';
Header.AutoSizeIndex := 0;
Header.Height := 25;
Colors.BorderColor := clBlack;
BorderSpacing.Top := 15;
BorderSpacing.Left := 15;
BorderSpacing.Right := 15;
BorderSpacing.Bottom := 0;
with Header.Columns.Add do
begin
Position := 0;
Width := 250;
Text := rsCreateJSONForUpdatesFrm_Column0_Text;
end;
with Header.Columns.Add do
begin
Position := 1;
Width := 75;
Text := rsCreateJSONForUpdatesFrm_Column1_Text;
Alignment := taCenter;
end;
with Header.Columns.Add do
begin
Position := 2;
Width := 100;
Text := rsCreateJSONForUpdatesFrm_Column2_Text;
Alignment := taCenter;
Options := Options - [coVisible];
end;
with Header.Columns.Add do
begin
Position := 3;
Width := 100;
Text := rsCreateJSONForUpdatesFrm_Column3_Text;
Alignment := taCenter;
Options := Options - [coVisible];
end;
Header.Options := [hoAutoResize, hoRestrictDrag, hoShowSortGlyphs, hoAutoSpring, hoVisible];
Header.SortColumn := 0;
TabOrder := 2;
TreeOptions.MiscOptions := [toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning, toCheckSupport, toEditable];
TreeOptions.PaintOptions := [toHideFocusRect, toPopupMode, toShowButtons, toShowDropmark, toThemeAware, toUseBlendedImages];
TreeOptions.SelectionOptions := [toFullRowSelect, toRightClickSelect];
TreeOptions.AutoOptions := [toAutoTristateTracking];
OnGetText := @VSTGetText;
OnGetImageIndex := @VSTGetImageIndex;
OnCompareNodes := @VSTCompareNodes;
OnHeaderClick := @VSTHeaderClick;
OnFreeNode := @VSTFreeNode;
end;
FVST.NodeDataSize := SizeOf(TData);
end;
procedure TCreateJSONForUpdatesFrm.FormDestroy(Sender: TObject);
begin
FVST.Free;
end;
procedure TCreateJSONForUpdatesFrm.bTestClick(Sender: TObject);
begin
if Trim(edLinkToZip.Text) = '' then
begin
MessageDlgEx(rsCreateJSONForUpdatesFrm_Message2, mtInformation, [mbOk], Self);
edLinkToZip.SetFocus;
Exit;
end;
OpenURL(edLinkToZip.Text);
end;
procedure TCreateJSONForUpdatesFrm.bCreateClick(Sender: TObject);
var
UpdatePkg: TUpdatePackage;
UpdateLazPkgs: TUpdateLazPackages;
JSON: TJSONStringType;
Ms: TMemoryStream;
Node: PVirtualNode;
Data: PData;
CanClose: Boolean;
ErrMsg: String;
begin
if FVST.CheckedCount = 0 then
begin
MessageDlgEx(rsCreateJSONForUpdatesFrm_Message3, mtInformation, [mbOk], Self);
Exit;
end;
CanClose := False;
if FMetaPackage.DisplayName <> '' then
SD.FileName := 'update_' + FMetaPackage.DisplayName
else
SD.FileName := 'update_' + FMetaPackage.Name;
if SD.Execute then
begin
UpdatePkg := TUpdatePackage.Create;
try
UpdatePkg.UpdatePackageData.Name := FMetaPackage.Name;
UpdatePkg.UpdatePackageData.DownloadZipURL := edLinkToZip.Text;
Node := FVST.GetFirst;
while Assigned(Node) do
begin
if FVST.CheckState[Node] = csCheckedNormal then
begin
Data := FVST.GetNodeData(Node);
UpdateLazPkgs := TUpdateLazPackages(UpdatePkg.UpdateLazPackages.Add);
UpdateLazPkgs.Name := Data^.FName;
UpdateLazPkgs.Version := Data^.FVersion;
UpdateLazPkgs.ForceNotify := Data^.FForceNotify;
UpdateLazPkgs.InternalVersion := Data^.FInternalVersion;
end;
Node := FVST.GetNext(Node);
end;
JSON := '';
if UpdatePkg.SaveToJSON(JSON) then
begin
JSON := StringReplace(JSON, '\/', '/', [rfReplaceAll]);
Ms := TMemoryStream.Create;
try
Ms.Write(Pointer(JSON)^, Length(JSON));
Ms.Position := 0;
Ms.SaveToFile(SD.FileName);
finally
MS.Free;
end;
CanClose := True;
MessageDlgEx(rsCreateJSONForUpdatesFrm_Message4, mtInformation, [mbOk], Self);
end
else
begin
ErrMsg := StringReplace(UpdatePkg.LastError, '"', '', [rfReplaceAll]);
MessageDlgEx(rsCreateJSONForUpdatesFrm_Error1 + sLineBreak + '"' + ErrMsg + '"', mtError, [mbOk], Self);
end;
finally
UpdatePkg.Free;
end;
end;
if CanClose then
Close
end;
procedure TCreateJSONForUpdatesFrm.bHelpClick(Sender: TObject);
begin
OpenURL(cHelpPage_CreateExternalJSON);
end;
procedure TCreateJSONForUpdatesFrm.VSTGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: String);
var
Data: PData;
begin
Data := FVST.GetNodeData(Node);
case Column of
0: CellText := Data^.FName;
1: CellText := Data^.FVersion;
2: CellText := BoolToStr(Data^.FForceNotify, True);
3: CellText := IntToStr(Data^.FInternalVersion);
end;
end;
procedure TCreateJSONForUpdatesFrm.VSTGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
var
Data: PData;
begin
Data := FVST.GetNodeData(Node);
if Column = 0 then
ImageIndex := Data^.FImageIndex;
end;
procedure TCreateJSONForUpdatesFrm.VSTCompareNodes(Sender: TBaseVirtualTree;
Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
var
Data1: PData;
Data2: PData;
begin
Data1 := Sender.GetNodeData(Node1);
Data2 := Sender.GetNodeData(Node2);
case Column of
0: Result := CompareText(Data1^.FName, Data2^.FName);
1: Result := CompareText(Data1^.FVersion, Data2^.FVersion);
end;
end;
procedure TCreateJSONForUpdatesFrm.VSTFreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
Data: PData;
begin
Data := FVST.GetNodeData(Node);
Finalize(Data^)
end;
procedure TCreateJSONForUpdatesFrm.VSTHeaderClick(Sender: TVTHeader;
Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Column > 1 then
Exit;
if Button = mbLeft then
begin
with Sender, Treeview do
begin
if (SortColumn = NoColumn) or (SortColumn <> Column) then
begin
SortColumn := Column;
SortDirection := opkman_VirtualTrees.sdAscending;
end
else
begin
if SortDirection = opkman_VirtualTrees.sdAscending then
SortDirection := opkman_VirtualTrees.sdDescending
else
SortDirection := opkman_VirtualTrees.sdAscending;
FSortDir := SortDirection;
end;
SortTree(SortColumn, SortDirection, False);
FSortCol := Sender.SortColumn;
end;
end;
end;
procedure TCreateJSONForUpdatesFrm.PopluateTree;
var
I, J: Integer;
Node: PVirtualNode;
Data: PData;
LazarusPkg: TLazarusPackage;
begin
for I := 0 to SerializablePackages.Count - 1 do
begin
FMetaPackage := SerializablePackages.Items[I];
if FMetaPackage.Checked then
begin
Caption := Caption + ' "' + FMetaPackage.DisplayName +'"';
for J := 0 to FMetaPackage.LazarusPackages.Count - 1 do
begin
LazarusPkg := TLazarusPackage(FMetaPackage.LazarusPackages.Items[J]);
if LazarusPkg.Checked then
begin
Node := FVST.AddChild(nil);
Node^.CheckType := ctTriStateCheckBox;
FVST.CheckState[Node] := csCheckedNormal;
Data := FVST.GetNodeData(Node);
Data^.FName := LazarusPkg.Name;
Data^.FVersion := LazarusPkg.VersionAsString;
Data^.FForceNotify := False;
Data^.FInternalVersion := 1;
Data^.FImageIndex := 1;
end;
end;
Break;
end;
end;
end;
end.

View File

@ -0,0 +1,739 @@
object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm
Left = 550
Height = 500
Top = 254
Width = 750
BorderIcons = [biSystemMenu]
Caption = 'CreateRepositoryPackagesFrm'
ClientHeight = 500
ClientWidth = 750
Constraints.MinHeight = 450
Constraints.MinWidth = 650
OnCreate = FormCreate
OnDestroy = FormDestroy
PopupMode = pmExplicit
Position = poOwnerFormCenter
object pnMessage: TPanel
Left = 247
Height = 402
Top = 57
Width = 503
Align = alClient
BevelOuter = bvNone
Caption = 'No items to show'
Font.CharSet = ANSI_CHARSET
Font.Color = clBlack
Font.Height = -16
Font.Name = 'Verdana'
Font.Pitch = fpVariable
Font.Quality = fqDraft
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
Visible = False
end
object pnPackages: TPanel
Left = 0
Height = 402
Top = 57
Width = 245
Align = alLeft
BevelOuter = bvNone
TabOrder = 1
end
object pnBrowse: TPanel
Left = 0
Height = 57
Top = 0
Width = 750
Align = alTop
BevelOuter = bvNone
ClientHeight = 57
ClientWidth = 750
TabOrder = 2
object lbPackagedir: TLabel
AnchorSideLeft.Control = pnBrowse
AnchorSideTop.Control = pnBrowse
AnchorSideTop.Side = asrCenter
Left = 6
Height = 15
Top = 21
Width = 68
Alignment = taRightJustify
BorderSpacing.Left = 6
Caption = 'lbPackagedir'
ParentColor = False
end
object Bevel1: TBevel
Left = 0
Height = 2
Top = 55
Width = 750
Align = alBottom
end
object edPackageDir: TDirectoryEdit
AnchorSideLeft.Control = lbPackagedir
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = lbPackagedir
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = pnBrowse
AnchorSideRight.Side = asrBottom
Left = 80
Height = 23
Top = 17
Width = 664
OnAcceptDirectory = edPackageDirAcceptDirectory
ShowHidden = False
ButtonWidth = 50
NumGlyphs = 1
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Around = 6
MaxLength = 0
TabOrder = 0
OnButtonClick = edPackageDirButtonClick
end
end
object pnData: TPanel
Left = 247
Height = 402
Top = 57
Width = 503
Align = alClient
BevelOuter = bvNone
ClientHeight = 402
ClientWidth = 503
TabOrder = 3
object pnPackageData: TPanel
Left = 0
Height = 213
Top = 189
Width = 503
Align = alClient
BevelOuter = bvNone
BorderStyle = bsSingle
ClientHeight = 209
ClientWidth = 499
TabOrder = 1
Visible = False
object edSupportedWidgetset: TEdit
Left = 170
Height = 23
Top = 80
Width = 300
Anchors = [akTop, akLeft, akRight]
TabOrder = 2
end
object lbLazCompatibility: TLabel
Left = 9
Height = 15
Top = 14
Width = 99
Caption = 'lbLazCompatibility'
ParentColor = False
end
object lbFPCCompatibility: TLabel
Left = 9
Height = 15
Top = 50
Width = 103
Caption = 'lbFPCCompatibility'
ParentColor = False
end
object edLazCompatibility: TEdit
Left = 170
Height = 23
Top = 8
Width = 300
Anchors = [akTop, akLeft, akRight]
TabOrder = 0
end
object edFPCCompatibility: TEdit
Left = 170
Height = 23
Top = 45
Width = 300
Anchors = [akTop, akLeft, akRight]
TabOrder = 1
end
object lbSupportedWidgetSet: TLabel
Left = 9
Height = 15
Top = 85
Width = 119
Caption = 'lbSupportedWidgetSet'
ParentColor = False
end
object lbOF1: TLabel
Left = 474
Height = 15
Top = 14
Width = 5
Anchors = [akTop, akRight]
Caption = '*'
Font.Color = clRed
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
end
object lbOF3: TLabel
Left = 474
Height = 15
Top = 50
Width = 5
Anchors = [akTop, akRight]
Caption = '*'
Font.Color = clRed
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
end
object lbOF4: TLabel
Left = 474
Height = 15
Top = 85
Width = 5
Anchors = [akTop, akRight]
Caption = '*'
Font.Color = clRed
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
end
end
object pnCategory: TPanel
Left = 0
Height = 189
Top = 0
Width = 503
Align = alTop
BevelOuter = bvNone
BorderStyle = bsSingle
ClientHeight = 185
ClientWidth = 499
TabOrder = 0
Visible = False
object lbCategory: TLabel
Left = 9
Height = 15
Top = 14
Width = 58
Caption = 'lbCategory'
ParentColor = False
end
object lbOF2: TLabel
Left = 474
Height = 15
Top = 14
Width = 5
Anchors = [akTop, akRight]
Caption = '*'
Font.Color = clRed
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
end
object lbHomePageURL: TLabel
Left = 9
Height = 15
Top = 87
Width = 90
Caption = 'lbHomePageURL'
ParentColor = False
end
object lbDownloadURL: TLabel
Left = 9
Height = 15
Top = 123
Width = 85
Caption = 'lbDownloadURL'
ParentColor = False
end
object edHomePageURL: TEdit
Left = 170
Height = 23
Top = 83
Width = 300
Anchors = [akTop, akLeft, akRight]
TabOrder = 2
end
object edDownloadURL: TEdit
Left = 170
Height = 23
Top = 118
Width = 300
Anchors = [akTop, akLeft, akRight]
TabOrder = 3
end
object lbSVNURL: TLabel
Left = 9
Height = 15
Top = 154
Width = 53
Caption = 'lbSVNURL'
ParentColor = False
Visible = False
end
object edSVNURL: TEdit
Left = 170
Height = 23
Top = 152
Width = 300
Anchors = [akTop, akLeft, akRight]
TabOrder = 4
Visible = False
end
object lbDisplayName: TLabel
Left = 9
Height = 15
Top = 53
Width = 80
Caption = 'lbDisplayName'
ParentColor = False
end
object edDisplayName: TEdit
Left = 170
Height = 23
Top = 48
Width = 300
Anchors = [akTop, akLeft, akRight]
TabOrder = 1
end
object pnCategories: TPanel
Left = 170
Height = 23
Top = 9
Width = 301
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BevelOuter = bvNone
ClientHeight = 23
ClientWidth = 301
ParentColor = False
TabOrder = 0
object spCategories: TSpeedButton
Left = 251
Height = 23
Top = 0
Width = 50
Align = alRight
Caption = '...'
OnClick = spCategoriesClick
ShowHint = True
ParentShowHint = False
end
object edCategories: TEdit
Left = 0
Height = 23
Top = 0
Width = 251
Align = alClient
AutoSize = False
ParentShowHint = False
ReadOnly = True
ShowHint = True
TabOrder = 0
end
end
end
end
object spMain: TSplitter
Left = 245
Height = 402
Top = 57
Width = 2
AutoSnap = False
Color = 14671839
MinSize = 150
ParentColor = False
end
object pnButtons: TPanel
Left = 0
Height = 41
Top = 459
Width = 750
Align = alBottom
BevelOuter = bvNone
BorderStyle = bsSingle
ClientHeight = 37
ClientWidth = 746
TabOrder = 5
object cbJSONForUpdates: TCheckBox
AnchorSideLeft.Control = pnButtons
AnchorSideTop.Control = pnButtons
AnchorSideTop.Side = asrCenter
Left = 6
Height = 19
Top = 9
Width = 148
BorderSpacing.Left = 6
Caption = 'Create JSON for updates'
TabOrder = 0
end
object pnB: TPanel
AnchorSideTop.Control = pnButtons
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = pnButtons
AnchorSideRight.Side = asrBottom
Left = 312
Height = 29
Top = 4
Width = 428
Anchors = [akTop, akRight]
BorderSpacing.Around = 6
BorderSpacing.InnerBorder = 1
BevelOuter = bvNone
ClientHeight = 29
ClientWidth = 428
TabOrder = 1
object bCancel: TButton
Left = 325
Height = 27
Top = 1
Width = 80
Align = alLeft
AutoSize = True
BorderSpacing.Around = 1
Caption = 'Cancel'
Constraints.MinWidth = 80
Enabled = False
ModalResult = 2
OnClick = bCancelClick
ParentShowHint = False
ShowHint = True
TabOrder = 4
end
object bCreate: TButton
Left = 163
Height = 27
Top = 1
Width = 80
Align = alLeft
AutoSize = True
BorderSpacing.Around = 1
Caption = 'Create'
Constraints.MinWidth = 80
Enabled = False
OnClick = bCreateClick
ParentShowHint = False
ShowHint = True
TabOrder = 2
Visible = False
end
object bSubmit: TButton
Left = 244
Height = 27
Top = 1
Width = 80
Align = alLeft
AutoSize = True
BorderSpacing.Around = 1
Caption = 'Submit'
Constraints.MinWidth = 80
Enabled = False
OnClick = bSubmitClick
ParentShowHint = False
ShowHint = True
TabOrder = 3
end
object bOptions: TButton
Left = 82
Height = 27
Top = 1
Width = 80
Align = alLeft
AutoSize = True
BorderSpacing.Around = 1
Caption = 'Options'
Constraints.MinWidth = 80
Enabled = False
OnClick = bOptionsClick
ParentShowHint = False
ShowHint = True
TabOrder = 1
end
object bHelp: TButton
Left = 1
Height = 27
Top = 1
Width = 80
Align = alLeft
AutoSize = True
BorderSpacing.Around = 1
Caption = 'Help'
Constraints.MinWidth = 80
Enabled = False
OnClick = bHelpClick
ParentShowHint = False
ShowHint = True
TabOrder = 0
end
end
end
object imTree: TImageList
left = 48
top = 88
Bitmap = {
4C69080000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00E1F2F8007DC3DCFF76C0DCFFDCEFF700FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F0F9
FC0099CEE00055B6D9FF9CD5EAFF88CCE7FF4DAFD6FF8FC7DD00ECF6FB00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFEFE00AFD8E60063BD
DBFF92CFE5FFE6F8FCFFE3F6FEFFAFDDF2FFB2E4F7FF72C0E1FF55ADD5FFA3CF
E100F8FCFD00FFFFFF00FFFFFF00FFFFFF00C7E4EE0076C4DEFF7EC6E0FFD1EE
F7FFF6FFFFFFF0FEFFFFCBEDFBFF50ADDAFF8BD7F7FFAAE1F9FF95D6F2FF62B2
DBFF61AED4FFBAD9E800FFFFFF0089CADE004EB5D9FFA5D9EDFFD2EBF5FFBEDE
EDFF95C9DEFF89C3DBFF70B8D6FF69B9DDFF90D7F5FF7FCFF5FF9DDBF8FFAAE3
FAFF84CAECFF51A6D5FF74B3D5004FB4D8FFE1F8FEFFCDEBF9FF92D2EDFF84CC
EBFF6FBFE5FF56B1DBFF3B94C8FFCEECFAFFD9F5FFFFB9EAFFFF95DFFEFF77D5
FFFFA5E4FFFF84DCFBFF3193C9FF55B6D8FFE2F8FDFFD4F3FFFFB0E4FAFF86CF
F1FF7FD0F5FF78D0F5FF4CB1E4FFB0E4FAFFB6E9FFFF9BE1FFFF78D6FEFF40BD
F5FF3DB5E9FF90D5F1FF3895CAFF53B4D7FFE2F6FDFFDAF4FFFFD5F3FFFFBDEB
FFFF89D5F7FF69C9F5FF4CB4E9FF8DDAFBFF8CDCFFFF009600FF009600FF0096
00FF4FBBE8FF8CD0F0FF3693C9FF51B1D6FFE2F6FCFFD7F4FFFFCEF2FFFFC8EF
FFFFBAEBFFFF92DBFBFF56C1F1FF48C2F9FF3BBDF0FF009600FF00C000FF0096
00FF47B1E6FF88CAEEFF3490C8FF4EAED6FFE2F6FCFFD4F3FFFFC9F0FFFFBEED
FFFFB3EAFFFFADE7FFFF7CD9FEFF48C7EFFF43C4EAFF009600FF00C000FF0096
00FF40A7E1FF83C5ECFF328DC7FF45A9D3FFE7FBFEFFDDF6FFFFC1EFFFFFB7EB
FFFFABE8FFFFA4E4FFFF009600FF009600FF009600FF009600FF00C000FF0096
00FF009600FF009600FF009600FF6FB8D80077BDDCFFBFE5F6FFDBF6FFFFC1EE
FFFFA5E5FFFF9FE3FFFF009600FF00C000FF00C000FF00C000FF00C000FF00C0
00FF00C000FF00C000FF009600FFFAFDFE00AFD8EB0055ABD5FF7DC0E0FFC7EE
FCFFCCF2FFFFA8E8FFFF009600FF009600FF009600FF009600FF00C000FF0096
00FF009600FF009600FF009600FFFFFFFF00FFFFFF00ECF4F90093C9E3FF3F9C
CEFF82C4E5FFCCF4FFFFC4EFFFFF8BD2F1FF8ACEF0FF009600FF00C000FF0096
00FFD1E9E100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D7E9
F20078B7DBFF2D8EC8FF8FCDEBFF6FB7E2FF408EC8FF009600FF00C000FF0096
00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00BDD8E8005FA7D3FF56A2D0FFB5D3E500009600FF009600FF0096
00FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF004DB4D82B4BB2D8AF4AB0D7BC48AED631FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004EB6
D9164DB4D8844BB2D7EF9CD5EAFF88CCE7FF45ACD5F344AAD48C42A7D31AFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004FB7DA054EB6D9654CB4
D8DB92CFE5FFE6F8FCFFE3F6FEFFAFDDF2FFB2E4F7FF72C0E1FF3FA4D1E03DA2
D06C3BA0CF09FFFFFF00FFFFFF00FFFFFF004FB7D9464EB5D9C27EC6E0FFD1EE
F7FFF6FFFFFFF0FEFFFFCBEDFBFF50ADDAFF8BD7F7FFAAE1F9FF95D6F2FF62B2
DBFF399DCEC8369ACD4DFFFFFF004FB7D99F4DB5D9FEA5D9EDFFD2EBF5FFBEDE
EDFF95C9DEFF89C3DBFF70B8D6FF6ABADEFF90D7F5FF7FCFF5FF9DDBF8FFAAE3
FAFF84CAECFF51A6D5FF3295CBA64DB4D8FBE1F8FEFFCDEBF9FF92D2EDFF84CC
EBFF6FBFE5FF56B1DBFF3B94C8FFCEECFAFFD9F5FFFFB9EAFFFF95DFFEFF77D5
FFFFA5E4FFFF84DCFBFF2F92C9FB4BB2D7F0E2F8FDFFD4F3FFFFB0E4FAFF86CF
F1FF7FD0F5FF78D0F5FF4CB1E4FFB0E4FAFFB6E9FFFF9BE1FFFF78D6FEFF40BD
F5FF3DB5E9FF90D5F1FF2D8FC8F049B0D6F8DBF6F8FFD9F3FFFFD5F3FFFFBDEB
FFFF89D5F7FF69C9F5FF4CB4E9FF8DDAFBFF8CDCFFFF48C4F9FF38B6ECFF48BF
E8FF48B8E7FF90D3F1FF2B8DC7FA47ADD5FB92E7D4FF80E5D8FFC8F1FDFFC8EF
FFFFBAEBFFFF92DBFBFF56C1F1FF48C2F9FF3BBDF0FF47C5ECFF45BDE9FF43B5
E6FF39ADD4FF88D2CCFF288AC6FF44AAD4F7A8EDE2FF41D6B3FF49D8BAFF8CE4
E4FFB3EAFFFFADE7FFFF7CD9FEFF48C7EFFF43C4EAFF43BEE8FF3DB3DCFF2DAE
A9FF29B188FF85D3BBFF2687C5FE42A8D3F9E7FBFEFFD0F3F9FF46D7B8FF39D4
AEFF50D9C3FF8EE2F2FF96E1FEFF48C6EBFF3FBCE3FF30AFB1FF24AC84FF24AD
81FF67BFC2FF83C4ECFF2485C4F840A5D2BB77BDDCFFBFE5F6FFDBF6FFFF9EE8
EBFF37D3ACFF37D2ACFF55D8D1FF37B8BCFF24AA85FF22AA7CFF4DB7A9FF86C6
EBFF74B3E4FF4A90CAFF2283C3C13DA2D0063BA0CF65399DCEDB7DC0E0FFC7EE
FCFFCBF2FEFF65DDD0FF33D1A8FF22AA7CFF35B091FF89CBE8FF82C1EBFF5397
D0FF2384C3E02282C26D2080C20AFFFFFF00FFFFFF00369ACD163498CC853295
CBEF82C4E5FFCCF4FFFFBCEEFAFF88D1E4FF8ACEF0FF5FA4D7FF2586C4F32384
C38D2182C21BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003093
CA2B2E90C9A52C8EC8FE8FCDEBFF6FB7E2FF408EC8FF2485C4AC2383C331FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF002A8BC6462889C5BE2687C5C42485C44DFFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0074A7C9FF1796FFFF1996FFFF1A96FFFF1A96
FFFF1A96FFFF1A96FFFF1A96FFFF1A96FFFF1A96FFFF1A96FFFF1A96FFFF1A96
FFFF1996FFFF1796FFFF74A7C9FF1A98FFFFAFDBFFFFADD9FFFFADDAFFFFADDA
FFFFADDAFFFFADDAFFFFADDAFFFFADDAFFFFADDAFFFFADDAFFFFADDAFFFFADDA
FFFFADD9FFFFAFDBFFFF1A98FFFF1A9BFFFF7DC6FFFF2A9EFFFF2B9EFFFF2C9E
FFFF2C9EFFFF2C9EFFFF2C9EFFFF2C9EFFFF2C9EFFFF2C9EFFFF2C9EFFFF2B9E
FFFF2A9EFFFF7DC6FFFF1A9BFFFFE3AA56FFFFFFF1FFFFFAD0FFFFFAD0FFFFFB
D1FFFFFBD1FFFFFBD1FFFFFBD1FFFFFBD1FFFFFBD1FFFFFBD1FFFFFBD1FFFFFB
D1FFFFFAD0FFFFFFF1FFE2AA56FFD3A459FFFFFFFAFFC4BEB4FFFFFCDEFFC4C2
BAFFFFFFE4FFC4C3BDFFFFFFE5FFC4C3BDFFFFFFE5FFC4C3BDFFFFFFE5FFC3C2
BCFFFFFBE0FFFFFFFBFFD2A45AFFCEA053FFFFFFFDFFC2BEB7FFC2C1BDFFD690
52FFD59257FFD69358FFD59357FFD69358FFD59357FFD69358FFD59357FFD592
56FFD28C4FFFFFFFFFFFCEA054FFCB9D4CFFFFFFFFFFC9C9C5FFFFFFF7FFD89B
60FFFFE5A5FFD89D65FFFFE6A5FFD89D65FFFFE6A5FFD89D65FFFFE6A5FFD79C
63FFFFDF9BFFFFFFFFFFCA9D4CFFC89945FFFFFFFFFFDA9D5EFFDAA165FFDAA4
6BFFDAA46CFFDAA56DFFDAA46CFFDAA56DFFDAA46CFFDAA56DFFDAA46CFFDAA3
6BFFD79E62FFFFFFFFFFC89945FFC6963EFFFFFFFFFFDBA66AFFFFECBAFFDCAA
72FFFFEDBCFFDCAA72FFFFEDBCFFDCAA72FFFFEDBBFFDCAA71FFFFEDBBFFDCA9
6FFFFFE7B2FFFFFFFFFFC6953DFFC39236FFFFFFFFFFDEAD71FFDEB076FFDEB1
78FFDEB078FFDEB178FFDEB077FFDFB077FFDFAF73FFDFAF72FFDFAE71FFDFAE
70FFDCAA6AFFFFFFFFFFC29235FFC08E2EFFFFFFFFFFE0B275FFFFF5D0FFE0B5
7BFFFFF6D1FFE0B57BFFFFF5D1FFE1B477FFFFFFFFFFD3D5D6FFFFFFFFFFD3D4
D5FFFFFFFEFFFFFFFFFFC08D2DFFBE8A25FFFFFFFFFFE2B979FFE2BA7BFFE3BB
7DFFE3BB7CFFE3BB7DFFE3BB7CFFE4BA78FFD1D3D3FFD2D2CFFFD2D1CEFFD2D1
CEFFCFCFCEFFFFFFFFFFBE8924FFBB851FFFFFFFFFFFD6D8DCFFFFFFFFFFD6D8
DCFFFFFFFFFFD6D8DCFFFFFFFFFFD6D7DAFFFFFFFFFFD7D6D5FFFFFFFFFFD6D5
D4FFFFFFFFFFFFFFFFFFBB851EFFBA851BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFBA851BFFAC7C1CC0B88113FFB77F0EFFB67E0EFFB77E
0EFFB67E0EFFB77E0EFFB67E0EFFB77E0EFFB67E0EFFB77E0EFFB67E0EFFB67E
0EFFB77F0EFFB88113FFAC7B1CC0000000000000003300000033000000330000
0033000000330000003300000033000000330000003300000033000000330000
0033000000330000003300000000000000000000000000000000000000000000
0000000000000000000000000000C8E6F240C6E5F04000000000000000001CA7
1D6014AB26BF1FB438FF19AA23FF00000000000000000000000000000000C9E7
F220C2E7F4CFB3E6F9FFACE1F9FFADE1F8FFAEE1F7FFAEE1F6FFADDFF5FF90D8
DCFF77E294FF98EDAAFF5BC962FF000000000000000000000000C9E7F230BFE8
F6EFADE7FCFFABE3F9FFA3DEF8FFA9E1FAFFB0E4F9FFB7E7F9FFB6E7F9FFA7DE
F5FFB8F4C3FFB6F4B7FF5AC65BFF0000000000000000C9E7F230B6E7F8EFA4E0
F8FFA5E1F9FF95D6F3FFB0E4F7FFA6DFF8FFA4DFFAFFA5DFFAFFACE2F9FFA7DF
F6FF7BD296FF67CC67FF2EB02EFFD1BDA9FFC9BAA7FFAFD4DAFFA2DEF5FF98D7
F1FF9AD8F3FFA0DEF6FF97D8F4FFA5DEF5FFAEE3F9FF9FDCF8FF8CD3F3FF75C6
EDFF3CAA82FF20A921FF0DA00DFFD1BDA9FFCAEBF5FFA8E0F4FF8DCEE8FFA0DD
F6FF92D2EDFF9BD9F3FF78BFDDFF9BDAF7FF89D0F0FF79C9EFFF61BEE9FF57B8
E4FF299058FF15A415FF10A110FFD1BDA9FFC2E5F1FF99D0E4FFAAE4FBFF87CA
E6FFA4DFF8FF79C0DDFF9CDBF4FF7FC1DCFF6399ABFF5A91A4FF48656BFF91B2
BE8F19A02460029A0280059B0550D1BDA9FFEEF7FAFFC1E8F3FF90CFE8FFA4DE
F4FF86C9E6FF98D7F1FF85C4DFFF6E7F7FFF9A8A7BFFC1B5ABFF77604EFFDCD5
D030000000000000000000000000D1BDA9FFF5FAFCFFB3D5DFFF8CC6DDFFAEE0
F0FF96CFE4FFA3DBF1FF739DA9FFB7ADA0FFF2EBE4FFFFFFFFFF8F7966FF0000
0000000000000000000000000000D1BDA9FFFFFFFFFFFBF5EEFFE1E6E4FFB6D0
D7FF99C6D5FF87BBCDFFC4CAC6FFF7F1EAFFFBF5EEFFFFFFFFFF8F7966FF0000
0000000000000000000000000000D1BDA9FFFFFFFFFFFAF2EAFFFAF2EAFFFAF2
EAFFFAF2EAFFF3EEE8FFFAF2EAFFFAF2EAFFFAF2EAFFFFFFFFFF8F7966FF0000
0000000000000000000000000000D1BDA9FFFFFFFFFFF9F0E7FFF9F0E7FFF9F0
E7FFF9F0E7FFF9F0E7FFF9F0E7FFF9F0E7FFF9F0E7FFFFFFFFFF8F7966FF0000
0000000000000000000000000000C9B4A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F7966FF0000
0000000000000000000000000000927C69FF8F7966FF8F7966FF8F7966FF8F79
66FF8F7966FF8F7966FF8F7966FF8F7966FF8F7966FF8F7966FF8F7966FF0000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000004D46
45114D4645DD4D4645FF4C4544EC4B4444B5494544D545403F4F000000000000
0000000000000000000000000000000000000000000000000000000000004A44
42E647423FFF464140FF3C3230FF352725FF392C2AFF413C3BFF3F3A393A0000
0000000000000000000000000000000000000000000000000000413C3A15413D
3BFF423C3AFF301F1BFF5D7270FF719798FF464D4CFF2E1E1AFF3B3735750000
00000000000000000000000000000000000000000000000000003B39391E3024
21FF2D1B13FF343031FF99EAF2FFB6FFFFFFA7FDFFFF4A585DFF291F1A740000
00000000000000000000000000000000000000000000000000003519001B667B
81FF74B8D9FF95E7FFFF9AE8FFFF8BD5FCFF9AF4FFFF84C6CFFF2713055E0000
00000000000000000000000000000000000000000000000000000C3CA51DACEF
FFFF8CE8FFFF74D0FFFF5BC4FBFF56C3FAFF59CEFFFF4FAFE9FF223F853C0000
00000000000000000000000000000000000000000000000000000000000086D0
FFFF49B9F9FF3AB0F8FF3EB3FAFF40B3F9FF47C3FFFF37A1F2FF0D35BE240000
0000000000000000000000000000000000000000000000000000000000002D80
EAD14CBFFFFF2BA6FCFF3AAAFAFF3AABFAFF27AEFFFF0B4496BB000000000000
0000000000000000000000000000000000000000000000000000180400317278
89E77BC3FFFF198AF0FF0A87FDFF0281F4FF55A9FDFF9B939DFF332A14760000
000000000000000000000000000000000000000000001F1B1963736F6DFFFFFF
FFFFFDFEFFFFCAD8F6FFA4BBD5FFBACFEDFFFFFFFFFFFFFFFFFF50494AFF221E
1CB500000000000000000000000000000000191614467A7576FF7F7B7AFF7D79
78FFFFFFFFFFFFECC2FFFFCE56FFFFF4BEFFF5F8FFFF989392FF322A29FF433E
3DFF282423950000000000000000191615483C3736CC9A9696FF352F2FFF2A25
24FF706E71FFFFFFFFFFEBC170FFFFFFFFFF969396FF211A1AFF45403FFF4944
43FF302B2AFF221F1F4C0000000033302EB47A7674FF5C5654FF373330FF322C
2AFF575355FFFFFFFCFFE4AF55FFFFFFFAFF807F84FF272221FF403B39FF423D
3BFF3A3734FF23201EC400000000474342D27E7976FF3E3836FF393533FF3630
2EFF3B3D43FFFDEFD4FFD4901DFFFFF9D4FF63666CFF241E1BFF3E3836FF3E39
37FF3F3D39FF211E1CE6000000003A3835CD555351FF35312FFF383432FF3C36
34FF272B38FFFFEEC6FFEB8B00FFFFEA9AFF6D7587FF25201BFF383432FF332F
2DFF2E2A29FF1F1B1AE500000000100D0C000F0D0C38171312971A1817CE1E1A
18F6131218F3625847F3563100F3685030F32C2F39F7120E0EDF1C1817B01512
1286150F104B1816152100000000170B0B166952246F53411C59453418493B2F
1340392B113A32291237332512363325123632291237392B113A3B2F13404335
18484E3C1B545F4B20654031164340311643EFBB52FFEFBB52FFEFBB52FFDCAC
4BEBD5A648E4EFBB52FFECB952FFEBB952FFECB952FFE2B14DF2CB9E46D9EFBB
52FFEFBB52FFEFBB52FF8D6F3097624C1F68EEBA51FFEEBA51FF7A5F2A83FFFF
FF00FFFFFF00E2B14EFAE7B550FFE8B651FFEDB951FF43351548FFFFFF00342B
113ADCAD4BEDEEBA51FF9F7D35AB84682C90ECB84FFF6F562579FFFFFF00FFFF
FF00FFFFFF00D7A84BF5E3B24EFFEBB74FFFECB84FFF372A113CFFFFFF00FFFF
FF003B2F1340E9B54FFEAC863BBFAB8537BBA58036B3FFFFFF00FFFFFF00FFFF
FF00FFFFFF00D7A84AF5EAB64DFFEBB74DFFEBB74DFF372A113CFFFFFF00FFFF
FF00FFFFFF0084692D99BF9540D4BB913CCD261F0C28FFFFFF00FFFFFF00FFFF
FF00FFFFFF00DEAC49F4EAB64CFFEAB64CFFEAB64CFF372A113CFFFFFF00FFFF
FF00FFFFFF002621162BBC923ED2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00DDAC47F4E8B44AFFE8B44AFFE8B44AFF372A113CFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00DCAB46F4E7B349FFE7B349FFE7B349FF372B123DFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00DBA943F4E5B147FFE5B147FFE4B047FF392F1B46FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00DAA842F4E4B046FFE3AF46FFDCAA46FF39301C48FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00D8A640F4E1AD44FFDAA944FFD8A844FF352F1B46FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00D6A53EF4D9A842FFD7A742FFD9A842FF332B123DFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00CE9F3EF6D5A541FFD7A641FFDEAA41FF3629103DFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000004044
440224251F25D5A43FFFD6A53FFFDDA93FFFDEAA3FFF513E155EFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000141505107159
238CB98E37DED7A53EFFDBA83EFFDCA83EFFDCA83EFFD19F3AF3826325972B20
0A2FFFFFFF00FFFFFF00FFFFFF00000000000000000040444401191A0E156951
2081644D1D785C46196C55411965563F166459431869634B1A736A501C7C2C22
0A34FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF0078CF82D475CD80FF73CA7DFE70C77AB4FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0077CF
821278CD82FF9CD9A7FF98D8A2FF6DC476ECFFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF0072C97CF497D8A2FF8DD297FF69C072BEFFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0079D083FF76CE81FF74CB7EFF71C9
7BFF6FC678FE97D7A1FF93D59DFF65BC6EF062B86AED5FB567EF5BB163EFFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0076CE80FF9BD9A6FF99D8A4FF98D7
A2FF96D7A1FF95D59EFF93D49CFF8FD198FF8CD095FF8ACF94FF57AD5EFFFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0073CB7DFF99D8A3FF97D7A1FF79CB
87FF69C377FF65C273FF64C171FF67C273FF66C071FF8BCF94FF53A95AFFFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0070C77AFF6DC477FF7CC985FF93D4
9CFF65C172FF62C06FFF5FBE6CFF5DBD69FF5ABB66FF88CF90FF66B56DFF4CA1
52FF489D4EFF45994AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF0066BD6FFF90D2
99FF60BF6DFF5EBD6AFF5BBC68FF59BB64FF56BA61FF65BF6FFF83CC8BFF82CA
89FF80CA88FF419646FFFFFFFF00FFFFFF00FFFFFF00FFFFFF0063B96BFF8DD1
96FF5DBC69FF5ABB66FF58BA63FF55B960FF52B75DFF62BD6BFF81CA88FF7EC8
85FF7EC884FF3E9242FFFFFFFF00FFFFFF0065BC6EFF62B86AFF72C07AFF8BCF
93FF58BB64FF56BA61FF53B85FFF51B65BFF4FB559FF80CA87FF5CAC62FF4094
45F93D9142FF3A8E3FFFFFFFFF00FFFFFF0062B86AFF8BCF95FF8ACF92FF69C1
72FF86CD8EFF84CC8CFF83CB8AFF81CA88FF5DBB66FF7EC884FF409445FFFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005EB465FF88CF91FF56B961FF85CD
8DFF65B56CFF4CA152FF499E4FFF5DAD63FF7CC783FF7BC681FF3C9041FFFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005AAF61FF86CD8EFF84CC8CFF83CA
89FF4CA152FFFFFFFF00FFFFFF00429647FF7AC681FF76C37CFF398D3DFFFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0056AB5DFF52A759FF4FA455FF4BA0
51FF489C4DF7FFFFFF00FFFFFF003E9243FD3B8F40FD398C3DF4368A3AE6FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF0036BAEC4438BBECF23FBDEDF33CBCEDF238BBECF236BAEC3FFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0036B7
E9836ACBEFF6ABE4F8FBC6EFFCFDC3EEFCFDAAE3F8FB5DC6EEF536B7E980FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0036B3E58E7ED0
F0F7C7F1FEFEBEF1FFFFB6EFFFFFB6EFFFFFBFF1FFFFC8F1FEFE7ACFEFF736B3
E58EFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0036AFE14769C5EAF6C4F2
FFFFABECFFFF88D8F4FF66BFE5FF65BFE4FF84D5F1FFACECFFFFC5F2FFFF5FC1
E8F536AFE139FFFFFF00FFFFFF00FFFFFF0036ABDD093CAEDEF299DBF4FBA5EA
FFFF81D5F3FF54AFDAFF51B2DDFF50B3DEFF53AED9FF7BCFEFFFA6EAFFFF97DA
F3FA3AADDEF236ABDD06FFFFFF00FFFFFF0036A7D9093CAADAF29AE0F8FC91E5
FFFF5FB7DEFF4CACD9FF48C0EEFF48C0EEFF4CAFDCFF5BB2DAFF92E5FFFF9ADF
F7FC3CAADAF236A7D909FFFFFF00FFFFFF0036A2D4063AA4D5F294DEF8FD86E2
FFFF59B0D9FF49A7D4FF48C0EEFF48C0EEFF49ABD8FF56ABD5FF87E3FFFF90DC
F7FC38A3D5F236A2D403FFFFFF00FFFFFF00FFFFFF00369DCF9D7CCEEFFA80DF
FFFF6CCAEFFF4695C3FF46A1CFFF46A4D2FF4595C3FF68C4EAFF81E0FFFF7ACD
EDFA369DCF97FFFFFF00FFFFFF00FFFFFF00FFFFFF003698CA3945A3D1F479D9
FAFE73DCFFFF63C4EBFF50A6D0FF50A5D0FF60C0E7FF73DCFFFF78D9FAFE41A0
CFF33698CA33FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003693C57858B1
DBF76ED6FBFE6CD9FFFF6BD9FFFF6BD9FFFF6CD9FFFF6ED5FAFE56AFD9F63693
C575FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00368EC0644096
C5F365C0E7FE64D5FDFF64D7FFFF64D7FFFF66D7FEFF65C0E7FE3A91C2F2368E
C041FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00368ABC614493C2F396D9
F4FD66C3EBFF4FADD8FF49A1CEFD4AA2CFFD4FACD8FF68C3E9FF8ACDEBFB368A
BCA5368ABC17FFFFFF00FFFFFF00FFFFFF003686B811428EBDF39EDAF2FD86DF
FFFF65D7FFFF59BCE7FA3787B9F23989BBF25DC5EFFC68D7FFFF90E2FFFF7EBC
DDF93686B87AFFFFFF00FFFFFF00FFFFFF003682B41A458EBCF383D7F7FE63D6
FFFF56B9E5FA3783B5F23682B4393682B4553B88B9F35BC8F2FD6AD8FFFF91DA
F7FE3B86B7F23682B409FFFFFF00FFFFFF00FFFFFF00367EB0754590BFF456B1
DDF9377FB1F2367EB036FFFFFF00FFFFFF00367EB0643E88B9F360C7F1FD458F
BEF4367EB075FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00367BAD2B367B
AD86367BAD22FFFFFF00FFFFFF00FFFFFF00FFFFFF00367BAD61367BADC4367B
AD61FFFFFF00FFFFFF00FFFFFF00
}
end
object SDD: TSelectDirectoryDialog
left = 88
top = 88
end
end

File diff suppressed because it is too large Load Diff

View File

@ -41,8 +41,8 @@ uses
opkman_VirtualTrees, opkman_downloader, opkman_installer,
opkman_serializablepackages, opkman_visualtree, opkman_const, opkman_common,
opkman_progressfrm, opkman_zipper, opkman_packagelistfrm, opkman_options,
opkman_optionsfrm, opkman_createrepositorypackage, opkman_updates,
opkman_createjsonforupdates;
opkman_optionsfrm, opkman_createrepositorypackagefrm, opkman_updates,
opkman_createjsonforupdatesfrm;
type
@ -983,6 +983,7 @@ procedure TMainFrm.miCreateRepositoryPackageClick(Sender: TObject);
begin
CreateRepositoryPackagesFrm := TCreateRepositoryPackagesFrm.Create(MainFrm);
try
CreateRepositoryPackagesFrm.SetType(0);
CreateRepositoryPackagesFrm.ShowModal;
finally
CreateRepositoryPackagesFrm.Free;