Added help button, install status of repository packages are visible in tree.

git-svn-id: trunk@53589 -
This commit is contained in:
balazs 2016-12-07 17:06:22 +00:00
parent f1f10c72f9
commit a339b5b1a9
7 changed files with 459 additions and 102 deletions

View File

@ -43,6 +43,7 @@ const
cLocalRepositoryUpdatesFile = 'updates.xml'; cLocalRepositoryUpdatesFile = 'updates.xml';
cRestrictedExtensionDef = '*.a,*.o,*.ppu,*.compiled,*.bak,*.or,*.rsj,*.~ '; cRestrictedExtensionDef = '*.a,*.o,*.ppu,*.compiled,*.bak,*.or,*.rsj,*.~ ';
cRestrictedDirectoryDef = 'lib,backup'; cRestrictedDirectoryDef = 'lib,backup';
cHelpPage = 'http://wiki.freepascal.org/Online_Package_Manager';
resourcestring resourcestring
//package manager //package manager
@ -77,6 +78,9 @@ resourcestring
rsMainFrm_VSTText_HomePageURL = 'Home page'; rsMainFrm_VSTText_HomePageURL = 'Home page';
rsMainFrm_VSTText_DownloadURL = 'Update link'; rsMainFrm_VSTText_DownloadURL = 'Update link';
rsMainFrm_VSTText_SVNURL = 'SVN'; rsMainFrm_VSTText_SVNURL = 'SVN';
rsMainFrm_VSTText_Install0 = 'No';
rsMainFrm_VSTText_Install1 = 'Yes';
rsMainFrm_VSTText_Install2 = 'Partially';
rsMainFrm_VSTText_PackageType0 = 'Designtime and runtime'; rsMainFrm_VSTText_PackageType0 = 'Designtime and runtime';
rsMainFrm_VSTText_PackageType1 = 'Designtime'; rsMainFrm_VSTText_PackageType1 = 'Designtime';
rsMainFrm_VSTText_PackageType2 = 'Runtime'; rsMainFrm_VSTText_PackageType2 = 'Runtime';
@ -137,6 +141,8 @@ resourcestring
rsMainFrm_TBRepository_Hint = 'Create package or repository'; rsMainFrm_TBRepository_Hint = 'Create package or repository';
rsMainFrm_TBOptions_Caption = 'Options'; rsMainFrm_TBOptions_Caption = 'Options';
rsMainFrm_TBOptions_Hint = 'Show options dialog'; rsMainFrm_TBOptions_Hint = 'Show options dialog';
rsMainFrm_TBHelp_Caption = 'Help';
rsMainFrm_TBHelp_Hint = 'Help(' + cHelpPage + ')';
rsMainFrm_miCreateRepositoryPackage = 'Create repository package'; rsMainFrm_miCreateRepositoryPackage = 'Create repository package';
rsMainFrm_miCreateRepository = 'Create repository'; rsMainFrm_miCreateRepository = 'Create repository';
rsMainFrm_miJSONShow = 'Show JSON'; rsMainFrm_miJSONShow = 'Show JSON';
@ -146,8 +152,8 @@ resourcestring
rsMainFrm_PackageAlreadyInstalled = 'The following packages are alrady installed. Continue with install?'; rsMainFrm_PackageAlreadyInstalled = 'The following packages are alrady installed. Continue with install?';
rsMainFrm_PackageAlreadyDownloaded = 'The following repository packages already exists in the target folder. Continue?'; rsMainFrm_PackageAlreadyDownloaded = 'The following repository packages already exists in the target folder. Continue?';
rsMainFrm_PackageUpdateWarning = 'Updating packages from external link is not without a risk!' + sLineBreak + 'Only update if you trust the package maintainer. Continue?'; rsMainFrm_PackageUpdateWarning = 'Updating packages from external link is not without a risk!' + sLineBreak + 'Only update if you trust the package maintainer. Continue?';
rsMainFrm_PackageUpdate0 = 'The following repository packages don''t have a valid external download link. The packages will be skipped. Continue?'; rsMainFrm_PackageUpdate0 = 'The following repository packages are not installed or don''t have a valid external download link. The packages will be skipped. Continue?';
rsMainFrm_PackageUpdate1 = 'None of the checked repository package(s) has a valid external download link.'; rsMainFrm_PackageUpdate1 = 'None of the checked repository packages are installed or has a valid external download link.';
rsMainFrm_rsMessageNoPackage = 'No packages to show.'; rsMainFrm_rsMessageNoPackage = 'No packages to show.';
rsMainFrm_rsMessageParsingJSON = 'Parsing JSON. Please wait...'; rsMainFrm_rsMessageParsingJSON = 'Parsing JSON. Please wait...';
rsMainFrm_rsMessageDownload = 'Downloading package list. Please wait...'; rsMainFrm_rsMessageDownload = 'Downloading package list. Please wait...';

View File

@ -1,11 +1,11 @@
object MainFrm: TMainFrm object MainFrm: TMainFrm
Left = 463 Left = 463
Height = 600 Height = 640
Top = 164 Top = 164
Width = 801 Width = 850
Caption = 'Online Package Manager' Caption = 'Online Package Manager'
ClientHeight = 600 ClientHeight = 640
ClientWidth = 801 ClientWidth = 850
Color = clBtnFace Color = clBtnFace
Constraints.MinHeight = 400 Constraints.MinHeight = 400
Constraints.MinWidth = 600 Constraints.MinWidth = 600
@ -18,13 +18,13 @@ object MainFrm: TMainFrm
LCLVersion = '1.7' LCLVersion = '1.7'
object pnMain: TPanel object pnMain: TPanel
Left = 0 Left = 0
Height = 530 Height = 570
Top = 0 Top = 0
Width = 801 Width = 850
Align = alClient Align = alClient
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 530 ClientHeight = 570
ClientWidth = 801 ClientWidth = 850
TabOrder = 0 TabOrder = 0
OnResize = pnMainResize OnResize = pnMainResize
object pnMessage: TPanel object pnMessage: TPanel
@ -49,18 +49,18 @@ object MainFrm: TMainFrm
Left = 0 Left = 0
Height = 60 Height = 60
Top = 0 Top = 0
Width = 801 Width = 850
Align = alTop Align = alTop
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 60 ClientHeight = 60
ClientWidth = 801 ClientWidth = 850
Color = clBtnFace Color = clBtnFace
ParentColor = False ParentColor = False
TabOrder = 0 TabOrder = 0
OnResize = pnTopResize OnResize = pnTopResize
object spExpand: TSpeedButton object spExpand: TSpeedButton
Tag = 1 Tag = 1
Left = 753 Left = 802
Height = 20 Height = 20
Top = 13 Top = 13
Width = 21 Width = 21
@ -125,7 +125,7 @@ object MainFrm: TMainFrm
end end
object spCollapse: TSpeedButton object spCollapse: TSpeedButton
Tag = 2 Tag = 2
Left = 775 Left = 824
Height = 20 Height = 20
Top = 13 Top = 13
Width = 21 Width = 21
@ -368,9 +368,9 @@ object MainFrm: TMainFrm
end end
object mJSON: TMemo object mJSON: TMemo
Left = 0 Left = 0
Height = 470 Height = 510
Top = 60 Top = 60
Width = 801 Width = 850
Align = alClient Align = alClient
Color = clBtnFace Color = clBtnFace
PopupMenu = pmMemo PopupMenu = pmMemo
@ -383,11 +383,11 @@ object MainFrm: TMainFrm
object pnToolBar: TPanel object pnToolBar: TPanel
Left = 0 Left = 0
Height = 70 Height = 70
Top = 530 Top = 570
Width = 801 Width = 850
Align = alBottom Align = alBottom
ClientHeight = 70 ClientHeight = 70
ClientWidth = 801 ClientWidth = 850
TabOrder = 1 TabOrder = 1
OnResize = pnToolBarResize OnResize = pnToolBarResize
object tbButtons: TToolBar object tbButtons: TToolBar
@ -477,6 +477,16 @@ object MainFrm: TMainFrm
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
end end
object tbHelp: TToolButton
Left = 503
Top = 0
AutoSize = True
Caption = 'Help'
ImageIndex = 7
OnClick = tbHelpClick
ParentShowHint = False
ShowHint = True
end
end end
end end
object tbCleanUp1: TToolButton object tbCleanUp1: TToolButton
@ -1173,7 +1183,7 @@ object MainFrm: TMainFrm
left = 64 left = 64
top = 224 top = 224
Bitmap = { Bitmap = {
4C69070000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 4C69080000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
@ -2069,7 +2079,135 @@ object MainFrm: TMainFrm
00010000000E000000240000002C000000210000000D00000002000000000000 00010000000E000000240000002C000000210000000D00000002000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000020000000F000000330234 000000000000000000000000000000000000000000020000000F000000330234
457A045C7BB4010D12910000005E 457A045C7BB4010D12910000005EFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF009E9E9E02A5A5A598ACACACCDADADADBAABABAB9EA9A9
A98DA7A7A78FA8A8A8A4D7CABFCAD7CABFC9ACACACC4ADADADC4ACACACC6ADAD
ADC6AAAAAAB29C9C9C42FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00A2A2A291AEAEAEB6A3A3A33AA0A0A0597C88A499516C
A2D77481A3F3BAACA6FCCDB09DFDD5B9A6FDCFC5C4FA7B88BCDF2954BC9A5E76
B45FA8A8A870AFAFAFD7A3A3A364FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00AFAFAFD29AA1A6241546C0681547C6E7154BD0FF1F5A
DBFF90ABE6FFF9F3EFFFFAF6F2FFFBF6F3FFFAF5F1FF94B0EBFF2866E3FF1F5A
DBFF164AC7E94D6CB9ACA9ABACB0FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF009A9DA3ED1547C3E21850D3FF2765E2FF3779EDFF4B8C
F2FFADCBF9FFFFF9F6FFFFF8F3FFFFF7F2FFFFF8F4FFB3D0F8FF5B9BF6FF4B8C
F2FF3779EDFF2765E2FF2454C6F51345C241FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF001846BB7381858FFF2360DEFF397BEEFF5696F4FF70AFFBFF7FBE
FFFFBCD4F0FFFFEADCFFFFE8D9FFFFE8D8FFFFE9DAFFB6D0EEFF78BAFFFF7FBE
FFFF70AFFBFF5696F4FF397BEEFF235FDCFD1846BB73FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF001846B79A144ACFFF9399A5FF4B8CF2FF6CACFAFF7DBDFFFF67B2FFFF409E
FFFF86B1E3FFFFDAC2FFFFD9BFFFFED7BDFFFFD9BFFF80ABDFFF0D84FFFF409E
FFFF67B2FFFF7DBDFFFF6CACFAFF4B8CF2FF2A69E5FF1846B79AFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001743
B3741349CFFF2D6DE8FFA0A7B1FF7AB9FDFF72B8FFFF3B9CFFFF0578F8FF1868
E0FF5D7DC5FFDBAE8FFEBF9C89F9BE9B87F9D9AA89FE5C7AC1FE1964DCFF0870
F0FF017AFCFF3B9CFFFF72B8FFFF7AB9FDFF5394F4FF2D6DE8FF1743B374FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001A46B33F1448
CDFD2A69E5FF5C90E0FFA2ABB6FF66B2FFFF1086FFFF1069E2FF2459C4FE2253
B0EB2F3D5FAD333333803232325D3232325D333333802E3C60AE2251B0EC2558
C3FE1361DBFF0373F5FF1086FFFF66B2FFFF7FBEFEFF5293F4FF2A69E3FD1A46
B33FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001746BCE1225E
DDFF498AF1FFA1ACBBFF7BA2CEFF027FFFFF1362D4FF1D55B4F72C3749913232
32293232320D32323202FFFFFF00FFFFFF00323232023232320D323232292C37
49911E52B2F9155BCDFF056FF1FF027FFFFF66B2FFFF79B8FDFF498AF1FF2459
C8E1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001A43AB69164DD2FF3878
ECFF939FADFF92A4BAFF1587FEFF0C66DDFF1A4FA4EA3131315632323209FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003232
32095E5F61952251A7FA0F5BD2FF056FF2FF1588FFFF73B8FFFF6BAAF9FF3778
EDFF1C45AE69FFFFFF00FFFFFF00FFFFFF00FFFFFF001846BAE33168D9FF9299
A3FF8A9DB2FF3F9CFDFF0472F0FF1350AAF53131314132323201FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF009999993E888888D9154AA5F50961E1FF0374F5FF409EFFFF7EBDFFFF5394
F4FF3363C5FCABABABDC9F9F9F3EFFFFFF002346A61D395FC2FEA5ACB6FF7A9E
CBFF6AB4FEFF007CFDFF0A5AC5FC2A37518532323203FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00A3A3A3CD5D687FEF0E50BEFF0768EBFF007CFDFF6CB5FFFF6CAB
FAFF3476EBFE8B93A882ACACACB6FFFFFF005A6E9FAF96A0B3FF578DDFFF7FBD
FEFF4AA3FFFF0373F5FF104B9FE532323212FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF0032323212144395E30A5FE3FF0373F5FF4AA3FFFF7FBE
FFFF4788F1FF3254A49CACACACCB9E9E9E14A6A8AEFAA9B8DCFFC0D5F6FFCFD9
EAFFABBDDAFF979BB3FF364A709FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00334371A6908294FF9BA4BFFFABC1DFFFCFDD
EFFFBFD7FAFF8598C6DCACACACD0A6A6A691ADABB2F9FBF7F4FFFFF7F2FFFFE7
D8FFFED7BDFFE6AC80FF443D334BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF003C3E5659D79059FFEFBB95FFFFDDC6FFFFED
E0FFFFFCFAFFC0C8DEF3ABABABD1E5D5C8D0C0A597FBFCFAF7FFFFF5EFFFFFE5
D4FFFAD1B4FFD0A07EFD30303018FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0030303018C0845BFEEBB48BFFFFDBC3FFFFEB
DDFFFFFAF7FFD0C1BDFCD6C7BBEBDBCDC281C3B2B1FDFDFBF9FFFFF4EDFFFFE5
D3FFF9CFB1FFD59F79FE32323208FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF002C2C4909C58354FFEAB288FFFFDAC1FFFFEA
DCFFFFFAF6FFCAC5C8FBB9B4AFE19D9D9D78B0B0C3FBFCFAF8FFFFF5EFFFFFE5
D4FFFAD1B4FFE3A676FF644E4332FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00464B7248D3894EFFEBB48BFFFFDBC3FFFFEB
DDFFFFFAF7FFB5BBCAF8A7A7A7B5A0A0A0B25B75B7E9789EEAFF9BC0F5FFA9CA
F0FF5F9FE5FF5B82C3FF324A8386FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF003244838B5A6AA8FF5E87CBFF60A1E9FFA9CC
F3FF9DBCE6FF9FA5B0FB9B9B9B33A0A0A0CC2850A4B42461DFFF5293F4FF7DBD
FFFF2892FFFF056EF0FF1452BED2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF001845B5D50D59DDFF056EF0FF3A95F2FF9EB2
C7FF9BA4B3FF4C6AA5DAFFFFFF00A0A0A0D02E3A5340205BDAFE4384F0FF7BBA
FDFF53A8FFFF0375F7FF0B60E3FD1C459F39FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080
80029F9F9F959A9A9AC7838894C65974AFFF6B83A7FF8594A5FF97A1ACFF7F9C
BFFF3B79E2FD2D497F52FFFFFF00A2A2A2C78B8B8B382156C7F03070EAFF66A6
F8FF73B8FFFF027FFFFF066BEEFF1154CAEA1A4DB30AFFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A0A0
A0CC8F8F8FC793969C73697DACF6738CB6FF5C89C2FF1F80E7FF6CB2FAFF66A6
F8FF2D66D3F132323209FFFFFF00A0A0A08D9F9F9F932843829E2462DFFF4C8D
F2FF7FBEFFFF50A6FFFF0276F8FF0865E8FF1350C2CB1540D50CFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AAAAAA039494
94EB0F4BD2111646C0D90E54D9FF0865E8FF0276F8FF50A6FFFF7FBEFFFF4181
EDFF2B509EB0FFFFFF00FFFFFF009B9B9B0FA6A6A6DE595A5A242053C3F02F70
EAFF63A3F8FF79BBFFFF2E95FFFF0373F5FF0963E6FF1151CCEA1943B53CFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00999999278B8D
93EA1647C1E80E54D9FF0963E6FF0373F5FF2E95FFFF79BBFFFF5F9FF6FF2961
D1F332323219FFFFFF00FFFFFF00FFFFFF00A1A1A198A8A9A8B82B3B637A215B
D8FD3E80EEFF70AFFBFF72B8FFFF208EFFFF0373F5FF0865E8FF0C59DEFF134D
C7CF485491799669563DCC66330ACC66330A9669563D4953917B375CBADF7F87
98FF0C59DEFF0865E8FF0373F5FF208EFFFF72B8FFFF6FADFAFF2B68DFFD2B46
7D87FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A9A9A9CB969796D2344A
7EC8225DDBFE4788F0FF74B4FCFF73B8FFFF3096FFFF0277F9FF066CEFFF0962
E6FF72769CFFD2874BFFCF8141FFCE7F3FFFD08344FF716F95FF2868D4FF7E88
98FF066CEEFF0277F9FF3096FFFF73B8FFFF73B2FBFF2F6CE2FE294B95B93232
320AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009F9F9F698687
87DF385291FA1F5ADAFF4181EDFF6FAFFBFF7BBCFFFF55A9FFFF0D84FFFF0276
F8FF7A95C4FFE9B287FFE6AB7EFFE5AA7CFFE7AD80FF798FBCFF1B75E6FF808D
9BFF0D83FEFF55A9FFFF7BBCFFFF69A8F8FF2964DEFE274EA6D232323215FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF0047474725394E7DD31E57D5FF306EE4FF5F9EF6FF7FBEFEFF75B9FFFF59AB
FFFF9ABBE2FFFFDAC1FFFDD6BCFFFDD5BAFFFED8BEFF88B0E0FF3E98F5FF939D
A8FF72B5FDFF7FBDFEFF4986ECFF225BD8FD28458BB93232321EFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00323232102A3858881E4EBDF01B55D7FF3673E5FF5C9BF4FF77B6
FCFFBFD5EFFFFFE9DBFFFFE7D8FFFFE7D7FFFFE8D8FFBDD2EDFF83BBF4FFA1AA
B5FF4885EAFF225CDAFF2055C7F32A3D669032323210FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF003232320531313139263A6CA81D4FBFF71851D2FF1E58
D8FF97B3EDFFFFF9F4FFFFF7F2FFFFF7F1FFFFF7F2FF9BB6ECFF5B7EC9FF8E9A
B6FF1D53C7F428417BAF3131313A32323205FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00323232093232323A525458A33D55
8CF75976BDF89BADDAFAB5B2C4FDB3AEBDFD9CABD1F8788AB7F4A0A3ACF76265
699B3232323A32323209FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00323232006666
661A8383838E888888CCBFB3A8ECCDC1B7EDA8A8A8D4A2A2A2BC8E8E8E4B3232
3200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00
} }
end end
object imTBDis: TImageList object imTBDis: TImageList
@ -2078,7 +2216,7 @@ object MainFrm: TMainFrm
left = 64 left = 64
top = 288 top = 288
Bitmap = { Bitmap = {
4C69070000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 4C69080000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
@ -2974,7 +3112,135 @@ object MainFrm: TMainFrm
00010000000E000000240000002C000000210000000D00000002000000000000 00010000000E000000240000002C000000210000000D00000002000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000020000000F000000333333 000000000000000000000000000000000000000000020000000F000000333333
337A5B5B5BB40D0D0D910000005E 337A5B5B5BB40D0D0D910000005EFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF009E9E9E02A5A5A598ACACACCDADADADBAABABAB9EA9A9
A98DA7A7A78FA8A8A8A4C8C8C8CAC8C8C8C9ACACACC4ADADADC4ACACACC6ADAD
ADC6AAAAAAB29C9C9C42FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00A2A2A291AEAEAEB6A3A3A33AA0A0A0598F8F8F997979
79D7898989F3ABABABFCADADADFDB6B6B6FDC5C5C5FA969696DF6E6E6E9A8585
855FA8A8A870AFAFAFD7A3A3A364FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00AFAFAFD2A1A1A12464646468676767E76C6C6CFF7979
79FFB9B9B9FFF2F2F2FFF5F5F5FFF5F5F5FFF4F4F4FFBEBEBEFF848484FF7979
79FF696969E97F7F7FACABABABB0FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF009E9E9EED666666E2707070FF838383FF949494FFA3A3
A3FFD5D5D5FFF8F8F8FFF7F7F7FFF6F6F6FFF7F7F7FFD8D8D8FFAEAEAEFFA3A3
A3FF949494FF838383FF707070F564646441FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF0063636373878787FF7E7E7EFF959595FFAAAAAAFFBEBEBEFFCACA
CAFFD9D9D9FFE8E8E8FFE6E6E6FFE5E5E5FFE7E7E7FFD6D6D6FFC7C7C7FFCACA
CAFFBEBEBEFFAAAAAAFF959595FF7D7D7DFD63636373FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF006262629A6B6B6BFF9B9B9BFFA3A3A3FFBCBCBCFFC9C9C9FFC0C0C0FFB0B0
B0FFBBBBBBFFD7D7D7FFD5D5D5FFD3D3D3FFD5D5D5FFB5B5B5FF9B9B9BFFB0B0
B0FFC0C0C0FFC9C9C9FFBCBCBCFFA3A3A3FF868686FF6262629AFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005F5F
5F746A6A6AFF8A8A8AFFA9A9A9FFC6C6C6FFC5C5C5FFAEAEAEFF919191FF8282
82FF8E8E8EFFA9A9A9FE9A9A9AF9999999F9A5A5A5FE8B8B8BFE7F7F7FFF8A8A
8AFF939393FFAEAEAEFFC5C5C5FFC6C6C6FFA9A9A9FF8A8A8AFF5F5F5F74FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006161613F6969
69FD868686FFA1A1A1FFADADADFFC0C0C0FF9C9C9CFF838383FF727272FE6969
69EB454545AD333333803232325D3232325D33333380454545AE686868EC7272
72FE7C7C7CFF8D8D8DFF9C9C9CFFC0C0C0FFC9C9C9FFA8A8A8FF868686FD6161
613FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00636363E17D7D
7DFFA1A1A1FFAFAFAFFFAAAAAAFF979797FF7B7B7BFF6B6B6BF73B3B3B913232
32293232320D32323202FFFFFF00FFFFFF00323232023232320D323232293B3B
3B91686868F9757575FF898989FF979797FFC0C0C0FFC5C5C5FFA1A1A1FF7474
74E1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005D5D5D696E6E6EFF9393
93FFA1A1A1FFA8A8A8FF9D9D9DFF7F7F7FFF626262EA3131315632323209FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003232
32095F5F5F95656565FA757575FF8A8A8AFF9E9E9EFFC5C5C5FFBABABAFF9393
93FF5F5F5F69FFFFFF00FFFFFF00FFFFFF00FFFFFF00636363E3838383FF9B9B
9BFFA1A1A1FFAEAEAEFF8B8B8BFF636363F53131314132323201FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF009999993E888888D95F5F5FF57D7D7DFF8D8D8DFFB0B0B0FFC9C9C9FFA9A9
A9FF7A7A7AFCABABABDC9F9F9F3EFFFFFF005E5E5E1D787878FEAEAEAEFFA7A7
A7FFC1C1C1FF949494FF707070FC3D3D3D8532323203FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00A3A3A3CD6D6D6DEF696969FF848484FF949494FFC2C2C2FFBBBB
BBFF919191FE98989882ACACACB6FFFFFF007A7A7AAFA4A4A4FF9F9F9FFFC9C9
C9FFB4B4B4FF8D8D8DFF5D5D5DE532323212FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF0032323212565656E37C7C7CFF8D8D8DFFB4B4B4FFCACA
CAFF9F9F9FFF6868689CACACACCB9E9E9E14A9A9A9FAC1C1C1FFDCDCDCFFDCDC
DCFFC3C3C3FFA1A1A1FF5353539FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF004E4E4EA6888888FFABABABFFC7C7C7FFE0E0
E0FFDEDEDEFFA3A3A3DCACACACD0A6A6A691ADADADF9F6F6F6FFF6F6F6FFE5E5
E5FFD3D3D3FFA5A5A5FF3A3A3A4BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0044444459878787FFB5B5B5FFD9D9D9FFEBEB
EBFFFBFBFBFFCDCDCDF3ABABABD1D2D2D2D0A3A3A3FBF9F9F9FFF4F4F4FFE2E2
E2FFCDCDCDFF9B9B9BFD30303018FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00303030187E7E7EFEAEAEAEFFD7D7D7FFE9E9
E9FFF9F9F9FFC1C1C1FCC5C5C5EBCBCBCB81B3B3B3FDFAFAFAFFF3F3F3FFE2E2
E2FFCACACAFF999999FE32323208FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00343434097C7C7CFFABABABFFD6D6D6FFE8E8
E8FFF9F9F9FFC6C6C6FBB3B3B3E19D9D9D78B5B5B5FBF9F9F9FFF4F4F4FFE2E2
E2FFCDCDCDFF9E9E9EFF4D4D4D32FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00565656487F7F7FFFAEAEAEFFD7D7D7FFE9E9
E9FFF9F9F9FFBEBEBEF8A7A7A7B5A0A0A0B2858585E9B0B0B0FFCBCBCBFFD1D1
D1FFACACACFF909090FF58585886FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF005454548B7A7A7AFF969696FFAFAFAFFFD3D3
D3FFC5C5C5FFA7A7A7FB9B9B9B33A0A0A0CC646464B47F7F7FFFA8A8A8FFC9C9
C9FFA6A6A6FF888888FF6B6B6BD2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00616161D5777777FF888888FFA6A6A6FFB5B5
B5FFA7A7A7FF787878DAFFFFFF00A0A0A0D0404040407A7A7AFE9C9C9CFFC6C6
C6FFB8B8B8FF8E8E8EFF7D7D7DFD5B5B5B39FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080
80029F9F9F959A9A9AC78B8B8BC6828282FF8B8B8BFF979797FFA3A3A3FFA3A3
A3FF919191FD55555552FFFFFF00A2A2A2C78B8B8B38717171F08D8D8DFFB7B7
B7FFC5C5C5FF979797FF868686FF6F6F6FEA6565650AFFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A0A0
A0CC8F8F8FC797979773888888F6959595FF949494FF939393FFBFBFBFFFB7B7
B7FF808080F132323209FFFFFF00A0A0A08D9F9F9F935252529E808080FFA3A3
A3FFCACACAFFB6B6B6FF8F8F8FFF818181FF6B6B6BCB6767670CFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AAAAAA039494
94EB6C6C6C11656565D9737373FF818181FF8F8F8FFFB6B6B6FFCACACAFF9999
99FF636363B0FFFFFF00FFFFFF009B9B9B0FA6A6A6DE595959246E6E6EF08D8D
8DFFB5B5B5FFC7C7C7FFA8A8A8FF8D8D8DFF7F7F7FFF6E6E6EEA6060603CFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00999999278E8E
8EEA656565E8737373FF7F7F7FFF8D8D8DFFA8A8A8FFC7C7C7FFB1B1B1FF7C7C
7CF332323219FFFFFF00FFFFFF00FFFFFF00A1A1A198A8A8A8B84545457A7979
79FD999999FFBEBEBEFFC5C5C5FFA3A3A3FF8D8D8DFF818181FF777777FF6A6A
6ACF646464796868683D6262620A6262620A6868683D6464647B737373DF8B8B
8BFF777777FF818181FF8D8D8DFFA3A3A3FFC5C5C5FFBCBCBCFF848484FD5353
5387FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A9A9A9CB969696D25757
57C87B7B7BFE9F9F9FFFC2C2C2FFC5C5C5FFA9A9A9FF909090FF878787FF7F7F
7FFF808080FF7D7D7DFF767676FF747474FF787878FF7A7A7AFF808080FF8B8B
8BFF878787FF909090FFA9A9A9FFC5C5C5FFC0C0C0FF888888FE5D5D5DB93232
320AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009F9F9F698686
86DF616161FA797979FF999999FFBEBEBEFFC8C8C8FFB9B9B9FF9B9B9BFF8F8F
8FFF9F9F9FFFABABABFFA4A4A4FFA2A2A2FFA6A6A6FF999999FF8C8C8CFF8F8F
8FFF9A9A9AFFB9B9B9FFC8C8C8FFB8B8B8FF818181FE636363D232323215FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF0047474725595959D3767676FF8A8A8AFFB1B1B1FFC9C9C9FFC6C6C6FFBABA
BAFFC2C2C2FFD6D6D6FFD2D2D2FFD1D1D1FFD4D4D4FFB9B9B9FFA9A9A9FF9F9F
9FFFC2C2C2FFC9C9C9FF9D9D9DFF797979FD565656B93232321EFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00323232103F3F3F88696969F0757575FF8E8E8EFFAEAEAEFFC3C3
C3FFDADADAFFE7E7E7FFE5E5E5FFE4E4E4FFE5E5E5FFD7D7D7FFC5C5C5FFACAC
ACFF9C9C9CFF7B7B7BFF717171F34747479032323210FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF003232320531313139464646A86A6A6AF7717171FF7777
77FFC1C1C1FFF8F8F8FFF6F6F6FFF6F6F6FFF6F6F6FFC3C3C3FF909090FFA1A1
A1FF6F6F6FF44F4F4FAF3131313A32323205FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00323232093232323A545454A36262
62F7878787F8B8B8B8FAB7B7B7FDB3B3B3FDB4B4B4F8959595F4A5A5A5F76565
659B3232323A32323209FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00323232006666
661A8383838E888888CCB1B1B1ECBFBFBFEDA8A8A8D4A2A2A2BC8E8E8E4B3232
3200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00
} }
end end
end end

View File

@ -71,6 +71,7 @@ type
imTBNor: TImageList; imTBNor: TImageList;
tbDownload: TToolButton; tbDownload: TToolButton;
tbInstall: TToolButton; tbInstall: TToolButton;
tbHelp: TToolButton;
tbRefresh: TToolButton; tbRefresh: TToolButton;
tbCleanUp: TToolButton; tbCleanUp: TToolButton;
tbCreate: TToolButton; tbCreate: TToolButton;
@ -79,6 +80,7 @@ type
procedure pnToolBarResize(Sender: TObject); procedure pnToolBarResize(Sender: TObject);
procedure tbCleanUpClick(Sender: TObject); procedure tbCleanUpClick(Sender: TObject);
procedure tbDownloadClick(Sender: TObject); procedure tbDownloadClick(Sender: TObject);
procedure tbHelpClick(Sender: TObject);
procedure tbInstallClick(Sender: TObject); procedure tbInstallClick(Sender: TObject);
procedure tbOptionsClick(Sender: TObject); procedure tbOptionsClick(Sender: TObject);
procedure tbRefreshClick(Sender: TObject); procedure tbRefreshClick(Sender: TObject);
@ -296,8 +298,8 @@ begin
MessageDlgEx(rsMainFrm_rsMessageError1 + sLineBreak + SerializablePackages.LastError, mtInformation, [mbOk], Self); MessageDlgEx(rsMainFrm_rsMessageError1 + sLineBreak + SerializablePackages.LastError, mtInformation, [mbOk], Self);
Exit; Exit;
end; end;
Updates.StartUpdate;
VisualTree.PopulateTree; VisualTree.PopulateTree;
Updates.StartUpdate;
EnableDisableControls(True); EnableDisableControls(True);
SetupMessage; SetupMessage;
mJSON.Text := AJSON; mJSON.Text := AJSON;
@ -367,6 +369,7 @@ begin
tbCleanUp.Enabled := (AEnable) and (SerializablePackages.Count > 0); tbCleanUp.Enabled := (AEnable) and (SerializablePackages.Count > 0);
tbCreate.Enabled := (AEnable); tbCreate.Enabled := (AEnable);
tbOptions.Enabled := (AEnable); tbOptions.Enabled := (AEnable);
tbHelp.Enabled := (AEnable);
end; end;
procedure TMainFrm.SetupMessage(const AMessage: String = ''); procedure TMainFrm.SetupMessage(const AMessage: String = '');
@ -516,8 +519,14 @@ begin
ShowOptions; ShowOptions;
end; end;
procedure TMainFrm.tbHelpClick(Sender: TObject);
begin
OpenDocument('http://wiki.freepascal.org/Online_Package_Manager');
end;
procedure TMainFrm.tbRefreshClick(Sender: TObject); procedure TMainFrm.tbRefreshClick(Sender: TObject);
begin begin
Updates.Paused := True;
VisualTree.VST.Clear; VisualTree.VST.Clear;
VisualTree.VST.Invalidate; VisualTree.VST.Invalidate;
GetPackageList; GetPackageList;
@ -556,6 +565,7 @@ begin
if CanGo then if CanGo then
begin begin
Updates.Paused := True;
Options.LastDownloadDir := DstDir; Options.LastDownloadDir := DstDir;
Options.Changed := True; Options.Changed := True;
PackageAction := paDownloadTo; PackageAction := paDownloadTo;
@ -577,6 +587,7 @@ begin
end; end;
end; end;
SerializablePackages.RemoveErrorState; SerializablePackages.RemoveErrorState;
Updates.Paused := False;
end; end;
procedure TMainFrm.tbUpdateClick(Sender: TObject); procedure TMainFrm.tbUpdateClick(Sender: TObject);
@ -608,6 +619,7 @@ begin
if CanGo then if CanGo then
begin begin
Updates.Paused := True;
PackageAction := paUpdate; PackageAction := paUpdate;
VisualTree.UpdatePackageStates; VisualTree.UpdatePackageStates;
if SerializablePackages.DownloadCount > 0 then if SerializablePackages.DownloadCount > 0 then
@ -652,7 +664,10 @@ begin
end; end;
end; end;
if not NeedToRebuild then if not NeedToRebuild then
begin
SerializablePackages.RemoveErrorState; SerializablePackages.RemoveErrorState;
Updates.Paused := False;
end;
end; end;
procedure TMainFrm.tbInstallClick(Sender: TObject); procedure TMainFrm.tbInstallClick(Sender: TObject);
@ -682,6 +697,7 @@ begin
if CanGo then if CanGo then
begin begin
Updates.Paused := True;
PackageAction := paInstall; PackageAction := paInstall;
VisualTree.UpdatePackageStates; VisualTree.UpdatePackageStates;
if SerializablePackages.DownloadCount > 0 then if SerializablePackages.DownloadCount > 0 then
@ -727,7 +743,10 @@ begin
end; end;
end; end;
if not NeedToRebuild then if not NeedToRebuild then
begin
SerializablePackages.RemoveErrorState; SerializablePackages.RemoveErrorState;
Updates.Paused := False;
end;
end; end;
procedure TMainFrm.tbCleanUpClick(Sender: TObject); procedure TMainFrm.tbCleanUpClick(Sender: TObject);
@ -844,6 +863,9 @@ begin
tbCreate.Hint := rsMainFrm_TBRepository_Hint; tbCreate.Hint := rsMainFrm_TBRepository_Hint;
tbOptions.Caption := rsMainFrm_TBOptions_Caption; tbOptions.Caption := rsMainFrm_TBOptions_Caption;
tbOptions.Hint := rsMainFrm_TBOptions_Hint; tbOptions.Hint := rsMainFrm_TBOptions_Hint;
tbHelp.Caption := rsMainFrm_TBHelp_Caption;
tbHelp.Hint := rsMainFrm_TBHelp_Hint;
miCreateRepositoryPackage.Caption := rsMainFrm_miCreateRepositoryPackage; miCreateRepositoryPackage.Caption := rsMainFrm_miCreateRepositoryPackage;
miCreateRepository.Caption := rsMainFrm_miCreateRepository; miCreateRepository.Caption := rsMainFrm_miCreateRepository;
miJSONShow.Caption := rsMainFrm_miJSONShow; miJSONShow.Caption := rsMainFrm_miJSONShow;

View File

@ -165,7 +165,8 @@ begin
if (SerializablePackages.Items[I].Checked) then if (SerializablePackages.Items[I].Checked) then
begin begin
Inc(ChkCnt); Inc(ChkCnt);
if (Trim(SerializablePackages.Items[I].DownloadZipURL) = '') then if (Trim(SerializablePackages.Items[I].DownloadZipURL) = '') or
(SerializablePackages.GetPackageInstallState(SerializablePackages.Items[I]) = 0) then
begin begin
Inc(InvCnt); Inc(InvCnt);
Node := FVST.AddChild(nil); Node := FVST.AddChild(nil);

View File

@ -269,6 +269,7 @@ type
function Cleanup: Integer; function Cleanup: Integer;
function IsDependencyOk(PackageDependency: TPackageDependency; DependencyPackage: TPackageFile): Boolean; function IsDependencyOk(PackageDependency: TPackageDependency; DependencyPackage: TPackageFile): Boolean;
function IsInstalledVersionOk(PackageDependency: TPackageDependency; InstalledVersion: String): Boolean; function IsInstalledVersionOk(PackageDependency: TPackageDependency; InstalledVersion: String): Boolean;
function GetPackageInstallState(const APackage: TPackage): Integer; overload;
procedure DeleteDownloadedZipFiles; procedure DeleteDownloadedZipFiles;
public public
property Count: Integer read GetCount; property Count: Integer read GetCount;
@ -1116,6 +1117,29 @@ begin
end; end;
end; end;
function TSerializablePackages.GetPackageInstallState(const APackage: TPackage): Integer;
var
I: Integer;
PackageFile: TPackageFile;
InstCnt: Integer;
begin
InstCnt := 0;
for I := 0 to APackage.PackageFiles.Count - 1 do
begin
PackageFile := TPackageFile(APackage.PackageFiles.Items[I]);
if IsPackageInstalled(PackageFile, APackage.PackageBaseDir) then
Inc(InstCnt);
end;
case InstCnt of
0: Result := 0;
1..High(Integer):
if InstCnt < APackage.PackageFiles.Count then
Result := 2
else
Result := 1;
end;
end;
function TSerializablePackages.PackageDataToJSON(APackage: TPackage; function TSerializablePackages.PackageDataToJSON(APackage: TPackage;
var APackageData: TJSONObject): Boolean; var APackageData: TJSONObject): Boolean;
begin begin

View File

@ -6,7 +6,7 @@ interface
uses uses
Classes, SysUtils, LazIDEIntf, Laz2_XMLCfg, LazFileUtils, fpjson, fpjsonrtti, Classes, SysUtils, LazIDEIntf, Laz2_XMLCfg, LazFileUtils, fpjson, fpjsonrtti,
opkman_httpclient, opkman_timer; opkman_httpclient, opkman_timer, opkman_serializablepackages;
const const
OpkVersion = 1; OpkVersion = 1;
@ -77,6 +77,9 @@ type
procedure DoOnUpdate; procedure DoOnUpdate;
procedure Load; procedure Load;
procedure Save; procedure Save;
procedure SetPaused(const AValue: Boolean);
procedure AssignPackageData(APackage: TPackage);
procedure ResetPackageData(APackage: TPackage);
protected protected
procedure Execute; override; procedure Execute; override;
public public
@ -85,7 +88,7 @@ type
procedure StartUpdate; procedure StartUpdate;
procedure StopUpdate; procedure StopUpdate;
published published
property Paused: Boolean read FPaused write FPaused; property Paused: Boolean read FPaused write SetPaused;
property OnUpdate: TNotifyEvent read FOnUpdate write FOnUpdate; property OnUpdate: TNotifyEvent read FOnUpdate write FOnUpdate;
end; end;
@ -94,7 +97,7 @@ var
implementation implementation
uses opkman_serializablepackages, opkman_options, opkman_common; uses opkman_options, opkman_common;
{ TUpdatePackage } { TUpdatePackage }
@ -257,6 +260,47 @@ begin
FXML.Flush; FXML.Flush;
end; end;
procedure TUpdates.SetPaused(const AValue: Boolean);
begin
if FPaused <> AValue then
begin
FPaused := AValue;
if FPaused then
Save;
end;
end;
procedure TUpdates.AssignPackageData(APackage: TPackage);
var
I: Integer;
PackageFile: TPackageFile;
begin
APackage.DownloadZipURL := FUpdatePackage.FUpdatePackageData.DownloadZipURL;
APackage.ForceNotify := FUpdatePackage.FUpdatePackageData.ForceNotify;
for I := 0 to FUpdatePackage.FUpdatePackageFiles.Count - 1 do
begin
PackageFile := APackage.FindPackageFile(TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[I]).Name);
if PackageFile <> nil then
PackageFile.UpdateVersion := TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[I]).Version;
end;
end;
procedure TUpdates.ResetPackageData(APackage: TPackage);
var
I: Integer;
PackageFile: TPackageFile;
begin
APackage.DownloadZipURL := '';
APackage.ForceNotify := False;
for I := 0 to APackage.PackageFiles.Count - 1 do
begin
PackageFile := APackage.FindPackageFile(TPackageFile(APackage.PackageFiles.Items[I]).Name);
if PackageFile <> nil then
PackageFile.UpdateVersion := '';
end;
end;
procedure TUpdates.DoOnTimer(Sender: TObject); procedure TUpdates.DoOnTimer(Sender: TObject);
begin begin
if (FTimer.Enabled) and (not FNeedToBreak) then if (FTimer.Enabled) and (not FNeedToBreak) then
@ -302,17 +346,14 @@ end;
procedure TUpdates.Execute; procedure TUpdates.Execute;
var var
I, J: Integer; I: Integer;
JSON: TJSONStringType; JSON: TJSONStringType;
PackageFile: TPackageFile;
NeedToUpdate: Boolean;
begin begin
Load; Load;
while not Terminated do while not Terminated do
begin begin
if (FNeedToUpdate) and (not FBusyUpdating) and (not FPaused) then if (FNeedToUpdate) and (not FBusyUpdating) and (not FPaused) then
begin begin
NeedToUpdate := False;
FBusyUpdating := True; FBusyUpdating := True;
try try
for I := 0 to SerializablePackages.Count - 1 do for I := 0 to SerializablePackages.Count - 1 do
@ -325,29 +366,18 @@ begin
if GetUpdateInfo(SerializablePackages.Items[I].DownloadURL, JSON) then if GetUpdateInfo(SerializablePackages.Items[I].DownloadURL, JSON) then
begin begin
if FUpdatePackage.LoadFromJSON(JSON) then if FUpdatePackage.LoadFromJSON(JSON) then
begin AssignPackageData(SerializablePackages.Items[I])
SerializablePackages.Items[I].DownloadZipURL := FUpdatePackage.FUpdatePackageData.DownloadZipURL; else
SerializablePackages.Items[I].ForceNotify := FUpdatePackage.FUpdatePackageData.ForceNotify; ResetPackageData(SerializablePackages.Items[I]);
NeedToUpdate := FUpdatePackage.FUpdatePackageData.ForceNotify = True; end
for J := 0 to FUpdatePackage.FUpdatePackageFiles.Count - 1 do else
begin ResetPackageData(SerializablePackages.Items[I]);
PackageFile := SerializablePackages.Items[I].FindPackageFile(TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[J]).Name);
if PackageFile <> nil then
begin
if not NeedToUpdate then
NeedToUpdate := TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[J]).Version > PackageFile.UpdateVersion;
PackageFile.UpdateVersion := TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[J]).Version;
end;
end;
end;
end;
end end
else else
FHTTPClient.NeedToBreak := True; FHTTPClient.NeedToBreak := True;
end; end;
if (NeedToUpdate) and (not FNeedToBreak) and (not FPaused) then if Assigned(FOnUpdate) and (not FNeedToBreak) and (not FPaused) then
if Assigned(FOnUpdate) then Synchronize(@DoOnUpdate);
Synchronize(@DoOnUpdate);
finally finally
FBusyUpdating := False; FBusyUpdating := False;
FNeedToUpdate := False; FNeedToUpdate := False;
@ -358,11 +388,11 @@ end;
procedure TUpdates.StartUpdate; procedure TUpdates.StartUpdate;
begin begin
Load;
FPaused := False;
if FStarted then if FStarted then
Exit; Exit;
FStarted := True; FStarted := True;
FPaused := False;
Load;
FTimer := TThreadTimer.Create; FTimer := TThreadTimer.Create;
FTimer.Interval := UpdateInterval; FTimer.Interval := UpdateInterval;
FTimer.OnTimer := @DoOnTimer; FTimer.OnTimer := @DoOnTimer;

View File

@ -65,7 +65,7 @@ type
ForceUpadate: Boolean; ForceUpadate: Boolean;
HasUpdate: Boolean; HasUpdate: Boolean;
SVNURL: String; SVNURL: String;
IsInstalled: Boolean; InstallState: Integer;
ButtonID: Integer; ButtonID: Integer;
Button: TSpeedButton; Button: TSpeedButton;
end; end;
@ -174,14 +174,14 @@ begin
with Header.Columns.Add do with Header.Columns.Add do
begin begin
Position := 0; Position := 0;
Width := 250; Width := 270;
Text := rsMainFrm_VSTHeaderColumn_PackageName; Text := rsMainFrm_VSTHeaderColumn_PackageName;
end; end;
with Header.Columns.Add do with Header.Columns.Add do
begin begin
Position := 1; Position := 1;
Alignment := taCenter; Alignment := taCenter;
Width := 80; Width := 90;
Options := Options - [coResizable]; Options := Options - [coResizable];
Text := rsMainFrm_VSTHeaderColumn_Installed; Text := rsMainFrm_VSTHeaderColumn_Installed;
end; end;
@ -189,7 +189,7 @@ begin
begin begin
Position := 2; Position := 2;
Alignment := taCenter; Alignment := taCenter;
Width := 85; Width := 90;
Options := Options - [coResizable]; Options := Options - [coResizable];
Text := rsMainFrm_VSTHeaderColumn_Repository; Text := rsMainFrm_VSTHeaderColumn_Repository;
end; end;
@ -197,7 +197,7 @@ begin
begin begin
Position := 3; Position := 3;
Alignment := taCenter; Alignment := taCenter;
Width := 80; Width := 90;
Options := Options - [coResizable]; Options := Options - [coResizable];
Text := rsMainFrm_VSTHeaderColumn_Update; Text := rsMainFrm_VSTHeaderColumn_Update;
end; end;
@ -295,8 +295,8 @@ begin
Data^.PackageName := SerializablePackages.Items[I].Name; Data^.PackageName := SerializablePackages.Items[I].Name;
Data^.PackageDisplayName := SerializablePackages.Items[I].DisplayName; Data^.PackageDisplayName := SerializablePackages.Items[I].DisplayName;
Data^.PackageState := SerializablePackages.Items[I].PackageState; Data^.PackageState := SerializablePackages.Items[I].PackageState;
Data^.InstallState := SerializablePackages.GetPackageInstallState(SerializablePackages.Items[I]);
Data^.DataType := 1; Data^.DataType := 1;
Data^.HasUpdate := False;
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
begin begin
//add packagefiles(DataType = 2) //add packagefiles(DataType = 2)
@ -949,6 +949,7 @@ begin
if Package <> nil then if Package <> nil then
begin begin
Data^.PackageState := Package.PackageState; Data^.PackageState := Package.PackageState;
Data^.InstallState := SerializablePackages.GetPackageInstallState(Package);
FVST.ReinitNode(Node, False); FVST.ReinitNode(Node, False);
FVST.RepaintNode(Node); FVST.RepaintNode(Node);
end; end;
@ -988,7 +989,7 @@ begin
Data^.ForceUpadate := Package.ForceNotify; Data^.ForceUpadate := Package.ForceNotify;
FVST.ReinitNode(Node, False); FVST.ReinitNode(Node, False);
FVST.RepaintNode(Node); FVST.RepaintNode(Node);
if Package.ForceNotify then if (Package.ForceNotify) and (SerializablePackages.GetPackageInstallState(Package) > 0) then
begin begin
Data^.HasUpdate := True; Data^.HasUpdate := True;
FVST.ReinitNode(Node, False); FVST.ReinitNode(Node, False);
@ -1004,13 +1005,17 @@ begin
Data^.UpdateVersion := PackageFile.UpdateVersion; Data^.UpdateVersion := PackageFile.UpdateVersion;
FVST.ReinitNode(Node, False); FVST.ReinitNode(Node, False);
FVST.RepaintNode(Node); FVST.RepaintNode(Node);
if Data^.UpdateVersion > Data^.InstalledVersion then if (Data^.InstalledVersion <> '') and (Trim(Data^.UpdateVersion) <> '') then
begin begin
ParentNode := Node^.Parent; ParentNode := Node^.Parent;
ParentData := FVST.GetNodeData(ParentNode); ParentData := FVST.GetNodeData(ParentNode);
ParentData^.HasUpdate := True; Data^.HasUpdate := (Data^.UpdateVersion > Data^.InstalledVersion) or (ParentData^.ForceUpadate);
FVST.ReinitNode(ParentNode, False); if Data^.HasUpdate then
FVST.RepaintNode(ParentNode); begin
ParentData^.HasUpdate := True;
FVST.ReinitNode(ParentNode, False);
FVST.RepaintNode(ParentNode);
end;
end; end;
end; end;
end; end;
@ -1022,8 +1027,7 @@ procedure TVisualTree.VSTBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect); CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var var
Data, ParentData: PData; Data: PData;
ParentNode: PVirtualNode;
begin begin
Data := Sender.GetNodeData(Node); Data := Sender.GetNodeData(Node);
if (Data^.DataType = 0) or (Data^.DataType = 1) or (Data^.DataType = 2) then if (Data^.DataType = 0) or (Data^.DataType = 1) or (Data^.DataType = 2) then
@ -1049,27 +1053,10 @@ begin
end end
else else
begin begin
case Column of if Data^.DataType = 0 then
0, 1, 2, 4, 5: TargetCanvas.Brush.Color := $00E5E5E5 //00D8D8D8
begin else if Data^.DataType = 1 then
if Data^.DataType = 0 then TargetCanvas.Brush.Color := $00E5E5E5;
TargetCanvas.Brush.Color := $00E5E5E5 //00D8D8D8
else
TargetCanvas.Brush.Color := $00E5E5E5;
end;
3:begin
TargetCanvas.Brush.Color := $00E5E5E5;
if (Data^.DataType = 2) then
begin
ParentNode := Node^.Parent;
ParentData := FVST.GetNodeData(ParentNode);
if (Data^.UpdateVersion > Data^.InstalledVersion) or (ParentData^.ForceUpadate) then
ParentData^.HasUpdate := True
else
ParentData^.HasUpdate := False;
end
end;
end;
TargetCanvas.FillRect(CellRect); TargetCanvas.FillRect(CellRect);
end; end;
end end
@ -1202,6 +1189,8 @@ begin
else if (Data1^.DataType = 2) and (Data1^.DataType = 2) then else if (Data1^.DataType = 2) and (Data1^.DataType = 2) then
Result := CompareText(Data1^.PackageFileName, Data2^.PackageFileName); Result := CompareText(Data1^.PackageFileName, Data2^.PackageFileName);
end; end;
1: if (Data1^.DataType = 1) and (Data1^.DataType = 1) then
Result := Data2^.InstallState - Data1^.InstallState;
3: if (Data1^.DataType = 1) and (Data1^.DataType = 1) then 3: if (Data1^.DataType = 1) and (Data1^.DataType = 1) then
Result := Ord(Data2^.HasUpdate) - Ord(Data1^.HasUpdate); Result := Ord(Data2^.HasUpdate) - Ord(Data1^.HasUpdate);
end; end;
@ -1273,12 +1262,21 @@ begin
end end
else if Column = 1 then else if Column = 1 then
begin begin
if Data^.InstalledVersion = '' then case Data^.DataType of
Data^.InstalledVersion := '-'; 1: case Data^.InstallState of
if Data^.DataType = 2 then //0: CellText := rsMainFrm_VSTText_Install0;
CellText := Data^.InstalledVersion 1: CellText := rsMainFrm_VSTText_Install1;
else 2: CellText := rsMainFrm_VSTText_Install2;
CellText := ''; end;
2: begin
if Data^.InstalledVersion <> '' then
CellText := Data^.InstalledVersion
else
CellText := '-';
end
else
CellText := '';
end
end end
else if Column = 2 then else if Column = 2 then
begin begin
@ -1293,12 +1291,10 @@ begin
1: if Data^.HasUpdate then 1: if Data^.HasUpdate then
CellText := 'NEW'; CellText := 'NEW';
2: begin 2: begin
if Data^.UpdateVersion = '' then if (Data^.InstalledVersion <> '') and (Data^.UpdateVersion <> '') then
Data^.UpdateVersion := '-';
if Data^.DataType = 2 then
CellText := Data^.UpdateVersion CellText := Data^.UpdateVersion
else else
CellText := ''; CellText := '-';
end end
else else
CellText := ''; CellText := '';
@ -1314,8 +1310,7 @@ begin
1: CellText := rsMainFrm_VSTText_PackageState1; 1: CellText := rsMainFrm_VSTText_PackageState1;
2: CellText := rsMainFrm_VSTText_PackageState2; 2: CellText := rsMainFrm_VSTText_PackageState2;
3: begin 3: begin
Data^.IsInstalled := Data^.InstalledVersion >= Data^.UpdateVersion; if Data^.InstalledVersion >= Data^.UpdateVersion then
if Data^.IsInstalled then
CellText := rsMainFrm_VSTText_PackageState4 CellText := rsMainFrm_VSTText_PackageState4
else else
CellText := rsMainFrm_VSTText_PackageState3 CellText := rsMainFrm_VSTText_PackageState3
@ -1354,7 +1349,7 @@ 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);
begin begin
if (Column <> 0) and (Column <> 3) then if (Column <> 0) and (Column <> 1) and (Column <> 3) then
Exit; Exit;
if Button = mbLeft then if Button = mbLeft then
begin begin
@ -1387,8 +1382,21 @@ var
begin begin
Data := FVST.GetNodeData(Node); Data := FVST.GetNodeData(Node);
case column of case column of
1: begin
if Node <> Sender.FocusedNode then
begin
if Data^.DataType = 1 then
begin
case Data^.InstallState of
1: TargetCanvas.Font.Color := clBlack;
2: TargetCanvas.Font.Color := clBlack;
end;
end;
end
else
TargetCanvas.Font.Color := clWhite;
end;
3: begin 3: begin
case Data^.DataType of case Data^.DataType of
1: TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold]; 1: TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
2: begin 2: begin
@ -1413,7 +1421,7 @@ begin
else else
TargetCanvas.Font.Color := clWhite; TargetCanvas.Font.Color := clWhite;
end end
else if (Data^.DataType = 2) and (Data^.IsInstalled) then else if (Data^.DataType = 2) and (Data^.InstalledVersion >= Data^.UpdateVersion) then
begin begin
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold]; TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
if Node <> Sender.FocusedNode then if Node <> Sender.FocusedNode then