Opkman: Voting system implemented locally.

git-svn-id: trunk@53697 -
This commit is contained in:
balazs 2016-12-16 09:12:24 +00:00
parent 25ef353188
commit ca254979a9
11 changed files with 400 additions and 85 deletions

4
.gitattributes vendored
View File

@ -3290,6 +3290,10 @@ components/onlinepackagemanager/images/Tree_Buttons/Info.png -text svneol=unset#
components/onlinepackagemanager/images/Tree_Buttons/Ok.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/Refresh.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/Refresh1.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/StarEmpty.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/StarFull.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/StarFull_Blue.png -text svneol=unset#image/png
components/onlinepackagemanager/images/Tree_Buttons/StarHalfFull.png -text svneol=unset#image/png
components/onlinepackagemanager/languages/opkman_VirtualTrees.fi.po svneol=native#text/plain
components/onlinepackagemanager/languages/opkman_VirtualTrees.hu.po svneol=native#text/plain
components/onlinepackagemanager/languages/opkman_VirtualTrees.po svneol=native#text/plain

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

View File

@ -65,6 +65,7 @@ resourcestring
rsMainFrm_VSTHeaderColumn_Update = 'Update';
rsMainFrm_VSTHeaderColumn_Data = 'Status/Data';
rsMainFrm_VSTHeaderColumn_Button = '';
rsMainFrm_VSTHeaderColumn_Rating = 'Rating';
rsMainFrm_VSTText_PackageCategory = 'Package category';
rsMainFrm_VSTText_PackageStatus = 'Package status';
rsMainFrm_VSTText_Version = 'Version';
@ -179,6 +180,7 @@ resourcestring
rsMainFrm_rsPackageDependency1 = 'Resolve dependency?';
rsMainFrm_rsPackageDependency2 = 'Not resolving dependencies might lead to install failure!';
rsMainFrm_rsPackageDependency4 = 'dependency list. Unchecking it might lead to installing failure. Do you wish to continue?';
rsMainFrm_rsPackageRating = 'Your vote for package "%s" is: %s. Thank you for voting!';
//progress form
rsProgressFrm_Caption0 = 'Downloading packages';

View File

@ -2,10 +2,10 @@ object MainFrm: TMainFrm
Left = 463
Height = 640
Top = 164
Width = 850
Width = 900
Caption = 'Online Package Manager'
ClientHeight = 640
ClientWidth = 850
ClientWidth = 900
Color = clBtnFace
Constraints.MinHeight = 400
Constraints.MinWidth = 600
@ -20,11 +20,11 @@ object MainFrm: TMainFrm
Left = 0
Height = 570
Top = 0
Width = 850
Width = 900
Align = alClient
BevelOuter = bvNone
ClientHeight = 570
ClientWidth = 850
ClientWidth = 900
TabOrder = 0
OnResize = pnMainResize
object pnMessage: TPanel
@ -49,18 +49,18 @@ object MainFrm: TMainFrm
Left = 0
Height = 60
Top = 0
Width = 850
Width = 900
Align = alTop
BevelOuter = bvNone
ClientHeight = 60
ClientWidth = 850
ClientWidth = 900
Color = clBtnFace
ParentColor = False
TabOrder = 0
OnResize = pnTopResize
object spExpand: TSpeedButton
Tag = 1
Left = 802
Left = 852
Height = 20
Top = 13
Width = 21
@ -125,7 +125,7 @@ object MainFrm: TMainFrm
end
object spCollapse: TSpeedButton
Tag = 2
Left = 824
Left = 874
Height = 20
Top = 13
Width = 21
@ -370,7 +370,7 @@ object MainFrm: TMainFrm
Left = 0
Height = 510
Top = 60
Width = 850
Width = 900
Align = alClient
Color = clBtnFace
PopupMenu = pmMemo
@ -384,10 +384,10 @@ object MainFrm: TMainFrm
Left = 0
Height = 70
Top = 570
Width = 850
Width = 900
Align = alBottom
ClientHeight = 70
ClientWidth = 850
ClientWidth = 900
TabOrder = 1
OnResize = pnToolBarResize
object tbButtons: TToolBar
@ -542,7 +542,7 @@ object MainFrm: TMainFrm
left = 64
top = 163
Bitmap = {
4C69140000001000000010000000A38D780095806C12B3A18B9FC5B49FFEC6B5
4C69190000001000000010000000A38D780095806C12B3A18B9FC5B49FFEC6B5
A0FFC6B5A0FFC6B5A0FFC6B5A1FFBEAD98E3A5917C4BFFFFFF00988674000000
0000000000000000000000000000FFEAD300AC9A886AD5C9BBF9E3D9CBFFE2D9
CAFFE2D9CAFFE2D9CAFFE3D9CAFFE0D6C8FFC3B4A4CB84715C189B8874000000
@ -1182,7 +1182,167 @@ object MainFrm: TMainFrm
1CFFFFBB19FF9B5005CC0000001A0000001900000016000000130000000E0000
000A000000050000000200000000FFFFFF00000000130000002F723A02A6974C
02CC974C02CC723A02A600000033000000320000002C000000250000001C0000
00130000000A0000000400000000
00130000000A0000000400000000000000000000000000000000000000000000
000000000000000203011A699B401C6DA2400002030100000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000100082131022AA4F2CF2AA5F3CF0925380200000100000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000203001B70A75228A4F4FD28A4F4FD1C75AD5200020300000000000000
0000000000000000000000000000000000000000000000000000000000000001
0100071F2E0226A0EFCD26A3F3FE26A3F3FE26A1F0CD08243502000101000000
0000000000000000000000000000000102000001020000020301000204010414
1F021C7EBD6725A0F0FD25A1F1FE25A2F2FE25A0F0FD1D81C267041621020002
04010002030100010200000102000F456820145C8B4A1973AC6F1E89CF93229C
EAC0239EEEFC239FEFFE24A0F0FF24A0F0FF239FEFFE239EEEFC229CEBC01E8A
D0931973AD6F145D8D4A0F4669202294DED7219DECFC219EEDFD219EEEFE219E
EEFE219EEEFE229EEEFE229EEEFF229EEEFF229EEEFE219EEEFE219EEEFE219E
EEFE219EEDFD219DECFC2294DED70F3D5B1F2093DCD91F9CEBFE209CECFE209D
EDFF209DEDFF209DEDFF209DEDFF209DEDFF209DEDFF209DEDFF209DEDFF209C
ECFE1F9CEBFE2093DCD91041611F000203000E38551B1E90D9D51D9AE9FE1E9A
EAFE1E9BEBFF1E9BEBFF1E9BEBFF1E9BEBFF1E9BEBFF1E9BEBFF1E9AEAFE1D9A
E9FE1E91DAD50F3C591B0002030000000000000102000C354F191C91DCDD1C98
E8FE1C99E9FF1C99E9FF1C99E9FF1C99E9FF1C99E9FF1C99E9FF1C98E8FE1C92
DCDD0D3A55190001020000000000000000000000000000020401146EA6791A96
E6FE1B97E7FF1B97E7FF1B97E7FF1B97E7FF1B97E7FF1B97E7FF1A96E6FE1572
AD790002040100000000000000000000000000000000000203011270AC7C1894
E4FD1995E5FF1995E5FF1995E5FF1995E5FF1995E5FF1995E5FF1894E4FD1374
B37C0002030100000000000000000000000000000000000203011486D0A71692
E2FE1792E2FE1792E2FE1792E2FE1792E2FE1792E2FE1792E2FE1692E2FE158A
D5A7000305010000000000000000000000000000000002111A01148EDDD11590
E0FE1490DFFD158AD5F01474B2981473B198158AD5F01490DFFD1590E0FE148E
DDD1021521010000000000000000000000000000000005273E06138DDBF51489
D5F41472AE8D09314C160004060100030501092F48161371AC8D1489D5F4138D
DBF5062B4406000000000000000000000000000001000621330B126BA4870B39
561F0006090100010100000000000000000000010100000508010A37531F126B
A3870624380B00000100000000004D4D4D004D4D4D004D4D4D004D4D4D004D4D
4D004D4D4D004E4E4E019A9A9A409D9D9D404E4E4E014D4D4D004D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D
4D004D4D4D0064646402C6C6C6CFC6C6C6CF686868024D4D4D004D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D
4D004E4E4E009F9F9F52C6C6C6FDC6C6C6FDA3A3A3524E4E4E004D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D
4D0063636302C3C3C3CDC5C5C5FEC5C5C5FEC3C3C3CD666666024D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004E4E4E014E4E4E015B5B
5B02AAAAAA67C3C3C3FDC3C3C3FEC4C4C4FEC3C3C3FDACACAC675D5D5D024E4E
4E014E4E4E014D4D4D004D4D4D00808080209090904AA1A1A16FB2B2B293C0C0
C0C0C1C1C1FCC2C2C2FEC3C3C3FFC3C3C3FFC2C2C2FEC1C1C1FCC0C0C0C0B3B3
B393A2A2A26F9292924A80808020BABABAD7C1C1C1FCC1C1C1FDC1C1C1FEC1C1
C1FEC1C1C1FEC1C1C1FEC1C1C1FFC1C1C1FFC1C1C1FEC1C1C1FEC1C1C1FEC1C1
C1FEC1C1C1FDC1C1C1FCBABABAD77979791FB9B9B9D9C0C0C0FEC0C0C0FEC1C1
C1FFC1C1C1FFC1C1C1FFC1C1C1FFC1C1C1FFC1C1C1FFC1C1C1FFC1C1C1FFC0C0
C0FEC0C0C0FEB9B9B9D97C7C7C1F4E4E4E007676761BB7B7B7D5BFBFBFFEBFBF
BFFEBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFEBFBF
BFFEB8B8B8D57979791B4E4E4E004D4D4D004D4D4D0074747419B8B8B8DDBDBD
BDFEBEBEBEFFBEBEBEFFBEBEBEFFBEBEBEFFBEBEBEFFBEBEBEFFBDBDBDFEB8B8
B8DD767676194D4D4D004D4D4D004D4D4D004D4D4D004E4E4E019E9E9E79BCBC
BCFEBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFEA1A1
A1794E4E4E014D4D4D004D4D4D004D4D4D004D4D4D004E4E4E01A0A0A07CBABA
BAFDBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBABABAFDA3A3
A37C4E4E4E014D4D4D004D4D4D004D4D4D004D4D4D004E4E4E01B1B1B1A7B9B9
B9FEB9B9B9FEB9B9B9FEB9B9B9FEB9B9B9FEB9B9B9FEB9B9B9FEB9B9B9FEB3B3
B3A74F4F4F014D4D4D004D4D4D004D4D4D004D4D4D0058585801B6B6B6D1B8B8
B8FEB8B8B8FDB3B3B3F0A3A3A398A2A2A298B3B3B3F0B8B8B8FDB8B8B8FEB6B6
B6D15C5C5C014D4D4D004D4D4D004D4D4D004D4D4D006A6A6A06B6B6B6F5B3B3
B3F4A1A1A18D717171164F4F4F014F4F4F0170707016A0A0A08DB3B3B3F4B6B6
B6F56D6D6D064D4D4D004D4D4D004D4D4D004D4D4D006565650B9C9C9C877676
761F515151014D4D4D004D4D4D004D4D4D004D4D4D00505050017575751F9C9C
9C876767670B4D4D4D004D4D4D00000000000000000000000000000000000000
000000000000000203011A699B401A699B404E4E4E014D4D4D004D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D00000000000000000000000000000000000000
000000000100082031022BA4F1CF2BA4F1CF686868024D4D4D004D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D00000000000000000000000000000000000000
0000000203001A6FA6522BA5F3FD2BA5F3FDA3A3A3524E4E4E004D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D00000000000000000000000000000000000001
0100061F2E0225A0EECD2BA4F2FE2BA4F2FEC3C3C3CD666666024D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D00000102000001020000020301000204010414
1F021C7DBD6724A0F0FD2AA3F2FE2AA3F2FEC3C3C3FDACACAC675D5D5D024E4E
4E014E4E4E014D4D4D004D4D4D000F456820135C8B4A1872AC6F1E89CE93229C
EAC0229EEEFC229FEFFE28A1F0FF28A1F0FFC2C2C2FEC1C1C1FCC0C0C0C0B3B3
B393A2A2A26F9292924A808080202193DDD7209CEBFC209DECFD209DEDFE209D
EDFE219DEDFE219EEEFE26A0EEFF26A0EEFFC1C1C1FEC1C1C1FEC1C1C1FEC1C1
C1FEC1C1C1FDC1C1C1FCBABABAD70F3D5B1F1F92DBD91F9BEAFE1F9BEBFE1F9C
ECFF1F9CECFF209CECFF249EECFF249EECFFC1C1C1FFC1C1C1FFC1C1C1FFC0C0
C0FEC0C0C0FEB9B9B9D97C7C7C1F000203000D38551B1E90D9D51D99E8FE1E99
E9FE1E9AEAFF1E9AEAFF239CEAFF239CEAFFBFBFBFFFBFBFBFFFBFBFBFFEBFBF
BFFEB8B8B8D57979791B4E4E4E0000000000000102000C354F191C91DCDD1B98
E8FE1C98E8FF1C98E8FF219AE8FF219AE8FFBEBEBEFFBEBEBEFFBDBDBDFEB8B8
B8DD767676194D4D4D004D4D4D00000000000000000000020401146EA6791996
E6FE1A97E7FF1A97E7FF1F98E6FF1F98E6FFBDBDBDFFBDBDBDFFBCBCBCFEA1A1
A1794E4E4E014D4D4D004D4D4D000000000000000000000203011270AC7C1894
E4FD1895E5FF1995E5FF1D97E4FF1D97E4FFBBBBBBFFBBBBBBFFBABABAFDA3A3
A37C4E4E4E014D4D4D004D4D4D000000000000000000000203011486D0A71692
E2FE1792E2FE1792E2FE1893E2FE1893E2FEB9B9B9FEB9B9B9FEB9B9B9FEB3B3
B3A74F4F4F014D4D4D004D4D4D00000000000000000002111A01148EDDD11590
E0FE1490DFFD158AD5F01575B2981575B298B3B3B3F0B8B8B8FDB8B8B8FEB6B6
B6D15C5C5C014D4D4D004D4D4D00000000000000000005273E06138DDBF5148A
D5F41472AE8D09314C16000406010004060170707016A0A0A08DB3B3B3F4B6B6
B6F56D6D6D064D4D4D004D4D4D0000000000000001000621330B126BA4870B39
561F000609010001010000000000000000004D4D4D00505050017575751F9C9C
9C876767670B4D4D4D004D4D4D00000000000000000000000000000000000000
000000000000030100019B4C1A40A2511C400301000100000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000101000031180802F2782ACFF3782ACF381C090201010000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000003010000A7521B52F47828FDF47828FDAD541C5203010000000000000000
0000000000000000000000000000000000000000000000000000000000000100
00002E160702EF7526CDF37626FEF37626FEF07526CD35190802010000000000
0000000000000000000000000000020100000201000003010001040200011F0F
0402BD5B1C67F07525FDF17525FEF27525FEF07525FDC25E1D67210F04020402
000103010001020100000201000068320F208B43144AAC52196FCF641E93EA70
22C0EE7323FCEF7323FEF07424FFF07424FFEF7323FEEE7323FCEB7122C0D064
1E93AD53196F8D44144A69320F20DE6C22D7EC7021FCED7021FDEE7121FEEE71
21FEEE7121FEEE7222FEEE7222FFEE7222FFEE7222FEEE7121FEEE7121FEEE71
21FEED7021FDEC7021FCDE6C22D75B2D0F1FDC6920D9EB6E1FFEEC7020FEED70
20FFED7020FFED7020FFED7020FFED7020FFED7020FFED7020FFED7020FFEC70
20FEEB6E1FFEDC6920D96130101F03010000552B0E1BD9671ED5E96C1DFEEA6E
1EFEEB6E1EFFEB6E1EFFEB6E1EFFEB6E1EFFEB6E1EFFEB6E1EFFEA6E1EFEE96C
1DFEDA671ED5592C0F1B0301000000000000020100004F260C19DC671CDDE86C
1CFEE96C1CFFE96C1CFFE96C1CFFE96C1CFFE96C1CFFE96C1CFFE86C1CFEDC66
1CDD55280D190201000000000000000000000000000004020001A64C1479E66A
1AFEE76B1BFFE76B1BFFE76B1BFFE76B1BFFE76B1BFFE76B1BFFE66A1AFEAD50
1579040200010000000000000000000000000000000003010001AC4E127CE468
18FDE56919FFE56919FFE56919FFE56919FFE56919FFE56919FFE46818FDB352
137C030100010000000000000000000000000000000003010001D05E14A7E266
16FEE26717FEE26717FEE26717FEE26717FEE26717FEE26717FEE26616FED560
15A705020001000000000000000000000000000000001A0B0201DD6314D1E065
15FEDF6314FDD56015F0B2521498B1521498D56015F0DF6314FDE06515FEDD63
14D1210E0201000000000000000000000000000000003E1C0506DB6113F5D560
14F4AE50148D4C240916060200010502000148220916AC4E138DD56014F4DB61
13F5441F0606000000000000000000000000010100003318060BA44B12875628
0B1F09030001010000000000000000000000010000000803000153260A1FA34A
1287381A060B01010000000000004D4D4D004D4D4D004D4D4D004D4D4D004D4D
4D004D4D4D004E4E4E019A9A9A409D9D9D404E4E4E014D4D4D004D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D
4D004D4D4D0064646402C6C6C6CFC6C6C6CF686868024D4D4D004D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D
4D004E4E4E009F9F9F52C6C6C6FDC6C6C6FDA3A3A3524E4E4E004D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D
4D0063636302C3C3C3CDC5C5C5FEC5C5C5FEC3C3C3CD666666024D4D4D004D4D
4D004D4D4D004D4D4D004D4D4D004D4D4D004D4D4D004E4E4E014E4E4E015B5B
5B02AAAAAA67C3C3C3FDC3C3C3FEC4C4C4FEC3C3C3FDACACAC675D5D5D024E4E
4E014E4E4E014D4D4D004D4D4D00808080209090904AA1A1A16FB2B2B293C0C0
C0C0C1C1C1FCC2C2C2FEC3C3C3FFC3C3C3FFC2C2C2FEC1C1C1FCC0C0C0C0B3B3
B393A2A2A26F9292924A80808020BABABAD7C1C1C1FCC1C1C1FDC1C1C1FEC1C1
C1FEC1C1C1FEC1C1C1FEC1C1C1FFC1C1C1FFC1C1C1FEC1C1C1FEC1C1C1FEC1C1
C1FEC1C1C1FDC1C1C1FCBABABAD77979791FB9B9B9D9C0C0C0FEC0C0C0FEC1C1
C1FFC1C1C1FFC1C1C1FFC1C1C1FFC1C1C1FFC1C1C1FFC1C1C1FFC1C1C1FFC0C0
C0FEC0C0C0FEB9B9B9D97C7C7C1F4E4E4E007676761BB7B7B7D5BFBFBFFEBFBF
BFFEBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFEBFBF
BFFEB8B8B8D57979791B4E4E4E004D4D4D004D4D4D0074747419B8B8B8DDBDBD
BDFEBEBEBEFFBEBEBEFFBEBEBEFFBEBEBEFFBEBEBEFFBEBEBEFFBDBDBDFEB8B8
B8DD767676194D4D4D004D4D4D004D4D4D004D4D4D004E4E4E019E9E9E79BCBC
BCFEBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFEA1A1
A1794E4E4E014D4D4D004D4D4D004D4D4D004D4D4D004E4E4E01A0A0A07CBABA
BAFDBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBABABAFDA3A3
A37C4E4E4E014D4D4D004D4D4D004D4D4D004D4D4D004E4E4E01B1B1B1A7B9B9
B9FEB9B9B9FEB9B9B9FEB9B9B9FEB9B9B9FEB9B9B9FEB9B9B9FEB9B9B9FEB3B3
B3A74F4F4F014D4D4D004D4D4D004D4D4D004D4D4D0058585801B6B6B6D1B8B8
B8FEB8B8B8FDB3B3B3F0A3A3A398A2A2A298B3B3B3F0B8B8B8FDB8B8B8FEB6B6
B6D15C5C5C014D4D4D004D4D4D004D4D4D004D4D4D006A6A6A06B6B6B6F5B3B3
B3F4A1A1A18D717171164F4F4F014F4F4F0170707016A0A0A08DB3B3B3F4B6B6
B6F56D6D6D064D4D4D004D4D4D004D4D4D004D4D4D006565650B9C9C9C877676
761F515151014D4D4D004D4D4D004D4D4D004D4D4D00505050017575751F9C9C
9C876767670B4D4D4D004D4D4D00
}
end
object imTBNor: TImageList

View File

@ -207,6 +207,7 @@ type
FUpdateSize: Int64;
FIsDirZipped: Boolean;
FZippedBaseDir: String;
FRating: Integer;
FPackageFiles: TCollection;
function GetDownloadable: Boolean;
function GetExtractable: Boolean;
@ -226,6 +227,7 @@ type
property DownloadZipURL: String read FDownloadZipURL write FDownloadZipURL;
property HasUpdate: Boolean read FHasUpdate write FHasUpdate;
property DisableInOPM: Boolean read FDisableInOPM write FDisableInOPM;
property Rating: Integer read FRating write FRating;
published
property Name: String read FName write FName;
property DisplayName: String read FDisplayName write FDisplayName;

View File

@ -250,6 +250,7 @@ begin
HasUpdate := False;
Package.DownloadZipURL := FXML.GetValue(Path + 'DownloadZipURL', '');
Package.DisableInOPM := FXML.GetValue(Path + 'DisableInOPM', False);
Package.Rating := FXML.GetValue(Path + 'Rating', 0);
PackageFileCount := FXML.GetValue(Path + 'Count', 0);
for J := 0 to PackageFileCount - 1 do
begin
@ -296,6 +297,7 @@ begin
FXML.SetDeleteValue(Path + 'Name', Package.Name, '');
FXML.SetDeleteValue(Path + 'DownloadZipURL', Package.DownloadZipURL, '');
FXML.SetDeleteValue(Path + 'DisableInOPM', Package.DisableInOPM, False);
FXML.SetDeleteValue(Path + 'Rating', Package.Rating, 0);
FXML.SetDeleteValue(Path + 'Count', SerializablePackages.Items[I].PackageFiles.Count, 0);
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
begin

View File

@ -31,7 +31,8 @@ interface
uses
Classes, SysUtils, Controls, Graphics, Menus, Dialogs, Forms, LCLIntf, contnrs,
PackageIntf, Buttons, opkman_VirtualTrees, opkman_common, opkman_serializablepackages;
PackageIntf, Buttons, Math, opkman_VirtualTrees, opkman_VTGraphics, opkman_common,
opkman_serializablepackages;
type
@ -69,6 +70,7 @@ type
InstallState: Integer;
ButtonID: Integer;
Button: TSpeedButton;
Rating: Integer;
end;
TFilterBy = (fbPackageName, fbPackageFileName, fbPackageCategory, fbPackageState,
@ -81,12 +83,14 @@ type
private
FVST: TVirtualStringTree;
FHoverNode: PVirtualNode;
FHoverP: TPoint;
FHoverColumn: Integer;
FLink: String;
FLinkClicked: Boolean;
FSortCol: Integer;
FSortDir: opkman_VirtualTrees.TSortDirection;
FCheckingNodes: Boolean;
FLeaving: Boolean;
FOnChecking: TOnChecking;
FOnChecked: TNotifyEvent;
procedure VSTBeforeCellPaint(Sender: TBaseVirtualTree;
@ -109,6 +113,8 @@ type
{%H-}TextType: TVSTTextType);
procedure VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
procedure VSTMouseMove(Sender: TObject; {%H-}Shift: TShiftState; X, Y: Integer);
procedure VSTMouseEnter(Sender: TObject);
procedure VSTMouseLeave(Sender: TObject);
procedure VSTMouseDown(Sender: TObject; Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: Integer);
procedure VSTGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: String);
@ -117,13 +123,15 @@ type
procedure VSTCollapsed(Sender: TBaseVirtualTree; {%H-}Node: PVirtualNode);
procedure VSTExpanding(Sender: TBaseVirtualTree; {%H-}Node: PVirtualNode; var {%H-}Allowed: Boolean);
procedure VSTCollapsing(Sender: TBaseVirtualTree; {%H-}Node: PVirtualNode; var {%H-}Allowed: Boolean);
procedure VSTOnDblClick(Sender: TObject);
procedure VSTDblClick(Sender: TObject);
procedure VSTScroll(Sender: TBaseVirtualTree; {%H-}DeltaX, {%H-}DeltaY: Integer);
function GetDisplayString(const AStr: String): String;
function IsAllChecked(const AChecking: PVirtualNode): Boolean;
procedure ButtonClick(Sender: TObject);
procedure ShowButtons;
procedure HideButtons;
procedure DrawStars(ACanvas: TCanvas; AStartIndex: Integer; P: TPoint; AAvarage: Double);
function GetColumn(const AX: Integer): Integer;
function TranslateCategories(const AStr: String): String;
public
constructor Create(const AParent: TWinControl; const AImgList: TImageList;
@ -173,6 +181,7 @@ begin
DefaultText := '';
Header.AutoSizeIndex := 4;
Header.Height := 25;
with Header.Columns.Add do
begin
Position := 0;
@ -213,9 +222,10 @@ begin
with Header.Columns.Add do
begin
Position := 5;
Width := 25;
Alignment := taCenter;
Width := 88;
Options := Options - [coResizable];
Text := rsMainFrm_VSTHeaderColumn_Button;
Text := rsMainFrm_VSTHeaderColumn_Rating;
end;
Header.Options := [hoAutoResize, hoColumnResize, hoRestrictDrag, hoShowSortGlyphs, hoVisible, hoAutoSpring];
{$IFDEF LCLCarbon}
@ -226,7 +236,7 @@ begin
ShowHint := True;
TabOrder := 2;
TreeOptions.MiscOptions := [toCheckSupport, toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning];
TreeOptions.PaintOptions := [toHideFocusRect, toAlwaysHideSelection, toPopupMode, toShowButtons, toShowDropmark, toShowRoot, toThemeAware, toUseBlendedImages];
TreeOptions.PaintOptions := [toHideFocusRect, toAlwaysHideSelection, toPopupMode, toShowButtons, toShowDropmark, toShowRoot, toThemeAware];
TreeOptions.SelectionOptions := [toFullRowSelect, toRightClickSelect];
TreeOptions.AutoOptions := [toAutoTristateTracking];
OnBeforeCellPaint := @VSTBeforeCellPaint;
@ -238,8 +248,10 @@ begin
OnGetImageIndex := @VSTGetImageIndex;
OnHeaderClick := @VSTHeaderClick;
OnMouseMove := @VSTMouseMove;
OnMouseLeave := @VSTMouseLeave;
OnMouseEnter := @VSTMouseEnter;
OnMouseDown := @VSTMouseDown;
OnDblClick := @VSTOnDblClick;
OnDblClick := @VSTDblClick;
OnGetHint := @VSTGetHint;
OnAfterCellPaint := @VSTAfterCellPaint;
OnCollapsed := @VSTCollapsed;
@ -299,6 +311,7 @@ begin
Data^.InstallState := SerializablePackages.GetPackageInstallState(SerializablePackages.Items[I]);
Data^.HasUpdate := SerializablePackages.Items[I].HasUpdate;
Data^.DisableInOPM := SerializablePackages.Items[I].DisableInOPM;
Data^.Rating := SerializablePackages.Items[I].Rating;
FVST.IsDisabled[Node] := Data^.DisableInOPM;
Data^.DataType := 1;
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
@ -606,6 +619,70 @@ begin
HideButtons;
end;
procedure TVisualTree.DrawStars(ACanvas: TCanvas; AStartIndex: Integer;
P: TPoint; AAvarage: Double);
procedure Draw(const AX, AY: Integer; ATyp, ACnt: Integer);
var
Bmp: TBitMap;
I: Integer;
begin
Bmp := TBitmap.Create;
try
Bmp.Width := 16;
Bmp.Height := 16;
if AStartIndex + ATyp > 25 then
ShowMessage('crap');
TImageList(FVST.Images).GetBitmap(AStartIndex + ATyp, Bmp);
for I := 0 to ACnt - 1 do
ACanvas.Draw(AX + I*16 + 5, AY, Bmp);
finally
Bmp.Free;
end;
end;
var
F: Double;
I, X, Y: Integer;
Stars, NoStars: Integer;
HalfStar: Boolean;
begin
HalfStar := False;
F := Frac(AAvarage);
I := Trunc(AAvarage);
case CompareValue(F, 0.25, 0.005) of
-1:
begin
Stars := I;
NoStars := 5 - Stars;
end;
0, 1:
begin
if CompareValue(F, 0.75, 0.005) = -1 then
begin
Stars := I;
NoStars := 5 - Stars - 1;
HalfStar := True;
end
else
begin
Stars := I + 1;
NoStars := 5 - Stars;
end;
end;
end;
X := P.X;
Y := P.Y;
Draw(X, Y, 0, Stars);
Inc(X, Stars*16);
if HalfStar then
begin
Draw(X, Y, 2, 1);
Inc(X, 16);
end;
Draw(X, Y, 1, NoStars);
end;
procedure TVisualTree.VSTAfterCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
const CellRect: TRect);
@ -613,17 +690,19 @@ var
Data: PData;
R: TRect;
Text: String;
P: TPoint;
Stars: Integer;
begin
if Column = 5 then
if Column = 4 then
begin
Data := FVST.GetNodeData(Node);
if Assigned(Data^.Button) then
begin
R := FVST.GetDisplayRect(Node, Column, false);
Data^.Button.Left := R.Left + 1;
Data^.Button.Width := R.Right - R.Left -2;
R := FVST.GetDisplayRect(Node, Column, False);
Data^.Button.Width := 25;
Data^.Button.Left := R.Right - Data^.Button.Width - 1;
Data^.Button.Top := R.Top + 1;
Data^.Button.Height := R.Bottom - R.Top - 2;
Data^.Button.Height := R.Bottom - R.Top - 1;
case Data^.DataType of
3: Text := Data^.Description;
9: Text := Data^.License;
@ -631,6 +710,25 @@ begin
Data^.Button.Visible := ((R.Bottom > FVST.Top) and (R.Bottom < FVST.Top + FVST.Height)) and (Trim(Text) <> '');
Data^.Button.Enabled := not FVST.IsDisabled[Node];
end;
end
else if Column = 5 then
begin
Data := FVST.GetNodeData(Node);
if Data^.DataType = 1 then
begin
R := FVST.GetDisplayRect(Node, Column, False);
P.X := R.Left + 1;
P.Y := ((R.Bottom - R.Top - 16) div 2) + 1;
if (Node = FHoverNode) and (not FLeaving) and (FHoverP.X >= P.X + 1) and (Abs(FHoverP.X - P.X) <= R.Right - R.Bottom) then
begin
Stars := Trunc((FHoverP.X - P.X)/16) + 1;
if Stars > 5 then
Stars := 5;
DrawStars(TargetCanvas, 23, P, Stars)
end
else
DrawStars(TargetCanvas, 20, P, Data^.Rating);
end
end;
end;
@ -1020,6 +1118,7 @@ begin
Data^.DownloadZipURL := Package.DownloadZipURL;
Data^.HasUpdate := Package.HasUpdate;
Data^.DisableInOPM := Package.DisableInOPM;
Data^.Rating := Package.Rating;
FVST.IsDisabled[Node] := Data^.DisableInOPM;
FVST.ReinitNode(Node, False);
FVST.RepaintNode(Node);
@ -1068,52 +1167,23 @@ procedure TVisualTree.VSTBeforeCellPaint(Sender: TBaseVirtualTree;
var
Data: PData;
begin
Data := Sender.GetNodeData(Node);
if (Data^.DataType = 0) or (Data^.DataType = 1) or (Data^.DataType = 2) then
if CellPaintMode = cpmPaint then
begin
if (Node = Sender.FocusedNode) then
begin
case Column of
0: begin
if Data^.DataType = 0 then
TargetCanvas.Brush.Color := $00E5E5E5 //00D8D8D8
else
TargetCanvas.Brush.Color := $00E5E5E5;
TargetCanvas.FillRect(CellRect);
TargetCanvas.Brush.Color := FVST.Colors.FocusedSelectionColor;
TargetCanvas.FillRect(ContentRect)
end
else
begin
TargetCanvas.Brush.Color := FVST.Colors.FocusedSelectionColor;
TargetCanvas.FillRect(CellRect)
end;
end;
end
Data := Sender.GetNodeData(Node);
if (Data^.DataType = 0) or (Data^.DataType = 1) or (Data^.DataType = 2) then
TargetCanvas.Brush.Color := $00E5E5E5
else
begin
if Data^.DataType = 0 then
TargetCanvas.Brush.Color := $00E5E5E5 //00D8D8D8
else if Data^.DataType = 1 then
TargetCanvas.Brush.Color := $00E5E5E5;
TargetCanvas.FillRect(CellRect);
end;
end
else
begin
TargetCanvas.Brush.Color := clBtnFace;
TargetCanvas.FillRect(CellRect);
if (Node = Sender.FocusedNode) then
begin
TargetCanvas.Brush.Color := FVST.Colors.FocusedSelectionColor;
if Column = 0 then
TargetCanvas.FillRect(ContentRect)
else
TargetCanvas.FillRect(CellRect);
else
TargetCanvas.FillRect(CellRect);
end
else
begin
TargetCanvas.Brush.Style := bsClear;
TargetCanvas.FillRect(CellRect);
end;
end;
end;
@ -1498,6 +1568,13 @@ begin
TargetCanvas.Font.Color := clGreen
else
TargetCanvas.Font.Color := clWhite;
end
else
begin
if Node <> Sender.FocusedNode then
TargetCanvas.Font.Color := clBlack
else
TargetCanvas.Font.Color := clWhite;
end;
end
else
@ -1520,57 +1597,94 @@ begin
Finalize(Data^);
end;
procedure TVisualTree.VSTMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
function TVisualTree.GetColumn(const AX: Integer): Integer;
var
I, L, R: Integer;
I: Integer;
L, R: Integer;
begin
FHoverColumn := -1;
FHoverNode:= VST.GetNodeAt(X, Y);
Result := -1;
for I := 0 to VST.Header.Columns.Count - 1 do
begin
VST.Header.Columns.GetColumnBounds(I, L, R);
if (X >= L) and (X <= R) then
if (AX >= L) and (AX <= R) then
begin
FHoverColumn := I;
Result := I;
Break;
end;
end;
end;
procedure TVisualTree.VSTMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
FHoverColumn := -1;
FHoverP.X := X;
FHoverP.Y := Y;
FHoverNode:= VST.GetNodeAt(X, Y);
FHoverColumn := GetColumn(X);
if (FHoverColumn = 5) and (FHoverNode <> nil) then
begin
FVST.ReinitNode(FHoverNode, False);
FVST.RepaintNode(FHoverNode);
end;
end;
procedure TVisualTree.VSTMouseEnter(Sender: TObject);
begin
FLeaving := False;
end;
procedure TVisualTree.VSTMouseLeave(Sender: TObject);
begin
if Assigned(FHoverNode) then
begin
FLeaving := True;
FVST.ReinitNode(FHoverNode, False);
FVST.RepaintNode(FHoverNode)
end;
end;
procedure TVisualTree.VSTMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Node: PVirtualNode;
Data: PData;
I, L, R: Integer;
MenuItem: TMenuItem;
DownColumn: Integer;
R: TRect;
PackageName: String;
Package: TPackage;
begin
Node := FVST.GetNodeAt(X, Y);
if Node <> nil then
begin
DownColumn := GetColumn(X);
Data := FVST.GetNodeData(Node);
if Button = mbLeft then
begin
if (Data^.DataType = 17) or (Data^.DataType = 18) then
begin
for I := 0 to VST.Header.Columns.Count - 1 do
begin
VST.Header.Columns.GetColumnBounds(I, L, R);
if (X >= L) and (X <= R) and (I = 4) then
case DownColumn of
4: if (Data^.DataType = 17) or (Data^.DataType = 18) and (DownColumn = 4) then
begin
FLinkClicked := True;
if (Data^.DataType = 17) and (Trim(Data^.HomePageURL) <> '') then
begin
FLink := Data^.HomePageURL;
Break
end
FLink := Data^.HomePageURL
else if (Data^.DataType = 18) and (Trim(Data^.DownloadURL) <> '') then
begin
FLink := Data^.DownloadURL;
Break;
end;
end;
end;
5: begin
R := FVST.GetDisplayRect(Node, DownColumn, False);
Data^.Rating := Trunc((FHoverP.X - R.Left - 1)/16) + 1;
if Data^.Rating > 5 then
Data^.Rating := 5;
Package := SerializablePackages.FindPackage(Data^.PackageName, fpbPackageName);
if Package <> nil then
Package.Rating := Data^.Rating;
if Data^.PackageDisplayName <> '' then
PackageName := Data^.PackageDisplayName
else
PackageName := Data^.PackageName;
MessageDlgEx(Format(rsMainFrm_rsPackageRating, [PackageName, InttoStr(Data^.Rating)]), mtInformation, [mbOk], TForm(FVST.Parent.Parent));
end;
end;
end
else if Button = mbRight then
@ -1601,7 +1715,7 @@ begin
end;
end;
procedure TVisualTree.VSTOnDblClick(Sender: TObject);
procedure TVisualTree.VSTDblClick(Sender: TObject);
begin
if FLinkClicked then
begin

View File

@ -2354,6 +2354,8 @@ type
// search, sort
FOnCompareNodes: TVTCompareEvent; // used during sort
FOnIncrementalSearch: TVTIncrementalSearchEvent; // triggered on every key press (not key down)
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
procedure AdjustCoordinatesByIndent(var PaintInfo: TVTPaintInfo; Indent: Integer);
procedure AdjustImageBorder(ImageWidth, ImageHeight: Integer; BidiMode: TBidiMode; VAlign: Integer; var R: TRect;
@ -2480,6 +2482,7 @@ type
procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
procedure CMMouseLeave(var Message: TLMessage); message CM_MOUSELEAVE;
procedure CMMouseWheel(var Message: TLMMouseEvent); message LM_MOUSEWHEEL;
procedure CMMouseEnter(var Message: TLMessage); message CM_MOUSEENTER;
{$ifdef EnableNativeTVM}
procedure TVMGetItem(var Message: TLMessage); message TVM_GETITEM;
procedure TVMGetItemRect(var Message: TLMessage); message TVM_GETITEMRECT;
@ -2640,6 +2643,8 @@ type
function DoKeyAction(var CharCode: Word; var Shift: TShiftState): Boolean; virtual;
procedure DoLoadUserData(Node: PVirtualNode; Stream: TStream); virtual;
procedure DoMeasureItem(TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer); virtual;
procedure DoMouseEnter(); virtual;
procedure DoMouseLeave(); virtual;
procedure DoNodeCopied(Node: PVirtualNode); virtual;
function DoNodeCopying(Node, NewParent: PVirtualNode): Boolean; virtual;
function DoNodeHeightDblClickResize(Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState;
@ -2917,6 +2922,8 @@ type
property OnKeyAction: TVTKeyActionEvent read FOnKeyAction write FOnKeyAction;
property OnLoadNode: TVTSaveNodeEvent read FOnLoadNode write FOnLoadNode;
property OnMeasureItem: TVTMeasureItemEvent read FOnMeasureItem write FOnMeasureItem;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnNodeCopied: TVTNodeCopiedEvent read FOnNodeCopied write FOnNodeCopied;
property OnNodeCopying: TVTNodeCopyingEvent read FOnNodeCopying write FOnNodeCopying;
property OnNodeExport: TVTNodeExportEvent read FOnNodeExport write FOnNodeExport;
@ -3585,6 +3592,8 @@ type
property OnMouseMove;
property OnMouseUp;
property OnMouseWheel;
property OnMouseEnter;
property OnMouseLeave;
property OnNewText;
property OnNodeCopied;
property OnNodeCopying;
@ -15044,6 +15053,12 @@ begin
end;
end;
procedure TBaseVirtualTree.CMMouseEnter(var Message: TLMessage);
begin
DoMouseEnter();
inherited;
end;
//----------------------------------------------------------------------------------------------------------------------
procedure TBaseVirtualTree.CMMouseLeave(var Message: TLMessage);
@ -15075,7 +15090,7 @@ begin
Header.FColumns.FDownIndex := NoColumn;
Header.FColumns.FHoverIndex := NoColumn;
DoMouseLeave();
inherited CMMouseLeave(Message);
{$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'CMMouseLeave');{$endif}
end;
@ -18973,6 +18988,22 @@ begin
FOnMeasureItem(Self, TargetCanvas, Node, NodeHeight);
end;
procedure TBaseVirtualTree.DoMouseEnter();
begin
if Assigned(FOnMouseEnter) then
FOnMouseEnter(Self);
end;
//----------------------------------------------------------------------------------------------------------------------
procedure TBaseVirtualTree.DoMouseLeave;
begin
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
end;
//----------------------------------------------------------------------------------------------------------------------
procedure TBaseVirtualTree.DoNodeCopied(Node: PVirtualNode);