From 04b6de02246601051cb87dcbc6d7b334e9597b39 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 30 Nov 2021 20:19:40 +0100 Subject: [PATCH 01/44] Updated .gitignore to ignore *.rsm --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e23da0e89..14dfea2d1 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,7 @@ __history/ __recovery/ dunit.ini *.res +*.rsm /*.DS_Store /PIP/*.DS_Store /PIP/resources/*.DS_Store From b23bcb49f9a76f0864002b4c0747a6c831ee0188 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 30 Nov 2021 20:20:17 +0100 Subject: [PATCH 02/44] TFRMAbout.GetBuildString added. --- src/gui-classic/UFRMAbout.pas | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/gui-classic/UFRMAbout.pas b/src/gui-classic/UFRMAbout.pas index 9ce98a7a5..2b19d24ef 100644 --- a/src/gui-classic/UFRMAbout.pas +++ b/src/gui-classic/UFRMAbout.pas @@ -52,6 +52,8 @@ TFRMAbout = class(TForm) procedure Label4Click(Sender: TObject); procedure Label5Click(Sender: TObject); private + function GetBuildString : string; + { Private declarations } Procedure OpenURL(Url : String); public @@ -80,11 +82,31 @@ implementation {$R *.lfm} {$ENDIF} +function TFRMAbout.GetBuildString : string; +begin + result := + 'Build: ' + CT_ClientAppVersion + + ' OpenSSL: ' + + {$IFDEF Use_OpenSSL} + IntToHex(OpenSSLVersion,8) + {$ELSE} + 'NONE' + {$ENDIF} + + ' Compiler: ' + {$IFDEF FPC} + + 'FPC' + {$IFDEF CPU32}+' 32b'{$ELSE}+' 64b'{$ENDIF} + {$ELSE}+ + 'Delphi' + {$IFDEF CPU32BITS}+' 32b'{$ELSE}+' 64b'{$ENDIF} + {$ENDIF}; +end; + procedure TFRMAbout.FormCreate(Sender: TObject); begin {$IFDEF USE_GNUGETTEXT}TranslateComponent(self);{$ENDIF} // - lblBuild.Caption := 'Build: '+CT_ClientAppVersion+' OpenSSL: '+{$IFDEF Use_OpenSSL}IntToHex(OpenSSLVersion,8){$ELSE}'NONE'{$ENDIF}+' Compiler: '{$IFDEF FPC}+'FPC'{$IFDEF CPU32}+' 32b'{$ELSE}+' 64b'{$ENDIF}{$ELSE}+'Delphi'{$IFDEF CPU32BITS}+' 32b'{$ELSE}+' 64b'{$ENDIF}{$ENDIF}; + lblBuild.Caption := GetBuildString; lblProtocolVersion.Caption := Format('BlockChain Protocol: %d (%d) - Net Protocol: %d (%d)',[TNode.Node.Bank.SafeBox.CurrentProtocol,CT_BlockChain_Protocol_Available, CT_NetProtocol_Version, CT_NetProtocol_Available]); end; From 6600597b53672a6851d7a0be3d36f5638bf334fa Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 30 Nov 2021 20:23:07 +0100 Subject: [PATCH 03/44] TFRMAbout.GetProtocolVersionString added. --- src/gui-classic/UFRMAbout.pas | 19 +++++++++++++++++-- src/pascalcoin_wallet_classic.res | Bin 68416 -> 70296 bytes 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/gui-classic/UFRMAbout.pas b/src/gui-classic/UFRMAbout.pas index 2b19d24ef..a29979bdf 100644 --- a/src/gui-classic/UFRMAbout.pas +++ b/src/gui-classic/UFRMAbout.pas @@ -53,6 +53,7 @@ TFRMAbout = class(TForm) procedure Label5Click(Sender: TObject); private function GetBuildString : string; + function GetProtocolVersionString : string; { Private declarations } Procedure OpenURL(Url : String); @@ -102,13 +103,27 @@ function TFRMAbout.GetBuildString : string; {$ENDIF}; end; +function TFRMAbout.GetProtocolVersionString : string; +begin + result := + Format + ( + 'BlockChain Protocol: %d (%d) - Net Protocol: %d (%d)', + [ + TNode.Node.Bank.SafeBox.CurrentProtocol, + CT_BlockChain_Protocol_Available, + CT_NetProtocol_Version, + CT_NetProtocol_Available + ] + ); +end; + procedure TFRMAbout.FormCreate(Sender: TObject); begin {$IFDEF USE_GNUGETTEXT}TranslateComponent(self);{$ENDIF} // lblBuild.Caption := GetBuildString; - lblProtocolVersion.Caption := Format('BlockChain Protocol: %d (%d) - Net Protocol: %d (%d)',[TNode.Node.Bank.SafeBox.CurrentProtocol,CT_BlockChain_Protocol_Available, - CT_NetProtocol_Version, CT_NetProtocol_Available]); + lblProtocolVersion.Caption := GetProtocolVersionString; end; procedure TFRMAbout.Label4Click(Sender: TObject); diff --git a/src/pascalcoin_wallet_classic.res b/src/pascalcoin_wallet_classic.res index 1450bc9f9b037e7f5d391ce407f353a69a01d7f8..0a9b51d2e91a9cb6d5684cdd6256783ff58432ec 100644 GIT binary patch delta 2315 zcmbtWUys{F5Z~OLM03(fC-s2}fwXl&prVccJI*P|DQd4MqNh7?M|r74*Y-MRVSA0& z$u%J42fhHOlMoN^$TvXZwR{NP_%3BOaqPRc5wvyWwRdKAelx$F@#fjjTfh9i^%HJA zxww6EM?>u`R9#OlM*63%YO;LpS2Jm|(o`b!?BcgOtzR$xdUx|Ndhhb6^^u+-iUjgu zjA7&`LMi$hoiFAwVyJ+b4?1ZjK{wa4%`w z-ED9ExV!o1?q*B7arwu_hg%v*F8|qhzihvQD)U>l`PFUd?>|jqJY%_tcsfw@j;3Ii z`aFoz$w2w?^Z{`dEDD+iH0CKAD03#1{o&4bp9;YeFP>v?kcxpa&C@;MpRt4rl0<&a z1rLjo_&nL8BI(R@1t&C(LMDnw*WecGrOnJ-;)E4t0eOg}64XH!jm~M#RxzIyMYgA^RoI<6><&b&o*a%atJ>Ydn=&l& zDO0ngude*P1duWzBuFWl`5!2{^D@dY%MW=P6+CZ%q~9u4b;&`KYn^JpQUN_>&Ci0i zfMqNVV1MV8la-(tRl8YdvfAD;m={qoU+^nAF6J4O0l=DuQVUa>fbej&?VXCUPI-?f z2~WvAo)$TeMYEzVIj5t^U!%#U9z^{)o1gM;7}TU=_iWFxbj$MnP!Gb!GN$QdN+*DP zw-IJJ_kkszk8=O4j0)x#(|lo~u9$me)JjOkgv++l_h?yIG0r@m_N;d zv*C6r8H2*h*|$?Dd=?z%(JYGDgw;iPReSIhR?2dI$Yw0A*~K`P^MOLeIGq72d6O>2 z(`e+&j0Z|cW5F5~UicDsMI zPo<#UzfH*L8N=iI*kdt2$IxN2k(t0?i^Vj{cwXR;=eVjQ{3wF25GDk|g7uXJ3yx0k zI2b73GegsL%kC20wj5%azD=kdvXW?;8!*Pqzznq?6m|Hf_}%r`rmdT<*Q3M^dVn2z z0dbiT5NcSZr5T1D_Dm|V-!OG|J+wuQ&~TYaY}4xz%d&Lh(VkBNrx#e%qNT%3_idm% z`g(9Zbh?h;b%?7momht1BhaZHam_#roj?m{w|pCLU0aXsGA-;<-5_4*nZP-73G9GP zEH?~njp{b-Ny@()w%cu4g6a!3*jKL=t1Nc-YA#PSn7{$M0e63K&~C#K{}7GfzrzD` aguXzB@HT?yXXpUlPQXT9S5MVVnEwkG-i;mr delta 405 zcmbQSl;yxQmI(@sB@-2ec?AR*;GkrpqoFnn10w@7T*w~EVqpM@qk=0F=PEO9n0Qcp z@(xCoU;_p{1_WkckO8V^WN>E4XUGM@RE9i;5{6=^0V+sx1q_Kmxk?5E%-GD~sfc=Q<2cRP- rr!&d|y%5RdKK%t3qY4Wsw5JPjGs;X}z$C`Rz|g#dY5NW)MgtB2I21b^ From d5acfcffe4582a243d88169c5de06527c96d659c Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 30 Nov 2021 21:24:39 +0100 Subject: [PATCH 04/44] Frames used to split main graphical user interface --- .../Frames/UFrameAccountExplorer.dfm | 440 ++++++++++ .../Frames/UFrameAccountExplorer.pas | 59 ++ .../Frames/UFrameBlockExplorer.dfm | 93 ++ .../Frames/UFrameBlockExplorer.pas | 31 + src/gui-classic/Frames/UFrameLogs.dfm | 40 + src/gui-classic/Frames/UFrameLogs.pas | 24 + src/gui-classic/Frames/UFrameMessages.dfm | 101 +++ src/gui-classic/Frames/UFrameMessages.pas | 29 + src/gui-classic/Frames/UFrameNodeStats.dfm | 72 ++ src/gui-classic/Frames/UFrameNodeStats.pas | 27 + .../Frames/UFrameOperationsExplorer.dfm | 53 ++ .../Frames/UFrameOperationsExplorer.pas | 27 + .../Frames/UFramePendingOperations.dfm | 55 ++ .../Frames/UFramePendingOperations.pas | 25 + src/gui-classic/UFRMWallet.dfm | 798 ------------------ src/gui-classic/UFRMWallet.pas | 71 -- src/pascalcoin_wallet_classic.dpr | 12 +- src/pascalcoin_wallet_classic.dproj | 254 +++++- 18 files changed, 1337 insertions(+), 874 deletions(-) create mode 100644 src/gui-classic/Frames/UFrameAccountExplorer.dfm create mode 100644 src/gui-classic/Frames/UFrameAccountExplorer.pas create mode 100644 src/gui-classic/Frames/UFrameBlockExplorer.dfm create mode 100644 src/gui-classic/Frames/UFrameBlockExplorer.pas create mode 100644 src/gui-classic/Frames/UFrameLogs.dfm create mode 100644 src/gui-classic/Frames/UFrameLogs.pas create mode 100644 src/gui-classic/Frames/UFrameMessages.dfm create mode 100644 src/gui-classic/Frames/UFrameMessages.pas create mode 100644 src/gui-classic/Frames/UFrameNodeStats.dfm create mode 100644 src/gui-classic/Frames/UFrameNodeStats.pas create mode 100644 src/gui-classic/Frames/UFrameOperationsExplorer.dfm create mode 100644 src/gui-classic/Frames/UFrameOperationsExplorer.pas create mode 100644 src/gui-classic/Frames/UFramePendingOperations.dfm create mode 100644 src/gui-classic/Frames/UFramePendingOperations.pas diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.dfm b/src/gui-classic/Frames/UFrameAccountExplorer.dfm new file mode 100644 index 000000000..d59a7c3c9 --- /dev/null +++ b/src/gui-classic/Frames/UFrameAccountExplorer.dfm @@ -0,0 +1,440 @@ +object FrameAccountExplorer: TFrameAccountExplorer + Left = 0 + Top = 0 + Width = 820 + Height = 582 + TabOrder = 0 + object Splitter1: TSplitter + Left = 400 + Top = 66 + Width = 5 + Height = 516 + ExplicitLeft = 315 + ExplicitTop = -132 + ExplicitHeight = 372 + end + object pnlMyAccountsTop: TPanel + Left = 0 + Top = 0 + Width = 820 + Height = 66 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + ExplicitLeft = -537 + ExplicitWidth = 857 + object Label18: TLabel + Left = 11 + Top = 35 + Width = 61 + Height = 13 + Caption = 'Find account' + Color = clBtnFace + ParentColor = False + end + object sbSearchAccount: TSpeedButton + Left = 176 + Top = 32 + Width = 23 + Height = 22 + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000120B0000120B00000000000000000000FF00FF4A667C + BE9596FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FF6B9CC31E89E84B7AA3C89693FF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF4BB4FE51B5FF + 2089E94B7AA2C69592FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FF51B7FE51B3FF1D87E64E7AA0CA9792FF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + 51B7FE4EB2FF1F89E64E7BA2B99497FF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF52B8FE4BB1FF2787D95F6A76FF + 00FFB0857FC09F94C09F96BC988EFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FF55BDFFB5D6EDBF9D92BB9B8CE7DAC2FFFFE3FFFFE5FDFADAD8C3 + B3B58D85FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFCEA795FD + EEBEFFFFD8FFFFDAFFFFDBFFFFE6FFFFFBEADDDCAE837FFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFC1A091FBDCA8FEF7D0FFFFDBFFFFE3FFFFF8FFFF + FDFFFFFDC6A99CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC1A091FEE3ACF1 + C491FCF2CAFFFFDDFFFFE4FFFFF7FFFFF7FFFFE9EEE5CBB9948CFF00FFFF00FF + FF00FFFF00FFFF00FFC2A191FFE6AEEEB581F7DCAEFEFDD8FFFFDFFFFFE3FFFF + E4FFFFE0F3ECD2BB968EFF00FFFF00FFFF00FFFF00FFFF00FFBC978CFBE7B7F4 + C791F2C994F8E5B9FEFCD8FFFFDDFFFFDCFFFFE0E2D2BAB68E86FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFD9C3A9FFFEE5F7DCB8F2C994F5D4A5FAE8BDFDF4 + C9FDFBD6B69089FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFB58D85E8 + DEDDFFFEF2F9D8A3F4C48CF9D49FFDEAB8D0B49FB89086FF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFAD827FC9AA9EEFE0B7EFDFB2E7CEACB890 + 86B89086FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFBA968ABB988CB79188FF00FFFF00FFFF00FFFF00FF} + end + object cbMyPrivateKeys: TComboBox + Left = 260 + Top = 7 + Width = 411 + Height = 21 + Style = csDropDownList + TabOrder = 0 + end + object cbExploreMyAccounts: TCheckBox + Left = 11 + Top = 10 + Width = 235 + Height = 19 + Caption = 'Explore accounts with one of my Wallet Keys' + TabOrder = 1 + end + object ebFindAccountNumber: TEdit + Left = 87 + Top = 33 + Width = 83 + Height = 21 + TabOrder = 3 + end + object bbChangeKeyName: TBitBtn + Left = 685 + Top = 5 + Width = 126 + Height = 25 + Caption = 'Change Key name' + TabOrder = 2 + end + object cbFilterAccounts: TCheckBox + Left = 260 + Top = 35 + Width = 145 + Height = 19 + Caption = 'Filter accounts by balance' + TabOrder = 4 + end + object ebFilterAccountByBalanceMin: TEdit + Left = 412 + Top = 33 + Width = 83 + Height = 21 + Hint = 'Min balance' + TabOrder = 5 + end + object ebFilterAccountByBalanceMax: TEdit + Left = 503 + Top = 33 + Width = 83 + Height = 21 + Hint = 'Max balance' + TabOrder = 6 + end + end + object pnlAccounts: TPanel + Left = 0 + Top = 66 + Width = 400 + Height = 516 + Align = alLeft + BevelOuter = bvNone + TabOrder = 1 + ExplicitLeft = -80 + ExplicitTop = -132 + ExplicitHeight = 372 + object dgAccounts: TDrawGrid + Left = 0 + Top = 0 + Width = 400 + Height = 482 + Align = alClient + TabOrder = 0 + ExplicitHeight = 338 + end + object pnlAccountsInfo: TPanel + Left = 0 + Top = 482 + Width = 400 + Height = 34 + Align = alBottom + BevelOuter = bvNone + TabOrder = 1 + ExplicitTop = 338 + DesignSize = ( + 400 + 34) + object Label17: TLabel + Left = 5 + Top = 10 + Width = 48 + Height = 13 + Caption = 'Accounts:' + Color = clBtnFace + ParentColor = False + end + object Label19: TLabel + Left = 136 + Top = 10 + Width = 41 + Height = 13 + Caption = 'Balance:' + Color = clBtnFace + ParentColor = False + end + object lblAccountsCount: TLabel + Left = 60 + Top = 10 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + ParentColor = False + end + object lblAccountsBalance: TLabel + Left = 200 + Top = 10 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + ParentColor = False + end + object bbAccountsRefresh: TBitBtn + Left = 322 + Top = 6 + Width = 75 + Height = 25 + Anchors = [akTop, akRight] + Caption = 'Refresh' + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF + C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6 + A4C2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FEFCFBFEFCFBFEFCFBFEFCFBFE + FCFBFEFCFBFEFCFBFEFCFBFEFCFBFEFCFBC2A6A4FF00FFFF00FFFF00FFFF00FF + C2A6A4FEFCFBFEFCFBFEFCFBFEFCFBD8EBD6018A02018A02D8EBD6FEFCFBFEFC + FBC2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FEFBF7FEFBF7018A02D8EAD201 + 8A02D8EAD2D8EAD2018A02FEFBF7FEFBF7C2A6A4FF00FFFF00FFFF00FFFF00FF + C2A6A4FEF9F4FEF9F4018A02018A02D8E8D0FEF9F4FEF9F4D8E8D0FEF9F4FEF9 + F4C2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FEF7F0FEF7F0018A02018A0201 + 8A02FEF7F0FEF7F0FEF7F0FEF7F0FEF7F0C2A6A4FF00FFFF00FFFF00FFFF00FF + C2A6A4FEF5ECFEF5ECFEF5ECFEF5ECFEF5EC018A02018A02018A02FEF5ECFEF5 + ECC2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FEF3E9FEF3E9D8E3C7FEF3E9FE + F3E9D8E3C7018A02018A02FEF3E9FEF3E9C2A6A4FF00FFFF00FFFF00FFFF00FF + C2A6A4FFF1E5FFF1E5018A02D9E2C3D9E2C3018A02D9E2C3018A02FFF1E5FFF1 + E5C2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FFF0E2FFF0E2D9E1C1018A0201 + 8A02D9E1C1DDCFC2DDCFC2DDCFC2DDCFC2C2A6A4FF00FFFF00FFFF00FFFF00FF + C2A6A4FFEEDEFFEEDEFFEEDEFFEEDEFFEEDEFFEEDEC5B5A9C3B4A8C2B3A7C1B2 + A6C2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FFECDAFFECDAFFECDAFFECDAFF + ECDAFFECDAB0A296B0A296B0A296B0A296C2A6A4FF00FFFF00FFFF00FFFF00FF + C2A6A4FFEAD7FFEAD7FFEAD7FFEAD7FFEAD7C9B9ACFBF8F4FBF8F4E6DAD9C2A6 + A4FF00FFFF00FFFF00FFFF00FFFF00FFC2A6A4FFE8D3FFE8D3FFE8D3FFE8D3FF + E8D3C9B9ACFBF8F4DFCEC7C2A6A4FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + C2A6A4FFE6D0FFE6D0FFE6D0FFE6D0FFE6D0C9B9ACDFCEC7C2A6A4FF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFC2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2 + A6A4C2A6A4C2A6A4FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + TabOrder = 0 + end + end + end + object pcAccountsOptions: TPageControl + Left = 405 + Top = 66 + Width = 415 + Height = 516 + ActivePage = tsAccountOperations + Align = alClient + TabOrder = 2 + ExplicitLeft = -132 + ExplicitTop = -132 + ExplicitWidth = 452 + ExplicitHeight = 372 + object tsAccountOperations: TTabSheet + Caption = 'Account Operations' + object dgAccountOperations: TDrawGrid + Left = 0 + Top = 0 + Width = 407 + Height = 488 + Align = alClient + TabOrder = 0 + ExplicitWidth = 444 + ExplicitHeight = 344 + end + end + object tsMultiSelectAccounts: TTabSheet + Caption = 'Selected Accounts For Batch Operation' + ImageIndex = 1 + object dgSelectedAccounts: TDrawGrid + Left = 41 + Top = 31 + Width = 320 + Height = 287 + Align = alLeft + TabOrder = 0 + end + object pnlSelectedAccountsTop: TPanel + Left = 0 + Top = 0 + Width = 444 + Height = 31 + Align = alTop + BevelOuter = bvNone + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 1 + object Label15: TLabel + Left = 41 + Top = 4 + Width = 361 + Height = 16 + Caption = 'Select multiple accounts to execute massive operations' + Color = clBtnFace + ParentColor = False + end + end + object pnlSelectedAccountsBottom: TPanel + Left = 0 + Top = 318 + Width = 444 + Height = 26 + Align = alBottom + BevelOuter = bvNone + TabOrder = 2 + object Label20: TLabel + Left = 41 + Top = 6 + Width = 48 + Height = 13 + Caption = 'Accounts:' + Color = clBtnFace + ParentColor = False + end + object lblSelectedAccountsCount: TLabel + Left = 96 + Top = 6 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + ParentColor = False + end + object Label22: TLabel + Left = 156 + Top = 6 + Width = 88 + Height = 13 + Caption = 'Accounts Balance:' + Color = clBtnFace + ParentColor = False + end + object lblSelectedAccountsBalance: TLabel + Left = 250 + Top = 6 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + ParentColor = False + end + end + object pnlSelectedAccountsLeft: TPanel + Left = 0 + Top = 31 + Width = 41 + Height = 287 + Align = alLeft + BevelOuter = bvNone + TabOrder = 3 + object sbSelectedAccountsAdd: TSpeedButton + Left = 2 + Top = 0 + Width = 33 + Height = 31 + Caption = '>' + end + object sbSelectedAccountsAddAll: TSpeedButton + Left = 2 + Top = 37 + Width = 33 + Height = 31 + Caption = '>>' + end + object sbSelectedAccountsDel: TSpeedButton + Left = 2 + Top = 74 + Width = 33 + Height = 31 + Caption = '<' + end + object sbSelectedAccountsDelAll: TSpeedButton + Left = 2 + Top = 111 + Width = 33 + Height = 31 + Caption = '<<' + end + end + object bbSelectedAccountsOperation: TBitBtn + Left = 367 + Top = 31 + Width = 75 + Height = 61 + Caption = 'Operations' + Glyph.Data = { + F6060000424DF606000000000000360000002800000018000000180000000100 + 180000000000C0060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FF019ACF019ACF019ACF019ACFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0C8518FF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FF0D9FD18BD4EE6BD3F845C0ED28B0E0019ACF01 + 9ACF019ACF019ACFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0C85180C8518 + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF069CD076C8E5A9E9FE6DD8 + FF75DBFF77DCFF77DBFF63D1F930B3E3029BD0019ACF019ACF019ACF019ACFFF + 00FF0C85181399220C8518FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF019ACF + 34AFD9BCE9F86ED8FF6FD8FE70D8FE70D8FE71D8FF0C85180C85180C85180C85 + 180C85180C85180C85180C85181DAC31139A220C8518FF00FFFF00FFFF00FFFF + 00FFFF00FF019ACF1FA9D68FD3EB97E4FF6FD9FE71D9FE71D9FE71D9FE0C8518 + 57E38851DD7E4AD77443D0693BC95E34C1522BBA4725B33C1EAE33149B230C85 + 18FF00FFFF00FFFF00FFFF00FF019ACF31B1DC49B7DEBDEEFB71DDFE77DEFE77 + DEFE77DEFE0C85185EE89059E48953DE804CD87645D16C3DCA6035C2542DBB49 + 26B53F1FAF35149B250C8518FF00FFFF00FFFF00FF019ACF52C2E71DA7D5ADE2 + F38FE8FF7CE2FE7CE3FE7CE3FE0C851861EB955FE9925AE58B54DF824DD97846 + D26D3ECB6237C4562FBD4C27B64021B037159B250C8518FF00FFFF00FF019ACF + 60CAEF1FA8D85EC1E1C2E6ED8ACEE08FCFE18ECFE10C851861EB9561EB955FEA + 935CE58D56E0844FDB7A48D47040CD6538C65931BF4D1DA3320C8518FF00FFFF + 00FFFF00FF019ACF65CFF53EB7E52CA9D4C5EFF8ACF3FEA5F2FFA5F2FF0C8518 + 61EB9561EB9561EB9561EB945CE68E57E18650DC7C49D57242CE6727AD410C85 + 18FF00FFFF00FFFF00FFFF00FF019ACF69D1F855C4F32A9CC673CBE7D6FEFDB1 + FBFDB2FBFD0C85180C85180C85180C85180C85180C85180C85180C851852DD7F + 32B6500C851898FAFF019ACFFF00FFFF00FFFF00FF019ACF77D5FC5CC8FB748E + A224A8D5B9E7F3D5F5F9D5F6F9D6F6FADCFAFBCDFDFCB9FCFCAFFAFCB0FAFCB1 + FAFC0C85183ABE5C0C85189FFCFFA4FFFF43C1E2019ACFFF00FFFF00FF019ACF + 8BDBFF5FCDFFB7898973C3DD18A2D218A2D216A2D215A1D21AA4D391D7EBEBFE + FDDBFDFCC5FBFBC2FBFB0C85180C851883E4F3B6FDFFBAFFFFB5FCFD019ACFFF + 00FFFF00FF019ACF99E2FF67D3FFB88989FEF5ECFDF3EBF0EFEAE5EBE8D6E5E6 + A4D2E025A6D34DB9DDE5F8FBF5FDFCEBFCFB0C8518C4FBFF9CE4F2DAFEFFD9FE + FFE3FFFFADE9F5019ACFFF00FF019ACF9FE9FF70DCFFB88989FEF3E9FFF2E6FE + F3E9FEF3E9FEF3E9FEF3E9D4E4E439ADD422A5D49DD8ECF1F9FBEEEFEFE9FDFF + CEEEF7F8FFFFF7FFFFFEFFFFE9F9FD019ACFFF00FF019ACFA7EFFF76E5FFB889 + 89FFF2E5FFF0E2FFF2E5FFF2E5FFF2E5FFF2E5FFF2E5EAEBE38EC9DA44B0D501 + 9ACF019ACF019ACF019ACF019ACF019ACF019ACF019ACF019ACFFF00FF019ACF + ABF6FF7EEDFFB88989FFF0E2FFEFDFFFF0E2FFF0E2FFF0E2FFF0E2FFF0E2FEEE + E0FBECDEFAEBDEF6E6D9B8898993F7FF019ACFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FF019ACFC7FFFF82F5FFB88989FFEEDFFFECDBFFEEDFFFEEDFFFEEDF + FFEEDFF9E8D9DECCC1D9CABDCFBDB4C8B3ACB88989B5FFFF019ACFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FF019ACFA4E0F0A0FDFFB88989FFECDBFFEBD8FF + ECDBFFECDBFFECDBFFECDBF5E2D2C4ABA7C2A8A5BBA39FC2AFA9B88989019ACF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF019ACFECFFFFB889 + 89FFEBD8FFEAD5FFEBD8FFEBD8FFEBD8FFEBD8FFEBD8D9C8C5FEFEFDFEF6EFDE + C9C0B88989FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FF019ACFB88989FFE9D5FFE8D3FFE9D5FFE9D5FFE9D5FFE9D5FFE9D5C6AD + A9FEF8F2E8D4CACD9999FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFB88989FFE7D1FFE7D0FFE7D1FFE7D1FFE7D1 + FFE7D1E7CEBFD3BFB9E8D5CCCD9999FF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFB88989FFE6CFFFE6CFFF + E6CFFFE6CFFFE6CFFFE6CFD5BBB2E0CCC5CD9999FF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFB889 + 89B88989B88989B88989B88989B88989B88989B88989B88989FF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + Layout = blGlyphTop + TabOrder = 4 + end + end + end +end diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas new file mode 100644 index 000000000..81d714a76 --- /dev/null +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -0,0 +1,59 @@ +unit UFrameAccountExplorer; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.Grids, + Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls; + +type + TFrameAccountExplorer = class(TFrame) + Splitter1: TSplitter; + pnlMyAccountsTop: TPanel; + Label18: TLabel; + sbSearchAccount: TSpeedButton; + cbMyPrivateKeys: TComboBox; + cbExploreMyAccounts: TCheckBox; + ebFindAccountNumber: TEdit; + bbChangeKeyName: TBitBtn; + cbFilterAccounts: TCheckBox; + ebFilterAccountByBalanceMin: TEdit; + ebFilterAccountByBalanceMax: TEdit; + pnlAccounts: TPanel; + dgAccounts: TDrawGrid; + pnlAccountsInfo: TPanel; + Label17: TLabel; + Label19: TLabel; + lblAccountsCount: TLabel; + lblAccountsBalance: TLabel; + bbAccountsRefresh: TBitBtn; + pcAccountsOptions: TPageControl; + tsAccountOperations: TTabSheet; + dgAccountOperations: TDrawGrid; + tsMultiSelectAccounts: TTabSheet; + dgSelectedAccounts: TDrawGrid; + pnlSelectedAccountsTop: TPanel; + Label15: TLabel; + pnlSelectedAccountsBottom: TPanel; + Label20: TLabel; + lblSelectedAccountsCount: TLabel; + Label22: TLabel; + lblSelectedAccountsBalance: TLabel; + pnlSelectedAccountsLeft: TPanel; + sbSelectedAccountsAdd: TSpeedButton; + sbSelectedAccountsAddAll: TSpeedButton; + sbSelectedAccountsDel: TSpeedButton; + sbSelectedAccountsDelAll: TSpeedButton; + bbSelectedAccountsOperation: TBitBtn; + private + { Private declarations } + public + { Public declarations } + end; + +implementation + +{$R *.dfm} + +end. diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.dfm b/src/gui-classic/Frames/UFrameBlockExplorer.dfm new file mode 100644 index 000000000..4dbe6272a --- /dev/null +++ b/src/gui-classic/Frames/UFrameBlockExplorer.dfm @@ -0,0 +1,93 @@ +object FrameBlockChainExplorer: TFrameBlockChainExplorer + Left = 0 + Top = 0 + Width = 782 + Height = 489 + TabOrder = 0 + object Panel2: TPanel + Left = 0 + Top = 0 + Width = 782 + Height = 41 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + ExplicitLeft = -537 + ExplicitWidth = 857 + object Label9: TLabel + Left = 11 + Top = 10 + Width = 102 + Height = 13 + Caption = 'Filter by blocks range' + Color = clBtnFace + ParentColor = False + end + object lblHashRateBackBlocks: TLabel + Left = 280 + Top = 10 + Width = 104 + Height = 13 + Caption = 'HashRate back blocks' + Color = clBtnFace + ParentColor = False + end + object lblHashRateBackBlocks1: TLabel + Left = 463 + Top = 10 + Width = 24 + Height = 13 + Caption = 'Units' + Color = clBtnFace + ParentColor = False + end + object ebBlockChainBlockStart: TEdit + Left = 125 + Top = 7 + Width = 57 + Height = 21 + TabOrder = 0 + end + object ebBlockChainBlockEnd: TEdit + Left = 185 + Top = 7 + Width = 57 + Height = 21 + TabOrder = 1 + end + object ebHashRateBackBlocks: TEdit + Left = 392 + Top = 7 + Width = 56 + Height = 21 + TabOrder = 2 + end + object cbHashRateUnits: TComboBox + Left = 496 + Top = 7 + Width = 56 + Height = 21 + Style = csDropDownList + ItemIndex = 1 + TabOrder = 3 + Text = 'Mh/s' + Items.Strings = ( + 'Kh/s' + 'Mh/s' + 'Gh/s' + 'Th/s') + end + end + object dgBlockChainExplorer: TDrawGrid + Left = 0 + Top = 41 + Width = 782 + Height = 448 + Align = alClient + TabOrder = 1 + ExplicitLeft = -537 + ExplicitTop = -157 + ExplicitWidth = 857 + ExplicitHeight = 397 + end +end diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.pas b/src/gui-classic/Frames/UFrameBlockExplorer.pas new file mode 100644 index 000000000..4242291a0 --- /dev/null +++ b/src/gui-classic/Frames/UFrameBlockExplorer.pas @@ -0,0 +1,31 @@ +unit UFrameBlockExplorer; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls, + Vcl.ExtCtrls; + +type + TFrameBlockChainExplorer = class(TFrame) + Panel2: TPanel; + Label9: TLabel; + lblHashRateBackBlocks: TLabel; + lblHashRateBackBlocks1: TLabel; + ebBlockChainBlockStart: TEdit; + ebBlockChainBlockEnd: TEdit; + ebHashRateBackBlocks: TEdit; + cbHashRateUnits: TComboBox; + dgBlockChainExplorer: TDrawGrid; + private + { Private declarations } + public + { Public declarations } + end; + +implementation + +{$R *.dfm} + +end. diff --git a/src/gui-classic/Frames/UFrameLogs.dfm b/src/gui-classic/Frames/UFrameLogs.dfm new file mode 100644 index 000000000..84d494b2c --- /dev/null +++ b/src/gui-classic/Frames/UFrameLogs.dfm @@ -0,0 +1,40 @@ +object FrameLogs: TFrameLogs + Left = 0 + Top = 0 + Width = 821 + Height = 531 + TabOrder = 0 + object memoLogs: TMemo + Left = 0 + Top = 41 + Width = 821 + Height = 490 + Align = alClient + ScrollBars = ssBoth + TabOrder = 0 + WordWrap = False + ExplicitLeft = -537 + ExplicitTop = -157 + ExplicitWidth = 857 + ExplicitHeight = 397 + end + object pnlTopLogs: TPanel + Left = 0 + Top = 0 + Width = 821 + Height = 41 + Align = alTop + BevelOuter = bvNone + TabOrder = 1 + ExplicitLeft = -537 + ExplicitWidth = 857 + object cbShowDebugLogs: TCheckBox + Left = 15 + Top = 10 + Width = 102 + Height = 19 + Caption = 'Show Debug Logs' + TabOrder = 0 + end + end +end diff --git a/src/gui-classic/Frames/UFrameLogs.pas b/src/gui-classic/Frames/UFrameLogs.pas new file mode 100644 index 000000000..ae7febc5f --- /dev/null +++ b/src/gui-classic/Frames/UFrameLogs.pas @@ -0,0 +1,24 @@ +unit UFrameLogs; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; + +type + TFrameLogs = class(TFrame) + memoLogs: TMemo; + pnlTopLogs: TPanel; + cbShowDebugLogs: TCheckBox; + private + { Private declarations } + public + { Public declarations } + end; + +implementation + +{$R *.dfm} + +end. diff --git a/src/gui-classic/Frames/UFrameMessages.dfm b/src/gui-classic/Frames/UFrameMessages.dfm new file mode 100644 index 000000000..cfdda37f4 --- /dev/null +++ b/src/gui-classic/Frames/UFrameMessages.dfm @@ -0,0 +1,101 @@ +object FrameMessages: TFrameMessages + Left = 0 + Top = 0 + Width = 817 + Height = 622 + TabOrder = 0 + DesignSize = ( + 817 + 622) + object Label11: TLabel + Left = 15 + Top = 151 + Width = 51 + Height = 13 + Caption = 'Messages:' + Color = clBtnFace + ParentColor = False + end + object Label12: TLabel + Left = 315 + Top = 11 + Width = 85 + Height = 13 + Caption = 'Message to send:' + Color = clBtnFace + ParentColor = False + end + object Label13: TLabel + Left = 15 + Top = 11 + Width = 109 + Height = 13 + Caption = 'Available Connections:' + Color = clBtnFace + ParentColor = False + end + object Label14: TLabel + Left = 410 + Top = 11 + Width = 361 + Height = 13 + Caption = + '(Messages will be encrypted, so only dest connection will be abl' + + 'e to read it)' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clGrayText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentColor = False + ParentFont = False + end + object lbNetConnections: TListBox + Left = 15 + Top = 30 + Width = 275 + Height = 96 + ItemHeight = 13 + MultiSelect = True + ScrollWidth = 273 + TabOrder = 0 + end + object bbSendAMessage: TButton + Left = 292 + Top = 101 + Width = 525 + Height = 25 + Caption = 'Send a Message' + TabOrder = 1 + end + object memoMessages: TMemo + Left = -4 + Top = 170 + Width = 821 + Height = 249 + Anchors = [akLeft, akTop, akRight, akBottom] + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Tahoma' + Font.Style = [] + Lines.Strings = ( + 'dsfa '#195#177'ldsaf '#195#177'lk dasf' + 'dsfklda'#195#177'fs '#195#177'l') + ParentFont = False + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 2 + end + object memoMessageToSend: TMemo + Left = 292 + Top = 30 + Width = 525 + Height = 61 + Lines.Strings = ( + 'memoMessageToSend') + TabOrder = 3 + WantReturns = False + end +end diff --git a/src/gui-classic/Frames/UFrameMessages.pas b/src/gui-classic/Frames/UFrameMessages.pas new file mode 100644 index 000000000..4ed4abeed --- /dev/null +++ b/src/gui-classic/Frames/UFrameMessages.pas @@ -0,0 +1,29 @@ +unit UFrameMessages; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; + +type + TFrameMessages = class(TFrame) + Label11: TLabel; + Label12: TLabel; + Label13: TLabel; + Label14: TLabel; + lbNetConnections: TListBox; + bbSendAMessage: TButton; + memoMessages: TMemo; + memoMessageToSend: TMemo; + private + { Private declarations } + public + { Public declarations } + end; + +implementation + +{$R *.dfm} + +end. diff --git a/src/gui-classic/Frames/UFrameNodeStats.dfm b/src/gui-classic/Frames/UFrameNodeStats.dfm new file mode 100644 index 000000000..cfa206d21 --- /dev/null +++ b/src/gui-classic/Frames/UFrameNodeStats.dfm @@ -0,0 +1,72 @@ +object FrameNodeStats: TFrameNodeStats + Left = 0 + Top = 0 + Width = 691 + Height = 572 + TabOrder = 0 + DesignSize = ( + 691 + 572) + object Label3: TLabel + Left = 15 + Top = 15 + Width = 96 + Height = 13 + Caption = 'Active Connections:' + Color = clBtnFace + ParentColor = False + end + object Label6: TLabel + Left = 15 + Top = 291 + Width = 104 + Height = 13 + Anchors = [akLeft, akRight, akBottom] + Caption = 'Known Node Servers:' + Color = clBtnFace + ParentColor = False + end + object Label7: TLabel + Left = 15 + Top = 187 + Width = 82 + Height = 13 + Anchors = [akLeft, akRight, akBottom] + Caption = 'Blacklisted Nodes' + Color = clBtnFace + ParentColor = False + end + object memoNetConnections: TMemo + Left = -139 + Top = 34 + Width = 830 + Height = 145 + Anchors = [akLeft, akTop, akRight, akBottom] + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 0 + WordWrap = False + end + object memoNetServers: TMemo + Left = -139 + Top = 310 + Width = 830 + Height = 116 + Anchors = [akLeft, akRight, akBottom] + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 1 + WordWrap = False + end + object memoNetBlackLists: TMemo + Left = -138 + Top = 206 + Width = 829 + Height = 79 + Anchors = [akLeft, akRight, akBottom] + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 2 + WordWrap = False + end +end diff --git a/src/gui-classic/Frames/UFrameNodeStats.pas b/src/gui-classic/Frames/UFrameNodeStats.pas new file mode 100644 index 000000000..9112e2c5e --- /dev/null +++ b/src/gui-classic/Frames/UFrameNodeStats.pas @@ -0,0 +1,27 @@ +unit UFrameNodeStats; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; + +type + TFrameNodeStats = class(TFrame) + Label3: TLabel; + Label6: TLabel; + Label7: TLabel; + memoNetConnections: TMemo; + memoNetServers: TMemo; + memoNetBlackLists: TMemo; + private + { Private declarations } + public + { Public declarations } + end; + +implementation + +{$R *.dfm} + +end. diff --git a/src/gui-classic/Frames/UFrameOperationsExplorer.dfm b/src/gui-classic/Frames/UFrameOperationsExplorer.dfm new file mode 100644 index 000000000..0171865af --- /dev/null +++ b/src/gui-classic/Frames/UFrameOperationsExplorer.dfm @@ -0,0 +1,53 @@ +object FrameOperationsExplorer: TFrameOperationsExplorer + Left = 0 + Top = 0 + Width = 817 + Height = 441 + TabOrder = 0 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 817 + Height = 41 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + ExplicitLeft = -537 + ExplicitWidth = 857 + object Label2: TLabel + Left = 11 + Top = 10 + Width = 102 + Height = 13 + Caption = 'Filter by blocks range' + Color = clBtnFace + ParentColor = False + end + object ebFilterOperationsStartBlock: TEdit + Left = 125 + Top = 7 + Width = 57 + Height = 21 + TabOrder = 0 + end + object ebFilterOperationsEndBlock: TEdit + Left = 185 + Top = 7 + Width = 57 + Height = 21 + TabOrder = 1 + end + end + object dgOperationsExplorer: TDrawGrid + Left = 0 + Top = 41 + Width = 817 + Height = 400 + Align = alClient + TabOrder = 1 + ExplicitLeft = -537 + ExplicitTop = -157 + ExplicitWidth = 857 + ExplicitHeight = 397 + end +end diff --git a/src/gui-classic/Frames/UFrameOperationsExplorer.pas b/src/gui-classic/Frames/UFrameOperationsExplorer.pas new file mode 100644 index 000000000..6a13edb01 --- /dev/null +++ b/src/gui-classic/Frames/UFrameOperationsExplorer.pas @@ -0,0 +1,27 @@ +unit UFrameOperationsExplorer; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls, + Vcl.ExtCtrls; + +type + TFrameOperationsExplorer = class(TFrame) + Panel1: TPanel; + Label2: TLabel; + ebFilterOperationsStartBlock: TEdit; + ebFilterOperationsEndBlock: TEdit; + dgOperationsExplorer: TDrawGrid; + private + { Private declarations } + public + { Public declarations } + end; + +implementation + +{$R *.dfm} + +end. diff --git a/src/gui-classic/Frames/UFramePendingOperations.dfm b/src/gui-classic/Frames/UFramePendingOperations.dfm new file mode 100644 index 000000000..80ad758fe --- /dev/null +++ b/src/gui-classic/Frames/UFramePendingOperations.dfm @@ -0,0 +1,55 @@ +object FramePendingOperations: TFramePendingOperations + Left = 0 + Top = 0 + Width = 826 + Height = 522 + TabOrder = 0 + object dgPendingOperations: TDrawGrid + Left = 0 + Top = 86 + Width = 826 + Height = 436 + Align = alClient + TabOrder = 0 + ExplicitLeft = -537 + ExplicitTop = -112 + ExplicitWidth = 857 + ExplicitHeight = 352 + end + object pnlPendingOperations: TPanel + Left = 0 + Top = 0 + Width = 826 + Height = 86 + Align = alTop + BevelOuter = bvNone + BorderWidth = 10 + TabOrder = 1 + ExplicitLeft = -537 + ExplicitWidth = 857 + object Label10: TLabel + Left = 10 + Top = 10 + Width = 806 + Height = 66 + Align = alClient + AutoSize = False + Caption = + 'Here you can see Operations transmited/received from other nodes' + + ' that will be included in next block. There is no guarantee that' + + ' other nodes will include them when mining, so it'#39's important th' + + 'at you mine too to help include Operations to the main BlockChai' + + 'n' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Tahoma' + Font.Style = [] + ParentColor = False + ParentFont = False + WordWrap = True + ExplicitWidth = 837 + end + end +end diff --git a/src/gui-classic/Frames/UFramePendingOperations.pas b/src/gui-classic/Frames/UFramePendingOperations.pas new file mode 100644 index 000000000..077bc40d2 --- /dev/null +++ b/src/gui-classic/Frames/UFramePendingOperations.pas @@ -0,0 +1,25 @@ +unit UFramePendingOperations; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, + Vcl.ExtCtrls, Vcl.Grids; + +type + TFramePendingOperations = class(TFrame) + dgPendingOperations: TDrawGrid; + pnlPendingOperations: TPanel; + Label10: TLabel; + private + { Private declarations } + public + { Public declarations } + end; + +implementation + +{$R *.dfm} + +end. diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 03a44e53b..d028b5e04 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -383,828 +383,30 @@ object FRMWallet: TFRMWallet OnChange = PageControlChange object tsMyAccounts: TTabSheet Caption = 'Account Explorer' - object Splitter1: TSplitter - Left = 400 - Top = 66 - Width = 5 - Height = 372 - ExplicitHeight = 374 - end - object pnlMyAccountsTop: TPanel - Left = 0 - Top = 0 - Width = 857 - Height = 66 - Align = alTop - BevelOuter = bvNone - TabOrder = 0 - object Label18: TLabel - Left = 11 - Top = 35 - Width = 61 - Height = 13 - Caption = 'Find account' - Color = clBtnFace - ParentColor = False - end - object sbSearchAccount: TSpeedButton - Left = 176 - Top = 32 - Width = 23 - Height = 22 - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000120B0000120B00000000000000000000FF00FF4A667C - BE9596FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FF6B9CC31E89E84B7AA3C89693FF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF4BB4FE51B5FF - 2089E94B7AA2C69592FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF51B7FE51B3FF1D87E64E7AA0CA9792FF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 51B7FE4EB2FF1F89E64E7BA2B99497FF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF52B8FE4BB1FF2787D95F6A76FF - 00FFB0857FC09F94C09F96BC988EFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF55BDFFB5D6EDBF9D92BB9B8CE7DAC2FFFFE3FFFFE5FDFADAD8C3 - B3B58D85FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFCEA795FD - EEBEFFFFD8FFFFDAFFFFDBFFFFE6FFFFFBEADDDCAE837FFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFC1A091FBDCA8FEF7D0FFFFDBFFFFE3FFFFF8FFFF - FDFFFFFDC6A99CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC1A091FEE3ACF1 - C491FCF2CAFFFFDDFFFFE4FFFFF7FFFFF7FFFFE9EEE5CBB9948CFF00FFFF00FF - FF00FFFF00FFFF00FFC2A191FFE6AEEEB581F7DCAEFEFDD8FFFFDFFFFFE3FFFF - E4FFFFE0F3ECD2BB968EFF00FFFF00FFFF00FFFF00FFFF00FFBC978CFBE7B7F4 - C791F2C994F8E5B9FEFCD8FFFFDDFFFFDCFFFFE0E2D2BAB68E86FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFD9C3A9FFFEE5F7DCB8F2C994F5D4A5FAE8BDFDF4 - C9FDFBD6B69089FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFB58D85E8 - DEDDFFFEF2F9D8A3F4C48CF9D49FFDEAB8D0B49FB89086FF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFAD827FC9AA9EEFE0B7EFDFB2E7CEACB890 - 86B89086FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFBA968ABB988CB79188FF00FFFF00FFFF00FFFF00FF} - OnClick = sbSearchAccountClick - end - object cbMyPrivateKeys: TComboBox - Left = 260 - Top = 7 - Width = 411 - Height = 21 - Style = csDropDownList - TabOrder = 0 - OnChange = cbMyPrivateKeysChange - end - object cbExploreMyAccounts: TCheckBox - Left = 11 - Top = 10 - Width = 235 - Height = 19 - Caption = 'Explore accounts with one of my Wallet Keys' - TabOrder = 1 - OnClick = cbExploreMyAccountsClick - end - object ebFindAccountNumber: TEdit - Left = 87 - Top = 33 - Width = 83 - Height = 21 - TabOrder = 3 - OnChange = ebFindAccountNumberChange - OnExit = ebFindAccountNumberExit - end - object bbChangeKeyName: TBitBtn - Left = 685 - Top = 5 - Width = 126 - Height = 25 - Caption = 'Change Key name' - TabOrder = 2 - OnClick = bbChangeKeyNameClick - end - object cbFilterAccounts: TCheckBox - Left = 260 - Top = 35 - Width = 145 - Height = 19 - Caption = 'Filter accounts by balance' - TabOrder = 4 - OnClick = cbFilterAccountsClick - end - object ebFilterAccountByBalanceMin: TEdit - Left = 412 - Top = 33 - Width = 83 - Height = 21 - Hint = 'Min balance' - TabOrder = 5 - OnExit = ebFilterAccountByBalanceMinExit - OnKeyPress = ebFilterAccountByBalanceMinKeyPress - end - object ebFilterAccountByBalanceMax: TEdit - Left = 503 - Top = 33 - Width = 83 - Height = 21 - Hint = 'Max balance' - TabOrder = 6 - OnExit = ebFilterAccountByBalanceMinExit - OnKeyPress = ebFilterAccountByBalanceMinKeyPress - end - end - object pnlAccounts: TPanel - Left = 0 - Top = 66 - Width = 400 - Height = 372 - Align = alLeft - BevelOuter = bvNone - TabOrder = 1 - object dgAccounts: TDrawGrid - Left = 0 - Top = 0 - Width = 400 - Height = 338 - Align = alClient - TabOrder = 0 - OnClick = dgAccountsClick - end - object pnlAccountsInfo: TPanel - Left = 0 - Top = 338 - Width = 400 - Height = 34 - Align = alBottom - BevelOuter = bvNone - TabOrder = 1 - DesignSize = ( - 400 - 34) - object Label17: TLabel - Left = 5 - Top = 10 - Width = 48 - Height = 13 - Caption = 'Accounts:' - Color = clBtnFace - ParentColor = False - end - object Label19: TLabel - Left = 136 - Top = 10 - Width = 41 - Height = 13 - Caption = 'Balance:' - Color = clBtnFace - ParentColor = False - end - object lblAccountsCount: TLabel - Left = 60 - Top = 10 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - ParentColor = False - end - object lblAccountsBalance: TLabel - Left = 200 - Top = 10 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - ParentColor = False - end - object bbAccountsRefresh: TBitBtn - Left = 322 - Top = 6 - Width = 75 - Height = 25 - Anchors = [akTop, akRight] - Caption = 'Refresh' - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF - C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2A6 - A4C2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FEFCFBFEFCFBFEFCFBFEFCFBFE - FCFBFEFCFBFEFCFBFEFCFBFEFCFBFEFCFBC2A6A4FF00FFFF00FFFF00FFFF00FF - C2A6A4FEFCFBFEFCFBFEFCFBFEFCFBD8EBD6018A02018A02D8EBD6FEFCFBFEFC - FBC2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FEFBF7FEFBF7018A02D8EAD201 - 8A02D8EAD2D8EAD2018A02FEFBF7FEFBF7C2A6A4FF00FFFF00FFFF00FFFF00FF - C2A6A4FEF9F4FEF9F4018A02018A02D8E8D0FEF9F4FEF9F4D8E8D0FEF9F4FEF9 - F4C2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FEF7F0FEF7F0018A02018A0201 - 8A02FEF7F0FEF7F0FEF7F0FEF7F0FEF7F0C2A6A4FF00FFFF00FFFF00FFFF00FF - C2A6A4FEF5ECFEF5ECFEF5ECFEF5ECFEF5EC018A02018A02018A02FEF5ECFEF5 - ECC2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FEF3E9FEF3E9D8E3C7FEF3E9FE - F3E9D8E3C7018A02018A02FEF3E9FEF3E9C2A6A4FF00FFFF00FFFF00FFFF00FF - C2A6A4FFF1E5FFF1E5018A02D9E2C3D9E2C3018A02D9E2C3018A02FFF1E5FFF1 - E5C2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FFF0E2FFF0E2D9E1C1018A0201 - 8A02D9E1C1DDCFC2DDCFC2DDCFC2DDCFC2C2A6A4FF00FFFF00FFFF00FFFF00FF - C2A6A4FFEEDEFFEEDEFFEEDEFFEEDEFFEEDEFFEEDEC5B5A9C3B4A8C2B3A7C1B2 - A6C2A6A4FF00FFFF00FFFF00FFFF00FFC2A6A4FFECDAFFECDAFFECDAFFECDAFF - ECDAFFECDAB0A296B0A296B0A296B0A296C2A6A4FF00FFFF00FFFF00FFFF00FF - C2A6A4FFEAD7FFEAD7FFEAD7FFEAD7FFEAD7C9B9ACFBF8F4FBF8F4E6DAD9C2A6 - A4FF00FFFF00FFFF00FFFF00FFFF00FFC2A6A4FFE8D3FFE8D3FFE8D3FFE8D3FF - E8D3C9B9ACFBF8F4DFCEC7C2A6A4FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - C2A6A4FFE6D0FFE6D0FFE6D0FFE6D0FFE6D0C9B9ACDFCEC7C2A6A4FF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFC2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2 - A6A4C2A6A4C2A6A4FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - TabOrder = 0 - OnClick = bbAccountsRefreshClick - end - end - end - object pcAccountsOptions: TPageControl - Left = 405 - Top = 66 - Width = 452 - Height = 372 - ActivePage = tsAccountOperations - Align = alClient - TabOrder = 2 - object tsAccountOperations: TTabSheet - Caption = 'Account Operations' - object dgAccountOperations: TDrawGrid - Left = 0 - Top = 0 - Width = 444 - Height = 344 - Align = alClient - TabOrder = 0 - OnDblClick = MiDecodePayloadClick - end - end - object tsMultiSelectAccounts: TTabSheet - Caption = 'Selected Accounts For Batch Operation' - ImageIndex = 1 - object dgSelectedAccounts: TDrawGrid - Left = 41 - Top = 31 - Width = 320 - Height = 287 - Align = alLeft - TabOrder = 0 - end - object pnlSelectedAccountsTop: TPanel - Left = 0 - Top = 0 - Width = 444 - Height = 31 - Align = alTop - BevelOuter = bvNone - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 1 - object Label15: TLabel - Left = 41 - Top = 4 - Width = 361 - Height = 16 - Caption = 'Select multiple accounts to execute massive operations' - Color = clBtnFace - ParentColor = False - end - end - object pnlSelectedAccountsBottom: TPanel - Left = 0 - Top = 318 - Width = 444 - Height = 26 - Align = alBottom - BevelOuter = bvNone - TabOrder = 2 - object Label20: TLabel - Left = 41 - Top = 6 - Width = 48 - Height = 13 - Caption = 'Accounts:' - Color = clBtnFace - ParentColor = False - end - object lblSelectedAccountsCount: TLabel - Left = 96 - Top = 6 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - ParentColor = False - end - object Label22: TLabel - Left = 156 - Top = 6 - Width = 88 - Height = 13 - Caption = 'Accounts Balance:' - Color = clBtnFace - ParentColor = False - end - object lblSelectedAccountsBalance: TLabel - Left = 250 - Top = 6 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - ParentColor = False - end - end - object pnlSelectedAccountsLeft: TPanel - Left = 0 - Top = 31 - Width = 41 - Height = 287 - Align = alLeft - BevelOuter = bvNone - TabOrder = 3 - object sbSelectedAccountsAdd: TSpeedButton - Left = 2 - Top = 0 - Width = 33 - Height = 31 - Caption = '>' - OnClick = sbSelectedAccountsAddClick - end - object sbSelectedAccountsAddAll: TSpeedButton - Left = 2 - Top = 37 - Width = 33 - Height = 31 - Caption = '>>' - OnClick = sbSelectedAccountsAddAllClick - end - object sbSelectedAccountsDel: TSpeedButton - Left = 2 - Top = 74 - Width = 33 - Height = 31 - Caption = '<' - OnClick = sbSelectedAccountsDelClick - end - object sbSelectedAccountsDelAll: TSpeedButton - Left = 2 - Top = 111 - Width = 33 - Height = 31 - Caption = '<<' - OnClick = sbSelectedAccountsDelAllClick - end - end - object bbSelectedAccountsOperation: TBitBtn - Left = 367 - Top = 31 - Width = 75 - Height = 61 - Caption = 'Operations' - Glyph.Data = { - F6060000424DF606000000000000360000002800000018000000180000000100 - 180000000000C0060000120B0000120B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FF019ACF019ACF019ACF019ACFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0C8518FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF0D9FD18BD4EE6BD3F845C0ED28B0E0019ACF01 - 9ACF019ACF019ACFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0C85180C8518 - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF069CD076C8E5A9E9FE6DD8 - FF75DBFF77DCFF77DBFF63D1F930B3E3029BD0019ACF019ACF019ACF019ACFFF - 00FF0C85181399220C8518FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF019ACF - 34AFD9BCE9F86ED8FF6FD8FE70D8FE70D8FE71D8FF0C85180C85180C85180C85 - 180C85180C85180C85180C85181DAC31139A220C8518FF00FFFF00FFFF00FFFF - 00FFFF00FF019ACF1FA9D68FD3EB97E4FF6FD9FE71D9FE71D9FE71D9FE0C8518 - 57E38851DD7E4AD77443D0693BC95E34C1522BBA4725B33C1EAE33149B230C85 - 18FF00FFFF00FFFF00FFFF00FF019ACF31B1DC49B7DEBDEEFB71DDFE77DEFE77 - DEFE77DEFE0C85185EE89059E48953DE804CD87645D16C3DCA6035C2542DBB49 - 26B53F1FAF35149B250C8518FF00FFFF00FFFF00FF019ACF52C2E71DA7D5ADE2 - F38FE8FF7CE2FE7CE3FE7CE3FE0C851861EB955FE9925AE58B54DF824DD97846 - D26D3ECB6237C4562FBD4C27B64021B037159B250C8518FF00FFFF00FF019ACF - 60CAEF1FA8D85EC1E1C2E6ED8ACEE08FCFE18ECFE10C851861EB9561EB955FEA - 935CE58D56E0844FDB7A48D47040CD6538C65931BF4D1DA3320C8518FF00FFFF - 00FFFF00FF019ACF65CFF53EB7E52CA9D4C5EFF8ACF3FEA5F2FFA5F2FF0C8518 - 61EB9561EB9561EB9561EB945CE68E57E18650DC7C49D57242CE6727AD410C85 - 18FF00FFFF00FFFF00FFFF00FF019ACF69D1F855C4F32A9CC673CBE7D6FEFDB1 - FBFDB2FBFD0C85180C85180C85180C85180C85180C85180C85180C851852DD7F - 32B6500C851898FAFF019ACFFF00FFFF00FFFF00FF019ACF77D5FC5CC8FB748E - A224A8D5B9E7F3D5F5F9D5F6F9D6F6FADCFAFBCDFDFCB9FCFCAFFAFCB0FAFCB1 - FAFC0C85183ABE5C0C85189FFCFFA4FFFF43C1E2019ACFFF00FFFF00FF019ACF - 8BDBFF5FCDFFB7898973C3DD18A2D218A2D216A2D215A1D21AA4D391D7EBEBFE - FDDBFDFCC5FBFBC2FBFB0C85180C851883E4F3B6FDFFBAFFFFB5FCFD019ACFFF - 00FFFF00FF019ACF99E2FF67D3FFB88989FEF5ECFDF3EBF0EFEAE5EBE8D6E5E6 - A4D2E025A6D34DB9DDE5F8FBF5FDFCEBFCFB0C8518C4FBFF9CE4F2DAFEFFD9FE - FFE3FFFFADE9F5019ACFFF00FF019ACF9FE9FF70DCFFB88989FEF3E9FFF2E6FE - F3E9FEF3E9FEF3E9FEF3E9D4E4E439ADD422A5D49DD8ECF1F9FBEEEFEFE9FDFF - CEEEF7F8FFFFF7FFFFFEFFFFE9F9FD019ACFFF00FF019ACFA7EFFF76E5FFB889 - 89FFF2E5FFF0E2FFF2E5FFF2E5FFF2E5FFF2E5FFF2E5EAEBE38EC9DA44B0D501 - 9ACF019ACF019ACF019ACF019ACF019ACF019ACF019ACF019ACFFF00FF019ACF - ABF6FF7EEDFFB88989FFF0E2FFEFDFFFF0E2FFF0E2FFF0E2FFF0E2FFF0E2FEEE - E0FBECDEFAEBDEF6E6D9B8898993F7FF019ACFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FF019ACFC7FFFF82F5FFB88989FFEEDFFFECDBFFEEDFFFEEDFFFEEDF - FFEEDFF9E8D9DECCC1D9CABDCFBDB4C8B3ACB88989B5FFFF019ACFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF019ACFA4E0F0A0FDFFB88989FFECDBFFEBD8FF - ECDBFFECDBFFECDBFFECDBF5E2D2C4ABA7C2A8A5BBA39FC2AFA9B88989019ACF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF019ACFECFFFFB889 - 89FFEBD8FFEAD5FFEBD8FFEBD8FFEBD8FFEBD8FFEBD8D9C8C5FEFEFDFEF6EFDE - C9C0B88989FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF019ACFB88989FFE9D5FFE8D3FFE9D5FFE9D5FFE9D5FFE9D5FFE9D5C6AD - A9FEF8F2E8D4CACD9999FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFB88989FFE7D1FFE7D0FFE7D1FFE7D1FFE7D1 - FFE7D1E7CEBFD3BFB9E8D5CCCD9999FF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFB88989FFE6CFFFE6CFFF - E6CFFFE6CFFFE6CFFFE6CFD5BBB2E0CCC5CD9999FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFB889 - 89B88989B88989B88989B88989B88989B88989B88989B88989FF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - Layout = blGlyphTop - TabOrder = 4 - OnClick = bbSelectedAccountsOperationClick - end - end - end end object tsPendingOperations: TTabSheet Caption = 'Pending Operations' ImageIndex = 5 - object dgPendingOperations: TDrawGrid - Left = 0 - Top = 86 - Width = 857 - Height = 352 - Align = alClient - TabOrder = 0 - OnDblClick = MiDecodePayloadClick - end - object pnlPendingOperations: TPanel - Left = 0 - Top = 0 - Width = 857 - Height = 86 - Align = alTop - BevelOuter = bvNone - BorderWidth = 10 - TabOrder = 1 - object Label10: TLabel - Left = 10 - Top = 10 - Width = 837 - Height = 66 - Align = alClient - AutoSize = False - Caption = - 'Here you can see Operations transmited/received from other nodes' + - ' that will be included in next block. There is no guarantee that' + - ' other nodes will include them when mining, so it'#39's important th' + - 'at you mine too to help include Operations to the main BlockChai' + - 'n' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -16 - Font.Name = 'Tahoma' - Font.Style = [] - ParentColor = False - ParentFont = False - WordWrap = True - end - end end object tsBlockChain: TTabSheet Caption = 'Block Explorer' ImageIndex = 1 - object Panel2: TPanel - Left = 0 - Top = 0 - Width = 857 - Height = 41 - Align = alTop - BevelOuter = bvNone - TabOrder = 0 - object Label9: TLabel - Left = 11 - Top = 10 - Width = 102 - Height = 13 - Caption = 'Filter by blocks range' - Color = clBtnFace - ParentColor = False - end - object lblHashRateBackBlocks: TLabel - Left = 280 - Top = 10 - Width = 104 - Height = 13 - Caption = 'HashRate back blocks' - Color = clBtnFace - ParentColor = False - end - object lblHashRateBackBlocks1: TLabel - Left = 463 - Top = 10 - Width = 24 - Height = 13 - Caption = 'Units' - Color = clBtnFace - ParentColor = False - end - object ebBlockChainBlockStart: TEdit - Left = 125 - Top = 7 - Width = 57 - Height = 21 - TabOrder = 0 - OnExit = ebBlockChainBlockStartExit - OnKeyPress = ebBlockChainBlockStartKeyPress - end - object ebBlockChainBlockEnd: TEdit - Left = 185 - Top = 7 - Width = 57 - Height = 21 - TabOrder = 1 - OnExit = ebBlockChainBlockStartExit - OnKeyPress = ebBlockChainBlockStartKeyPress - end - object ebHashRateBackBlocks: TEdit - Left = 392 - Top = 7 - Width = 56 - Height = 21 - TabOrder = 2 - OnExit = ebHashRateBackBlocksExit - OnKeyPress = ebHashRateBackBlocksKeyPress - end - object cbHashRateUnits: TComboBox - Left = 496 - Top = 7 - Width = 56 - Height = 21 - Style = csDropDownList - ItemIndex = 1 - TabOrder = 3 - Text = 'Mh/s' - OnChange = cbHashRateUnitsClick - OnClick = cbHashRateUnitsClick - Items.Strings = ( - 'Kh/s' - 'Mh/s' - 'Gh/s' - 'Th/s') - end - end - object dgBlockChainExplorer: TDrawGrid - Left = 0 - Top = 41 - Width = 857 - Height = 397 - Align = alClient - TabOrder = 1 - end end object tsOperations: TTabSheet Caption = 'Operations Explorer' ImageIndex = 1 - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 857 - Height = 41 - Align = alTop - BevelOuter = bvNone - TabOrder = 0 - object Label2: TLabel - Left = 11 - Top = 10 - Width = 102 - Height = 13 - Caption = 'Filter by blocks range' - Color = clBtnFace - ParentColor = False - end - object ebFilterOperationsStartBlock: TEdit - Left = 125 - Top = 7 - Width = 57 - Height = 21 - TabOrder = 0 - OnExit = ebFilterOperationsAccountExit - OnKeyPress = ebFilterOperationsAccountKeyPress - end - object ebFilterOperationsEndBlock: TEdit - Left = 185 - Top = 7 - Width = 57 - Height = 21 - TabOrder = 1 - OnExit = ebFilterOperationsAccountExit - OnKeyPress = ebFilterOperationsAccountKeyPress - end - end - object dgOperationsExplorer: TDrawGrid - Left = 0 - Top = 41 - Width = 857 - Height = 397 - Align = alClient - TabOrder = 1 - end end object tsLogs: TTabSheet Caption = 'Logs' ImageIndex = 2 - object pnlTopLogs: TPanel - Left = 0 - Top = 0 - Width = 857 - Height = 41 - Align = alTop - BevelOuter = bvNone - TabOrder = 0 - object cbShowDebugLogs: TCheckBox - Left = 15 - Top = 10 - Width = 102 - Height = 19 - Caption = 'Show Debug Logs' - TabOrder = 0 - end - end - object memoLogs: TMemo - Left = 0 - Top = 41 - Width = 857 - Height = 397 - Align = alClient - ScrollBars = ssBoth - TabOrder = 1 - WordWrap = False - end end object tsNodeStats: TTabSheet Caption = 'Node Stats' ImageIndex = 3 - DesignSize = ( - 857 - 438) - object Label3: TLabel - Left = 15 - Top = 15 - Width = 96 - Height = 13 - Caption = 'Active Connections:' - Color = clBtnFace - ParentColor = False - end - object Label6: TLabel - Left = 15 - Top = 291 - Width = 104 - Height = 13 - Anchors = [akLeft, akRight, akBottom] - Caption = 'Known Node Servers:' - Color = clBtnFace - ParentColor = False - end - object Label7: TLabel - Left = 15 - Top = 187 - Width = 82 - Height = 13 - Anchors = [akLeft, akRight, akBottom] - Caption = 'Blacklisted Nodes' - Color = clBtnFace - ParentColor = False - end - object memoNetConnections: TMemo - Left = 15 - Top = 34 - Width = 830 - Height = 145 - Anchors = [akLeft, akTop, akRight, akBottom] - ReadOnly = True - ScrollBars = ssBoth - TabOrder = 0 - WordWrap = False - end - object memoNetServers: TMemo - Left = 15 - Top = 310 - Width = 830 - Height = 116 - Anchors = [akLeft, akRight, akBottom] - ReadOnly = True - ScrollBars = ssBoth - TabOrder = 1 - WordWrap = False - end - object memoNetBlackLists: TMemo - Left = 16 - Top = 206 - Width = 829 - Height = 79 - Anchors = [akLeft, akRight, akBottom] - ReadOnly = True - ScrollBars = ssBoth - TabOrder = 2 - WordWrap = False - end end object tsMessages: TTabSheet Caption = 'Messages' ImageIndex = 6 - DesignSize = ( - 857 - 438) - object Label11: TLabel - Left = 15 - Top = 151 - Width = 51 - Height = 13 - Caption = 'Messages:' - Color = clBtnFace - ParentColor = False - end - object Label12: TLabel - Left = 315 - Top = 11 - Width = 85 - Height = 13 - Caption = 'Message to send:' - Color = clBtnFace - ParentColor = False - end - object Label13: TLabel - Left = 15 - Top = 11 - Width = 109 - Height = 13 - Caption = 'Available Connections:' - Color = clBtnFace - ParentColor = False - end - object Label14: TLabel - Left = 410 - Top = 11 - Width = 361 - Height = 13 - Caption = - '(Messages will be encrypted, so only dest connection will be abl' + - 'e to read it)' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clGrayText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - ParentColor = False - ParentFont = False - end - object lbNetConnections: TListBox - Left = 15 - Top = 30 - Width = 275 - Height = 96 - ItemHeight = 13 - MultiSelect = True - ScrollWidth = 273 - TabOrder = 0 - end - object bbSendAMessage: TButton - Left = 315 - Top = 101 - Width = 525 - Height = 25 - Caption = 'Send a Message' - TabOrder = 1 - OnClick = bbSendAMessageClick - end - object memoMessages: TMemo - Left = 15 - Top = 170 - Width = 821 - Height = 249 - Anchors = [akLeft, akTop, akRight, akBottom] - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -16 - Font.Name = 'Tahoma' - Font.Style = [] - Lines.Strings = ( - 'dsfa '#195#177'ldsaf '#195#177'lk dasf' - 'dsfklda'#195#177'fs '#195#177'l') - ParentFont = False - ReadOnly = True - ScrollBars = ssBoth - TabOrder = 2 - end - object memoMessageToSend: TMemo - Left = 315 - Top = 30 - Width = 525 - Height = 61 - Lines.Strings = ( - 'memoMessageToSend') - TabOrder = 3 - WantReturns = False - end end end object TimerUpdateStatus: TTimer diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index c39312995..fba937d35 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -47,27 +47,15 @@ interface { TFRMWallet } TFRMWallet = class(TForm) - cbHashRateUnits: TComboBox; - ebHashRateBackBlocks: TEdit; - lblHashRateBackBlocks: TLabel; - lblHashRateBackBlocks1: TLabel; MiRPCCalls: TMenuItem; pnlTop: TPanel; Image1: TImage; - sbSearchAccount: TSpeedButton; StatusBar: TStatusBar; PageControl: TPageControl; tsMyAccounts: TTabSheet; tsOperations: TTabSheet; TimerUpdateStatus: TTimer; tsLogs: TTabSheet; - pnlTopLogs: TPanel; - cbShowDebugLogs: TCheckBox; - memoLogs: TMemo; - pnlMyAccountsTop: TPanel; - dgAccounts: TDrawGrid; - cbMyPrivateKeys: TComboBox; - Splitter1: TSplitter; MainMenu: TMainMenu; miProject: TMenuItem; miOptions: TMenuItem; @@ -76,17 +64,7 @@ TFRMWallet = class(TForm) miAbout: TMenuItem; miAboutPascalCoin: TMenuItem; miNewOperation: TMenuItem; - Panel1: TPanel; - Label2: TLabel; - ebFilterOperationsStartBlock: TEdit; - ebFilterOperationsEndBlock: TEdit; tsNodeStats: TTabSheet; - memoNetConnections: TMemo; - memoNetServers: TMemo; - memoNetBlackLists: TMemo; - Label3: TLabel; - Label6: TLabel; - Label7: TLabel; lblCurrentBlockCaption: TLabel; lblCurrentBlock: TLabel; lblCurrentBlockTimeCaption: TLabel; @@ -100,17 +78,9 @@ TFRMWallet = class(TForm) lblTimeAverage: TLabel; Label4: TLabel; tsBlockChain: TTabSheet; - Panel2: TPanel; - Label9: TLabel; - ebBlockChainBlockStart: TEdit; - ebBlockChainBlockEnd: TEdit; Label8: TLabel; lblNodeStatus: TLabel; tsPendingOperations: TTabSheet; - dgPendingOperations: TDrawGrid; - pnlPendingOperations: TPanel; - Label10: TLabel; - cbExploreMyAccounts: TCheckBox; N1: TMenuItem; MiClose: TMenuItem; MiDecodePayload: TMenuItem; @@ -118,46 +88,11 @@ TFRMWallet = class(TForm) lblCurrentAccounts: TLabel; lblTimeAverageAux: TLabel; tsMessages: TTabSheet; - lbNetConnections: TListBox; - bbSendAMessage: TButton; - Label11: TLabel; - memoMessages: TMemo; - memoMessageToSend: TMemo; - Label12: TLabel; - Label13: TLabel; - Label14: TLabel; Label16: TLabel; lblBlocksFound: TLabel; - pnlAccounts: TPanel; - pnlAccountsInfo: TPanel; - Label17: TLabel; - Label19: TLabel; - lblAccountsCount: TLabel; - lblAccountsBalance: TLabel; lblReceivedMessages: TLabel; lblBuild: TLabel; - ebFindAccountNumber: TEdit; - Label18: TLabel; IPnodes1: TMenuItem; - bbChangeKeyName: TBitBtn; - pcAccountsOptions: TPageControl; - tsAccountOperations: TTabSheet; - dgAccountOperations: TDrawGrid; - tsMultiSelectAccounts: TTabSheet; - dgSelectedAccounts: TDrawGrid; - pnlSelectedAccountsTop: TPanel; - pnlSelectedAccountsBottom: TPanel; - pnlSelectedAccountsLeft: TPanel; - sbSelectedAccountsAdd: TSpeedButton; - sbSelectedAccountsAddAll: TSpeedButton; - sbSelectedAccountsDel: TSpeedButton; - sbSelectedAccountsDelAll: TSpeedButton; - Label20: TLabel; - lblSelectedAccountsCount: TLabel; - Label22: TLabel; - lblSelectedAccountsBalance: TLabel; - bbSelectedAccountsOperation: TBitBtn; - Label15: TLabel; MiOperations: TMenuItem; MiAddaccounttoSelected: TMenuItem; MiRemoveaccountfromselected: TMenuItem; @@ -167,12 +102,6 @@ TFRMWallet = class(TForm) MiFindnextaccountwithhighbalance: TMenuItem; MiFindpreviousaccountwithhighbalance: TMenuItem; MiFindaccount: TMenuItem; - cbFilterAccounts: TCheckBox; - ebFilterAccountByBalanceMin: TEdit; - ebFilterAccountByBalanceMax: TEdit; - bbAccountsRefresh: TBitBtn; - dgBlockChainExplorer: TDrawGrid; - dgOperationsExplorer: TDrawGrid; MiFindOperationbyOpHash: TMenuItem; MiAccountInformation: TMenuItem; MiOperationsExplorer: TMenuItem; diff --git a/src/pascalcoin_wallet_classic.dpr b/src/pascalcoin_wallet_classic.dpr index 993614b1e..a7b3a5a63 100644 --- a/src/pascalcoin_wallet_classic.dpr +++ b/src/pascalcoin_wallet_classic.dpr @@ -58,8 +58,7 @@ uses UOpTransaction in 'core\UOpTransaction.pas', {$IFDEF USE_ABSTRACTMEM} UPCAbstractMem in 'core\UPCAbstractMem.pas', - UPCAbstractMemAccountKeys in 'core\UPCAbstractMemAccountKeys.pas', - {$ENDIF} + {$ENDIF } UPCAbstractMemAccounts in 'core\UPCAbstractMemAccounts.pas', UPCAccountsOrdenations in 'core\UPCAccountsOrdenations.pas', UPCCryptoLib4Pascal in 'core\UPCCryptoLib4Pascal.pas', @@ -89,7 +88,14 @@ uses UThread in 'core\UThread.pas', UTime in 'core\UTime.pas', UTxMultiOperation in 'core\UTxMultiOperation.pas', - UWallet in 'core\UWallet.pas'; + UWallet in 'core\UWallet.pas', + UFrameAccountExplorer in 'gui-classic\Frames\UFrameAccountExplorer.pas' {FrameAccountExplorer: TFrame}, + UFramePendingOperations in 'gui-classic\Frames\UFramePendingOperations.pas' {FramePendingOperations: TFrame}, + UFrameBlockExplorer in 'gui-classic\Frames\UFrameBlockExplorer.pas' {FrameBlockChainExplorer: TFrame}, + UFrameOperationsExplorer in 'gui-classic\Frames\UFrameOperationsExplorer.pas' {FrameOperationsExplorer: TFrame}, + UFrameLogs in 'gui-classic\Frames\UFrameLogs.pas' {FrameLogs: TFrame}, + UFrameNodeStats in 'gui-classic\Frames\UFrameNodeStats.pas' {FrameNodeStats: TFrame}, + UFrameMessages in 'gui-classic\Frames\UFrameMessages.pas' {FrameMessages: TFrame}; {$R *.res} diff --git a/src/pascalcoin_wallet_classic.dproj b/src/pascalcoin_wallet_classic.dproj index 1f1d7ae67..76d783a23 100644 --- a/src/pascalcoin_wallet_classic.dproj +++ b/src/pascalcoin_wallet_classic.dproj @@ -7,7 +7,7 @@ 3 Application VCL - 18.8 + 19.2 Win32 @@ -204,7 +204,6 @@ - @@ -235,6 +234,41 @@ + +
FrameAccountExplorer
+ dfm + TFrame +
+ +
FramePendingOperations
+ dfm + TFrame +
+ +
FrameBlockChainExplorer
+ dfm + TFrame +
+ +
FrameOperationsExplorer
+ dfm + TFrame +
+ +
FrameLogs
+ dfm + TFrame +
+ +
FrameNodeStats
+ dfm + TFrame +
+ +
FrameMessages
+ dfm + TFrame +
Cfg_2 Base @@ -412,6 +446,16 @@ 1 + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + res\drawable-ldpi @@ -663,6 +707,32 @@ 0 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + 1 @@ -762,6 +832,16 @@ 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + 1 @@ -773,6 +853,66 @@ 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + 1 @@ -872,6 +1012,16 @@ 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + 1 @@ -883,6 +1033,16 @@ 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + 1 @@ -927,6 +1087,86 @@ 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + 1 @@ -974,6 +1214,16 @@ 1 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + 1 From efff10a86d6cb586d764629d47411d8534143f55 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 30 Nov 2021 22:01:56 +0100 Subject: [PATCH 05/44] Some code moved into frames, needs further work. --- .../Frames/UFrameAccountExplorer.dfm | 25 +- .../Frames/UFrameAccountExplorer.pas | 205 +++ .../Frames/UFrameBlockExplorer.dfm | 6 - .../Frames/UFrameBlockExplorer.pas | 64 + src/gui-classic/Frames/UFrameMessages.dfm | 1 + src/gui-classic/Frames/UFrameMessages.pas | 50 + .../Frames/UFrameOperationsExplorer.dfm | 6 - .../Frames/UFrameOperationsExplorer.pas | 34 + src/gui-classic/UFRMWallet.pas | 1143 ++++++----------- src/gui-classic/UnitReIntegrate.pas | 15 + src/pascalcoin_wallet_classic.dpr | 3 +- src/pascalcoin_wallet_classic.dproj | 1 + 12 files changed, 787 insertions(+), 766 deletions(-) create mode 100644 src/gui-classic/UnitReIntegrate.pas diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.dfm b/src/gui-classic/Frames/UFrameAccountExplorer.dfm index d59a7c3c9..4f9a905c2 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.dfm +++ b/src/gui-classic/Frames/UFrameAccountExplorer.dfm @@ -21,8 +21,6 @@ object FrameAccountExplorer: TFrameAccountExplorer Align = alTop BevelOuter = bvNone TabOrder = 0 - ExplicitLeft = -537 - ExplicitWidth = 857 object Label18: TLabel Left = 11 Top = 35 @@ -129,9 +127,6 @@ object FrameAccountExplorer: TFrameAccountExplorer Align = alLeft BevelOuter = bvNone TabOrder = 1 - ExplicitLeft = -80 - ExplicitTop = -132 - ExplicitHeight = 372 object dgAccounts: TDrawGrid Left = 0 Top = 0 @@ -139,7 +134,6 @@ object FrameAccountExplorer: TFrameAccountExplorer Height = 482 Align = alClient TabOrder = 0 - ExplicitHeight = 338 end object pnlAccountsInfo: TPanel Left = 0 @@ -149,7 +143,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Align = alBottom BevelOuter = bvNone TabOrder = 1 - ExplicitTop = 338 + OnClick = pnlAccountsInfoClick DesignSize = ( 400 34) @@ -224,6 +218,7 @@ object FrameAccountExplorer: TFrameAccountExplorer FFFF00FFFF00FFFF00FFFF00FFFF00FFC2A6A4C2A6A4C2A6A4C2A6A4C2A6A4C2 A6A4C2A6A4C2A6A4FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} TabOrder = 0 + OnClick = bbAccountsRefreshClick end end end @@ -235,10 +230,6 @@ object FrameAccountExplorer: TFrameAccountExplorer ActivePage = tsAccountOperations Align = alClient TabOrder = 2 - ExplicitLeft = -132 - ExplicitTop = -132 - ExplicitWidth = 452 - ExplicitHeight = 372 object tsAccountOperations: TTabSheet Caption = 'Account Operations' object dgAccountOperations: TDrawGrid @@ -248,8 +239,6 @@ object FrameAccountExplorer: TFrameAccountExplorer Height = 488 Align = alClient TabOrder = 0 - ExplicitWidth = 444 - ExplicitHeight = 344 end end object tsMultiSelectAccounts: TTabSheet @@ -259,14 +248,14 @@ object FrameAccountExplorer: TFrameAccountExplorer Left = 41 Top = 31 Width = 320 - Height = 287 + Height = 431 Align = alLeft TabOrder = 0 end object pnlSelectedAccountsTop: TPanel Left = 0 Top = 0 - Width = 444 + Width = 407 Height = 31 Align = alTop BevelOuter = bvNone @@ -289,8 +278,8 @@ object FrameAccountExplorer: TFrameAccountExplorer end object pnlSelectedAccountsBottom: TPanel Left = 0 - Top = 318 - Width = 444 + Top = 462 + Width = 407 Height = 26 Align = alBottom BevelOuter = bvNone @@ -336,7 +325,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Left = 0 Top = 31 Width = 41 - Height = 287 + Height = 431 Align = alLeft BevelOuter = bvNone TabOrder = 3 diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 81d714a76..9f920fb3f 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -46,6 +46,8 @@ TFrameAccountExplorer = class(TFrame) sbSelectedAccountsDel: TSpeedButton; sbSelectedAccountsDelAll: TSpeedButton; bbSelectedAccountsOperation: TBitBtn; + procedure bbAccountsRefreshClick(Sender: TObject); + procedure pnlAccountsInfoClick(Sender: TObject); private { Private declarations } public @@ -56,4 +58,207 @@ implementation {$R *.dfm} +procedure TFrameAccountExplorer.bbAccountsRefreshClick(Sender: TObject); +begin + UpdateAccounts(true); +end; + +procedure TFrameAccountExplorer.bbChangeKeyNameClick(Sender: TObject); +var i : Integer; + name : String; +begin + if (cbMyPrivateKeys.ItemIndex<0) then exit; + i := PtrInt(cbMyPrivateKeys.Items.Objects[cbMyPrivateKeys.ItemIndex]); + if (i<0) Or (i>=FWalletKeys.Count) then raise Exception.Create('Must select a Key'); + name := FWalletKeys.Key[i].Name; + if InputQuery('Change Key name','Input new name',name) then begin + FWalletKeys.SetName(i,name); + end; + UpdatePrivateKeys; +end; + +procedure TFrameAccountExplorer.bbSelectedAccountsOperationClick(Sender: TObject); +var l : TOrderedCardinalList; +begin + CheckIsReady; + if FSelectedAccountsGrid.AccountsCount<=0 then raise Exception.Create('Must select at least 1 account'); + With TFRMOperation.Create(Self) do + Try + l := FSelectedAccountsGrid.LockAccountsList; + try + SenderAccounts.CopyFrom(l); + finally + FSelectedAccountsGrid.UnlockAccountsList; + end; + DefaultFee := TSettings.DefaultFee; + WalletKeys := FWalletKeys; + ShowModal; + Finally + Free; + End; +end; + +procedure TFrameAccountExplorer.cbExploreMyAccountsClick(Sender: TObject); +begin + cbMyPrivateKeys.Enabled := cbExploreMyAccounts.Checked; + UpdateAccounts(true); + UpdateOperations; +end; + +procedure TFrameAccountExplorer.cbFilterAccountsClick(Sender: TObject); +begin + If not DoUpdateAccountsFilter then UpdateAccounts(true); +end; + +procedure TFrameAccountExplorer.cbMyPrivateKeysChange(Sender: TObject); +begin + UpdateAccounts(true); +end; + +procedure TFrameAccountExplorer.dgAccountsClick(Sender: TObject); +begin + UpdateOperations; +end; + +procedure TFrameAccountExplorer.dgAccountsColumnMoved(Sender: TObject; FromIndex, ToIndex: Integer); +begin + TSettings.Save; +end; + +procedure TFrameAccountExplorer.dgAccountsFixedCellClick(Sender: TObject; ACol, + ARow: Integer); +begin + TSettings.Save; +end; + +procedure TFrameAccountExplorer.ebFindAccountNumberChange(Sender: TObject); +Var an : Cardinal; + LAccountNameRawValue : TRawBytes; + LErrors : String; + LAccNames : TOrderedRawList; +begin + if Trim(ebFindAccountNumber.Text)='' then begin + ebFindAccountNumber.Color := clWindow; + ebFindAccountNumber.Font.Color := clDkGray; + end else if TAccountComp.AccountTxtNumberToAccountNumber(ebFindAccountNumber.Text,an) then begin + ebFindAccountNumber.Color := clWindow; + if FAccountsGrid.MoveRowToAccount(an) then begin + ebFindAccountNumber.Font.Color := clWindowText; + end else begin + ebFindAccountNumber.Font.Color := clRed; + end; + end else begin + LAccountNameRawValue.FromString(ebFindAccountNumber.Text); + LAccNames := TOrderedRawList.Create; + Try + if FNode.Bank.SafeBox.FindAccountsStartingByName(LAccountNameRawValue,LAccNames,1)>0 then begin + an := LAccNames.GetTag(0); + ebFindAccountNumber.Color := clWindow; + if FAccountsGrid.MoveRowToAccount(an) then begin + ebFindAccountNumber.Font.Color := clWindowText; + end else begin + ebFindAccountNumber.Font.Color := clRed; + end; + end else begin + // Invalid value + ebFindAccountNumber.Color := clRed; + ebFindAccountNumber.Font.Color := clWindowText; + end; + Finally + LAccNames.Free; + End; + end; +end; + +procedure TFrameAccountExplorer.ebFindAccountNumberExit(Sender: TObject); +begin + ebFindAccountNumber.Text := ''; +end; + +procedure TFrameAccountExplorer.sbSearchAccountClick(Sender: TObject); +Var F : TFRMAccountSelect; +begin + F := TFRMAccountSelect.Create(Self); + try + F.Node := FNode; + F.WalletKeys := FWalletKeys; + F.ShowModal; + finally + F.Free; + end; +end; + +procedure TFrameAccountExplorer.sbSelectedAccountsAddAllClick(Sender: TObject); +Var lsource,ltarget : TOrderedCardinalList; + i : Integer; +begin + lsource := FAccountsGrid.LockAccountsList; + Try + ltarget := FSelectedAccountsGrid.LockAccountsList; + Try + for i := 0 to lsource.Count-1 do begin + if FWalletKeys.IndexOfAccountKey(FNode.Bank.SafeBox.Account(lsource.Get(i)).accountInfo.accountKey)<0 then raise Exception.Create(Format('You cannot operate with account %d because private key not found in your wallet',[lsource.Get(i)])); + ltarget.Add(lsource.Get(i)); + end; + Finally + FSelectedAccountsGrid.UnlockAccountsList; + End; + Finally + FAccountsGrid.UnlockAccountsList; + End; +end; + +procedure TFrameAccountExplorer.sbSelectedAccountsAddClick(Sender: TObject); +Var l, selected : TOrderedCardinalList; + an : Int64; + i : Integer; +begin + an := FAccountsGrid.AccountNumber(dgAccounts.Row); + if (an<0) then raise Exception.Create('No account selected'); + if FWalletKeys.IndexOfAccountKey(FNode.Bank.SafeBox.Account(an).accountInfo.accountkey)<0 then + raise Exception.Create(Format('You cannot add %s account because private key not found in your wallet.'#10+#10+'You''re not the owner!', + [TAccountComp.AccountNumberToAccountTxtNumber(an)])); + // Add + l := FSelectedAccountsGrid.LockAccountsList; + selected := TOrderedCardinalList.Create; + Try + FAccountsGrid.SelectedAccounts(selected); + for i := 0 to selected.Count-1 do begin + l.Add(selected.Get(i)); + end; + Finally + selected.Free; + FSelectedAccountsGrid.UnlockAccountsList; + End; +end; + +procedure TFrameAccountExplorer.sbSelectedAccountsDelAllClick(Sender: TObject); +Var l : TOrderedCardinalList; +begin + l := FSelectedAccountsGrid.LockAccountsList; + try + l.Clear; + finally + FSelectedAccountsGrid.UnlockAccountsList; + end; +end; + +procedure TFrameAccountExplorer.sbSelectedAccountsDelClick(Sender: TObject); +Var an : Int64; + l : TOrderedCardinalList; +begin + l := FSelectedAccountsGrid.LockAccountsList; + try + an := FSelectedAccountsGrid.AccountNumber(dgSelectedAccounts.Row); + if an>=0 then l.Remove(an); + finally + FSelectedAccountsGrid.UnlockAccountsList; + end; +end; + + + + + + end. diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.dfm b/src/gui-classic/Frames/UFrameBlockExplorer.dfm index 4dbe6272a..c1b7db646 100644 --- a/src/gui-classic/Frames/UFrameBlockExplorer.dfm +++ b/src/gui-classic/Frames/UFrameBlockExplorer.dfm @@ -12,8 +12,6 @@ object FrameBlockChainExplorer: TFrameBlockChainExplorer Align = alTop BevelOuter = bvNone TabOrder = 0 - ExplicitLeft = -537 - ExplicitWidth = 857 object Label9: TLabel Left = 11 Top = 10 @@ -85,9 +83,5 @@ object FrameBlockChainExplorer: TFrameBlockChainExplorer Height = 448 Align = alClient TabOrder = 1 - ExplicitLeft = -537 - ExplicitTop = -157 - ExplicitWidth = 857 - ExplicitHeight = 397 end end diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.pas b/src/gui-classic/Frames/UFrameBlockExplorer.pas index 4242291a0..a7d349169 100644 --- a/src/gui-classic/Frames/UFrameBlockExplorer.pas +++ b/src/gui-classic/Frames/UFrameBlockExplorer.pas @@ -28,4 +28,68 @@ implementation {$R *.dfm} +procedure TFrameBlockChainExplorer.ebBlockChainBlockStartExit(Sender: TObject); +var bstart,bend : Int64; +begin + If FUpdating then exit; + FUpdating := True; + Try + bstart := StrToInt64Def(ebBlockChainBlockStart.Text,-1); + bend := StrToInt64Def(ebBlockChainBlockEnd.Text,-1); + FBlockChainGrid.SetBlocks(bstart,bend); + if FBlockChainGrid.BlockStart>=0 then ebBlockChainBlockStart.Text := Inttostr(FBlockChainGrid.BlockStart) else ebBlockChainBlockStart.Text := ''; + if FBlockChainGrid.BlockEnd>=0 then ebBlockChainBlockEnd.Text := Inttostr(FBlockChainGrid.BlockEnd) else ebBlockChainBlockEnd.Text := ''; + Finally + FUpdating := false; + End; +end; + +procedure TFrameBlockChainExplorer.ebBlockChainBlockStartKeyPress(Sender: TObject; + var Key: Char); +begin + if key=#13 then ebBlockChainBlockStartExit(Nil); +end; + +procedure TFrameBlockChainExplorer.ebHashRateBackBlocksKeyPress(Sender: TObject; var Key: char); +begin + if Key=#13 then ebHashRateBackBlocksExit(Nil); +end; + +procedure TFrameBlockChainExplorer.ebHashRateBackBlocksExit(Sender: TObject); +var i : Integer; +begin + If FUpdating then exit; + FUpdating := True; + Try + i := StrToIntDef(ebHashRateBackBlocks.Text,-1); + FBlockChainGrid.HashRateAverageBlocksCount:=i; + TSettings.HashRateAvgBlocksCount := FBlockChainGrid.HashRateAverageBlocksCount; + Finally + ebHashRateBackBlocks.Text := IntToStr(FBlockChainGrid.HashRateAverageBlocksCount); + FUpdating := false; + End; +end; + +procedure TFrameBlockChainExplorer.cbHashRateUnitsClick(Sender: TObject); +begin + If FUpdating then Exit; + FUpdating := True; + Try + case cbHashRateUnits.ItemIndex of + 0 : FBlockChainGrid.HashRateAs := hr_Unit; + 1 : FBlockChainGrid.HashRateAs := hr_Kilo; + 2 : FBlockChainGrid.HashRateAs := hr_Mega; + 3 : FBlockChainGrid.HashRateAs := hr_Giga; + 4 : FBlockChainGrid.HashRateAs := hr_Tera; + 5 : FBlockChainGrid.HashRateAs := hr_Peta; + 6 : FBlockChainGrid.HashRateAs := hr_Exa; + else FBlockChainGrid.HashRateAs := hr_Mega; + end; + TSettings.ShowHashRateAs := FBlockChainGrid.HashRateAs; + Finally + FUpdating := false; + End; +end; + + end. diff --git a/src/gui-classic/Frames/UFrameMessages.dfm b/src/gui-classic/Frames/UFrameMessages.dfm index cfdda37f4..683d396b9 100644 --- a/src/gui-classic/Frames/UFrameMessages.dfm +++ b/src/gui-classic/Frames/UFrameMessages.dfm @@ -68,6 +68,7 @@ object FrameMessages: TFrameMessages Height = 25 Caption = 'Send a Message' TabOrder = 1 + OnClick = bbSendAMessageClick end object memoMessages: TMemo Left = -4 diff --git a/src/gui-classic/Frames/UFrameMessages.pas b/src/gui-classic/Frames/UFrameMessages.pas index 4ed4abeed..e6c182ac1 100644 --- a/src/gui-classic/Frames/UFrameMessages.pas +++ b/src/gui-classic/Frames/UFrameMessages.pas @@ -16,6 +16,7 @@ TFrameMessages = class(TFrame) bbSendAMessage: TButton; memoMessages: TMemo; memoMessageToSend: TMemo; + procedure bbSendAMessageClick(Sender: TObject); private { Private declarations } public @@ -26,4 +27,53 @@ implementation {$R *.dfm} +procedure TFRMWallet.bbSendAMessageClick(Sender: TObject); +Var basem,m : String; + them, errors : String; + i,n : Integer; + nc : TNetConnection; +begin + CheckIsReady; + if (lbNetConnections.SelCount<=0) Or (lbNetConnections.ItemIndex<0) then raise Exception.Create('Select at least one connection'); + if lbNetConnections.SelCount<=0 then n := 1 + else n := lbNetConnections.SelCount; + + basem := memoMessageToSend.Lines.Text; + m := ''; + // Clear non valid characters: + for i := Low(basem) to High(basem) do begin + if basem[i] in [#32..#127] then m := m + basem[i] + else m:=m+'.'; + end; + + if trim(m)='' then raise Exception.Create('No message'); + + if Application.MessageBox(PChaR('Send this message to '+inttostr(n)+' nodes?'+#10+ + 'NOTE: Sending unauthorized messages will be considered spam and you will be banned'+#10+ + #10+ + 'Message: '+#10+ + m),PChar(Application.Title),MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON1)<>IdYes then exit; + them := m; + if n>1 then begin + for i := 0 to lbNetConnections.Items.Count - 1 do begin + if lbNetConnections.Selected[i] then begin + nc := TNetConnection(lbNetconnections.Items.Objects[i]); + if TNetData.NetData.ConnectionExistsAndActive(nc) then begin + FNode.SendNodeMessage(nc,m,errors); + memoMessages.Lines.Add(DateTimeToStr(now)+' Sent to '+nc.ClientRemoteAddr+' > '+m); + end; + end; + end; + end else begin + nc := TNetConnection(lbNetconnections.Items.Objects[lbNetconnections.ItemIndex]); + if TNetData.NetData.ConnectionExistsAndActive(nc) then begin + FNode.SendNodeMessage(nc,m,errors); + memoMessages.Lines.Add(DateTimeToStr(now)+' Sent to '+nc.ClientRemoteAddr+' > '+m); + end; + end; + + Application.MessageBox(PChaR('Message sent to '+inttostr(n)+' nodes'+#10+ + 'Message: '+#10+m),PChar(Application.Title),MB_ICONINFORMATION+MB_OK); +end; + end. diff --git a/src/gui-classic/Frames/UFrameOperationsExplorer.dfm b/src/gui-classic/Frames/UFrameOperationsExplorer.dfm index 0171865af..0307688be 100644 --- a/src/gui-classic/Frames/UFrameOperationsExplorer.dfm +++ b/src/gui-classic/Frames/UFrameOperationsExplorer.dfm @@ -12,8 +12,6 @@ object FrameOperationsExplorer: TFrameOperationsExplorer Align = alTop BevelOuter = bvNone TabOrder = 0 - ExplicitLeft = -537 - ExplicitWidth = 857 object Label2: TLabel Left = 11 Top = 10 @@ -45,9 +43,5 @@ object FrameOperationsExplorer: TFrameOperationsExplorer Height = 400 Align = alClient TabOrder = 1 - ExplicitLeft = -537 - ExplicitTop = -157 - ExplicitWidth = 857 - ExplicitHeight = 397 end end diff --git a/src/gui-classic/Frames/UFrameOperationsExplorer.pas b/src/gui-classic/Frames/UFrameOperationsExplorer.pas index 6a13edb01..afc445ab5 100644 --- a/src/gui-classic/Frames/UFrameOperationsExplorer.pas +++ b/src/gui-classic/Frames/UFrameOperationsExplorer.pas @@ -24,4 +24,38 @@ implementation {$R *.dfm} +procedure TFrameOperationsExplorer.ebFilterAccountByBalanceMinExit(Sender: TObject); +begin + DoUpdateAccountsFilter; +end; + +procedure TFrameOperationsExplorer.ebFilterAccountByBalanceMinKeyPress(Sender: TObject; + var Key: Char); +begin + if key=#13 then DoUpdateAccountsFilter; +end; + +procedure TFrameOperationsExplorer.ebFilterOperationsAccountExit(Sender: TObject); +Var bstart,bend : Int64; +begin + If FUpdating then exit; + FUpdating := True; + Try + bstart := StrToInt64Def(ebFilterOperationsStartBlock.Text,-1); + if bstart>=0 then ebFilterOperationsStartBlock.Text := Inttostr(bstart) else ebFilterOperationsStartBlock.Text := ''; + bend := StrToInt64Def(ebFilterOperationsEndBlock.Text,-1); + if bend>=0 then ebFilterOperationsEndBlock.Text := Inttostr(bend) else ebFilterOperationsEndBlock.Text := ''; + FOperationsExplorerGrid.SetBlocks(bstart,bend); + Finally + FUpdating := false; + End; +end; + +procedure TFrameOperationsExplorer.ebFilterOperationsAccountKeyPress(Sender: TObject; + var Key: Char); +begin + if key=#13 then ebFilterOperationsAccountExit(Nil); +end; + + end. diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index fba937d35..7574efd9e 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -105,6 +105,7 @@ TFRMWallet = class(TForm) MiFindOperationbyOpHash: TMenuItem; MiAccountInformation: TMenuItem; MiOperationsExplorer: TMenuItem; + procedure cbHashRateUnitsClick(Sender: TObject); procedure ebHashRateBackBlocksExit(Sender: TObject); procedure ebHashRateBackBlocksKeyPress(Sender: TObject; var Key: char); @@ -158,6 +159,7 @@ TFRMWallet = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Test_ShowDiagnosticTool(Sender: TObject); procedure miAskForAccountClick(Sender: TObject); + private FLastNodesCacheUpdatedTS : TDateTime; FBackgroundPanel : TPanel; @@ -345,6 +347,12 @@ procedure TThreadActivate.BCExecute; { TFRMWallet } +procedure TFRMWallet.lblReceivedMessagesClick(Sender: TObject); +begin + PageControl.ActivePage := tsMessages; +end; + + procedure TFRMWallet.Activate; Var ips : AnsiString; nsarr : TNodeServerAddressArray; @@ -404,565 +412,15 @@ procedure TFRMWallet.Activate; E.Message := 'An error occurred during initialization. Application cannot continue:'+#10+#10+E.Message+#10+#10+'Application will close...'; Application.MessageBox(PChar(E.Message),PChar(Application.Title),MB_ICONERROR+MB_OK); Halt; - end; - end; - UpdatePrivateKeys; - UpdateAccounts(false); - if TSettings.FirstTime then begin - TSettings.FirstTime := false; - miAboutPascalCoinClick(Nil); - end; - PageControlChange(Nil); -end; - -procedure TFRMWallet.bbAccountsRefreshClick(Sender: TObject); -begin - UpdateAccounts(true); -end; - -procedure TFRMWallet.bbChangeKeyNameClick(Sender: TObject); -var i : Integer; - name : String; -begin - if (cbMyPrivateKeys.ItemIndex<0) then exit; - i := PtrInt(cbMyPrivateKeys.Items.Objects[cbMyPrivateKeys.ItemIndex]); - if (i<0) Or (i>=FWalletKeys.Count) then raise Exception.Create('Must select a Key'); - name := FWalletKeys.Key[i].Name; - if InputQuery('Change Key name','Input new name',name) then begin - FWalletKeys.SetName(i,name); - end; - UpdatePrivateKeys; -end; - -procedure TFRMWallet.bbSelectedAccountsOperationClick(Sender: TObject); -var l : TOrderedCardinalList; -begin - CheckIsReady; - if FSelectedAccountsGrid.AccountsCount<=0 then raise Exception.Create('Must select at least 1 account'); - With TFRMOperation.Create(Self) do - Try - l := FSelectedAccountsGrid.LockAccountsList; - try - SenderAccounts.CopyFrom(l); - finally - FSelectedAccountsGrid.UnlockAccountsList; - end; - DefaultFee := TSettings.DefaultFee; - WalletKeys := FWalletKeys; - ShowModal; - Finally - Free; - End; -end; - -procedure TFRMWallet.bbSendAMessageClick(Sender: TObject); -Var basem,m : String; - them, errors : String; - i,n : Integer; - nc : TNetConnection; -begin - CheckIsReady; - if (lbNetConnections.SelCount<=0) Or (lbNetConnections.ItemIndex<0) then raise Exception.Create('Select at least one connection'); - if lbNetConnections.SelCount<=0 then n := 1 - else n := lbNetConnections.SelCount; - - basem := memoMessageToSend.Lines.Text; - m := ''; - // Clear non valid characters: - for i := Low(basem) to High(basem) do begin - if basem[i] in [#32..#127] then m := m + basem[i] - else m:=m+'.'; - end; - - if trim(m)='' then raise Exception.Create('No message'); - - if Application.MessageBox(PChaR('Send this message to '+inttostr(n)+' nodes?'+#10+ - 'NOTE: Sending unauthorized messages will be considered spam and you will be banned'+#10+ - #10+ - 'Message: '+#10+ - m),PChar(Application.Title),MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON1)<>IdYes then exit; - them := m; - if n>1 then begin - for i := 0 to lbNetConnections.Items.Count - 1 do begin - if lbNetConnections.Selected[i] then begin - nc := TNetConnection(lbNetconnections.Items.Objects[i]); - if TNetData.NetData.ConnectionExistsAndActive(nc) then begin - FNode.SendNodeMessage(nc,m,errors); - memoMessages.Lines.Add(DateTimeToStr(now)+' Sent to '+nc.ClientRemoteAddr+' > '+m); - end; - end; - end; - end else begin - nc := TNetConnection(lbNetconnections.Items.Objects[lbNetconnections.ItemIndex]); - if TNetData.NetData.ConnectionExistsAndActive(nc) then begin - FNode.SendNodeMessage(nc,m,errors); - memoMessages.Lines.Add(DateTimeToStr(now)+' Sent to '+nc.ClientRemoteAddr+' > '+m); - end; - end; - - Application.MessageBox(PChaR('Message sent to '+inttostr(n)+' nodes'+#10+ - 'Message: '+#10+m),PChar(Application.Title),MB_ICONINFORMATION+MB_OK); -end; - -procedure TFRMWallet.cbExploreMyAccountsClick(Sender: TObject); -begin - cbMyPrivateKeys.Enabled := cbExploreMyAccounts.Checked; - UpdateAccounts(true); - UpdateOperations; -end; - -procedure TFRMWallet.cbFilterAccountsClick(Sender: TObject); -begin - If not DoUpdateAccountsFilter then UpdateAccounts(true); -end; - -procedure TFRMWallet.cbMyPrivateKeysChange(Sender: TObject); -begin - UpdateAccounts(true); -end; - -procedure TFRMWallet.CheckIsReady; -Var isready : String; -begin - if Not Assigned(FNode) then Abort; - - if Not FNode.IsReady(isready) then begin - Raise Exception.Create('You cannot do this operation now:'+#10+#10+isready); - end; -end; - -procedure TFRMWallet.CM_NetConnectionUpdated(var Msg: TMessage); -Const CT_BooleanToString : Array[Boolean] of String = ('False','True'); -Var i : integer; - NC : TNetConnection; - l : TList; - sClientApp, sLastConnTime : String; - strings, sNSC, sRS, sDisc : TStrings; - hh,nn,ss,ms : Word; -begin - Try - if Not TNetData.NetData.NetConnections.TryLockList(100,l) then exit; - try - strings := memoNetConnections.Lines; - sNSC := TStringList.Create; - sRS := TStringList.Create; - sDisc := TStringList.Create; - strings.BeginUpdate; - Try - for i := 0 to l.Count - 1 do begin - NC := l[i]; - If NC.Client.BytesReceived>0 then begin - sClientApp := '['+IntToStr(NC.NetProtocolVersion.protocol_version)+'-'+IntToStr(NC.NetProtocolVersion.protocol_available)+'] '+NC.ClientAppVersion; - end else begin - sClientApp := '(no data)'; - end; - - if NC.Connected then begin - if NC.Client.LastCommunicationTime>1000 then begin - DecodeTime(now - NC.Client.LastCommunicationTime,hh,nn,ss,ms); - if (hh=0) and (nn=0) And (ss<10) then begin - sLastConnTime := ' - Last comunication <10 sec.'; - end else begin - sLastConnTime := Format(' - Last comunication %.2dm%.2ds',[(hh*60)+nn,ss]); - end; - end else begin - sLastConnTime := ''; - end; - if NC is TNetServerClient then begin - sNSC.Add(Format('Client: IP:%s Block:%d Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', - [NC.ClientRemoteAddr,NC.RemoteOperationBlock.block,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])); - end else begin - if NC.IsMyselfServer then sNSC.Add(Format('MySelf IP:%s Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', - [NC.ClientRemoteAddr,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])) - else begin - sRS.Add(Format('Remote Server: IP:%s Block:%d Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', - [NC.ClientRemoteAddr,NC.RemoteOperationBlock.block,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])); - end; - end; - end else begin - if NC is TNetServerClient then begin - sDisc.Add(Format('Disconnected client: IP:%s - %s',[NC.ClientRemoteAddr,sClientApp])); - end else if NC.IsMyselfServer then begin - sDisc.Add(Format('Disconnected MySelf IP:%s - %s',[NC.ClientRemoteAddr,sClientApp])); - end else begin - sDisc.Add(Format('Disconnected Remote Server: IP:%s %s - %s',[NC.ClientRemoteAddr,CT_BooleanToString[NC.Connected],sClientApp])); - end; - end; - end; - strings.Clear; - strings.Add(Format('Connections Updated %s Clients:%d Servers:%d (valid servers:%d)',[DateTimeToStr(now),sNSC.Count,sRS.Count,TNetData.NetData.NetStatistics.ServersConnectionsWithResponse])); - strings.AddStrings(sRS); - strings.AddStrings(sNSC); - if sDisc.Count>0 then begin - strings.Add(''); - strings.Add('Disconnected connections: '+Inttostr(sDisc.Count)); - strings.AddStrings(sDisc); - end; - Finally - strings.EndUpdate; - sNSC.Free; - sRS.Free; - sDisc.Free; - End; - //CheckMining; - finally - TNetData.NetData.NetConnections.UnlockList; - end; - Finally - FMustProcessNetConnectionUpdated := false; - End; -end; - -procedure TFRMWallet.CM_WalletChanged(var Msg: TMessage); -begin - UpdatePrivateKeys; - FMustProcessWalletChanged := false; -end; - -procedure TFRMWallet.dgAccountsClick(Sender: TObject); -begin - UpdateOperations; -end; - -procedure TFRMWallet.dgAccountsColumnMoved(Sender: TObject; FromIndex, ToIndex: Integer); -begin - TSettings.Save; -end; - -procedure TFRMWallet.dgAccountsFixedCellClick(Sender: TObject; ACol, - ARow: Integer); -begin - TSettings.Save; -end; - -procedure TFRMWallet.DoUpdateAccounts; -begin - UpdateAccounts(true); -end; - -function TFRMWallet.DoUpdateAccountsFilter: Boolean; -Var m,bmin,bmax:Int64; - doupd : Boolean; -begin - if FUpdating then exit; - FUpdating := true; - Try - If Not TAccountComp.TxtToMoney(ebFilterAccountByBalanceMin.Text,bmin) then bmin := 0; - If not TAccountComp.TxtToMoney(ebFilterAccountByBalanceMax.Text,bmax) then bmax := CT_MaxWalletAmount; - if (bmaxbmax then bmin := 0; - doupd := (bmin<>FMinAccountBalance) Or (bmax<>FMaxAccountBalance); - if bmin>0 then - ebFilterAccountByBalanceMin.Text:=TAccountComp.FormatMoney(bmin) - else ebFilterAccountByBalanceMin.Text := ''; - if bmax=0 then ebBlockChainBlockStart.Text := Inttostr(FBlockChainGrid.BlockStart) else ebBlockChainBlockStart.Text := ''; - if FBlockChainGrid.BlockEnd>=0 then ebBlockChainBlockEnd.Text := Inttostr(FBlockChainGrid.BlockEnd) else ebBlockChainBlockEnd.Text := ''; - Finally - FUpdating := false; - End; -end; - -procedure TFRMWallet.ebBlockChainBlockStartKeyPress(Sender: TObject; - var Key: Char); -begin - if key=#13 then ebBlockChainBlockStartExit(Nil); -end; - -procedure TFRMWallet.ebFilterAccountByBalanceMinExit(Sender: TObject); -begin - DoUpdateAccountsFilter; -end; - -procedure TFRMWallet.ebFilterAccountByBalanceMinKeyPress(Sender: TObject; - var Key: Char); -begin - if key=#13 then DoUpdateAccountsFilter; -end; - -procedure TFRMWallet.ebFilterOperationsAccountExit(Sender: TObject); -Var bstart,bend : Int64; -begin - If FUpdating then exit; - FUpdating := True; - Try - bstart := StrToInt64Def(ebFilterOperationsStartBlock.Text,-1); - if bstart>=0 then ebFilterOperationsStartBlock.Text := Inttostr(bstart) else ebFilterOperationsStartBlock.Text := ''; - bend := StrToInt64Def(ebFilterOperationsEndBlock.Text,-1); - if bend>=0 then ebFilterOperationsEndBlock.Text := Inttostr(bend) else ebFilterOperationsEndBlock.Text := ''; - FOperationsExplorerGrid.SetBlocks(bstart,bend); - Finally - FUpdating := false; - End; -end; - -procedure TFRMWallet.ebFilterOperationsAccountKeyPress(Sender: TObject; - var Key: Char); -begin - if key=#13 then ebFilterOperationsAccountExit(Nil); -end; - -procedure TFRMWallet.ebFindAccountNumberChange(Sender: TObject); -Var an : Cardinal; - LAccountNameRawValue : TRawBytes; - LErrors : String; - LAccNames : TOrderedRawList; -begin - if Trim(ebFindAccountNumber.Text)='' then begin - ebFindAccountNumber.Color := clWindow; - ebFindAccountNumber.Font.Color := clDkGray; - end else if TAccountComp.AccountTxtNumberToAccountNumber(ebFindAccountNumber.Text,an) then begin - ebFindAccountNumber.Color := clWindow; - if FAccountsGrid.MoveRowToAccount(an) then begin - ebFindAccountNumber.Font.Color := clWindowText; - end else begin - ebFindAccountNumber.Font.Color := clRed; - end; - end else begin - LAccountNameRawValue.FromString(ebFindAccountNumber.Text); - LAccNames := TOrderedRawList.Create; - Try - if FNode.Bank.SafeBox.FindAccountsStartingByName(LAccountNameRawValue,LAccNames,1)>0 then begin - an := LAccNames.GetTag(0); - ebFindAccountNumber.Color := clWindow; - if FAccountsGrid.MoveRowToAccount(an) then begin - ebFindAccountNumber.Font.Color := clWindowText; - end else begin - ebFindAccountNumber.Font.Color := clRed; - end; - end else begin - // Invalid value - ebFindAccountNumber.Color := clRed; - ebFindAccountNumber.Font.Color := clWindowText; - end; - Finally - LAccNames.Free; - End; - end; -end; - -procedure TFRMWallet.ebFindAccountNumberExit(Sender: TObject); -begin - ebFindAccountNumber.Text := ''; -end; - -procedure TFRMWallet.FinishedLoadingApp; -var LLockedMempool : TPCOperationsComp; - LFoundAccounts, i, LOnSafebox,LOnMempool : Integer; - Lpubkeys : TList; -begin - FNodeNotifyEvents.Node := FNode; - // Init - TNetData.NetData.OnReceivedHelloMessage := OnReceivedHelloMessage; - TNetData.NetData.OnStatisticsChanged := OnNetStatisticsChanged; - TNetData.NetData.OnNetConnectionsUpdated := onNetConnectionsUpdated; - TNetData.NetData.OnNodeServersUpdated := OnNetNodeServersUpdated; - TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; - // - TimerUpdateStatus.Interval := 1000; - TimerUpdateStatus.Enabled := true; - // - FPoolMiningServer := TPoolMiningServer.Create; - FPoolMiningServer.Port := TSettings.JsonRpcMinerServerPort; - FPoolMiningServer.MinerAccountKey := GetAccountKeyForMiner; - FPoolMiningServer.MinerPayload := TEncoding.ANSI.GetBytes(TSettings.MinerName); - LLockedMempool := FNode.LockMempoolWrite; - try - LLockedMempool.AccountKey := GetAccountKeyForMiner; - finally - FNode.UnlockMempoolWrite; - end; - FPoolMiningServer.Active := TSettings.JsonRpcMinerServerActive; - FPoolMiningServer.OnMiningServerNewBlockFound := OnMiningServerNewBlockFound; - FreeAndNil(FBackgroundLabel); - FreeAndNil(FBackgroundPanel); - - PageControl.Visible:=True; - PageControl.Enabled:=True; - - UpdatePrivateKeys; - // - LFoundAccounts := 0; - FNode.Bank.SafeBox.StartThreadSafe; - try - Lpubkeys := TList.Create; - Try - for i := 0 to FWalletKeys.Count-1 do begin - if (FWalletKeys.Key[i].HasPrivateKey) then begin - Lpubkeys.Add(FWalletKeys.Key[i].AccountKey); - end; - end; - if (Lpubkeys.Count>0) then begin - LFoundAccounts := FNode.GetAccountsAvailableByPublicKey(Lpubkeys,LOnSafebox,LOnMempool); - end else LFoundAccounts := 0; - Finally - Lpubkeys.Free; - End; - finally - FNode.Bank.SafeBox.EndThreadSave; - end; - if LFoundAccounts<1 then begin - // Will only ask if no accounts - TFRMAskForAccount.AskForAccount(Self,FNode,TNetData.NetData,FWalletKeys,GetAccountKeyForMiner); - end; -end; - -procedure TFRMWallet.FillAccountInformation(const Strings: TStrings; - const AccountNumber: Cardinal); -Var account : TAccount; - s : String; - LjsonObj : TPCJSONObject; -begin - if AccountNumber<0 then exit; - account := FNode.GetMempoolAccount(AccountNumber); - if Length(account.name)>0 then s:='Name: '+TEncoding.ANSI.GetString(account.name) - else s:=''; - Strings.Add(Format('Account: %s %s Type:%d',[TAccountComp.AccountNumberToAccountTxtNumber(AccountNumber),s,account.account_type])); - Strings.Add(''); - Strings.Add(Format('Current balance: %s',[TAccountComp.FormatMoney(account.balance)])); - Strings.Add(''); - Strings.Add(Format('Updated on block: %d (%d blocks ago)',[account.GetLastUpdatedBlock,FNode.Bank.BlocksCount-account.GetLastUpdatedBlock])); - Strings.Add(Format('Updated on block as active mode: %d (%d blocks ago)',[account.updated_on_block_active_mode,FNode.Bank.BlocksCount-account.updated_on_block_active_mode])); - Strings.Add(Format('Public key type: %s',[TAccountComp.GetECInfoTxt(account.accountInfo.accountKey.EC_OpenSSL_NID)])); - Strings.Add(Format('Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.accountKey)])); - if Length(account.account_data)>0 then - Strings.Add(Format('Account Data: %s',[account.account_data.ToHexaString])) - else Strings.Add(Format('Account Data: (No data)',[])); - Strings.Add(Format('Account Seal: %s',[account.account_seal.ToHexaString])); - if TAccountComp.IsAccountForSale(account.accountInfo) then begin - Strings.Add(''); - Strings.Add('** Account is for sale: **'); - Strings.Add(Format('Price: %s',[TAccountComp.FormatMoney(account.accountInfo.price)])); - Strings.Add(Format('Seller account (where to pay): %s',[TAccountComp.AccountNumberToAccountTxtNumber(account.accountInfo.account_to_pay)])); - if TAccountComp.IsAccountForPrivateSale(account.accountInfo) then begin - Strings.Add(''); - Strings.Add('** Private sale **'); - Strings.Add(Format('New Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.new_publicKey)])); - Strings.Add(''); - if TAccountComp.IsAccountLocked(account.accountInfo,FNode.Bank.BlocksCount) then begin - Strings.Add(Format('PURCHASE IS SECURE UNTIL BLOCK %d (current %d, remains %d)', - [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount,account.accountInfo.locked_until_block-FNode.Bank.BlocksCount])); - end else begin - Strings.Add(Format('PURCHASE IS NOT SECURE (Expired on block %d, current %d)', - [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount])); - end; - end; - end else if TAccountComp.IsAccountForSwap(account.accountInfo) then begin - Strings.Add(''); - if TAccountComp.IsAccountForAccountSwap(account.accountInfo) then begin - Strings.Add('** Account is for Atomic Account Swap: **'); - Strings.Add(Format('New Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.new_publicKey)])); - end else if TAccountComp.IsAccountForCoinSwap(account.accountInfo) then begin - Strings.Add('** Account is for Atomic Coin Swap: **'); - Strings.Add(Format('Amount to swap: %s',[TAccountComp.FormatMoney(account.accountInfo.price)])); - Strings.Add(Format('Counterparty account: %s',[TAccountComp.AccountNumberToAccountTxtNumber(account.accountInfo.account_to_pay)])); - end; - Strings.Add(Format('Public secret to find: %s',[account.accountInfo.hashed_secret.ToHexaString])); - Strings.Add(''); - if TAccountComp.IsAccountLocked(account.accountInfo,FNode.Bank.BlocksCount) then begin - Strings.Add(Format('SWAP IS SECURE UNTIL BLOCK %d (current %d, remains %d)', - [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount,account.accountInfo.locked_until_block-FNode.Bank.BlocksCount])); - end else begin - Strings.Add(Format('SWAP IS NOT SECURE (Expired on block %d, current %d)', - [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount])); - end; - end; - LjsonObj := TPCJSONObject.Create; - Try - TPascalCoinJSONComp.FillAccountObject(account,LjsonObj); - Strings.Add('ACCOUNT JSON:'); - Strings.Add(LjsonObj.ToJSON(False)); - Finally - LjsonObj.Free; - end; - -end; - -procedure TFRMWallet.FillOperationInformation(const Strings: TStrings; - const OperationResume: TOperationResume); -var i : Integer; - jsonObj : TPCJSONObject; - LEPASA : TEPasa; -begin - If (not OperationResume.valid) then exit; - If OperationResume.Block=0) then begin - Strings.Add(Format('Block: %d/%d',[OperationResume.Block,OperationResume.NOpInsideBlock])) - end else begin - Strings.Add(Format('Block: %d',[OperationResume.Block])) - end - else Strings.Add('** Pending operation not included on blockchain **'); - Strings.Add(Format('%s',[OperationResume.OperationTxt])); - If (OperationResume.isMultiOperation) then begin - Strings.Add('Multioperation:'); - For i := 0 to High(OperationResume.Senders) do begin - Strings.Add(Format(' Sender (%d/%d): %s %s PASC Payload(%d):%s',[i+1,length(OperationResume.Senders),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Senders[i].Account),TAccountComp.FormatMoney(OperationResume.Senders[i].Amount),OperationResume.Senders[i].Payload.payload_type,OperationResume.Senders[i].Payload.payload_raw.ToHexaString])); - end; - For i := 0 to High(OperationResume.Receivers) do begin - Strings.Add(Format(' Receiver (%d/%d): %s %s PASC Payload(%d):%s',[i+1,length(OperationResume.Receivers),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Receivers[i].Account),TAccountComp.FormatMoney(OperationResume.Receivers[i].Amount),OperationResume.Receivers[i].Payload.payload_type,OperationResume.Receivers[i].Payload.payload_raw.ToHexaString])); - end; - For i := 0 to High(OperationResume.Changers) do begin - Strings.Add(Format(' Change info (%d/%d): %s [%s]',[i+1,length(OperationResume.Changers),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Changers[i].Account),TOpMultiOperation.OpChangeAccountInfoTypesToText(OperationResume.Changers[i].Changes_type)])); - end; - - end; - Strings.Add(Format('OpType:%d Subtype:%d',[OperationResume.OpType,OperationResume.OpSubtype])); - Strings.Add(Format('Operation Hash (ophash): %s',[TCrypto.ToHexaString(OperationResume.OperationHash)])); - If (Length(OperationResume.OperationHash_OLD)>0) then begin - Strings.Add(Format('Old Operation Hash (old_ophash): %s',[TCrypto.ToHexaString(OperationResume.OperationHash_OLD)])); - end; - if TEPasaDecoder.TryDecodeEPASA(OperationResume.DestAccount,OperationResume.OriginalPayload,FNode,FWalletKeys,Nil,LEPASA) then begin - Strings.Add('EPASA: '+LEPASA.ToString); - end else Strings.Add('No EPASA format'); - Strings.Add(Format('Payload type:%s length:%d',['0x'+IntToHex(OperationResume.OriginalPayload.payload_type,2), length(OperationResume.OriginalPayload.payload_raw)])); - if (Length(OperationResume.OriginalPayload.payload_raw)>0) then begin - If OperationResume.PrintablePayload<>'' then begin - Strings.Add(Format('Payload (human): %s',[OperationResume.PrintablePayload])); - end; - Strings.Add(Format('Payload (Hexadecimal): %s',[TCrypto.ToHexaString(OperationResume.OriginalPayload.payload_raw)])); - end; - If OperationResume.Balance>=0 then begin - Strings.Add(Format('Final balance: %s',[TAccountComp.FormatMoney(OperationResume.Balance)])); - end; - jsonObj := TPCJSONObject.Create; - Try - TPascalCoinJSONComp.FillOperationObject(OperationResume,FNode.Bank.BlocksCount, - FNode,FWalletKeys,Nil, - jsonObj); - Strings.Add('OPERATION JSON:'); - Strings.Add(jsonObj.ToJSON(False)); - Finally - jsonObj.Free; + end; + end; + UpdatePrivateKeys; + UpdateAccounts(false); + if TSettings.FirstTime then begin + TSettings.FirstTime := false; + miAboutPascalCoinClick(Nil); end; + PageControlChange(Nil); end; Procedure TFRMWallet.InitMacOSMenu; @@ -1352,116 +810,412 @@ procedure TFRMWallet.FormCreate(Sender: TObject); PageControl.ActivePageIndex := 0; end; -procedure TFRMWallet.ebHashRateBackBlocksKeyPress(Sender: TObject; var Key: char); +procedure TFRMWallet.FormDestroy(Sender: TObject); +Var i : Integer; + step : String; +begin + TLog.NewLog(ltinfo,Classname,'Destroying form - START'); + Try + if Assigned(FThreadActivate) then begin + TThreadActivate(FThreadActivate).Terminate; + FThreadActivate := Nil; + end; + + FreeAndNil(FRPCServer); + FreeAndNil(FPoolMiningServer); + step := 'Saving params'; + TSettings.Save; + // + step := 'Assigning nil events'; + FLog.OnNewLog :=Nil; + FNodeNotifyEvents.Node := Nil; + FOperationsAccountGrid.Node := Nil; + FOperationsExplorerGrid.Node := Nil; + FPendingOperationsGrid.Node := Nil; + FAccountsGrid.Node := Nil; + FSelectedAccountsGrid.Node := Nil; + TNetData.NetData.OnReceivedHelloMessage := Nil; + TNetData.NetData.OnStatisticsChanged := Nil; + TNetData.NetData.OnNetConnectionsUpdated := Nil; + TNetData.NetData.OnNodeServersUpdated := Nil; + TNetData.NetData.OnBlackListUpdated := Nil; + // + + step := 'Destroying NodeNotifyEvents'; + FreeAndNil(FNodeNotifyEvents); + // + step := 'Assigning Nil to TNetData'; + TNetData.NetData.OnReceivedHelloMessage := Nil; + TNetData.NetData.OnStatisticsChanged := Nil; + + step := 'Destroying grids operators'; + FreeAndNil(FOperationsAccountGrid); + FreeAndNil(FOperationsExplorerGrid); + FreeAndNil(FBlockChainGrid); + + step := 'Desactivating Node'; + TNode.Node.NetServer.Active := false; + FNode := Nil; + + TNetData.NetData.Free; + + step := 'Processing messages 1'; + Application.ProcessMessages; + + step := 'Destroying Node'; + TNode.Node.Free; + + step := 'Destroying Wallet'; + FreeAndNil(FWalletKeys); + step := 'Processing messages 2'; + Application.ProcessMessages; + step := 'Destroying stringslist'; + Except + On E:Exception do begin + TLog.NewLog(lterror,Classname,'Error destroying Form step: '+step+' Errors ('+E.ClassName+'): ' +E.Message); + end; + End; + TLog.NewLog(ltinfo,Classname,'Destroying form - END'); + FreeAndNil(FLog); + Sleep(100); +end; + +procedure TFRMWallet.CheckIsReady; +Var isready : String; +begin + if Not Assigned(FNode) then Abort; + + if Not FNode.IsReady(isready) then begin + Raise Exception.Create('You cannot do this operation now:'+#10+#10+isready); + end; +end; + +procedure TFRMWallet.CM_NetConnectionUpdated(var Msg: TMessage); +Const CT_BooleanToString : Array[Boolean] of String = ('False','True'); +Var i : integer; + NC : TNetConnection; + l : TList; + sClientApp, sLastConnTime : String; + strings, sNSC, sRS, sDisc : TStrings; + hh,nn,ss,ms : Word; +begin + Try + if Not TNetData.NetData.NetConnections.TryLockList(100,l) then exit; + try + strings := memoNetConnections.Lines; + sNSC := TStringList.Create; + sRS := TStringList.Create; + sDisc := TStringList.Create; + strings.BeginUpdate; + Try + for i := 0 to l.Count - 1 do begin + NC := l[i]; + If NC.Client.BytesReceived>0 then begin + sClientApp := '['+IntToStr(NC.NetProtocolVersion.protocol_version)+'-'+IntToStr(NC.NetProtocolVersion.protocol_available)+'] '+NC.ClientAppVersion; + end else begin + sClientApp := '(no data)'; + end; + + if NC.Connected then begin + if NC.Client.LastCommunicationTime>1000 then begin + DecodeTime(now - NC.Client.LastCommunicationTime,hh,nn,ss,ms); + if (hh=0) and (nn=0) And (ss<10) then begin + sLastConnTime := ' - Last comunication <10 sec.'; + end else begin + sLastConnTime := Format(' - Last comunication %.2dm%.2ds',[(hh*60)+nn,ss]); + end; + end else begin + sLastConnTime := ''; + end; + if NC is TNetServerClient then begin + sNSC.Add(Format('Client: IP:%s Block:%d Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', + [NC.ClientRemoteAddr,NC.RemoteOperationBlock.block,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])); + end else begin + if NC.IsMyselfServer then sNSC.Add(Format('MySelf IP:%s Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', + [NC.ClientRemoteAddr,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])) + else begin + sRS.Add(Format('Remote Server: IP:%s Block:%d Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', + [NC.ClientRemoteAddr,NC.RemoteOperationBlock.block,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])); + end; + end; + end else begin + if NC is TNetServerClient then begin + sDisc.Add(Format('Disconnected client: IP:%s - %s',[NC.ClientRemoteAddr,sClientApp])); + end else if NC.IsMyselfServer then begin + sDisc.Add(Format('Disconnected MySelf IP:%s - %s',[NC.ClientRemoteAddr,sClientApp])); + end else begin + sDisc.Add(Format('Disconnected Remote Server: IP:%s %s - %s',[NC.ClientRemoteAddr,CT_BooleanToString[NC.Connected],sClientApp])); + end; + end; + end; + strings.Clear; + strings.Add(Format('Connections Updated %s Clients:%d Servers:%d (valid servers:%d)',[DateTimeToStr(now),sNSC.Count,sRS.Count,TNetData.NetData.NetStatistics.ServersConnectionsWithResponse])); + strings.AddStrings(sRS); + strings.AddStrings(sNSC); + if sDisc.Count>0 then begin + strings.Add(''); + strings.Add('Disconnected connections: '+Inttostr(sDisc.Count)); + strings.AddStrings(sDisc); + end; + Finally + strings.EndUpdate; + sNSC.Free; + sRS.Free; + sDisc.Free; + End; + //CheckMining; + finally + TNetData.NetData.NetConnections.UnlockList; + end; + Finally + FMustProcessNetConnectionUpdated := false; + End; +end; + +procedure TFRMWallet.CM_WalletChanged(var Msg: TMessage); +begin + UpdatePrivateKeys; + FMustProcessWalletChanged := false; +end; + + +procedure TFRMWallet.DoUpdateAccounts; +begin + UpdateAccounts(true); +end; + +function TFRMWallet.DoUpdateAccountsFilter: Boolean; +Var m,bmin,bmax:Int64; + doupd : Boolean; +begin + if FUpdating then exit; + FUpdating := true; + Try + If Not TAccountComp.TxtToMoney(ebFilterAccountByBalanceMin.Text,bmin) then bmin := 0; + If not TAccountComp.TxtToMoney(ebFilterAccountByBalanceMax.Text,bmax) then bmax := CT_MaxWalletAmount; + if (bmaxbmax then bmin := 0; + doupd := (bmin<>FMinAccountBalance) Or (bmax<>FMaxAccountBalance); + if bmin>0 then + ebFilterAccountByBalanceMin.Text:=TAccountComp.FormatMoney(bmin) + else ebFilterAccountByBalanceMin.Text := ''; + if bmax; begin - if Key=#13 then ebHashRateBackBlocksExit(Nil); + FNodeNotifyEvents.Node := FNode; + // Init + TNetData.NetData.OnReceivedHelloMessage := OnReceivedHelloMessage; + TNetData.NetData.OnStatisticsChanged := OnNetStatisticsChanged; + TNetData.NetData.OnNetConnectionsUpdated := onNetConnectionsUpdated; + TNetData.NetData.OnNodeServersUpdated := OnNetNodeServersUpdated; + TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; + // + TimerUpdateStatus.Interval := 1000; + TimerUpdateStatus.Enabled := true; + // + FPoolMiningServer := TPoolMiningServer.Create; + FPoolMiningServer.Port := TSettings.JsonRpcMinerServerPort; + FPoolMiningServer.MinerAccountKey := GetAccountKeyForMiner; + FPoolMiningServer.MinerPayload := TEncoding.ANSI.GetBytes(TSettings.MinerName); + LLockedMempool := FNode.LockMempoolWrite; + try + LLockedMempool.AccountKey := GetAccountKeyForMiner; + finally + FNode.UnlockMempoolWrite; + end; + FPoolMiningServer.Active := TSettings.JsonRpcMinerServerActive; + FPoolMiningServer.OnMiningServerNewBlockFound := OnMiningServerNewBlockFound; + FreeAndNil(FBackgroundLabel); + FreeAndNil(FBackgroundPanel); + + PageControl.Visible:=True; + PageControl.Enabled:=True; + + UpdatePrivateKeys; + // + LFoundAccounts := 0; + FNode.Bank.SafeBox.StartThreadSafe; + try + Lpubkeys := TList.Create; + Try + for i := 0 to FWalletKeys.Count-1 do begin + if (FWalletKeys.Key[i].HasPrivateKey) then begin + Lpubkeys.Add(FWalletKeys.Key[i].AccountKey); + end; + end; + if (Lpubkeys.Count>0) then begin + LFoundAccounts := FNode.GetAccountsAvailableByPublicKey(Lpubkeys,LOnSafebox,LOnMempool); + end else LFoundAccounts := 0; + Finally + Lpubkeys.Free; + End; + finally + FNode.Bank.SafeBox.EndThreadSave; + end; + if LFoundAccounts<1 then begin + // Will only ask if no accounts + TFRMAskForAccount.AskForAccount(Self,FNode,TNetData.NetData,FWalletKeys,GetAccountKeyForMiner); + end; end; -procedure TFRMWallet.ebHashRateBackBlocksExit(Sender: TObject); -var i : Integer; +procedure TFRMWallet.FillAccountInformation(const Strings: TStrings; + const AccountNumber: Cardinal); +Var account : TAccount; + s : String; + LjsonObj : TPCJSONObject; begin - If FUpdating then exit; - FUpdating := True; + if AccountNumber<0 then exit; + account := FNode.GetMempoolAccount(AccountNumber); + if Length(account.name)>0 then s:='Name: '+TEncoding.ANSI.GetString(account.name) + else s:=''; + Strings.Add(Format('Account: %s %s Type:%d',[TAccountComp.AccountNumberToAccountTxtNumber(AccountNumber),s,account.account_type])); + Strings.Add(''); + Strings.Add(Format('Current balance: %s',[TAccountComp.FormatMoney(account.balance)])); + Strings.Add(''); + Strings.Add(Format('Updated on block: %d (%d blocks ago)',[account.GetLastUpdatedBlock,FNode.Bank.BlocksCount-account.GetLastUpdatedBlock])); + Strings.Add(Format('Updated on block as active mode: %d (%d blocks ago)',[account.updated_on_block_active_mode,FNode.Bank.BlocksCount-account.updated_on_block_active_mode])); + Strings.Add(Format('Public key type: %s',[TAccountComp.GetECInfoTxt(account.accountInfo.accountKey.EC_OpenSSL_NID)])); + Strings.Add(Format('Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.accountKey)])); + if Length(account.account_data)>0 then + Strings.Add(Format('Account Data: %s',[account.account_data.ToHexaString])) + else Strings.Add(Format('Account Data: (No data)',[])); + Strings.Add(Format('Account Seal: %s',[account.account_seal.ToHexaString])); + if TAccountComp.IsAccountForSale(account.accountInfo) then begin + Strings.Add(''); + Strings.Add('** Account is for sale: **'); + Strings.Add(Format('Price: %s',[TAccountComp.FormatMoney(account.accountInfo.price)])); + Strings.Add(Format('Seller account (where to pay): %s',[TAccountComp.AccountNumberToAccountTxtNumber(account.accountInfo.account_to_pay)])); + if TAccountComp.IsAccountForPrivateSale(account.accountInfo) then begin + Strings.Add(''); + Strings.Add('** Private sale **'); + Strings.Add(Format('New Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.new_publicKey)])); + Strings.Add(''); + if TAccountComp.IsAccountLocked(account.accountInfo,FNode.Bank.BlocksCount) then begin + Strings.Add(Format('PURCHASE IS SECURE UNTIL BLOCK %d (current %d, remains %d)', + [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount,account.accountInfo.locked_until_block-FNode.Bank.BlocksCount])); + end else begin + Strings.Add(Format('PURCHASE IS NOT SECURE (Expired on block %d, current %d)', + [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount])); + end; + end; + end else if TAccountComp.IsAccountForSwap(account.accountInfo) then begin + Strings.Add(''); + if TAccountComp.IsAccountForAccountSwap(account.accountInfo) then begin + Strings.Add('** Account is for Atomic Account Swap: **'); + Strings.Add(Format('New Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.new_publicKey)])); + end else if TAccountComp.IsAccountForCoinSwap(account.accountInfo) then begin + Strings.Add('** Account is for Atomic Coin Swap: **'); + Strings.Add(Format('Amount to swap: %s',[TAccountComp.FormatMoney(account.accountInfo.price)])); + Strings.Add(Format('Counterparty account: %s',[TAccountComp.AccountNumberToAccountTxtNumber(account.accountInfo.account_to_pay)])); + end; + Strings.Add(Format('Public secret to find: %s',[account.accountInfo.hashed_secret.ToHexaString])); + Strings.Add(''); + if TAccountComp.IsAccountLocked(account.accountInfo,FNode.Bank.BlocksCount) then begin + Strings.Add(Format('SWAP IS SECURE UNTIL BLOCK %d (current %d, remains %d)', + [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount,account.accountInfo.locked_until_block-FNode.Bank.BlocksCount])); + end else begin + Strings.Add(Format('SWAP IS NOT SECURE (Expired on block %d, current %d)', + [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount])); + end; + end; + LjsonObj := TPCJSONObject.Create; Try - i := StrToIntDef(ebHashRateBackBlocks.Text,-1); - FBlockChainGrid.HashRateAverageBlocksCount:=i; - TSettings.HashRateAvgBlocksCount := FBlockChainGrid.HashRateAverageBlocksCount; + TPascalCoinJSONComp.FillAccountObject(account,LjsonObj); + Strings.Add('ACCOUNT JSON:'); + Strings.Add(LjsonObj.ToJSON(False)); Finally - ebHashRateBackBlocks.Text := IntToStr(FBlockChainGrid.HashRateAverageBlocksCount); - FUpdating := false; - End; -end; + LjsonObj.Free; + end; -procedure TFRMWallet.cbHashRateUnitsClick(Sender: TObject); -begin - If FUpdating then Exit; - FUpdating := True; - Try - case cbHashRateUnits.ItemIndex of - 0 : FBlockChainGrid.HashRateAs := hr_Unit; - 1 : FBlockChainGrid.HashRateAs := hr_Kilo; - 2 : FBlockChainGrid.HashRateAs := hr_Mega; - 3 : FBlockChainGrid.HashRateAs := hr_Giga; - 4 : FBlockChainGrid.HashRateAs := hr_Tera; - 5 : FBlockChainGrid.HashRateAs := hr_Peta; - 6 : FBlockChainGrid.HashRateAs := hr_Exa; - else FBlockChainGrid.HashRateAs := hr_Mega; - end; - TSettings.ShowHashRateAs := FBlockChainGrid.HashRateAs; - Finally - FUpdating := false; - End; end; -procedure TFRMWallet.FormDestroy(Sender: TObject); -Var i : Integer; - step : String; +procedure TFRMWallet.FillOperationInformation(const Strings: TStrings; + const OperationResume: TOperationResume); +var i : Integer; + jsonObj : TPCJSONObject; + LEPASA : TEPasa; begin - TLog.NewLog(ltinfo,Classname,'Destroying form - START'); - Try - if Assigned(FThreadActivate) then begin - TThreadActivate(FThreadActivate).Terminate; - FThreadActivate := Nil; + If (not OperationResume.valid) then exit; + If OperationResume.Block=0) then begin + Strings.Add(Format('Block: %d/%d',[OperationResume.Block,OperationResume.NOpInsideBlock])) + end else begin + Strings.Add(Format('Block: %d',[OperationResume.Block])) + end + else Strings.Add('** Pending operation not included on blockchain **'); + Strings.Add(Format('%s',[OperationResume.OperationTxt])); + If (OperationResume.isMultiOperation) then begin + Strings.Add('Multioperation:'); + For i := 0 to High(OperationResume.Senders) do begin + Strings.Add(Format(' Sender (%d/%d): %s %s PASC Payload(%d):%s',[i+1,length(OperationResume.Senders),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Senders[i].Account),TAccountComp.FormatMoney(OperationResume.Senders[i].Amount),OperationResume.Senders[i].Payload.payload_type,OperationResume.Senders[i].Payload.payload_raw.ToHexaString])); + end; + For i := 0 to High(OperationResume.Receivers) do begin + Strings.Add(Format(' Receiver (%d/%d): %s %s PASC Payload(%d):%s',[i+1,length(OperationResume.Receivers),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Receivers[i].Account),TAccountComp.FormatMoney(OperationResume.Receivers[i].Amount),OperationResume.Receivers[i].Payload.payload_type,OperationResume.Receivers[i].Payload.payload_raw.ToHexaString])); + end; + For i := 0 to High(OperationResume.Changers) do begin + Strings.Add(Format(' Change info (%d/%d): %s [%s]',[i+1,length(OperationResume.Changers),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Changers[i].Account),TOpMultiOperation.OpChangeAccountInfoTypesToText(OperationResume.Changers[i].Changes_type)])); end; - FreeAndNil(FRPCServer); - FreeAndNil(FPoolMiningServer); - step := 'Saving params'; - TSettings.Save; - // - step := 'Assigning nil events'; - FLog.OnNewLog :=Nil; - FNodeNotifyEvents.Node := Nil; - FOperationsAccountGrid.Node := Nil; - FOperationsExplorerGrid.Node := Nil; - FPendingOperationsGrid.Node := Nil; - FAccountsGrid.Node := Nil; - FSelectedAccountsGrid.Node := Nil; - TNetData.NetData.OnReceivedHelloMessage := Nil; - TNetData.NetData.OnStatisticsChanged := Nil; - TNetData.NetData.OnNetConnectionsUpdated := Nil; - TNetData.NetData.OnNodeServersUpdated := Nil; - TNetData.NetData.OnBlackListUpdated := Nil; - // - - step := 'Destroying NodeNotifyEvents'; - FreeAndNil(FNodeNotifyEvents); - // - step := 'Assigning Nil to TNetData'; - TNetData.NetData.OnReceivedHelloMessage := Nil; - TNetData.NetData.OnStatisticsChanged := Nil; - - step := 'Destroying grids operators'; - FreeAndNil(FOperationsAccountGrid); - FreeAndNil(FOperationsExplorerGrid); - FreeAndNil(FBlockChainGrid); - - step := 'Desactivating Node'; - TNode.Node.NetServer.Active := false; - FNode := Nil; + end; + Strings.Add(Format('OpType:%d Subtype:%d',[OperationResume.OpType,OperationResume.OpSubtype])); + Strings.Add(Format('Operation Hash (ophash): %s',[TCrypto.ToHexaString(OperationResume.OperationHash)])); + If (Length(OperationResume.OperationHash_OLD)>0) then begin + Strings.Add(Format('Old Operation Hash (old_ophash): %s',[TCrypto.ToHexaString(OperationResume.OperationHash_OLD)])); + end; + if TEPasaDecoder.TryDecodeEPASA(OperationResume.DestAccount,OperationResume.OriginalPayload,FNode,FWalletKeys,Nil,LEPASA) then begin + Strings.Add('EPASA: '+LEPASA.ToString); + end else Strings.Add('No EPASA format'); + Strings.Add(Format('Payload type:%s length:%d',['0x'+IntToHex(OperationResume.OriginalPayload.payload_type,2), length(OperationResume.OriginalPayload.payload_raw)])); + if (Length(OperationResume.OriginalPayload.payload_raw)>0) then begin + If OperationResume.PrintablePayload<>'' then begin + Strings.Add(Format('Payload (human): %s',[OperationResume.PrintablePayload])); + end; + Strings.Add(Format('Payload (Hexadecimal): %s',[TCrypto.ToHexaString(OperationResume.OriginalPayload.payload_raw)])); + end; + If OperationResume.Balance>=0 then begin + Strings.Add(Format('Final balance: %s',[TAccountComp.FormatMoney(OperationResume.Balance)])); + end; + jsonObj := TPCJSONObject.Create; + Try + TPascalCoinJSONComp.FillOperationObject(OperationResume,FNode.Bank.BlocksCount, + FNode,FWalletKeys,Nil, + jsonObj); + Strings.Add('OPERATION JSON:'); + Strings.Add(jsonObj.ToJSON(False)); + Finally + jsonObj.Free; + end; +end; - TNetData.NetData.Free; - step := 'Processing messages 1'; - Application.ProcessMessages; - step := 'Destroying Node'; - TNode.Node.Free; - step := 'Destroying Wallet'; - FreeAndNil(FWalletKeys); - step := 'Processing messages 2'; - Application.ProcessMessages; - step := 'Destroying stringslist'; - Except - On E:Exception do begin - TLog.NewLog(lterror,Classname,'Error destroying Form step: '+step+' Errors ('+E.ClassName+'): ' +E.Message); - end; - End; - TLog.NewLog(ltinfo,Classname,'Destroying form - END'); - FreeAndNil(FLog); - Sleep(100); -end; procedure TFRMWallet.MiOperationsExplorerClick(Sender: TObject); begin @@ -1487,18 +1241,6 @@ procedure TFRMWallet.MiRPCCallsClick(Sender: TObject); end; end; -procedure TFRMWallet.sbSearchAccountClick(Sender: TObject); -Var F : TFRMAccountSelect; -begin - F := TFRMAccountSelect.Create(Self); - try - F.Node := FNode; - F.WalletKeys := FWalletKeys; - F.ShowModal; - finally - F.Free; - end; -end; function TFRMWallet.GetAccountKeyForMiner: TAccountKey; Var PK : TECPrivateKey; @@ -1560,10 +1302,6 @@ procedure TFRMWallet.IPnodes1Click(Sender: TObject); End; end; -procedure TFRMWallet.lblReceivedMessagesClick(Sender: TObject); -begin - PageControl.ActivePage := tsMessages; -end; procedure TFRMWallet.miAboutPascalCoinClick(Sender: TObject); begin @@ -2248,73 +1986,6 @@ procedure TFRMWallet.PageControlChange(Sender: TObject); end; end; -procedure TFRMWallet.sbSelectedAccountsAddAllClick(Sender: TObject); -Var lsource,ltarget : TOrderedCardinalList; - i : Integer; -begin - lsource := FAccountsGrid.LockAccountsList; - Try - ltarget := FSelectedAccountsGrid.LockAccountsList; - Try - for i := 0 to lsource.Count-1 do begin - if FWalletKeys.IndexOfAccountKey(FNode.Bank.SafeBox.Account(lsource.Get(i)).accountInfo.accountKey)<0 then raise Exception.Create(Format('You cannot operate with account %d because private key not found in your wallet',[lsource.Get(i)])); - ltarget.Add(lsource.Get(i)); - end; - Finally - FSelectedAccountsGrid.UnlockAccountsList; - End; - Finally - FAccountsGrid.UnlockAccountsList; - End; -end; - -procedure TFRMWallet.sbSelectedAccountsAddClick(Sender: TObject); -Var l, selected : TOrderedCardinalList; - an : Int64; - i : Integer; -begin - an := FAccountsGrid.AccountNumber(dgAccounts.Row); - if (an<0) then raise Exception.Create('No account selected'); - if FWalletKeys.IndexOfAccountKey(FNode.Bank.SafeBox.Account(an).accountInfo.accountkey)<0 then - raise Exception.Create(Format('You cannot add %s account because private key not found in your wallet.'#10+#10+'You''re not the owner!', - [TAccountComp.AccountNumberToAccountTxtNumber(an)])); - // Add - l := FSelectedAccountsGrid.LockAccountsList; - selected := TOrderedCardinalList.Create; - Try - FAccountsGrid.SelectedAccounts(selected); - for i := 0 to selected.Count-1 do begin - l.Add(selected.Get(i)); - end; - Finally - selected.Free; - FSelectedAccountsGrid.UnlockAccountsList; - End; -end; - -procedure TFRMWallet.sbSelectedAccountsDelAllClick(Sender: TObject); -Var l : TOrderedCardinalList; -begin - l := FSelectedAccountsGrid.LockAccountsList; - try - l.Clear; - finally - FSelectedAccountsGrid.UnlockAccountsList; - end; -end; - -procedure TFRMWallet.sbSelectedAccountsDelClick(Sender: TObject); -Var an : Int64; - l : TOrderedCardinalList; -begin - l := FSelectedAccountsGrid.LockAccountsList; - try - an := FSelectedAccountsGrid.AccountNumber(dgSelectedAccounts.Row); - if an>=0 then l.Remove(an); - finally - FSelectedAccountsGrid.UnlockAccountsList; - end; -end; procedure TFRMWallet.SetMinersBlocksFound(const Value: Integer); begin @@ -2640,6 +2311,8 @@ procedure TFRMWallet.UpdatePrivateKeys; else if cbMyPrivateKeys.Items.Count>=0 then cbMyPrivateKeys.ItemIndex := 0; end; + + initialization FRMWallet := Nil; end. diff --git a/src/gui-classic/UnitReIntegrate.pas b/src/gui-classic/UnitReIntegrate.pas new file mode 100644 index 000000000..617125dfd --- /dev/null +++ b/src/gui-classic/UnitReIntegrate.pas @@ -0,0 +1,15 @@ +unit UnitReIntegrate; + +interface + + + +implementation + + + + + + + +end. diff --git a/src/pascalcoin_wallet_classic.dpr b/src/pascalcoin_wallet_classic.dpr index a7b3a5a63..5e624e44c 100644 --- a/src/pascalcoin_wallet_classic.dpr +++ b/src/pascalcoin_wallet_classic.dpr @@ -95,7 +95,8 @@ uses UFrameOperationsExplorer in 'gui-classic\Frames\UFrameOperationsExplorer.pas' {FrameOperationsExplorer: TFrame}, UFrameLogs in 'gui-classic\Frames\UFrameLogs.pas' {FrameLogs: TFrame}, UFrameNodeStats in 'gui-classic\Frames\UFrameNodeStats.pas' {FrameNodeStats: TFrame}, - UFrameMessages in 'gui-classic\Frames\UFrameMessages.pas' {FrameMessages: TFrame}; + UFrameMessages in 'gui-classic\Frames\UFrameMessages.pas' {FrameMessages: TFrame}, + UnitReIntegrate in 'gui-classic\UnitReIntegrate.pas'; {$R *.res} diff --git a/src/pascalcoin_wallet_classic.dproj b/src/pascalcoin_wallet_classic.dproj index 76d783a23..86c736dd8 100644 --- a/src/pascalcoin_wallet_classic.dproj +++ b/src/pascalcoin_wallet_classic.dproj @@ -269,6 +269,7 @@ dfm TFrame
+ Cfg_2 Base From 29922d54e7bc769b417f7995de4b6670a9b294d6 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 30 Nov 2021 22:23:48 +0100 Subject: [PATCH 06/44] Frames inserted into graphical user interface. --- .../Frames/UFrameAccountExplorer.pas | 22 +++ .../Frames/UFrameBlockExplorer.pas | 26 +++ src/gui-classic/Frames/UFrameMessages.pas | 18 ++ src/gui-classic/Frames/UFrameNodeStats.pas | 18 ++ src/gui-classic/UFRMWallet.dfm | 164 ++++++++++++++++++ src/gui-classic/UFRMWallet.pas | 39 ++--- 6 files changed, 265 insertions(+), 22 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 9f920fb3f..55dac122f 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -48,16 +48,38 @@ TFrameAccountExplorer = class(TFrame) bbSelectedAccountsOperation: TBitBtn; procedure bbAccountsRefreshClick(Sender: TObject); procedure pnlAccountsInfoClick(Sender: TObject); + + procedure sbSearchAccountClick(Sender: TObject); + private { Private declarations } public { Public declarations } + + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; end; implementation {$R *.dfm} +uses + UFRMWallet; + +constructor TFrameAccountExplorer.Create(AOwner: TComponent); +begin + inherited Create( AOwner ); + + +end; + +destructor TFrameAccountExplorer.Destroy; +begin + + inherited Destroy; +end; + procedure TFrameAccountExplorer.bbAccountsRefreshClick(Sender: TObject); begin UpdateAccounts(true); diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.pas b/src/gui-classic/Frames/UFrameBlockExplorer.pas index a7d349169..2eb79c467 100644 --- a/src/gui-classic/Frames/UFrameBlockExplorer.pas +++ b/src/gui-classic/Frames/UFrameBlockExplorer.pas @@ -18,16 +18,42 @@ TFrameBlockChainExplorer = class(TFrame) ebHashRateBackBlocks: TEdit; cbHashRateUnits: TComboBox; dgBlockChainExplorer: TDrawGrid; + procedure cbHashRateUnitsClick(Sender: TObject); + procedure ebHashRateBackBlocksExit(Sender: TObject); + procedure ebHashRateBackBlocksKeyPress(Sender: TObject; var Key: char); private { Private declarations } public { Public declarations } + + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; end; implementation {$R *.dfm} +constructor TFrameBlockChainExplorer.Create(AOwner: TComponent); +begin + inherited Create( AOwner ); + + cbHashRateUnits.Items.Clear; + cbHashRateUnits.Items.Add('h/s'); + cbHashRateUnits.Items.Add('Kh/s'); + cbHashRateUnits.Items.Add('Mh/s'); + cbHashRateUnits.Items.Add('Gh/s'); + cbHashRateUnits.Items.Add('Th/s'); + cbHashRateUnits.Items.Add('Ph/s'); + cbHashRateUnits.Items.Add('Eh/s'); +end; + +destructor TFrameBlockChainExplorer.Destroy; +begin + + inherited Destroy; +end; + procedure TFrameBlockChainExplorer.ebBlockChainBlockStartExit(Sender: TObject); var bstart,bend : Int64; begin diff --git a/src/gui-classic/Frames/UFrameMessages.pas b/src/gui-classic/Frames/UFrameMessages.pas index e6c182ac1..6f0f50f01 100644 --- a/src/gui-classic/Frames/UFrameMessages.pas +++ b/src/gui-classic/Frames/UFrameMessages.pas @@ -21,12 +21,30 @@ TFrameMessages = class(TFrame) { Private declarations } public { Public declarations } + + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; end; implementation {$R *.dfm} +constructor TFrameMessages.Create(AOwner: TComponent); +begin + inherited Create( AOwner ); + + memoMessages.Lines.Clear; + memoMessageToSend.Lines.Clear; +end; + +destructor TFrameMessages.Destroy; +begin + + + inherited Destroy; +end; + procedure TFRMWallet.bbSendAMessageClick(Sender: TObject); Var basem,m : String; them, errors : String; diff --git a/src/gui-classic/Frames/UFrameNodeStats.pas b/src/gui-classic/Frames/UFrameNodeStats.pas index 9112e2c5e..252a0a9bf 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.pas +++ b/src/gui-classic/Frames/UFrameNodeStats.pas @@ -18,10 +18,28 @@ TFrameNodeStats = class(TFrame) { Private declarations } public { Public declarations } + + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; end; implementation {$R *.dfm} +constructor TFrameNodeStats.Create(AOwner: TComponent); +begin + inherited Create( AOwner ); + + memoNetConnections.Lines.Clear; + memoNetServers.Lines.Clear; + memoNetBlackLists.Lines.Clear; +end; + +destructor TFrameNodeStats.Destroy; +begin + + inherited Destroy; +end; + end. diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index d028b5e04..9fc999cd0 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -383,30 +383,194 @@ object FRMWallet: TFRMWallet OnChange = PageControlChange object tsMyAccounts: TTabSheet Caption = 'Account Explorer' + inline FrameAccountExplorer: TFrameAccountExplorer + Left = 0 + Top = 0 + Width = 857 + Height = 438 + Align = alClient + TabOrder = 0 + ExplicitLeft = 37 + ExplicitTop = -144 + inherited Splitter1: TSplitter + Height = 372 + end + inherited pnlMyAccountsTop: TPanel + Width = 857 + end + inherited pnlAccounts: TPanel + Height = 372 + inherited dgAccounts: TDrawGrid + Height = 338 + end + inherited pnlAccountsInfo: TPanel + Top = 338 + end + end + inherited pcAccountsOptions: TPageControl + Width = 452 + Height = 372 + inherited tsAccountOperations: TTabSheet + ExplicitWidth = 444 + ExplicitHeight = 344 + inherited dgAccountOperations: TDrawGrid + Width = 444 + Height = 344 + end + end + end + end end object tsPendingOperations: TTabSheet Caption = 'Pending Operations' ImageIndex = 5 + inline FramePendingOperations: TFramePendingOperations + Left = 0 + Top = 0 + Width = 857 + Height = 438 + Align = alClient + TabOrder = 0 + ExplicitLeft = 31 + ExplicitTop = -84 + inherited dgPendingOperations: TDrawGrid + Width = 857 + Height = 352 + ExplicitLeft = 0 + ExplicitTop = 86 + ExplicitWidth = 826 + ExplicitHeight = 436 + end + inherited pnlPendingOperations: TPanel + Width = 857 + ExplicitLeft = 0 + ExplicitWidth = 826 + inherited Label10: TLabel + Width = 837 + end + end + end end object tsBlockChain: TTabSheet Caption = 'Block Explorer' ImageIndex = 1 + inline FrameBlockChainExplorer: TFrameBlockChainExplorer + Left = 0 + Top = 0 + Width = 857 + Height = 438 + Align = alClient + TabOrder = 0 + ExplicitLeft = 75 + ExplicitTop = -51 + inherited Panel2: TPanel + Width = 857 + end + inherited dgBlockChainExplorer: TDrawGrid + Width = 857 + Height = 397 + end + end end object tsOperations: TTabSheet Caption = 'Operations Explorer' ImageIndex = 1 + inline FrameOperationsExplorer: TFrameOperationsExplorer + Left = 0 + Top = 0 + Width = 857 + Height = 438 + Align = alClient + TabOrder = 0 + ExplicitLeft = 40 + ExplicitTop = -3 + inherited Panel1: TPanel + Width = 857 + end + inherited dgOperationsExplorer: TDrawGrid + Width = 857 + Height = 397 + end + end end object tsLogs: TTabSheet Caption = 'Logs' ImageIndex = 2 + inline FrameLogs: TFrameLogs + Left = 0 + Top = 0 + Width = 857 + Height = 438 + Align = alClient + TabOrder = 0 + ExplicitLeft = 36 + ExplicitTop = -93 + inherited memoLogs: TMemo + Width = 857 + Height = 397 + ExplicitLeft = 0 + ExplicitTop = 41 + ExplicitWidth = 821 + ExplicitHeight = 490 + end + inherited pnlTopLogs: TPanel + Width = 857 + ExplicitLeft = 0 + ExplicitWidth = 821 + end + end end object tsNodeStats: TTabSheet Caption = 'Node Stats' ImageIndex = 3 + inline FrameNodeStats: TFrameNodeStats + Left = 0 + Top = 0 + Width = 857 + Height = 438 + Align = alClient + TabOrder = 0 + ExplicitLeft = 166 + ExplicitTop = -134 + inherited Label6: TLabel + Top = 157 + Width = 270 + end + inherited Label7: TLabel + Top = 53 + Width = 248 + end + inherited memoNetConnections: TMemo + Width = 996 + Height = 11 + end + inherited memoNetServers: TMemo + Top = 176 + Width = 996 + end + inherited memoNetBlackLists: TMemo + Top = 72 + Width = 995 + end + end end object tsMessages: TTabSheet Caption = 'Messages' ImageIndex = 6 + inline FrameMessages: TFrameMessages + Left = 0 + Top = 0 + Width = 857 + Height = 438 + Align = alClient + TabOrder = 0 + ExplicitLeft = 40 + ExplicitTop = -184 + inherited memoMessages: TMemo + Width = 861 + Height = 65 + end + end end end object TimerUpdateStatus: TTimer diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 7574efd9e..f90a90dd3 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -36,7 +36,9 @@ interface UCrypto, Buttons, UPoolMining, URPC, UFRMAccountSelect, UConst, UAccountKeyStorage, UBaseTypes, UPCDataTypes, UOrderedList, UFRMRPCCalls, UTxMultiOperation, USettings, UEPasa, - {$IFNDEF FPC}System.Generics.Collections{$ELSE}Generics.Collections{$ENDIF}; + {$IFNDEF FPC}System.Generics.Collections, UFrameAccountExplorer, + UFramePendingOperations, UFrameMessages, UFrameNodeStats, UFrameLogs, + UFrameOperationsExplorer, UFrameBlockExplorer{$ELSE}Generics.Collections{$ENDIF}; Const CM_PC_WalletKeysChanged = WM_USER + 1; @@ -105,15 +107,18 @@ TFRMWallet = class(TForm) MiFindOperationbyOpHash: TMenuItem; MiAccountInformation: TMenuItem; MiOperationsExplorer: TMenuItem; + FrameAccountExplorer: TFrameAccountExplorer; + FramePendingOperations: TFramePendingOperations; + FrameBlockChainExplorer: TFrameBlockChainExplorer; + FrameOperationsExplorer: TFrameOperationsExplorer; + FrameLogs: TFrameLogs; + FrameNodeStats: TFrameNodeStats; + FrameMessages: TFrameMessages; - procedure cbHashRateUnitsClick(Sender: TObject); - procedure ebHashRateBackBlocksExit(Sender: TObject); - procedure ebHashRateBackBlocksKeyPress(Sender: TObject; var Key: char); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure MiOperationsExplorerClick(Sender: TObject); procedure MiRPCCallsClick(Sender: TObject); - procedure sbSearchAccountClick(Sender: TObject); procedure TimerUpdateStatusTimer(Sender: TObject); procedure cbMyPrivateKeysChange(Sender: TObject); procedure dgAccountsClick(Sender: TObject); @@ -708,11 +713,7 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FMaxAccountBalance := CT_MaxWalletAmount; FMessagesUnreadCount := 0; lblReceivedMessages.Visible := false; - memoNetConnections.Lines.Clear; - memoNetServers.Lines.Clear; - memoNetBlackLists.Lines.Clear; - memoMessages.Lines.Clear; - memoMessageToSend.Lines.Clear; + FUpdating := false; TimerUpdateStatus.Enabled := false; FIsActivated := false; @@ -730,21 +731,22 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FNodeNotifyEvents.OnBlocksChanged := OnNewAccount; FNodeNotifyEvents.OnNodeMessageEvent := OnNodeMessageEvent; FNodeNotifyEvents.OnKeyActivity := OnNodeKeysActivity; + FAccountsGrid := TAccountsGrid.Create(Self); - FAccountsGrid.DrawGrid := dgAccounts; + FAccountsGrid.DrawGrid := FrameAccountExplorer.dgAccounts; FAccountsGrid.AllowMultiSelect := True; FAccountsGrid.OnAccountsGridUpdatedData := OnAccountsGridUpdatedData; FAccountsGrid.AccountsGridDatasource := acds_Node; FSelectedAccountsGrid := TAccountsGrid.Create(Self); FSelectedAccountsGrid.AccountsGridDatasource := acds_InternalList; - FSelectedAccountsGrid.DrawGrid := dgSelectedAccounts; + FSelectedAccountsGrid.DrawGrid := FrameAccountExplorer.dgSelectedAccounts; FSelectedAccountsGrid.OnUpdated := OnSelectedAccountsGridUpdated; FOperationsAccountGrid := TOperationsGrid.Create(Self); - FOperationsAccountGrid.DrawGrid := dgAccountOperations; + FOperationsAccountGrid.DrawGrid := FrameAccountExplorer.dgAccountOperations; FOperationsAccountGrid.MustShowAlwaysAnAccount := true; FOperationsAccountGrid.WalletKeys := FWalletKeys; FPendingOperationsGrid := TOperationsGrid.Create(Self); - FPendingOperationsGrid.DrawGrid := dgPendingOperations; + FPendingOperationsGrid.DrawGrid := FramePendingOperations.dgPendingOperations; FPendingOperationsGrid.AccountNumber := -1; // all FPendingOperationsGrid.PendingOperations := true; FPendingOperationsGrid.WalletKeys := FWalletKeys; @@ -793,14 +795,7 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FBackgroundLabel.Font.Size := 18; FBackgroundLabel.Alignment := taCenter; FBackgroundLabel.WordWrap := True; - cbHashRateUnits.Items.Clear; - cbHashRateUnits.Items.Add('h/s'); - cbHashRateUnits.Items.Add('Kh/s'); - cbHashRateUnits.Items.Add('Mh/s'); - cbHashRateUnits.Items.Add('Gh/s'); - cbHashRateUnits.Items.Add('Th/s'); - cbHashRateUnits.Items.Add('Ph/s'); - cbHashRateUnits.Items.Add('Eh/s'); + // Things for testing purposes only InitMenuForTesting; {$ifdef DARWIN} From 25a30ebbfe0bad846343de2490ee60d36ae2bb15 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 30 Nov 2021 22:48:58 +0100 Subject: [PATCH 07/44] Fixing graphical user interface, making progress. --- .../Frames/UFrameAccountExplorer.pas | 32 ++++++- .../Frames/UFrameBlockExplorer.dfm | 1 + .../Frames/UFrameBlockExplorer.pas | 5 ++ src/gui-classic/Frames/UFrameLogs.pas | 15 ++++ src/gui-classic/Frames/UFrameMessages.pas | 3 + .../Frames/UFrameOperationsExplorer.pas | 35 +++----- .../Frames/UFramePendingOperations.pas | 15 ++++ src/gui-classic/UFRMWallet.dfm | 46 ++++++++-- src/gui-classic/UFRMWallet.pas | 89 ++++++++++--------- 9 files changed, 164 insertions(+), 77 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 55dac122f..661604391 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -71,7 +71,9 @@ constructor TFrameAccountExplorer.Create(AOwner: TComponent); begin inherited Create( AOwner ); + pcAccountsOptions.ActivePage := tsAccountOperations; + cbExploreMyAccounts.Checked:=True; // By default end; destructor TFrameAccountExplorer.Destroy; @@ -278,9 +280,37 @@ procedure TFrameAccountExplorer.sbSelectedAccountsDelClick(Sender: TObject); end; end; +procedure TFrameAccountExplorer.ebFilterAccountByBalanceMinExit(Sender: TObject); +begin + DoUpdateAccountsFilter; +end; +procedure TFrameAccountExplorer.ebFilterAccountByBalanceMinKeyPress(Sender: TObject; + var Key: Char); +begin + if key=#13 then DoUpdateAccountsFilter; +end; +procedure TFrameAccountExplorer.ebFilterOperationsAccountExit(Sender: TObject); +Var bstart,bend : Int64; +begin + If FUpdating then exit; + FUpdating := True; + Try + bstart := StrToInt64Def(ebFilterOperationsStartBlock.Text,-1); + if bstart>=0 then ebFilterOperationsStartBlock.Text := Inttostr(bstart) else ebFilterOperationsStartBlock.Text := ''; + bend := StrToInt64Def(ebFilterOperationsEndBlock.Text,-1); + if bend>=0 then ebFilterOperationsEndBlock.Text := Inttostr(bend) else ebFilterOperationsEndBlock.Text := ''; + FOperationsExplorerGrid.SetBlocks(bstart,bend); + Finally + FUpdating := false; + End; +end; - +procedure TFrameAccountExplorer.ebFilterOperationsAccountKeyPress(Sender: TObject; + var Key: Char); +begin + if key=#13 then ebFilterOperationsAccountExit(Nil); +end; end. diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.dfm b/src/gui-classic/Frames/UFrameBlockExplorer.dfm index c1b7db646..08fb5d297 100644 --- a/src/gui-classic/Frames/UFrameBlockExplorer.dfm +++ b/src/gui-classic/Frames/UFrameBlockExplorer.dfm @@ -45,6 +45,7 @@ object FrameBlockChainExplorer: TFrameBlockChainExplorer Width = 57 Height = 21 TabOrder = 0 + OnExit = ebBlockChainBlockStartExit end object ebBlockChainBlockEnd: TEdit Left = 185 diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.pas b/src/gui-classic/Frames/UFrameBlockExplorer.pas index 2eb79c467..a9133210c 100644 --- a/src/gui-classic/Frames/UFrameBlockExplorer.pas +++ b/src/gui-classic/Frames/UFrameBlockExplorer.pas @@ -21,6 +21,7 @@ TFrameBlockChainExplorer = class(TFrame) procedure cbHashRateUnitsClick(Sender: TObject); procedure ebHashRateBackBlocksExit(Sender: TObject); procedure ebHashRateBackBlocksKeyPress(Sender: TObject; var Key: char); + procedure ebBlockChainBlockStartExit(Sender: TObject); private { Private declarations } public @@ -34,6 +35,9 @@ implementation {$R *.dfm} +uses + UFRMWallet; + constructor TFrameBlockChainExplorer.Create(AOwner: TComponent); begin inherited Create( AOwner ); @@ -46,6 +50,7 @@ constructor TFrameBlockChainExplorer.Create(AOwner: TComponent); cbHashRateUnits.Items.Add('Th/s'); cbHashRateUnits.Items.Add('Ph/s'); cbHashRateUnits.Items.Add('Eh/s'); + end; destructor TFrameBlockChainExplorer.Destroy; diff --git a/src/gui-classic/Frames/UFrameLogs.pas b/src/gui-classic/Frames/UFrameLogs.pas index ae7febc5f..a37bd0598 100644 --- a/src/gui-classic/Frames/UFrameLogs.pas +++ b/src/gui-classic/Frames/UFrameLogs.pas @@ -15,10 +15,25 @@ TFrameLogs = class(TFrame) { Private declarations } public { Public declarations } + + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; end; implementation {$R *.dfm} +constructor TFrameLogs.Create(AOwner: TComponent); +begin + inherited Create( AOwner ); + +end; + +destructor TFrameLogs.Destroy; +begin + + inherited Destroy; +end; + end. diff --git a/src/gui-classic/Frames/UFrameMessages.pas b/src/gui-classic/Frames/UFrameMessages.pas index 6f0f50f01..b6ad69443 100644 --- a/src/gui-classic/Frames/UFrameMessages.pas +++ b/src/gui-classic/Frames/UFrameMessages.pas @@ -30,6 +30,9 @@ implementation {$R *.dfm} +uses + UFRMWallet; + constructor TFrameMessages.Create(AOwner: TComponent); begin inherited Create( AOwner ); diff --git a/src/gui-classic/Frames/UFrameOperationsExplorer.pas b/src/gui-classic/Frames/UFrameOperationsExplorer.pas index afc445ab5..e0dd2aad5 100644 --- a/src/gui-classic/Frames/UFrameOperationsExplorer.pas +++ b/src/gui-classic/Frames/UFrameOperationsExplorer.pas @@ -18,44 +18,29 @@ TFrameOperationsExplorer = class(TFrame) { Private declarations } public { Public declarations } + + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; end; implementation {$R *.dfm} -procedure TFrameOperationsExplorer.ebFilterAccountByBalanceMinExit(Sender: TObject); +constructor TFrameOperationsExplorer.Create(AOwner: TComponent); begin - DoUpdateAccountsFilter; -end; + inherited Create( AOwner ); -procedure TFrameOperationsExplorer.ebFilterAccountByBalanceMinKeyPress(Sender: TObject; - var Key: Char); -begin - if key=#13 then DoUpdateAccountsFilter; + ebFilterOperationsStartBlock.Text := ''; + ebFilterOperationsEndBlock.Text := ''; end; -procedure TFrameOperationsExplorer.ebFilterOperationsAccountExit(Sender: TObject); -Var bstart,bend : Int64; +destructor TFrameOperationsExplorer.Destroy; begin - If FUpdating then exit; - FUpdating := True; - Try - bstart := StrToInt64Def(ebFilterOperationsStartBlock.Text,-1); - if bstart>=0 then ebFilterOperationsStartBlock.Text := Inttostr(bstart) else ebFilterOperationsStartBlock.Text := ''; - bend := StrToInt64Def(ebFilterOperationsEndBlock.Text,-1); - if bend>=0 then ebFilterOperationsEndBlock.Text := Inttostr(bend) else ebFilterOperationsEndBlock.Text := ''; - FOperationsExplorerGrid.SetBlocks(bstart,bend); - Finally - FUpdating := false; - End; -end; -procedure TFrameOperationsExplorer.ebFilterOperationsAccountKeyPress(Sender: TObject; - var Key: Char); -begin - if key=#13 then ebFilterOperationsAccountExit(Nil); + inherited Destroy; end; + end. diff --git a/src/gui-classic/Frames/UFramePendingOperations.pas b/src/gui-classic/Frames/UFramePendingOperations.pas index 077bc40d2..ba1ac7ace 100644 --- a/src/gui-classic/Frames/UFramePendingOperations.pas +++ b/src/gui-classic/Frames/UFramePendingOperations.pas @@ -16,10 +16,25 @@ TFramePendingOperations = class(TFrame) { Private declarations } public { Public declarations } + + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; end; implementation {$R *.dfm} +constructor TFramePendingOperations.Create(AOwner: TComponent); +begin + inherited Create( AOwner ); + +end; + +destructor TFramePendingOperations.Destroy; +begin + + inherited Destroy; +end; + end. diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 9fc999cd0..be24890bf 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -390,32 +390,40 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitLeft = 37 - ExplicitTop = -144 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited Splitter1: TSplitter Height = 372 end inherited pnlMyAccountsTop: TPanel Width = 857 + ExplicitWidth = 857 end inherited pnlAccounts: TPanel Height = 372 + ExplicitHeight = 372 inherited dgAccounts: TDrawGrid Height = 338 + ExplicitHeight = 338 end inherited pnlAccountsInfo: TPanel Top = 338 + ExplicitTop = 338 end end inherited pcAccountsOptions: TPageControl Width = 452 Height = 372 + ExplicitWidth = 452 + ExplicitHeight = 372 inherited tsAccountOperations: TTabSheet ExplicitWidth = 444 ExplicitHeight = 344 inherited dgAccountOperations: TDrawGrid Width = 444 Height = 344 + ExplicitWidth = 444 + ExplicitHeight = 344 end end end @@ -433,6 +441,8 @@ object FRMWallet: TFRMWallet TabOrder = 0 ExplicitLeft = 31 ExplicitTop = -84 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited dgPendingOperations: TDrawGrid Width = 857 Height = 352 @@ -461,14 +471,17 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitLeft = 75 - ExplicitTop = -51 + ExplicitWidth = 296 + ExplicitHeight = 59 inherited Panel2: TPanel Width = 857 + ExplicitWidth = 296 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 Height = 397 + ExplicitWidth = 857 + ExplicitHeight = 397 end end end @@ -484,12 +497,17 @@ object FRMWallet: TFRMWallet TabOrder = 0 ExplicitLeft = 40 ExplicitTop = -3 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited Panel1: TPanel Width = 857 + ExplicitWidth = 857 end inherited dgOperationsExplorer: TDrawGrid Width = 857 Height = 397 + ExplicitWidth = 857 + ExplicitHeight = 397 end end end @@ -505,6 +523,8 @@ object FRMWallet: TFRMWallet TabOrder = 0 ExplicitLeft = 36 ExplicitTop = -93 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited memoLogs: TMemo Width = 857 Height = 397 @@ -532,25 +552,33 @@ object FRMWallet: TFRMWallet TabOrder = 0 ExplicitLeft = 166 ExplicitTop = -134 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited Label6: TLabel Top = 157 - Width = 270 + ExplicitTop = 157 end inherited Label7: TLabel Top = 53 - Width = 248 + ExplicitTop = 53 end inherited memoNetConnections: TMemo Width = 996 Height = 11 + ExplicitWidth = 996 + ExplicitHeight = 11 end inherited memoNetServers: TMemo Top = 176 Width = 996 + ExplicitTop = 176 + ExplicitWidth = 996 end inherited memoNetBlackLists: TMemo Top = 72 Width = 995 + ExplicitTop = 72 + ExplicitWidth = 995 end end end @@ -564,11 +592,13 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitLeft = 40 - ExplicitTop = -184 + ExplicitWidth = 296 + ExplicitHeight = 59 inherited memoMessages: TMemo Width = 861 Height = 65 + ExplicitWidth = 861 + ExplicitHeight = 65 end end end diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index f90a90dd3..65af58e56 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -751,12 +751,12 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FPendingOperationsGrid.PendingOperations := true; FPendingOperationsGrid.WalletKeys := FWalletKeys; FOperationsExplorerGrid := TOperationsGrid.Create(Self); - FOperationsExplorerGrid.DrawGrid := dgOperationsExplorer; + FOperationsExplorerGrid.DrawGrid := FrameOperationsExplorer.dgOperationsExplorer; FOperationsExplorerGrid.AccountNumber := -1; FOperationsExplorerGrid.PendingOperations := False; FOperationsExplorerGrid.WalletKeys := FWalletKeys; FBlockChainGrid := TBlockChainGrid.Create(Self); - FBlockChainGrid.DrawGrid := dgBlockChainExplorer; + FBlockChainGrid.DrawGrid := FrameBlockChainExplorer.dgBlockChainExplorer; FBlockChainGrid.ShowTimeAverageColumns:={$IFDEF SHOW_AVERAGE_TIME_STATS}True;{$ELSE}False;{$ENDIF} // FWalletKeys.OnChanged.Add( OnWalletChanged ); {$IFDEF USE_GNUGETTEXT} @@ -770,10 +770,7 @@ procedure TFRMWallet.FormCreate(Sender: TObject); UpdateBlockChainState; UpdateConnectionStatus; PageControl.ActivePage := tsOperations; - pcAccountsOptions.ActivePage := tsAccountOperations; - ebFilterOperationsStartBlock.Text := ''; - ebFilterOperationsEndBlock.Text := ''; - cbExploreMyAccounts.Checked:=True; // By default + cbExploreMyAccountsClick(nil); MinersBlocksFound := 0; @@ -897,7 +894,7 @@ procedure TFRMWallet.CM_NetConnectionUpdated(var Msg: TMessage); Try if Not TNetData.NetData.NetConnections.TryLockList(100,l) then exit; try - strings := memoNetConnections.Lines; + strings := FrameNodeStats.memoNetConnections.Lines; sNSC := TStringList.Create; sRS := TStringList.Create; sDisc := TStringList.Create; @@ -986,27 +983,27 @@ function TFRMWallet.DoUpdateAccountsFilter: Boolean; if FUpdating then exit; FUpdating := true; Try - If Not TAccountComp.TxtToMoney(ebFilterAccountByBalanceMin.Text,bmin) then bmin := 0; - If not TAccountComp.TxtToMoney(ebFilterAccountByBalanceMax.Text,bmax) then bmax := CT_MaxWalletAmount; + If Not TAccountComp.TxtToMoney(FrameAccountExplorer.ebFilterAccountByBalanceMin.Text,bmin) then bmin := 0; + If not TAccountComp.TxtToMoney(FrameAccountExplorer.ebFilterAccountByBalanceMax.Text,bmax) then bmax := CT_MaxWalletAmount; if (bmaxbmax then bmin := 0; doupd := (bmin<>FMinAccountBalance) Or (bmax<>FMaxAccountBalance); if bmin>0 then - ebFilterAccountByBalanceMin.Text:=TAccountComp.FormatMoney(bmin) - else ebFilterAccountByBalanceMin.Text := ''; + FrameAccountExplorer.ebFilterAccountByBalanceMin.Text:=TAccountComp.FormatMoney(bmin) + else FrameAccountExplorer.ebFilterAccountByBalanceMin.Text := ''; if bmax=FNode.Bank.SafeBox.AccountsCount then exit; @@ -1649,7 +1646,7 @@ procedure TFRMWallet.MiFindpreviousaccountwithhighbalanceClick(Sender: TObject); begin PageControl.ActivePage := tsMyAccounts; PageControlChange(Nil); - an64 := FAccountsGrid.AccountNumber(dgAccounts.Row); + an64 := FAccountsGrid.AccountNumber(FrameAccountExplorer.dgAccounts.Row); if an64<0 then an := FNode.Bank.SafeBox.AccountsCount-1 else an := an64; If an>=FNode.Bank.SafeBox.AccountsCount then exit; @@ -1666,7 +1663,7 @@ procedure TFRMWallet.MiFindpreviousaccountwithhighbalanceClick(Sender: TObject); procedure TFRMWallet.MiMultiaccountoperationClick(Sender: TObject); begin PageControl.ActivePage := tsMyAccounts; - pcAccountsOptions.ActivePage := tsMultiSelectAccounts; + FrameAccountExplorer.pcAccountsOptions.ActivePage := FrameAccountExplorer.tsMultiSelectAccounts; bbSelectedAccountsOperationClick(Sender); end; @@ -1724,18 +1721,18 @@ procedure TFRMWallet.MiRemoveaccountfromselectedClick(Sender: TObject); begin PageControl.ActivePage := tsMyAccounts; PageControlChange(Nil); - pcAccountsOptions.ActivePage := tsMultiSelectAccounts; + FrameAccountExplorer.pcAccountsOptions.ActivePage := FrameAccountExplorer.tsMultiSelectAccounts; sbSelectedAccountsDelClick(Sender); end; procedure TFRMWallet.OnAccountsGridUpdatedData(Sender: TObject); begin if FAccountsGrid.IsUpdatingData then begin - lblAccountsCount.Caption := '(Calculating)'; - lblAccountsBalance.Caption := '(Calculating)'; + FrameAccountExplorer.lblAccountsCount.Caption := '(Calculating)'; + FrameAccountExplorer.lblAccountsBalance.Caption := '(Calculating)'; end else begin - lblAccountsCount.Caption := IntToStr(FAccountsGrid.AccountsCount); - lblAccountsBalance.Caption := TAccountComp.FormatMoney(FAccountsGrid.AccountsBalance); + FrameAccountExplorer.lblAccountsCount.Caption := IntToStr(FAccountsGrid.AccountsCount); + FrameAccountExplorer.lblAccountsBalance.Caption := TAccountComp.FormatMoney(FAccountsGrid.AccountsBalance); end; end; @@ -1753,7 +1750,7 @@ procedure TFRMWallet.OnNetBlackListUpdated(Sender: TObject); begin l := TNetData.NetData.NodeServersAddresses.LockList; try - strings := memoNetBlackLists.Lines; + strings := FrameNodeStats.memoNetBlackLists.Lines; strings.BeginUpdate; Try strings.Clear; @@ -1797,7 +1794,7 @@ procedure TFRMWallet.OnNetNodeServersUpdated(Sender: TObject); begin l := TNetData.NetData.NodeServersAddresses.LockList; try - strings := memoNetServers.Lines; + strings := FrameNodeStats.memoNetServers.Lines; strings.BeginUpdate; Try strings.Clear; @@ -1875,18 +1872,18 @@ procedure TFRMWallet.OnNewAccount(Sender: TObject); procedure TFRMWallet.OnNewLog(logtype: TLogType; Time : TDateTime; ThreadID : TThreadID; const sender,logtext: String); Var s : AnsiString; begin - if (logtype=ltdebug) And (Not cbShowDebugLogs.Checked) then exit; + if (logtype=ltdebug) And (Not FrameLogs.cbShowDebugLogs.Checked) then exit; if ThreadID=MainThreadID then s := ' MAIN:' else s:=' TID:'; - if MemoLogs.Lines.Count>300 then begin + if FrameLogs.MemoLogs.Lines.Count>300 then begin // Limit max lines in logs... - memoLogs.Lines.BeginUpdate; + FrameLogs.memoLogs.Lines.BeginUpdate; try - while memoLogs.Lines.Count>250 do memoLogs.Lines.Delete(0); + while FrameLogs.memoLogs.Lines.Count>250 do FrameLogs.memoLogs.Lines.Delete(0); finally - memoLogs.Lines.EndUpdate; + FrameLogs.memoLogs.Lines.EndUpdate; end; end; - memoLogs.Lines.Add(formatDateTime('dd/mm/yyyy hh:nn:ss.zzz',Time)+s+IntToHex(PtrInt(ThreadID),8)+' ['+CT_LogType[Logtype]+'] <'+sender+'> '+logtext); + FrameLogs.memoLogs.Lines.Add(formatDateTime('dd/mm/yyyy hh:nn:ss.zzz',Time)+s+IntToHex(PtrInt(ThreadID),8)+' ['+CT_LogType[Logtype]+'] <'+sender+'> '+logtext); // end; @@ -1896,8 +1893,8 @@ procedure TFRMWallet.OnNodeMessageEvent(NetConnection: TNetConnection; MessageDa inc(FMessagesUnreadCount); if Assigned(NetConnection) then begin s := DateTimeToStr(now)+' Message received from '+NetConnection.ClientRemoteAddr; - memoMessages.Lines.Add(DateTimeToStr(now)+' Message received from '+NetConnection.ClientRemoteAddr+' Length '+inttostr(Length(MessageData))+' bytes'); - memoMessages.Lines.Add('RECEIVED> '+MessageData); + FrameMessages.memoMessages.Lines.Add(DateTimeToStr(now)+' Message received from '+NetConnection.ClientRemoteAddr+' Length '+inttostr(Length(MessageData))+' bytes'); + FrameMessages.memoMessages.Lines.Add('RECEIVED> '+MessageData); if TSettings.ShowModalMessages then begin s := DateTimeToStr(now)+' Message from '+NetConnection.ClientRemoteAddr+#10+ 'Length '+inttostr(length(MessageData))+' bytes'+#10+#10; @@ -1910,7 +1907,7 @@ procedure TFRMWallet.OnNodeMessageEvent(NetConnection: TNetConnection; MessageDa Application.MessageBox(PChar(s),PChar(Application.Title),MB_ICONINFORMATION+MB_OK); end; end else begin - memoMessages.Lines.Add(DateTimeToStr(now)+' Internal message: '+MessageData); + FrameMessages.memoMessages.Lines.Add(DateTimeToStr(now)+' Internal message: '+MessageData); end; if FMessagesUnreadCount>1 then lblReceivedMessages.Caption := Format('You have received %d messages',[FMessagesUnreadCount]) else lblReceivedMessages.Caption := 'You have received 1 message'; @@ -1942,8 +1939,8 @@ procedure TFRMWallet.OnReceivedHelloMessage(Sender: TObject); procedure TFRMWallet.OnSelectedAccountsGridUpdated(Sender: TObject); begin - lblSelectedAccountsCount.Caption := Inttostr(FSelectedAccountsGrid.AccountsCount); - lblSelectedAccountsBalance.Caption := TAccountComp.FormatMoney( FSelectedAccountsGrid.AccountsBalance ); + FrameAccountExplorer.lblSelectedAccountsCount.Caption := Inttostr(FSelectedAccountsGrid.AccountsCount); + FrameAccountExplorer.lblSelectedAccountsBalance.Caption := TAccountComp.FormatMoney( FSelectedAccountsGrid.AccountsBalance ); end; procedure TFRMWallet.OnWalletChanged(Sender: TObject); @@ -2019,10 +2016,14 @@ procedure TFRMWallet.UpdateAccounts(RefreshData : Boolean); if Not RefreshData then begin if TPlatform.GetElapsedMilliseconds(FLastAccountsGridInvalidateTC)>1000 then begin FLastAccountsGridInvalidateTC := TPlatform.GetTickCount; - dgAccounts.Invalidate; + FrameAccountExplorer.dgAccounts.Invalidate; end; exit; end; + + with FrameAccountExplorer do + begin + LApplyfilter := (cbFilterAccounts.Checked) and ((FMinAccountBalance>0) Or ((FMaxAccountBalance=0))); if (Not cbExploreMyAccounts.Checked) And (not LApplyfilter) then begin FAccountsGrid.AccountsGridDatasource := acds_Node; @@ -2052,6 +2053,8 @@ procedure TFRMWallet.UpdateAccounts(RefreshData : Boolean); FAccountsGrid.AccountsGridDatasource := acds_NodeFiltered; end; + end; + bbChangeKeyName.Enabled := cbExploreMyAccounts.Checked; OnAccountsGridUpdatedData(Nil); UpdateOperations; From f3e48fb8b890b2151b98fa24ec1367ed89b5aec5 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 30 Nov 2021 23:27:42 +0100 Subject: [PATCH 08/44] Fixing graphical user interface further progress. --- .../Frames/UFrameAccountExplorer.pas | 38 ++++++- .../Frames/UFrameBlockExplorer.dfm | 3 + .../Frames/UFrameBlockExplorer.pas | 67 ++++++----- src/gui-classic/Frames/UFrameMessages.pas | 6 +- .../Frames/UFrameOperationsExplorer.pas | 5 + src/gui-classic/UFRMWallet.dfm | 10 +- src/gui-classic/UFRMWallet.pas | 106 ++++++++---------- 7 files changed, 137 insertions(+), 98 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 661604391..32be5742c 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -48,9 +48,35 @@ TFrameAccountExplorer = class(TFrame) bbSelectedAccountsOperation: TBitBtn; procedure bbAccountsRefreshClick(Sender: TObject); procedure pnlAccountsInfoClick(Sender: TObject); + procedure cbMyPrivateKeysChange(Sender: TObject); + procedure dgAccountsClick(Sender: TObject); + + procedure dgAccountsColumnMoved(Sender: TObject; FromIndex, + ToIndex: Integer); + procedure dgAccountsFixedCellClick(Sender: TObject; ACol, ARow: Integer); procedure sbSearchAccountClick(Sender: TObject); + procedure cbExploreMyAccountsClick(Sender: TObject); + + + procedure ebFindAccountNumberChange(Sender: TObject); + procedure ebFindAccountNumberExit(Sender: TObject); + + procedure bbChangeKeyNameClick(Sender: TObject); + + procedure sbSelectedAccountsAddClick(Sender: TObject); + procedure sbSelectedAccountsAddAllClick(Sender: TObject); + procedure sbSelectedAccountsDelClick(Sender: TObject); + procedure sbSelectedAccountsDelAllClick(Sender: TObject); + procedure bbSelectedAccountsOperationClick(Sender: TObject); + + procedure ebFilterAccountByBalanceMinExit(Sender: TObject); + procedure ebFilterAccountByBalanceMinKeyPress(Sender: TObject; + var Key: Char); + procedure cbFilterAccountsClick(Sender: TObject); + + private { Private declarations } public @@ -65,7 +91,7 @@ implementation {$R *.dfm} uses - UFRMWallet; + UFRMWallet, UConst, UPCOrderedLists; constructor TFrameAccountExplorer.Create(AOwner: TComponent); begin @@ -84,7 +110,7 @@ destructor TFrameAccountExplorer.Destroy; procedure TFrameAccountExplorer.bbAccountsRefreshClick(Sender: TObject); begin - UpdateAccounts(true); + FRMWallet.UpdateAccounts(true); end; procedure TFrameAccountExplorer.bbChangeKeyNameClick(Sender: TObject); @@ -93,12 +119,12 @@ procedure TFrameAccountExplorer.bbChangeKeyNameClick(Sender: TObject); begin if (cbMyPrivateKeys.ItemIndex<0) then exit; i := PtrInt(cbMyPrivateKeys.Items.Objects[cbMyPrivateKeys.ItemIndex]); - if (i<0) Or (i>=FWalletKeys.Count) then raise Exception.Create('Must select a Key'); - name := FWalletKeys.Key[i].Name; + if (i<0) Or (i>=FRMWallet.WalletKeys.Count) then raise Exception.Create('Must select a Key'); + name := FRMWallet.WalletKeys.Key[i].Name; if InputQuery('Change Key name','Input new name',name) then begin - FWalletKeys.SetName(i,name); + FRMWallet.WalletKeys.SetName(i,name); end; - UpdatePrivateKeys; + FRMWallet.UpdatePrivateKeys; end; procedure TFrameAccountExplorer.bbSelectedAccountsOperationClick(Sender: TObject); diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.dfm b/src/gui-classic/Frames/UFrameBlockExplorer.dfm index 08fb5d297..07a2dba24 100644 --- a/src/gui-classic/Frames/UFrameBlockExplorer.dfm +++ b/src/gui-classic/Frames/UFrameBlockExplorer.dfm @@ -46,6 +46,7 @@ object FrameBlockChainExplorer: TFrameBlockChainExplorer Height = 21 TabOrder = 0 OnExit = ebBlockChainBlockStartExit + OnKeyPress = ebBlockChainBlockStartKeyPress end object ebBlockChainBlockEnd: TEdit Left = 185 @@ -60,6 +61,7 @@ object FrameBlockChainExplorer: TFrameBlockChainExplorer Width = 56 Height = 21 TabOrder = 2 + OnKeyPress = ebHashRateBackBlocksKeyPress end object cbHashRateUnits: TComboBox Left = 496 @@ -70,6 +72,7 @@ object FrameBlockChainExplorer: TFrameBlockChainExplorer ItemIndex = 1 TabOrder = 3 Text = 'Mh/s' + OnClick = cbHashRateUnitsClick Items.Strings = ( 'Kh/s' 'Mh/s' diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.pas b/src/gui-classic/Frames/UFrameBlockExplorer.pas index a9133210c..4671b0dca 100644 --- a/src/gui-classic/Frames/UFrameBlockExplorer.pas +++ b/src/gui-classic/Frames/UFrameBlockExplorer.pas @@ -22,6 +22,8 @@ TFrameBlockChainExplorer = class(TFrame) procedure ebHashRateBackBlocksExit(Sender: TObject); procedure ebHashRateBackBlocksKeyPress(Sender: TObject; var Key: char); procedure ebBlockChainBlockStartExit(Sender: TObject); + procedure ebBlockChainBlockStartKeyPress(Sender: TObject; var Key: Char); + private { Private declarations } public @@ -36,7 +38,7 @@ implementation {$R *.dfm} uses - UFRMWallet; + UFRMWallet, USettings; constructor TFrameBlockChainExplorer.Create(AOwner: TComponent); begin @@ -62,17 +64,22 @@ destructor TFrameBlockChainExplorer.Destroy; procedure TFrameBlockChainExplorer.ebBlockChainBlockStartExit(Sender: TObject); var bstart,bend : Int64; begin - If FUpdating then exit; - FUpdating := True; + with FRMWallet do + begin + + If Updating then exit; + Updating := True; Try bstart := StrToInt64Def(ebBlockChainBlockStart.Text,-1); bend := StrToInt64Def(ebBlockChainBlockEnd.Text,-1); - FBlockChainGrid.SetBlocks(bstart,bend); - if FBlockChainGrid.BlockStart>=0 then ebBlockChainBlockStart.Text := Inttostr(FBlockChainGrid.BlockStart) else ebBlockChainBlockStart.Text := ''; - if FBlockChainGrid.BlockEnd>=0 then ebBlockChainBlockEnd.Text := Inttostr(FBlockChainGrid.BlockEnd) else ebBlockChainBlockEnd.Text := ''; + BlockChainGrid.SetBlocks(bstart,bend); + if BlockChainGrid.BlockStart>=0 then ebBlockChainBlockStart.Text := Inttostr(BlockChainGrid.BlockStart) else ebBlockChainBlockStart.Text := ''; + if BlockChainGrid.BlockEnd>=0 then ebBlockChainBlockEnd.Text := Inttostr(BlockChainGrid.BlockEnd) else ebBlockChainBlockEnd.Text := ''; Finally - FUpdating := false; + Updating := false; End; + + end; end; procedure TFrameBlockChainExplorer.ebBlockChainBlockStartKeyPress(Sender: TObject; @@ -89,37 +96,47 @@ procedure TFrameBlockChainExplorer.ebHashRateBackBlocksKeyPress(Sender: TObject; procedure TFrameBlockChainExplorer.ebHashRateBackBlocksExit(Sender: TObject); var i : Integer; begin - If FUpdating then exit; - FUpdating := True; + with FRMWallet do + begin + + If Updating then exit; + Updating := True; Try i := StrToIntDef(ebHashRateBackBlocks.Text,-1); - FBlockChainGrid.HashRateAverageBlocksCount:=i; - TSettings.HashRateAvgBlocksCount := FBlockChainGrid.HashRateAverageBlocksCount; + BlockChainGrid.HashRateAverageBlocksCount:=i; + TSettings.HashRateAvgBlocksCount := BlockChainGrid.HashRateAverageBlocksCount; Finally - ebHashRateBackBlocks.Text := IntToStr(FBlockChainGrid.HashRateAverageBlocksCount); - FUpdating := false; + ebHashRateBackBlocks.Text := IntToStr(BlockChainGrid.HashRateAverageBlocksCount); + Updating := false; End; + + end; end; procedure TFrameBlockChainExplorer.cbHashRateUnitsClick(Sender: TObject); begin - If FUpdating then Exit; - FUpdating := True; + with FRMWallet do + begin + + If Updating then Exit; + Updating := True; Try case cbHashRateUnits.ItemIndex of - 0 : FBlockChainGrid.HashRateAs := hr_Unit; - 1 : FBlockChainGrid.HashRateAs := hr_Kilo; - 2 : FBlockChainGrid.HashRateAs := hr_Mega; - 3 : FBlockChainGrid.HashRateAs := hr_Giga; - 4 : FBlockChainGrid.HashRateAs := hr_Tera; - 5 : FBlockChainGrid.HashRateAs := hr_Peta; - 6 : FBlockChainGrid.HashRateAs := hr_Exa; - else FBlockChainGrid.HashRateAs := hr_Mega; + 0 : BlockChainGrid.HashRateAs := hr_Unit; + 1 : BlockChainGrid.HashRateAs := hr_Kilo; + 2 : BlockChainGrid.HashRateAs := hr_Mega; + 3 : BlockChainGrid.HashRateAs := hr_Giga; + 4 : BlockChainGrid.HashRateAs := hr_Tera; + 5 : BlockChainGrid.HashRateAs := hr_Peta; + 6 : BlockChainGrid.HashRateAs := hr_Exa; + else BlockChainGrid.HashRateAs := hr_Mega; end; - TSettings.ShowHashRateAs := FBlockChainGrid.HashRateAs; + TSettings.ShowHashRateAs := BlockChainGrid.HashRateAs; Finally - FUpdating := false; + Updating := false; End; + + end; end; diff --git a/src/gui-classic/Frames/UFrameMessages.pas b/src/gui-classic/Frames/UFrameMessages.pas index b6ad69443..31e12dfba 100644 --- a/src/gui-classic/Frames/UFrameMessages.pas +++ b/src/gui-classic/Frames/UFrameMessages.pas @@ -31,7 +31,7 @@ implementation {$R *.dfm} uses - UFRMWallet; + UFRMWallet, UNetProtocol; constructor TFrameMessages.Create(AOwner: TComponent); begin @@ -48,13 +48,13 @@ destructor TFrameMessages.Destroy; inherited Destroy; end; -procedure TFRMWallet.bbSendAMessageClick(Sender: TObject); +procedure TFrameMessages.bbSendAMessageClick(Sender: TObject); Var basem,m : String; them, errors : String; i,n : Integer; nc : TNetConnection; begin - CheckIsReady; + FRMWallet.CheckIsReady; if (lbNetConnections.SelCount<=0) Or (lbNetConnections.ItemIndex<0) then raise Exception.Create('Select at least one connection'); if lbNetConnections.SelCount<=0 then n := 1 else n := lbNetConnections.SelCount; diff --git a/src/gui-classic/Frames/UFrameOperationsExplorer.pas b/src/gui-classic/Frames/UFrameOperationsExplorer.pas index e0dd2aad5..28b4b2241 100644 --- a/src/gui-classic/Frames/UFrameOperationsExplorer.pas +++ b/src/gui-classic/Frames/UFrameOperationsExplorer.pas @@ -14,6 +14,11 @@ TFrameOperationsExplorer = class(TFrame) ebFilterOperationsStartBlock: TEdit; ebFilterOperationsEndBlock: TEdit; dgOperationsExplorer: TDrawGrid; + + // skybuck: missing ?? + // procedure ebFilterOperationsAccountExit(Sender: TObject); + /// procedure ebFilterOperationsAccountKeyPress(Sender: TObject; var Key: Char); + private { Private declarations } public diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index be24890bf..a82cdec8a 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -471,11 +471,11 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 59 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 296 + ExplicitWidth = 857 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 @@ -592,8 +592,8 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 59 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited memoMessages: TMemo Width = 861 Height = 65 diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 65af58e56..1d31b5a38 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -120,45 +120,21 @@ TFRMWallet = class(TForm) procedure MiOperationsExplorerClick(Sender: TObject); procedure MiRPCCallsClick(Sender: TObject); procedure TimerUpdateStatusTimer(Sender: TObject); - procedure cbMyPrivateKeysChange(Sender: TObject); - procedure dgAccountsClick(Sender: TObject); procedure miOptionsClick(Sender: TObject); procedure miAboutPascalCoinClick(Sender: TObject); procedure miNewOperationClick(Sender: TObject); procedure miPrivatekeysClick(Sender: TObject); - procedure dgAccountsColumnMoved(Sender: TObject; FromIndex, - ToIndex: Integer); - procedure dgAccountsFixedCellClick(Sender: TObject; ACol, ARow: Integer); procedure PageControlChange(Sender: TObject); - procedure ebFilterOperationsAccountExit(Sender: TObject); - procedure ebFilterOperationsAccountKeyPress(Sender: TObject; var Key: Char); - procedure ebBlockChainBlockStartExit(Sender: TObject); - procedure ebBlockChainBlockStartKeyPress(Sender: TObject; var Key: Char); - procedure cbExploreMyAccountsClick(Sender: TObject); procedure MiCloseClick(Sender: TObject); procedure MiDecodePayloadClick(Sender: TObject); - procedure bbSendAMessageClick(Sender: TObject); procedure lblReceivedMessagesClick(Sender: TObject); - procedure ebFindAccountNumberChange(Sender: TObject); - procedure ebFindAccountNumberExit(Sender: TObject); procedure IPnodes1Click(Sender: TObject); - procedure bbChangeKeyNameClick(Sender: TObject); - procedure sbSelectedAccountsAddClick(Sender: TObject); - procedure sbSelectedAccountsAddAllClick(Sender: TObject); - procedure sbSelectedAccountsDelClick(Sender: TObject); - procedure sbSelectedAccountsDelAllClick(Sender: TObject); - procedure bbSelectedAccountsOperationClick(Sender: TObject); procedure MiAddaccounttoSelectedClick(Sender: TObject); procedure MiRemoveaccountfromselectedClick(Sender: TObject); procedure MiMultiaccountoperationClick(Sender: TObject); procedure MiFindnextaccountwithhighbalanceClick(Sender: TObject); procedure MiFindpreviousaccountwithhighbalanceClick(Sender: TObject); procedure MiFindaccountClick(Sender: TObject); - procedure bbAccountsRefreshClick(Sender: TObject); - procedure ebFilterAccountByBalanceMinExit(Sender: TObject); - procedure ebFilterAccountByBalanceMinKeyPress(Sender: TObject; - var Key: Char); - procedure cbFilterAccountsClick(Sender: TObject); procedure MiFindOperationbyOpHashClick(Sender: TObject); procedure MiAccountInformationClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); @@ -171,7 +147,6 @@ TFRMWallet = class(TForm) FBackgroundLabel : TLabel; FMinersBlocksFound: Integer; procedure SetMinersBlocksFound(const Value: Integer); - Procedure CheckIsReady; Procedure FinishedLoadingApp; Procedure FillAccountInformation(Const Strings : TStrings; Const AccountNumber : Cardinal); Procedure FillOperationInformation(Const Strings : TStrings; Const OperationResume : TOperationResume); @@ -225,9 +200,7 @@ TFRMWallet = class(TForm) Procedure OnSelectedAccountsGridUpdated(Sender : TObject); Procedure OnMiningServerNewBlockFound(Sender : TObject); Procedure UpdateConnectionStatus; - Procedure UpdateAccounts(RefreshData : Boolean); Procedure UpdateBlockChainState; - Procedure UpdatePrivateKeys; Procedure UpdateOperations; Procedure UpdateConfigChanged(Sender:TObject); Procedure UpdateNodeStatus; @@ -240,9 +213,18 @@ TFRMWallet = class(TForm) procedure CM_WalletChanged(var Msg: TMessage); message CM_PC_WalletKeysChanged; procedure CM_NetConnectionUpdated(var Msg: TMessage); message CM_PC_NetConnectionUpdated; public + Procedure CheckIsReady; + + Procedure UpdatePrivateKeys; + + Procedure UpdateAccounts(RefreshData : Boolean); + { Public declarations } Property WalletKeys : TWalletKeysExt read FWalletKeys; Property MinersBlocksFound : Integer read FMinersBlocksFound write SetMinersBlocksFound; + + Property Updating : boolean read FUpdating write FUpdating; + Property BlockChainGrid : TBlockChainGrid read FBlockChainGrid; end; var @@ -771,7 +753,7 @@ procedure TFRMWallet.FormCreate(Sender: TObject); UpdateConnectionStatus; PageControl.ActivePage := tsOperations; - cbExploreMyAccountsClick(nil); + FrameAccountExplorer.cbExploreMyAccountsClick(nil); MinersBlocksFound := 0; lblBuild.Caption := 'Build: '+CT_ClientAppVersion; @@ -1365,7 +1347,7 @@ procedure TFRMWallet.MiAddaccounttoSelectedClick(Sender: TObject); PageControl.ActivePage := tsMyAccounts; PageControlChange(Nil); FrameAccountExplorer.pcAccountsOptions.ActivePage := FrameAccountExplorer.tsMultiSelectAccounts; - sbSelectedAccountsAddClick(Sender); + FrameAccountExplorer.sbSelectedAccountsAddClick(Sender); end; procedure TFRMWallet.miAskForAccountClick(Sender: TObject); @@ -1664,7 +1646,7 @@ procedure TFRMWallet.MiMultiaccountoperationClick(Sender: TObject); begin PageControl.ActivePage := tsMyAccounts; FrameAccountExplorer.pcAccountsOptions.ActivePage := FrameAccountExplorer.tsMultiSelectAccounts; - bbSelectedAccountsOperationClick(Sender); + FrameAccountExplorer.bbSelectedAccountsOperationClick(Sender); end; procedure TFRMWallet.miNewOperationClick(Sender: TObject); @@ -1722,7 +1704,7 @@ procedure TFRMWallet.MiRemoveaccountfromselectedClick(Sender: TObject); PageControl.ActivePage := tsMyAccounts; PageControlChange(Nil); FrameAccountExplorer.pcAccountsOptions.ActivePage := FrameAccountExplorer.tsMultiSelectAccounts; - sbSelectedAccountsDelClick(Sender); + FrameAccountExplorer.sbSelectedAccountsDelClick(Sender); end; procedure TFRMWallet.OnAccountsGridUpdatedData(Sender: TObject); @@ -2055,7 +2037,7 @@ procedure TFRMWallet.UpdateAccounts(RefreshData : Boolean); end; - bbChangeKeyName.Enabled := cbExploreMyAccounts.Checked; + FrameAccountExplorer.bbChangeKeyName.Enabled := FrameAccountExplorer.cbExploreMyAccounts.Checked; OnAccountsGridUpdatedData(Nil); UpdateOperations; end; @@ -2067,25 +2049,25 @@ procedure TFRMWallet.UpdateAvailableConnections; begin if Not TNetData.NetData.NetConnections.TryLockList(100,l) then exit; try - lbNetConnections.Items.BeginUpdate; + FrameMessages.lbNetConnections.Items.BeginUpdate; Try - lbNetConnections.Items.Clear; + FrameMessages.lbNetConnections.Items.Clear; for i := 0 to l.Count - 1 do begin NC := l[i]; if NC.Connected then begin if NC is TNetServerClient then begin if Not NC.IsMyselfServer then begin - lbNetConnections.Items.AddObject(Format('Client: IP:%s',[NC.ClientRemoteAddr]),NC); + FrameMessages.lbNetConnections.Items.AddObject(Format('Client: IP:%s',[NC.ClientRemoteAddr]),NC); end; end else begin if Not NC.IsMyselfServer then begin - lbNetConnections.Items.AddObject(Format('Server: IP:%s',[NC.ClientRemoteAddr]),NC); + FrameMessages.lbNetConnections.Items.AddObject(Format('Server: IP:%s',[NC.ClientRemoteAddr]),NC); end; end; end; end; Finally - lbNetConnections.Items.EndUpdate; + FrameMessages.lbNetConnections.Items.EndUpdate; End; finally TNetData.NetData.NetConnections.UnlockList; @@ -2199,17 +2181,23 @@ procedure TFRMWallet.UpdateConfigChanged(Sender:TObject); i := Integer(TSettings.MinerPrivateKeyType); if (i>=Integer(Low(TMinerPrivateKeyType))) And (i<=Integer(High(TMinerPrivateKeyType))) then FMinerPrivateKeyType := TMinerPrivateKeyType(i) else FMinerPrivateKeyType := mpk_Random; - ebHashRateBackBlocks.Text := IntToStr(FBlockChainGrid.HashRateAverageBlocksCount); - Case FBlockChainGrid.HashRateAs of - hr_Unit : cbHashRateUnits.ItemIndex:=0; - hr_Kilo : cbHashRateUnits.ItemIndex:=1; - hr_Mega : cbHashRateUnits.ItemIndex:=2; - hr_Giga : cbHashRateUnits.ItemIndex:=3; - hr_Tera : cbHashRateUnits.ItemIndex:=4; - hr_Peta : cbHashRateUnits.ItemIndex:=5; - hr_Exa : cbHashRateUnits.ItemIndex:=6; - else cbHashRateUnits.ItemIndex:=-1; + FrameBlockChainExplorer.ebHashRateBackBlocks.Text := IntToStr(FBlockChainGrid.HashRateAverageBlocksCount); + + with FrameBlockChainExplorer do + begin + Case FBlockChainGrid.HashRateAs of + hr_Unit : cbHashRateUnits.ItemIndex:=0; + hr_Kilo : cbHashRateUnits.ItemIndex:=1; + hr_Mega : cbHashRateUnits.ItemIndex:=2; + hr_Giga : cbHashRateUnits.ItemIndex:=3; + hr_Tera : cbHashRateUnits.ItemIndex:=4; + hr_Peta : cbHashRateUnits.ItemIndex:=5; + hr_Exa : cbHashRateUnits.ItemIndex:=6; + else + cbHashRateUnits.ItemIndex:=-1; + end; end; + if TNetData.NetDataExists then begin if TSettings.AppParams.ParamByName[CT_PARAM_AllowDownloadNewCheckpointIfOlderThan].GetAsBoolean(TNetData.NetData.MinFutureBlocksToDownloadNewSafebox>200) then begin TNetData.NetData.MinFutureBlocksToDownloadNewSafebox:=TSettings.AppParams.ParamByName[CT_PARAM_MinFutureBlocksToDownloadNewSafebox].GetAsInteger(TNetData.NetData.MinFutureBlocksToDownloadNewSafebox); @@ -2269,7 +2257,7 @@ procedure TFRMWallet.UpdateNodeStatus; procedure TFRMWallet.UpdateOperations; Var accn : Int64; begin - accn := FAccountsGrid.AccountNumber(dgAccounts.Row); + accn := FAccountsGrid.AccountNumber(FrameAccountExplorer.dgAccounts.Row); FOperationsAccountGrid.AccountNumber := accn; end; @@ -2279,11 +2267,11 @@ procedure TFRMWallet.UpdatePrivateKeys; s : AnsiString; begin FNodeNotifyEvents.WatchKeys := FWalletKeys.AccountsKeyList; - if (cbMyPrivateKeys.ItemIndex>=0) then last_i := PtrInt(cbMyPrivateKeys.Items.Objects[cbMyPrivateKeys.ItemIndex]) + if (FrameAccountExplorer.cbMyPrivateKeys.ItemIndex>=0) then last_i := PtrInt(FrameAccountExplorer.cbMyPrivateKeys.Items.Objects[FrameAccountExplorer.cbMyPrivateKeys.ItemIndex]) else last_i := -1; - cbMyPrivateKeys.items.BeginUpdate; + FrameAccountExplorer.cbMyPrivateKeys.items.BeginUpdate; Try - cbMyPrivateKeys.Items.Clear; + FrameAccountExplorer.cbMyPrivateKeys.Items.Clear; For i:=0 to FWalletKeys.Count-1 do begin wk := FWalletKeys.Key[i]; if (wk.Name='') then begin @@ -2295,18 +2283,18 @@ procedure TFRMWallet.UpdatePrivateKeys; if Length(wk.CryptedKey)>0 then s:=s+' (**NEED PASSWORD**)' else s:=s+' (**PUBLIC KEY ONLY**)'; end; - cbMyPrivateKeys.Items.AddObject(s,TObject(i)); + FrameAccountExplorer.cbMyPrivateKeys.Items.AddObject(s,TObject(i)); end; - cbMyPrivateKeys.Sorted := true; - cbMyPrivateKeys.Sorted := false; - cbMyPrivateKeys.Items.InsertObject(0,'(All my private keys)',TObject(-1)); + FrameAccountExplorer.cbMyPrivateKeys.Sorted := true; + FrameAccountExplorer.cbMyPrivateKeys.Sorted := false; + FrameAccountExplorer.cbMyPrivateKeys.Items.InsertObject(0,'(All my private keys)',TObject(-1)); Finally - cbMyPrivateKeys.Items.EndUpdate; + FrameAccountExplorer.cbMyPrivateKeys.Items.EndUpdate; End; - last_i := cbMyPrivateKeys.Items.IndexOfObject(TObject(last_i)); + last_i := FrameAccountExplorer.cbMyPrivateKeys.Items.IndexOfObject(TObject(last_i)); if last_i<0 then last_i := 0; - if cbMyPrivateKeys.Items.Count>last_i then cbMyPrivateKeys.ItemIndex := last_i - else if cbMyPrivateKeys.Items.Count>=0 then cbMyPrivateKeys.ItemIndex := 0; + if FrameAccountExplorer.cbMyPrivateKeys.Items.Count>last_i then FrameAccountExplorer.cbMyPrivateKeys.ItemIndex := last_i + else if FrameAccountExplorer.cbMyPrivateKeys.Items.Count>=0 then FrameAccountExplorer.cbMyPrivateKeys.ItemIndex := 0; end; From 22170775b5c9ab228b42efd77db7adc704185384 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 30 Nov 2021 23:42:04 +0100 Subject: [PATCH 09/44] Some further graphical user interfaces fixes. --- .../Frames/UFrameAccountExplorer.pas | 25 ++++++++++--------- src/gui-classic/Frames/UFrameMessages.pas | 4 +-- src/gui-classic/UFRMWallet.dfm | 10 ++++---- src/gui-classic/UFRMWallet.pas | 11 ++++++-- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 32be5742c..88f9eecad 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -91,7 +91,8 @@ implementation {$R *.dfm} uses - UFRMWallet, UConst, UPCOrderedLists; + UFRMWallet, UConst, UPCOrderedLists, UFRMOperation, + USettings, UFRMAccountSelect, UBaseTypes, UAccounts; constructor TFrameAccountExplorer.Create(AOwner: TComponent); begin @@ -130,18 +131,18 @@ procedure TFrameAccountExplorer.bbChangeKeyNameClick(Sender: TObject); procedure TFrameAccountExplorer.bbSelectedAccountsOperationClick(Sender: TObject); var l : TOrderedCardinalList; begin - CheckIsReady; - if FSelectedAccountsGrid.AccountsCount<=0 then raise Exception.Create('Must select at least 1 account'); + FRMWallet.CheckIsReady; + if FRMWallet.SelectedAccountsGrid.AccountsCount<=0 then raise Exception.Create('Must select at least 1 account'); With TFRMOperation.Create(Self) do Try - l := FSelectedAccountsGrid.LockAccountsList; + l := FRMWallet.SelectedAccountsGrid.LockAccountsList; try SenderAccounts.CopyFrom(l); finally - FSelectedAccountsGrid.UnlockAccountsList; + FRMWallet.SelectedAccountsGrid.UnlockAccountsList; end; DefaultFee := TSettings.DefaultFee; - WalletKeys := FWalletKeys; + WalletKeys := FRMWallet.WalletKeys; ShowModal; Finally Free; @@ -151,23 +152,23 @@ procedure TFrameAccountExplorer.bbSelectedAccountsOperationClick(Sender: TObject procedure TFrameAccountExplorer.cbExploreMyAccountsClick(Sender: TObject); begin cbMyPrivateKeys.Enabled := cbExploreMyAccounts.Checked; - UpdateAccounts(true); - UpdateOperations; + FRMWallet.UpdateAccounts(true); + FRMWallet.UpdateOperations; end; procedure TFrameAccountExplorer.cbFilterAccountsClick(Sender: TObject); begin - If not DoUpdateAccountsFilter then UpdateAccounts(true); + If not FRMWallet.DoUpdateAccountsFilter then FRMWallet.UpdateAccounts(true); end; procedure TFrameAccountExplorer.cbMyPrivateKeysChange(Sender: TObject); begin - UpdateAccounts(true); + FRMWallet.UpdateAccounts(true); end; procedure TFrameAccountExplorer.dgAccountsClick(Sender: TObject); begin - UpdateOperations; + FRMWallet.UpdateOperations; end; procedure TFrameAccountExplorer.dgAccountsColumnMoved(Sender: TObject; FromIndex, ToIndex: Integer); @@ -201,7 +202,7 @@ procedure TFrameAccountExplorer.ebFindAccountNumberChange(Sender: TObject); LAccountNameRawValue.FromString(ebFindAccountNumber.Text); LAccNames := TOrderedRawList.Create; Try - if FNode.Bank.SafeBox.FindAccountsStartingByName(LAccountNameRawValue,LAccNames,1)>0 then begin + if FRMWallet.Node.Bank.SafeBox.FindAccountsStartingByName(LAccountNameRawValue,LAccNames,1)>0 then begin an := LAccNames.GetTag(0); ebFindAccountNumber.Color := clWindow; if FAccountsGrid.MoveRowToAccount(an) then begin diff --git a/src/gui-classic/Frames/UFrameMessages.pas b/src/gui-classic/Frames/UFrameMessages.pas index 31e12dfba..63423ab88 100644 --- a/src/gui-classic/Frames/UFrameMessages.pas +++ b/src/gui-classic/Frames/UFrameMessages.pas @@ -80,7 +80,7 @@ procedure TFrameMessages.bbSendAMessageClick(Sender: TObject); if lbNetConnections.Selected[i] then begin nc := TNetConnection(lbNetconnections.Items.Objects[i]); if TNetData.NetData.ConnectionExistsAndActive(nc) then begin - FNode.SendNodeMessage(nc,m,errors); + FRMWallet.Node.SendNodeMessage(nc,m,errors); memoMessages.Lines.Add(DateTimeToStr(now)+' Sent to '+nc.ClientRemoteAddr+' > '+m); end; end; @@ -88,7 +88,7 @@ procedure TFrameMessages.bbSendAMessageClick(Sender: TObject); end else begin nc := TNetConnection(lbNetconnections.Items.Objects[lbNetconnections.ItemIndex]); if TNetData.NetData.ConnectionExistsAndActive(nc) then begin - FNode.SendNodeMessage(nc,m,errors); + FRMWallet.Node.SendNodeMessage(nc,m,errors); memoMessages.Lines.Add(DateTimeToStr(now)+' Sent to '+nc.ClientRemoteAddr+' > '+m); end; end; diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index a82cdec8a..be24890bf 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -471,11 +471,11 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitWidth = 296 + ExplicitHeight = 59 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 857 + ExplicitWidth = 296 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 @@ -592,8 +592,8 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitWidth = 296 + ExplicitHeight = 59 inherited memoMessages: TMemo Width = 861 Height = 65 diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 1d31b5a38..a587754c6 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -201,7 +201,6 @@ TFRMWallet = class(TForm) Procedure OnMiningServerNewBlockFound(Sender : TObject); Procedure UpdateConnectionStatus; Procedure UpdateBlockChainState; - Procedure UpdateOperations; Procedure UpdateConfigChanged(Sender:TObject); Procedure UpdateNodeStatus; Procedure UpdateAvailableConnections; @@ -209,22 +208,30 @@ TFRMWallet = class(TForm) Function ForceMining : Boolean; virtual; Function GetAccountKeyForMiner : TAccountKey; Procedure DoUpdateAccounts; - Function DoUpdateAccountsFilter : Boolean; procedure CM_WalletChanged(var Msg: TMessage); message CM_PC_WalletKeysChanged; procedure CM_NetConnectionUpdated(var Msg: TMessage); message CM_PC_NetConnectionUpdated; public Procedure CheckIsReady; Procedure UpdatePrivateKeys; + Procedure UpdateOperations; Procedure UpdateAccounts(RefreshData : Boolean); + Function DoUpdateAccountsFilter : Boolean; + { Public declarations } + Property Node : TNode read FNode; + Property WalletKeys : TWalletKeysExt read FWalletKeys; Property MinersBlocksFound : Integer read FMinersBlocksFound write SetMinersBlocksFound; Property Updating : boolean read FUpdating write FUpdating; Property BlockChainGrid : TBlockChainGrid read FBlockChainGrid; + + Property SelectedAccountsGrid : TAccountsGrid read FSelectedAccountsGrid; + + end; var From 14e584bc4888535d86c27ad253c743a171a68c70 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Wed, 1 Dec 2021 14:44:43 +0100 Subject: [PATCH 10/44] PascalCoin builds, check for missing OnEvents --- .../Frames/UFrameAccountExplorer.dfm | 1 - .../Frames/UFrameAccountExplorer.pas | 64 ++++++------------- .../Frames/UFrameOperationsExplorer.dfm | 4 ++ .../Frames/UFrameOperationsExplorer.pas | 60 ++++++++++++++++- src/gui-classic/UFRMWallet.pas | 3 + 5 files changed, 85 insertions(+), 47 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.dfm b/src/gui-classic/Frames/UFrameAccountExplorer.dfm index 4f9a905c2..1dec49b90 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.dfm +++ b/src/gui-classic/Frames/UFrameAccountExplorer.dfm @@ -143,7 +143,6 @@ object FrameAccountExplorer: TFrameAccountExplorer Align = alBottom BevelOuter = bvNone TabOrder = 1 - OnClick = pnlAccountsInfoClick DesignSize = ( 400 34) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 88f9eecad..b04ab601c 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -47,7 +47,6 @@ TFrameAccountExplorer = class(TFrame) sbSelectedAccountsDelAll: TSpeedButton; bbSelectedAccountsOperation: TBitBtn; procedure bbAccountsRefreshClick(Sender: TObject); - procedure pnlAccountsInfoClick(Sender: TObject); procedure cbMyPrivateKeysChange(Sender: TObject); procedure dgAccountsClick(Sender: TObject); @@ -76,7 +75,6 @@ TFrameAccountExplorer = class(TFrame) var Key: Char); procedure cbFilterAccountsClick(Sender: TObject); - private { Private declarations } public @@ -193,7 +191,7 @@ procedure TFrameAccountExplorer.ebFindAccountNumberChange(Sender: TObject); ebFindAccountNumber.Font.Color := clDkGray; end else if TAccountComp.AccountTxtNumberToAccountNumber(ebFindAccountNumber.Text,an) then begin ebFindAccountNumber.Color := clWindow; - if FAccountsGrid.MoveRowToAccount(an) then begin + if FRMWallet.AccountsGrid.MoveRowToAccount(an) then begin ebFindAccountNumber.Font.Color := clWindowText; end else begin ebFindAccountNumber.Font.Color := clRed; @@ -205,7 +203,7 @@ procedure TFrameAccountExplorer.ebFindAccountNumberChange(Sender: TObject); if FRMWallet.Node.Bank.SafeBox.FindAccountsStartingByName(LAccountNameRawValue,LAccNames,1)>0 then begin an := LAccNames.GetTag(0); ebFindAccountNumber.Color := clWindow; - if FAccountsGrid.MoveRowToAccount(an) then begin + if FRMWallet.AccountsGrid.MoveRowToAccount(an) then begin ebFindAccountNumber.Font.Color := clWindowText; end else begin ebFindAccountNumber.Font.Color := clRed; @@ -231,8 +229,8 @@ procedure TFrameAccountExplorer.sbSearchAccountClick(Sender: TObject); begin F := TFRMAccountSelect.Create(Self); try - F.Node := FNode; - F.WalletKeys := FWalletKeys; + F.Node := FRMWallet.Node; + F.WalletKeys := FRMWallet.WalletKeys; F.ShowModal; finally F.Free; @@ -243,19 +241,19 @@ procedure TFrameAccountExplorer.sbSelectedAccountsAddAllClick(Sender: TObject); Var lsource,ltarget : TOrderedCardinalList; i : Integer; begin - lsource := FAccountsGrid.LockAccountsList; + lsource := FRMWallet.AccountsGrid.LockAccountsList; Try - ltarget := FSelectedAccountsGrid.LockAccountsList; + ltarget := FRMWallet.SelectedAccountsGrid.LockAccountsList; Try for i := 0 to lsource.Count-1 do begin - if FWalletKeys.IndexOfAccountKey(FNode.Bank.SafeBox.Account(lsource.Get(i)).accountInfo.accountKey)<0 then raise Exception.Create(Format('You cannot operate with account %d because private key not found in your wallet',[lsource.Get(i)])); + if FRMWallet.WalletKeys.IndexOfAccountKey(FRMWallet.Node.Bank.SafeBox.Account(lsource.Get(i)).accountInfo.accountKey)<0 then raise Exception.Create(Format('You cannot operate with account %d because private key not found in your wallet',[lsource.Get(i)])); ltarget.Add(lsource.Get(i)); end; Finally - FSelectedAccountsGrid.UnlockAccountsList; + FRMWallet.SelectedAccountsGrid.UnlockAccountsList; End; Finally - FAccountsGrid.UnlockAccountsList; + FRMWallet.AccountsGrid.UnlockAccountsList; End; end; @@ -264,33 +262,33 @@ procedure TFrameAccountExplorer.sbSelectedAccountsAddClick(Sender: TObject); an : Int64; i : Integer; begin - an := FAccountsGrid.AccountNumber(dgAccounts.Row); + an := FRMWallet.AccountsGrid.AccountNumber(dgAccounts.Row); if (an<0) then raise Exception.Create('No account selected'); - if FWalletKeys.IndexOfAccountKey(FNode.Bank.SafeBox.Account(an).accountInfo.accountkey)<0 then + if FRMWallet.WalletKeys.IndexOfAccountKey(FRMWallet.Node.Bank.SafeBox.Account(an).accountInfo.accountkey)<0 then raise Exception.Create(Format('You cannot add %s account because private key not found in your wallet.'#10+#10+'You''re not the owner!', [TAccountComp.AccountNumberToAccountTxtNumber(an)])); // Add - l := FSelectedAccountsGrid.LockAccountsList; + l := FRMWallet.SelectedAccountsGrid.LockAccountsList; selected := TOrderedCardinalList.Create; Try - FAccountsGrid.SelectedAccounts(selected); + FRMWallet.AccountsGrid.SelectedAccounts(selected); for i := 0 to selected.Count-1 do begin l.Add(selected.Get(i)); end; Finally selected.Free; - FSelectedAccountsGrid.UnlockAccountsList; + FRMWallet.SelectedAccountsGrid.UnlockAccountsList; End; end; procedure TFrameAccountExplorer.sbSelectedAccountsDelAllClick(Sender: TObject); Var l : TOrderedCardinalList; begin - l := FSelectedAccountsGrid.LockAccountsList; + l := FRMWallet.SelectedAccountsGrid.LockAccountsList; try l.Clear; finally - FSelectedAccountsGrid.UnlockAccountsList; + FRMWallet.SelectedAccountsGrid.UnlockAccountsList; end; end; @@ -298,46 +296,26 @@ procedure TFrameAccountExplorer.sbSelectedAccountsDelClick(Sender: TObject); Var an : Int64; l : TOrderedCardinalList; begin - l := FSelectedAccountsGrid.LockAccountsList; + l := FRMWallet.SelectedAccountsGrid.LockAccountsList; try - an := FSelectedAccountsGrid.AccountNumber(dgSelectedAccounts.Row); + an := FRMWallet.SelectedAccountsGrid.AccountNumber(dgSelectedAccounts.Row); if an>=0 then l.Remove(an); finally - FSelectedAccountsGrid.UnlockAccountsList; + FRMWallet.SelectedAccountsGrid.UnlockAccountsList; end; end; procedure TFrameAccountExplorer.ebFilterAccountByBalanceMinExit(Sender: TObject); begin - DoUpdateAccountsFilter; + FRMWallet.DoUpdateAccountsFilter; end; procedure TFrameAccountExplorer.ebFilterAccountByBalanceMinKeyPress(Sender: TObject; var Key: Char); begin - if key=#13 then DoUpdateAccountsFilter; + if key=#13 then FRMWallet.DoUpdateAccountsFilter; end; -procedure TFrameAccountExplorer.ebFilterOperationsAccountExit(Sender: TObject); -Var bstart,bend : Int64; -begin - If FUpdating then exit; - FUpdating := True; - Try - bstart := StrToInt64Def(ebFilterOperationsStartBlock.Text,-1); - if bstart>=0 then ebFilterOperationsStartBlock.Text := Inttostr(bstart) else ebFilterOperationsStartBlock.Text := ''; - bend := StrToInt64Def(ebFilterOperationsEndBlock.Text,-1); - if bend>=0 then ebFilterOperationsEndBlock.Text := Inttostr(bend) else ebFilterOperationsEndBlock.Text := ''; - FOperationsExplorerGrid.SetBlocks(bstart,bend); - Finally - FUpdating := false; - End; -end; -procedure TFrameAccountExplorer.ebFilterOperationsAccountKeyPress(Sender: TObject; - var Key: Char); -begin - if key=#13 then ebFilterOperationsAccountExit(Nil); -end; end. diff --git a/src/gui-classic/Frames/UFrameOperationsExplorer.dfm b/src/gui-classic/Frames/UFrameOperationsExplorer.dfm index 0307688be..cd3558847 100644 --- a/src/gui-classic/Frames/UFrameOperationsExplorer.dfm +++ b/src/gui-classic/Frames/UFrameOperationsExplorer.dfm @@ -27,6 +27,8 @@ object FrameOperationsExplorer: TFrameOperationsExplorer Width = 57 Height = 21 TabOrder = 0 + OnExit = ebFilterOperationsStartBlockExit + OnKeyPress = ebFilterOperationsStartBlockKeyPress end object ebFilterOperationsEndBlock: TEdit Left = 185 @@ -34,6 +36,8 @@ object FrameOperationsExplorer: TFrameOperationsExplorer Width = 57 Height = 21 TabOrder = 1 + OnExit = ebFilterOperationsEndBlockExit + OnKeyPress = ebFilterOperationsEndBlockKeyPress end end object dgOperationsExplorer: TDrawGrid diff --git a/src/gui-classic/Frames/UFrameOperationsExplorer.pas b/src/gui-classic/Frames/UFrameOperationsExplorer.pas index 28b4b2241..4d4d31af1 100644 --- a/src/gui-classic/Frames/UFrameOperationsExplorer.pas +++ b/src/gui-classic/Frames/UFrameOperationsExplorer.pas @@ -14,10 +14,16 @@ TFrameOperationsExplorer = class(TFrame) ebFilterOperationsStartBlock: TEdit; ebFilterOperationsEndBlock: TEdit; dgOperationsExplorer: TDrawGrid; + procedure ebFilterOperationsStartBlockExit(Sender: TObject); + procedure ebFilterOperationsEndBlockExit(Sender: TObject); + procedure ebFilterOperationsStartBlockKeyPress(Sender: TObject; + var Key: Char); + procedure ebFilterOperationsEndBlockKeyPress(Sender: TObject; + var Key: Char); - // skybuck: missing ?? - // procedure ebFilterOperationsAccountExit(Sender: TObject); - /// procedure ebFilterOperationsAccountKeyPress(Sender: TObject; var Key: Char); + // shared: + procedure ebFilterOperationsAccountExit(Sender: TObject); + procedure ebFilterOperationsAccountKeyPress(Sender: TObject; var Key: Char); private { Private declarations } @@ -32,6 +38,9 @@ implementation {$R *.dfm} +uses + UFRMWallet; + constructor TFrameOperationsExplorer.Create(AOwner: TComponent); begin inherited Create( AOwner ); @@ -46,6 +55,51 @@ destructor TFrameOperationsExplorer.Destroy; inherited Destroy; end; +procedure TFrameOperationsExplorer.ebFilterOperationsAccountExit(Sender: TObject); +Var bstart,bend : Int64; +begin + If FRMWallet.Updating then exit; + FRMWallet.Updating := True; + Try + bstart := StrToInt64Def(ebFilterOperationsStartBlock.Text,-1); + if bstart>=0 then ebFilterOperationsStartBlock.Text := Inttostr(bstart) else ebFilterOperationsStartBlock.Text := ''; + bend := StrToInt64Def(ebFilterOperationsEndBlock.Text,-1); + if bend>=0 then ebFilterOperationsEndBlock.Text := Inttostr(bend) else ebFilterOperationsEndBlock.Text := ''; + FRMWallet.OperationsExplorerGrid.SetBlocks(bstart,bend); + Finally + FRMWallet.Updating := false; + End; +end; + +procedure TFrameOperationsExplorer.ebFilterOperationsAccountKeyPress(Sender: TObject; + var Key: Char); +begin + if key=#13 then ebFilterOperationsAccountExit(Nil); +end; + +procedure TFrameOperationsExplorer.ebFilterOperationsStartBlockExit( + Sender: TObject); +begin + ebFilterOperationsAccountExit( Sender ); +end; + +procedure TFrameOperationsExplorer.ebFilterOperationsEndBlockExit( + Sender: TObject); +begin + ebFilterOperationsAccountExit( Sender ); +end; + +procedure TFrameOperationsExplorer.ebFilterOperationsStartBlockKeyPress( + Sender: TObject; var Key: Char); +begin + ebFilterOperationsAccountKeyPress( Sender, Key ); +end; + +procedure TFrameOperationsExplorer.ebFilterOperationsEndBlockKeyPress( + Sender: TObject; var Key: Char); +begin + ebFilterOperationsAccountKeyPress( Sender, Key ); +end; end. diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index a587754c6..7f1edce95 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -227,6 +227,9 @@ TFRMWallet = class(TForm) Property MinersBlocksFound : Integer read FMinersBlocksFound write SetMinersBlocksFound; Property Updating : boolean read FUpdating write FUpdating; + + property AccountsGrid : TAccountsGrid read FAccountsGrid; + property OperationsExplorerGrid : TOperationsGrid read FOperationsExplorerGrid; Property BlockChainGrid : TBlockChainGrid read FBlockChainGrid; Property SelectedAccountsGrid : TAccountsGrid read FSelectedAccountsGrid; From d4dcdfa0ae6a16db006291f8525cb26a31191df4 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Wed, 1 Dec 2021 15:00:07 +0100 Subject: [PATCH 11/44] All FRMWallet frames onEvent handlers fixed. --- .../Frames/UFrameAccountExplorer.dfm | 17 +++++++- .../Frames/UFrameBlockExplorer.dfm | 1 + src/gui-classic/UFRMWallet.dfm | 41 ++++++++++--------- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.dfm b/src/gui-classic/Frames/UFrameAccountExplorer.dfm index 1dec49b90..00bbe43eb 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.dfm +++ b/src/gui-classic/Frames/UFrameAccountExplorer.dfm @@ -62,6 +62,7 @@ object FrameAccountExplorer: TFrameAccountExplorer FF00FFFF00FFFF00FFFF00FFFF00FFAD827FC9AA9EEFE0B7EFDFB2E7CEACB890 86B89086FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF 00FFFF00FFBA968ABB988CB79188FF00FFFF00FFFF00FFFF00FF} + OnClick = sbSearchAccountClick end object cbMyPrivateKeys: TComboBox Left = 260 @@ -70,6 +71,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Height = 21 Style = csDropDownList TabOrder = 0 + OnChange = cbMyPrivateKeysChange end object cbExploreMyAccounts: TCheckBox Left = 11 @@ -78,6 +80,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Height = 19 Caption = 'Explore accounts with one of my Wallet Keys' TabOrder = 1 + OnClick = cbExploreMyAccountsClick end object ebFindAccountNumber: TEdit Left = 87 @@ -85,6 +88,8 @@ object FrameAccountExplorer: TFrameAccountExplorer Width = 83 Height = 21 TabOrder = 3 + OnChange = ebFindAccountNumberChange + OnExit = ebFindAccountNumberExit end object bbChangeKeyName: TBitBtn Left = 685 @@ -93,6 +98,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Height = 25 Caption = 'Change Key name' TabOrder = 2 + OnClick = bbChangeKeyNameClick end object cbFilterAccounts: TCheckBox Left = 260 @@ -101,6 +107,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Height = 19 Caption = 'Filter accounts by balance' TabOrder = 4 + OnClick = cbFilterAccountsClick end object ebFilterAccountByBalanceMin: TEdit Left = 412 @@ -109,6 +116,8 @@ object FrameAccountExplorer: TFrameAccountExplorer Height = 21 Hint = 'Min balance' TabOrder = 5 + OnExit = ebFilterAccountByBalanceMinExit + OnKeyPress = ebFilterAccountByBalanceMinKeyPress end object ebFilterAccountByBalanceMax: TEdit Left = 503 @@ -134,6 +143,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Height = 482 Align = alClient TabOrder = 0 + OnClick = dgAccountsClick end object pnlAccountsInfo: TPanel Left = 0 @@ -226,7 +236,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Top = 66 Width = 415 Height = 516 - ActivePage = tsAccountOperations + ActivePage = tsMultiSelectAccounts Align = alClient TabOrder = 2 object tsAccountOperations: TTabSheet @@ -334,6 +344,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Width = 33 Height = 31 Caption = '>' + OnClick = sbSelectedAccountsAddClick end object sbSelectedAccountsAddAll: TSpeedButton Left = 2 @@ -341,6 +352,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Width = 33 Height = 31 Caption = '>>' + OnClick = sbSelectedAccountsAddAllClick end object sbSelectedAccountsDel: TSpeedButton Left = 2 @@ -348,6 +360,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Width = 33 Height = 31 Caption = '<' + OnClick = sbSelectedAccountsDelClick end object sbSelectedAccountsDelAll: TSpeedButton Left = 2 @@ -355,6 +368,7 @@ object FrameAccountExplorer: TFrameAccountExplorer Width = 33 Height = 31 Caption = '<<' + OnClick = sbSelectedAccountsDelAllClick end end object bbSelectedAccountsOperation: TBitBtn @@ -422,6 +436,7 @@ object FrameAccountExplorer: TFrameAccountExplorer 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} Layout = blGlyphTop TabOrder = 4 + OnClick = bbSelectedAccountsOperationClick end end end diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.dfm b/src/gui-classic/Frames/UFrameBlockExplorer.dfm index 07a2dba24..7fbd7b74b 100644 --- a/src/gui-classic/Frames/UFrameBlockExplorer.dfm +++ b/src/gui-classic/Frames/UFrameBlockExplorer.dfm @@ -61,6 +61,7 @@ object FrameBlockChainExplorer: TFrameBlockChainExplorer Width = 56 Height = 21 TabOrder = 2 + OnExit = ebHashRateBackBlocksExit OnKeyPress = ebHashRateBackBlocksKeyPress end object cbHashRateUnits: TComboBox diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index be24890bf..6799ba408 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -426,6 +426,23 @@ object FRMWallet: TFRMWallet ExplicitHeight = 344 end end + inherited tsMultiSelectAccounts: TTabSheet + ExplicitWidth = 444 + ExplicitHeight = 344 + inherited dgSelectedAccounts: TDrawGrid + Height = 287 + end + inherited pnlSelectedAccountsTop: TPanel + Width = 444 + end + inherited pnlSelectedAccountsBottom: TPanel + Top = 318 + Width = 444 + end + inherited pnlSelectedAccountsLeft: TPanel + Height = 287 + end + end end end end @@ -439,8 +456,6 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitLeft = 31 - ExplicitTop = -84 ExplicitWidth = 857 ExplicitHeight = 438 inherited dgPendingOperations: TDrawGrid @@ -448,13 +463,10 @@ object FRMWallet: TFRMWallet Height = 352 ExplicitLeft = 0 ExplicitTop = 86 - ExplicitWidth = 826 - ExplicitHeight = 436 end inherited pnlPendingOperations: TPanel Width = 857 ExplicitLeft = 0 - ExplicitWidth = 826 inherited Label10: TLabel Width = 837 end @@ -471,11 +483,11 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 59 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 296 + ExplicitWidth = 857 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 @@ -495,8 +507,6 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitLeft = 40 - ExplicitTop = -3 ExplicitWidth = 857 ExplicitHeight = 438 inherited Panel1: TPanel @@ -521,8 +531,6 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitLeft = 36 - ExplicitTop = -93 ExplicitWidth = 857 ExplicitHeight = 438 inherited memoLogs: TMemo @@ -530,13 +538,10 @@ object FRMWallet: TFRMWallet Height = 397 ExplicitLeft = 0 ExplicitTop = 41 - ExplicitWidth = 821 - ExplicitHeight = 490 end inherited pnlTopLogs: TPanel Width = 857 ExplicitLeft = 0 - ExplicitWidth = 821 end end end @@ -550,8 +555,6 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitLeft = 166 - ExplicitTop = -134 ExplicitWidth = 857 ExplicitHeight = 438 inherited Label6: TLabel @@ -592,8 +595,8 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 59 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited memoMessages: TMemo Width = 861 Height = 65 From 5a5440abbce5ab4ec75b78aed09e633799cbf337 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Sun, 5 Dec 2021 02:40:13 +0100 Subject: [PATCH 12/44] Test code moved to TFRMTestWallet --- src/gui-classic/UFRMTestWallet.dfm | 5 + src/gui-classic/UFRMTestWallet.pas | 508 ++++++++++++++++++++++++++++ src/gui-classic/UFRMWallet.dfm | 7 +- src/gui-classic/UFRMWallet.pas | 429 +---------------------- src/pascalcoin_wallet_classic.dpr | 8 +- src/pascalcoin_wallet_classic.dproj | 11 + 6 files changed, 550 insertions(+), 418 deletions(-) create mode 100644 src/gui-classic/UFRMTestWallet.dfm create mode 100644 src/gui-classic/UFRMTestWallet.pas diff --git a/src/gui-classic/UFRMTestWallet.dfm b/src/gui-classic/UFRMTestWallet.dfm new file mode 100644 index 000000000..3dcf30c53 --- /dev/null +++ b/src/gui-classic/UFRMTestWallet.dfm @@ -0,0 +1,5 @@ +inherited FRMTestWallet: TFRMTestWallet + Caption = 'FRMTestWallet' + PixelsPerInch = 96 + TextHeight = 13 +end diff --git a/src/gui-classic/UFRMTestWallet.pas b/src/gui-classic/UFRMTestWallet.pas new file mode 100644 index 000000000..b4dc80384 --- /dev/null +++ b/src/gui-classic/UFRMTestWallet.pas @@ -0,0 +1,508 @@ +unit UFRMTestWallet; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, UFRMWallet, Vcl.Menus, Vcl.ExtCtrls, + UFrameMessages, UFrameNodeStats, UFrameLogs, UFrameOperationsExplorer, + UFrameBlockExplorer, UFramePendingOperations, UFrameAccountExplorer, + Vcl.ComCtrls, Vcl.StdCtrls, Vcl.Imaging.pngimage, + {$IFNDEF FPC} + System.Generics.Collections + {$ELSE} + Generics.Collections + {$ENDIF}; + +type + TFRMTestWallet = class(TFRMWallet) + procedure FormCreate(Sender: TObject); + private + procedure Test_ShowDiagnosticTool(Sender: TObject); + + { Private declarations } + Procedure InitMenuForTesting; + {$IFDEF TESTNET} + Procedure Test_RandomOperations(Sender: TObject); + {$IFDEF TESTING_NO_POW_CHECK} + Procedure Test_CreateABlock(Sender: TObject); + {$ENDIF} + Procedure Test_ConnectDisconnect(Sender: TObject); + {$ENDIF} +// Procedure Test_ShowPublicKeys(Sender: TObject); + Procedure Test_ShowOperationsInMemory(Sender: TObject); + Procedure Test_FindAccountsForPrivateBuyOrSwapToMe(Sender : TObject); + + public + { Public declarations } + end; + +var + FRMTestWallet: TFRMTestWallet; + +implementation + +{$IFnDEF FPC} + {$R *.dfm} +{$ELSE} + {$R *.lfm} +{$ENDIF} + +Uses + UFolderHelper, + {$IFDEF USE_GNUGETTEXT}gnugettext,{$ENDIF} + {$IFDEF Use_OpenSSL} + UOpenSSL, + {$ENDIF} + ULog, Grids, UAppParams, UBlockChain, + UNode, UGridUtils, UJSONFunctions, UAccounts, UNetProtocol, + UCrypto, Buttons, UPoolMining, URPC, UFRMAccountSelect, UConst, + UAccountKeyStorage, UBaseTypes, UPCDataTypes, UOrderedList, + UFRMRPCCalls, UTxMultiOperation, USettings, UEPasa, + UTime, + UFileStorage, + UThread, + UOpTransaction, + UFRMPascalCoinWalletConfig, + UFRMOperationsExplorer, + {$IFDEF TESTNET} + UFRMRandomOperations, + UFRMDiagnosticTool, + {$ENDIF} + UPCTNetDataExtraMessages, + UFRMAskForAccount, + UAbstractBTree, UEPasaDecoder, + UFRMAbout, + UFRMOperation, + UFRMWalletKeys, + UFRMPayloadDecoder, + UFRMNodesIp, + UFRMMemoText, + UCommon, + UPCOrderedLists, + UWallet; + +procedure TFRMTestWallet.InitMenuForTesting; +var mi : TMenuItem; +begin +{$IFDEF TESTNET} + mi := TMenuItem.Create(MainMenu); + mi.Caption:='-'; + miAbout.Add(mi); + {$IFDEF TESTING_NO_POW_CHECK} + mi := TMenuItem.Create(MainMenu); + mi.Caption:='Create a block'; + mi.OnClick:=Test_CreateABlock; + {$IFnDEF FPC} + mi.ShortCut := TextToShortCut('CTRL+B'); + {$ENDIF} + miAbout.Add(mi); + {$ENDIF} + mi := TMenuItem.Create(MainMenu); + mi.Caption:='Connect/Disconnect'; + mi.OnClick:=Test_ConnectDisconnect; + {$IFnDEF FPC} + mi.ShortCut := TextToShortCut('CTRL+D'); + {$ENDIF} + miAbout.Add(mi); + + mi := TMenuItem.Create(MainMenu); + mi.Caption:='Create Random operations'; + mi.OnClick:=Test_RandomOperations; + miAbout.Add(mi); + mi := TMenuItem.Create(MainMenu); + mi.Caption:='Diagnostic Tool'; + mi.OnClick:=Test_ShowDiagnosticTool; + miAbout.Add(mi); + mi := TMenuItem.Create(MainMenu); + mi.Caption:='Show public keys state'; + mi.OnClick:=Test_ShowPublicKeys; + miAbout.Add(mi); + mi := TMenuItem.Create(MainMenu); + mi.Caption:='Show operations in memory'; + mi.OnClick:=Test_ShowOperationsInMemory; + miAbout.Add(mi); + mi := TMenuItem.Create(MainMenu); + mi.Caption:='Search accounts for private or swap to me'; + mi.OnClick:=Test_FindAccountsForPrivateBuyOrSwapToMe; + miAbout.Add(mi); +{$ELSE} +{$ENDIF} + mi := TMenuItem.Create(MainMenu); + mi.Caption:='-'; + MiOperations.Add(mi); + mi := TMenuItem.Create(MainMenu); + mi.Caption:='Ask for Free Account'; + mi.OnClick:=miAskForAccountClick; + MiOperations.Add(mi); +end; + +{$IFDEF TESTING_NO_POW_CHECK} +procedure TFRMTestWallet.Test_CreateABlock(Sender: TObject); +var ops, mempoolOps : TPCOperationsComp; + nba : TBlockAccount; + errors : String; + +begin + {$IFDEF TESTNET} + ops := TPCOperationsComp.Create(Nil); + Try + ops.bank := FNode.Bank; + mempoolOps := FNode.LockMempoolRead; + try + ops.CopyFrom(mempoolOps); + finally + FNode.UnlockMempoolRead; + end; + ops.BlockPayload.FromString(IntToStr(FNode.Bank.BlocksCount)); + ops.nonce := FNode.Bank.BlocksCount; + ops.UpdateTimestamp; + FNode.AddNewBlockChain(Nil,ops,errors); + finally + ops.Free; + end; + {$ELSE} + Raise Exception.Create('NOT ALLOWED!'); + {$ENDIF} +end; +{$ENDIF} + + + +{$IFDEF TESTNET} + +procedure TFRMTestWallet.Test_ConnectDisconnect(Sender: TObject); +begin + TNetData.NetData.NetConnectionsActive := Not TNetData.NetData.NetConnectionsActive; + Exit; + if FNode.NetServer.Active then begin + FNode.NetServer.Active := False; + end else begin + FNode.NetServer.Active := True; + end; +end; + +procedure TFRMTestWallet.Test_RandomOperations(Sender: TObject); +Var FRM : TFRMRandomOperations; +begin + FRM := TFRMRandomOperations.Create(Self); + Try + FRM.SourceNode := FNode; + FRM.SourceWalletKeys := FWalletKeys; + FRM.ShowModal; + finally + FRM.Free; + end; +end; + +{$ENDIF} + +procedure TFRMTestWallet.Test_ShowOperationsInMemory(Sender: TObject); +var LFRM : TFRMMemoText; + i, nOps : Integer; + Lslist : TStrings; +begin + Lslist := TStringList.Create; + try + TPCOperationsStorage.PCOperationsStorage.GetStats(Lslist); + nOps := TPCOperationsStorage.PCOperationsStorage.Count; + LFRM := TFRMMemoText.Create(Self); + try + LFRM.InitData('Operations in Memory '+IntToStr(nOps),Lslist.Text); + LFRM.ShowModal; + finally + LFRM.Free; + end; + finally + Lslist.Free; + end; +end; + +(* + +// Skybuck: Code is broken ? + +procedure TFRMTestWallet.Test_ShowPublicKeys(Sender: TObject); +var F : TFRMMemoText; + i : Integer; + sl : TStrings; + ak : TAccountKey; + nmin,nmax : Integer; + l : TList; + Pacsd : PAccountKeyStorageData; + acc : TAccount; +begin + sl := TStringList.Create; + try + for i:=0 to FNode.Bank.SafeBox.AccountsCount-1 do begin + acc := FNode.Bank.SafeBox.Account(i); + if acc.accountInfo.new_publicKey.EC_OpenSSL_NID<>0 then begin + sl.Add(Format('Account %d new public key %d %s',[acc.account, + acc.accountInfo.new_publicKey.EC_OpenSSL_NID, + TCrypto.ToHexaString(TAccountComp.AccountKey2RawString(acc.accountInfo.new_publicKey))])); + end; + end; + {$IFnDEF USE_ABSTRACTMEM} + l := TAccountKeyStorage.KS.LockList; + try + sl.Add(Format('%d public keys in TAccountKeyStorage data',[l.count])); + for i:=0 to l.count-1 do begin + Pacsd := l[i]; + if (Pacsd^.counter<=0) then begin + sl.Add(Format('%d/%d public keys counter %d',[i+1,l.count,Pacsd^.counter])); + end; + if FNode.Bank.SafeBox.OrderedAccountKeysList.IndexOfAccountKey(Pacsd^.ptrAccountKey^)<0 then begin + sl.Add(Format('%d/%d public keys counter %d Type %d NOT FOUND %s',[i+1,l.count,Pacsd^.counter, + Pacsd^.ptrAccountKey^.EC_OpenSSL_NID, + TCrypto.ToHexaString(TAccountComp.AccountKey2RawString(Pacsd^.ptrAccountKey^))])); + end; + end; + finally + TAccountKeyStorage.KS.UnlockList; + end; + sl.Add(Format('%d public keys in %d accounts',[FNode.Bank.SafeBox.OrderedAccountKeysList.Count,FNode.Bank.Safebox.AccountsCount])); + for i:=0 to FNode.Bank.SafeBox.OrderedAccountKeysList.Count-1 do begin + ak := FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKey[i]; + if ( FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKeyList[i].Count > 0) then begin + nmin := FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKeyList[i].Get(0); + nmax := FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKeyList[i].Get( FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKeyList[i].Count-1 ); + end else begin + nmin := -1; nmax := -1; + end; + sl.Add(Format('%d/%d %d accounts (%d to %d) for key type %d %s',[ + i+1,FNode.Bank.SafeBox.OrderedAccountKeysList.Count, + FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKeyList[i].Count, + nmin,nmax, + ak.EC_OpenSSL_NID, + TCrypto.ToHexaString(TAccountComp.AccountKey2RawString(ak)) ])); + end; + {$ENDIF} + F := TFRMMemoText.Create(Self); + try + F.InitData('Keys in safebox',sl.Text); + F.ShowModal; + finally + F.Free; + end; + finally + sl.Free; + end; +end; + +*) + +procedure TFRMTestWallet.Test_FindAccountsForPrivateBuyOrSwapToMe(Sender: TObject); +{ This procedure will search in Safebox all accounts in "for_private_sale" state + or in "for_account_swap" that can be self-signed using one of my private keys + } + + function CaptureSender0Coins(var AAccountSender0Coins : TAccount; var ANeededWalletKey : TWalletKey) : Boolean; + var ii : Integer; + begin + // + Result := False; + for ii := 0 to WalletKeys.AccountsKeyList.Count-1 do begin + if WalletKeys.AccountsKeyList.AccountKeyList[ii].Count>0 then begin + if WalletKeys.TryGetKey(WalletKeys.AccountsKeyList.AccountKey[ii],ANeededWalletKey) then begin + AAccountSender0Coins := FNode.Bank.SafeBox.Account( WalletKeys.AccountsKeyList.AccountKeyList[ii].Get(0) ); + Result := True; + end; + end; + end; + + end; + + +var i : Integer; + LLines : TStrings; + LAccount, LAccountSender0Coins : TAccount; + LAccountOpDesc : String; + LCountAccountsFound_total, LCountAccountsFound_Operation : Integer; + LNeededWalletKey : TWalletKey; + s : String; + LOpTransaction : TOpTransaction; + LOperationsHashTree, LGlobalOperationsHashTree : TOperationsHashTree; + LStream : TStream; + LRaw : TRawBytes; + LFRM : TFRMMemoText; + LOpPayload : TOperationPayload; +begin + if Not WalletKeys.IsValidPassword then raise Exception.Create('Your wallet keys are locked'); + LOpPayload := CT_TOperationPayload_NUL; + if InputQuery('Search ATOMIC SWAP by SECRET','Insert SECRET value (use 0x... for Hexadecimal, otherwise will be a String)',s) then begin + if s.StartsWith('0x') then begin + if not UCommon.TryHex2Bytes(s,LOpPayload.payload_raw) then raise Exception.Create('SECRET value is not an Hexadecimal'+#10+s); + end else begin + LOpPayload.payload_raw.FromString(s); + end; + end; + LCountAccountsFound_total := 0; + LCountAccountsFound_Operation := 0; + LLines := TStringList.Create; + LGlobalOperationsHashTree := TOperationsHashTree.Create; + try + for i:=0 to FNode.Bank.SafeBox.AccountsCount-1 do begin + LAccountOpDesc := ''; + LAccount := FNode.Bank.SafeBox.Account(i); + + LOpTransaction := Nil; + Try + Case LAccount.accountInfo.state of + as_ForSale : begin + if Not TAccountComp.IsNullAccountKey( LAccount.accountInfo.new_publicKey ) then begin + if Not WalletKeys.TryGetKey(LAccount.accountInfo.new_publicKey,LNeededWalletKey) then Continue; + if Not Assigned(LNeededWalletKey.PrivateKey) then Continue; // Key not available! + end else Continue; + // Private sale to me + // Is in time? + if TAccountComp.IsAccountLocked(LAccount.accountInfo,FNode.Bank.BlocksCount) then begin + // + if LAccount.balance>=LAccount.accountInfo.price then begin + LAccountOpDesc := Format('Account %s is for private sale to me and with enough balance to pay %s (balance %s)',[ + TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account), + TAccountComp.FormatMoney(LAccount.accountInfo.price), + TAccountComp.FormatMoney(LAccount.balance)]); + // No key needed... just a transaction SELF SIGNED + LOpTransaction := TOpBuyAccount.CreateBuy(FNode.Bank.SafeBox.CurrentProtocol, + LAccount.account, LAccount.n_operation+1, + LAccount.account, LAccount.accountInfo.account_to_pay, LAccount.accountInfo.price, + 0,0, + LAccount.accountInfo.new_publicKey, + LNeededWalletKey.PrivateKey, + LOpPayload); + end else begin + LAccountOpDesc := Format('Account %s is for private sale to me but needs a Buy operation paying %s PASC (%s pending)',[ + TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account), + TAccountComp.FormatMoney(LAccount.accountInfo.price), + TAccountComp.FormatMoney(LAccount.accountInfo.price - LAccount.balance)]); + end; + end else begin + LAccountOpDesc := Format('Account %s is for private sale to me but is out-of-lock period',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account)]); + end; + end; + as_ForAtomicAccountSwap : begin + if Not WalletKeys.TryGetKey(LAccount.accountInfo.new_publicKey,LNeededWalletKey) then Continue; + if TAccountComp.IsAccountLocked(LAccount.accountInfo,FNode.Bank.BlocksCount) then begin + if TAccountComp.IsValidAccountInfoHashLockKey(LAccount.accountInfo,LOpPayload.payload_raw) then begin + // Atomic Account swap using provided SECRET + LAccountOpDesc := Format('Account %s is for Atomic Account Swap to me using SECRET %s',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account),UCommon.Bytes2Hex(LOpPayload.payload_raw,True)]); + // + // No key needed... just a Buy Operation SELF SIGNED + LOpTransaction := TOpBuyAccount.CreateBuy(FNode.Bank.SafeBox.CurrentProtocol, + LAccount.account, LAccount.n_operation+1, + LAccount.account, LAccount.accountInfo.account_to_pay, LAccount.accountInfo.price, + 0,0, + LAccount.accountInfo.new_publicKey, + LNeededWalletKey.PrivateKey, + LOpPayload); + end else begin + LAccountOpDesc := Format('Account %s is for Atomic Account Swap to me but SECRET %s is not valid',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account),UCommon.Bytes2Hex(LOpPayload.payload_raw,True)]); + end; + end else begin + LAccountOpDesc := Format('Account %s is for Atomic Account Swap to me but is out-of-lock period',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account)]); + end; + + end; + as_ForAtomicCoinSwap : begin + if Not TAccountComp.IsValidAccountInfoHashLockKey(LAccount.accountInfo,LOpPayload.payload_raw) then Continue; + // Atomic Coin swap using provided SECRET + if TAccountComp.IsAccountLocked(LAccount.accountInfo,FNode.Bank.BlocksCount) then begin + // Single transaction using amount 0 from ANY sender + if CaptureSender0Coins(LAccountSender0Coins,LNeededWalletKey) then begin + // Atomic Account swap using provided SECRET + LAccountOpDesc := Format('Account %s is for Atomic Coin Swap to me using SECRET %s',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account),UCommon.Bytes2Hex(LOpPayload.payload_raw,True)]); + // + // No key needed... just a transaction SELF SIGNED + LOpTransaction := TOpTransaction.CreateTransaction(FNode.Bank.SafeBox.CurrentProtocol, + LAccountSender0Coins.account, LAccountSender0Coins.n_operation+1, + LAccount.account, + LNeededWalletKey.PrivateKey, + 0,0, // No Amount no Fee + LOpPayload); + end else begin + LAccountOpDesc := Format('Account %s is for Atomic Coin Swap using SECRET %s but I have no key to sign',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account),UCommon.Bytes2Hex(LOpPayload.payload_raw,True)]); + end; + end else begin + LAccountOpDesc := Format('Account %s is for Atomic Coin Swap using SECRET %s but is out-of-lock period',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account),UCommon.Bytes2Hex(LOpPayload.payload_raw,True)]); + end; + end; + else Continue; + End; + + // Do + Inc(LCountAccountsFound_total); + LLines.Add(Format('%s',[LAccountOpDesc])); + if Assigned(LOpTransaction) then begin + Inc(LCountAccountsFound_Operation); + LOperationsHashTree := TOperationsHashTree.Create; + LStream := TMemoryStream.Create; + try + LOperationsHashTree.AddOperationToHashTree(LOpTransaction); + LGlobalOperationsHashTree.AddOperationToHashTree(LOpTransaction); + LLines.Add(Format('Operation: %s',[LOpTransaction.ToString])); + LOperationsHashTree.SaveOperationsHashTreeToStream(LStream,False); + LRaw.FromStream(LStream); + LLines.Add(Format('rawoperations (for JSON-RPC call): %s',[LRaw.ToHexaString])); + finally + LOperationsHashTree.Free; + LStream.Free; + end; + end; + + Finally + FreeAndNil(LOpTransaction); + End; + end; // For + LLines.Add(''); + LLines.Add(Format('Found %d of %d available account from a Safebox with %d accounts',[ + LCountAccountsFound_Operation, + LCountAccountsFound_total, + FNode.Bank.SafeBox.AccountsCount])); + LStream := TMemoryStream.Create; + try + LGlobalOperationsHashTree.SaveOperationsHashTreeToStream(LStream,False); + LRaw.FromStream(LStream); + LLines.Add(Format('rawoperations (for JSON-RPC call) of %d operations: %s',[LGlobalOperationsHashTree.OperationsCount, LRaw.ToHexaString])); + finally + LStream.Free; + end; + // + LFRM := TFRMMemoText.Create(Self); + try + LFRM.InitData('',LLines.Text); + LFRM.ShowModal; + finally + LFRM.Free; + end; + finally + LLines.Free; + LGlobalOperationsHashTree.Free; + end; +end; + +procedure TFRMTestWallet.Test_ShowDiagnosticTool(Sender: TObject); +{$IFDEF TESTNET} +var + LDialog : TFRMDiagnosticTool; +{$ENDIF} +begin +{$IFDEF TESTNET} + LDialog := TFRMDiagnosticTool.Create(Nil); + try + LDialog.ShowModal; + finally + LDialog.Free; + end; +{$ENDIF} +end; + + +procedure TFRMTestWallet.FormCreate(Sender: TObject); +begin + inherited; + + // Things for testing purposes only + InitMenuForTesting; +end; + +end. diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 6799ba408..6a29c713c 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -417,8 +417,6 @@ object FRMWallet: TFRMWallet ExplicitWidth = 452 ExplicitHeight = 372 inherited tsAccountOperations: TTabSheet - ExplicitWidth = 444 - ExplicitHeight = 344 inherited dgAccountOperations: TDrawGrid Width = 444 Height = 344 @@ -431,16 +429,21 @@ object FRMWallet: TFRMWallet ExplicitHeight = 344 inherited dgSelectedAccounts: TDrawGrid Height = 287 + ExplicitHeight = 287 end inherited pnlSelectedAccountsTop: TPanel Width = 444 + ExplicitWidth = 444 end inherited pnlSelectedAccountsBottom: TPanel Top = 318 Width = 444 + ExplicitTop = 318 + ExplicitWidth = 444 end inherited pnlSelectedAccountsLeft: TPanel Height = 287 + ExplicitHeight = 287 end end end diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 7f1edce95..acb9abd63 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -36,9 +36,18 @@ interface UCrypto, Buttons, UPoolMining, URPC, UFRMAccountSelect, UConst, UAccountKeyStorage, UBaseTypes, UPCDataTypes, UOrderedList, UFRMRPCCalls, UTxMultiOperation, USettings, UEPasa, - {$IFNDEF FPC}System.Generics.Collections, UFrameAccountExplorer, - UFramePendingOperations, UFrameMessages, UFrameNodeStats, UFrameLogs, - UFrameOperationsExplorer, UFrameBlockExplorer{$ELSE}Generics.Collections{$ENDIF}; + UFrameAccountExplorer, + UFramePendingOperations, + UFrameMessages, + UFrameNodeStats, + UFrameLogs, + UFrameOperationsExplorer, + UFrameBlockExplorer, + {$IFNDEF FPC} + System.Generics.Collections + {$ELSE} + Generics.Collections + {$ENDIF}; Const CM_PC_WalletKeysChanged = WM_USER + 1; @@ -117,6 +126,7 @@ TFRMWallet = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); + procedure MiOperationsExplorerClick(Sender: TObject); procedure MiRPCCallsClick(Sender: TObject); procedure TimerUpdateStatusTimer(Sender: TObject); @@ -138,7 +148,6 @@ TFRMWallet = class(TForm) procedure MiFindOperationbyOpHashClick(Sender: TObject); procedure MiAccountInformationClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure Test_ShowDiagnosticTool(Sender: TObject); procedure miAskForAccountClick(Sender: TObject); private @@ -151,17 +160,6 @@ TFRMWallet = class(TForm) Procedure FillAccountInformation(Const Strings : TStrings; Const AccountNumber : Cardinal); Procedure FillOperationInformation(Const Strings : TStrings; Const OperationResume : TOperationResume); Procedure InitMacOSMenu; - Procedure InitMenuForTesting; - {$IFDEF TESTNET} - Procedure Test_RandomOperations(Sender: TObject); - {$IFDEF TESTING_NO_POW_CHECK} - Procedure Test_CreateABlock(Sender: TObject); - {$ENDIF} - Procedure Test_ConnectDisconnect(Sender: TObject); - {$ENDIF} - Procedure Test_ShowPublicKeys(Sender: TObject); - Procedure Test_ShowOperationsInMemory(Sender: TObject); - Procedure Test_FindAccountsForPrivateBuyOrSwapToMe(Sender : TObject); procedure OnAccountsGridUpdatedData(Sender : TObject); protected { Private declarations } @@ -187,6 +185,7 @@ TFRMWallet = class(TForm) FMustProcessNetConnectionUpdated : Boolean; FThreadActivate : TObject; FLastAccountsGridInvalidateTC : TTickCount; + Procedure OnNewAccount(Sender : TObject); Procedure OnReceivedHelloMessage(Sender : TObject); Procedure OnNetStatisticsChanged(Sender : TObject); @@ -467,206 +466,11 @@ procedure TFRMWallet.Activate; end; -procedure TFRMWallet.InitMenuForTesting; -var mi : TMenuItem; -begin -{$IFDEF TESTNET} - mi := TMenuItem.Create(MainMenu); - mi.Caption:='-'; - miAbout.Add(mi); - {$IFDEF TESTING_NO_POW_CHECK} - mi := TMenuItem.Create(MainMenu); - mi.Caption:='Create a block'; - mi.OnClick:=Test_CreateABlock; - {$IFnDEF FPC} - mi.ShortCut := TextToShortCut('CTRL+B'); - {$ENDIF} - miAbout.Add(mi); - {$ENDIF} - mi := TMenuItem.Create(MainMenu); - mi.Caption:='Connect/Disconnect'; - mi.OnClick:=Test_ConnectDisconnect; - {$IFnDEF FPC} - mi.ShortCut := TextToShortCut('CTRL+D'); - {$ENDIF} - miAbout.Add(mi); - - mi := TMenuItem.Create(MainMenu); - mi.Caption:='Create Random operations'; - mi.OnClick:=Test_RandomOperations; - miAbout.Add(mi); - mi := TMenuItem.Create(MainMenu); - mi.Caption:='Diagnostic Tool'; - mi.OnClick:=Test_ShowDiagnosticTool; - miAbout.Add(mi); - mi := TMenuItem.Create(MainMenu); - mi.Caption:='Show public keys state'; - mi.OnClick:=Test_ShowPublicKeys; - miAbout.Add(mi); - mi := TMenuItem.Create(MainMenu); - mi.Caption:='Show operations in memory'; - mi.OnClick:=Test_ShowOperationsInMemory; - miAbout.Add(mi); - mi := TMenuItem.Create(MainMenu); - mi.Caption:='Search accounts for private or swap to me'; - mi.OnClick:=Test_FindAccountsForPrivateBuyOrSwapToMe; - miAbout.Add(mi); -{$ELSE} -{$ENDIF} - mi := TMenuItem.Create(MainMenu); - mi.Caption:='-'; - MiOperations.Add(mi); - mi := TMenuItem.Create(MainMenu); - mi.Caption:='Ask for Free Account'; - mi.OnClick:=miAskForAccountClick; - MiOperations.Add(mi); -end; - -{$IFDEF TESTING_NO_POW_CHECK} -procedure TFRMWallet.Test_CreateABlock(Sender: TObject); -var ops, mempoolOps : TPCOperationsComp; - nba : TBlockAccount; - errors : String; - -begin - {$IFDEF TESTNET} - ops := TPCOperationsComp.Create(Nil); - Try - ops.bank := FNode.Bank; - mempoolOps := FNode.LockMempoolRead; - try - ops.CopyFrom(mempoolOps); - finally - FNode.UnlockMempoolRead; - end; - ops.BlockPayload.FromString(IntToStr(FNode.Bank.BlocksCount)); - ops.nonce := FNode.Bank.BlocksCount; - ops.UpdateTimestamp; - FNode.AddNewBlockChain(Nil,ops,errors); - finally - ops.Free; - end; - {$ELSE} - Raise Exception.Create('NOT ALLOWED!'); - {$ENDIF} -end; -{$ENDIF} -{$IFDEF TESTNET} -procedure TFRMWallet.Test_ConnectDisconnect(Sender: TObject); -begin - TNetData.NetData.NetConnectionsActive := Not TNetData.NetData.NetConnectionsActive; - Exit; - if FNode.NetServer.Active then begin - FNode.NetServer.Active := False; - end else begin - FNode.NetServer.Active := True; - end; -end; -procedure TFRMWallet.Test_RandomOperations(Sender: TObject); -Var FRM : TFRMRandomOperations; -begin - FRM := TFRMRandomOperations.Create(Self); - Try - FRM.SourceNode := FNode; - FRM.SourceWalletKeys := FWalletKeys; - FRM.ShowModal; - finally - FRM.Free; - end; -end; -{$ENDIF} -procedure TFRMWallet.Test_ShowOperationsInMemory(Sender: TObject); -var LFRM : TFRMMemoText; - i, nOps : Integer; - Lslist : TStrings; -begin - Lslist := TStringList.Create; - try - TPCOperationsStorage.PCOperationsStorage.GetStats(Lslist); - nOps := TPCOperationsStorage.PCOperationsStorage.Count; - LFRM := TFRMMemoText.Create(Self); - try - LFRM.InitData('Operations in Memory '+IntToStr(nOps),Lslist.Text); - LFRM.ShowModal; - finally - LFRM.Free; - end; - finally - Lslist.Free; - end; -end; - -procedure TFRMWallet.Test_ShowPublicKeys(Sender: TObject); -var F : TFRMMemoText; - i : Integer; - sl : TStrings; - ak : TAccountKey; - nmin,nmax : Integer; - l : TList; - Pacsd : PAccountKeyStorageData; - acc : TAccount; -begin - sl := TStringList.Create; - try - for i:=0 to FNode.Bank.SafeBox.AccountsCount-1 do begin - acc := FNode.Bank.SafeBox.Account(i); - if acc.accountInfo.new_publicKey.EC_OpenSSL_NID<>0 then begin - sl.Add(Format('Account %d new public key %d %s',[acc.account, - acc.accountInfo.new_publicKey.EC_OpenSSL_NID, - TCrypto.ToHexaString(TAccountComp.AccountKey2RawString(acc.accountInfo.new_publicKey))])); - end; - end; - {$IFnDEF USE_ABSTRACTMEM} - l := TAccountKeyStorage.KS.LockList; - try - sl.Add(Format('%d public keys in TAccountKeyStorage data',[l.count])); - for i:=0 to l.count-1 do begin - Pacsd := l[i]; - if (Pacsd^.counter<=0) then begin - sl.Add(Format('%d/%d public keys counter %d',[i+1,l.count,Pacsd^.counter])); - end; - if FNode.Bank.SafeBox.OrderedAccountKeysList.IndexOfAccountKey(Pacsd^.ptrAccountKey^)<0 then begin - sl.Add(Format('%d/%d public keys counter %d Type %d NOT FOUND %s',[i+1,l.count,Pacsd^.counter, - Pacsd^.ptrAccountKey^.EC_OpenSSL_NID, - TCrypto.ToHexaString(TAccountComp.AccountKey2RawString(Pacsd^.ptrAccountKey^))])); - end; - end; - finally - TAccountKeyStorage.KS.UnlockList; - end; - sl.Add(Format('%d public keys in %d accounts',[FNode.Bank.SafeBox.OrderedAccountKeysList.Count,FNode.Bank.Safebox.AccountsCount])); - for i:=0 to FNode.Bank.SafeBox.OrderedAccountKeysList.Count-1 do begin - ak := FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKey[i]; - if ( FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKeyList[i].Count > 0) then begin - nmin := FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKeyList[i].Get(0); - nmax := FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKeyList[i].Get( FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKeyList[i].Count-1 ); - end else begin - nmin := -1; nmax := -1; - end; - sl.Add(Format('%d/%d %d accounts (%d to %d) for key type %d %s',[ - i+1,FNode.Bank.SafeBox.OrderedAccountKeysList.Count, - FNode.Bank.SafeBox.OrderedAccountKeysList.AccountKeyList[i].Count, - nmin,nmax, - ak.EC_OpenSSL_NID, - TCrypto.ToHexaString(TAccountComp.AccountKey2RawString(ak)) ])); - end; - {$ENDIF} - F := TFRMMemoText.Create(Self); - try - F.InitData('Keys in safebox',sl.Text); - F.ShowModal; - finally - F.Free; - end; - finally - sl.Free; - end; -end; function TFRMWallet.ForceMining: Boolean; begin @@ -785,8 +589,6 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FBackgroundLabel.Alignment := taCenter; FBackgroundLabel.WordWrap := True; - // Things for testing purposes only - InitMenuForTesting; {$ifdef DARWIN} // this is macOS specific menu layout InitMacOSMenu; @@ -1381,210 +1183,7 @@ procedure TFRMWallet.MiDecodePayloadClick(Sender: TObject); end; end; -procedure TFRMWallet.Test_FindAccountsForPrivateBuyOrSwapToMe(Sender: TObject); -{ This procedure will search in Safebox all accounts in "for_private_sale" state - or in "for_account_swap" that can be self-signed using one of my private keys - } - - function CaptureSender0Coins(var AAccountSender0Coins : TAccount; var ANeededWalletKey : TWalletKey) : Boolean; - var ii : Integer; - begin - // - Result := False; - for ii := 0 to WalletKeys.AccountsKeyList.Count-1 do begin - if WalletKeys.AccountsKeyList.AccountKeyList[ii].Count>0 then begin - if WalletKeys.TryGetKey(WalletKeys.AccountsKeyList.AccountKey[ii],ANeededWalletKey) then begin - AAccountSender0Coins := FNode.Bank.SafeBox.Account( WalletKeys.AccountsKeyList.AccountKeyList[ii].Get(0) ); - Result := True; - end; - end; - end; - - end; - - -var i : Integer; - LLines : TStrings; - LAccount, LAccountSender0Coins : TAccount; - LAccountOpDesc : String; - LCountAccountsFound_total, LCountAccountsFound_Operation : Integer; - LNeededWalletKey : TWalletKey; - s : String; - LOpTransaction : TOpTransaction; - LOperationsHashTree, LGlobalOperationsHashTree : TOperationsHashTree; - LStream : TStream; - LRaw : TRawBytes; - LFRM : TFRMMemoText; - LOpPayload : TOperationPayload; -begin - if Not WalletKeys.IsValidPassword then raise Exception.Create('Your wallet keys are locked'); - LOpPayload := CT_TOperationPayload_NUL; - if InputQuery('Search ATOMIC SWAP by SECRET','Insert SECRET value (use 0x... for Hexadecimal, otherwise will be a String)',s) then begin - if s.StartsWith('0x') then begin - if not UCommon.TryHex2Bytes(s,LOpPayload.payload_raw) then raise Exception.Create('SECRET value is not an Hexadecimal'+#10+s); - end else begin - LOpPayload.payload_raw.FromString(s); - end; - end; - LCountAccountsFound_total := 0; - LCountAccountsFound_Operation := 0; - LLines := TStringList.Create; - LGlobalOperationsHashTree := TOperationsHashTree.Create; - try - for i:=0 to FNode.Bank.SafeBox.AccountsCount-1 do begin - LAccountOpDesc := ''; - LAccount := FNode.Bank.SafeBox.Account(i); - LOpTransaction := Nil; - Try - Case LAccount.accountInfo.state of - as_ForSale : begin - if Not TAccountComp.IsNullAccountKey( LAccount.accountInfo.new_publicKey ) then begin - if Not WalletKeys.TryGetKey(LAccount.accountInfo.new_publicKey,LNeededWalletKey) then Continue; - if Not Assigned(LNeededWalletKey.PrivateKey) then Continue; // Key not available! - end else Continue; - // Private sale to me - // Is in time? - if TAccountComp.IsAccountLocked(LAccount.accountInfo,FNode.Bank.BlocksCount) then begin - // - if LAccount.balance>=LAccount.accountInfo.price then begin - LAccountOpDesc := Format('Account %s is for private sale to me and with enough balance to pay %s (balance %s)',[ - TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account), - TAccountComp.FormatMoney(LAccount.accountInfo.price), - TAccountComp.FormatMoney(LAccount.balance)]); - // No key needed... just a transaction SELF SIGNED - LOpTransaction := TOpBuyAccount.CreateBuy(FNode.Bank.SafeBox.CurrentProtocol, - LAccount.account, LAccount.n_operation+1, - LAccount.account, LAccount.accountInfo.account_to_pay, LAccount.accountInfo.price, - 0,0, - LAccount.accountInfo.new_publicKey, - LNeededWalletKey.PrivateKey, - LOpPayload); - end else begin - LAccountOpDesc := Format('Account %s is for private sale to me but needs a Buy operation paying %s PASC (%s pending)',[ - TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account), - TAccountComp.FormatMoney(LAccount.accountInfo.price), - TAccountComp.FormatMoney(LAccount.accountInfo.price - LAccount.balance)]); - end; - end else begin - LAccountOpDesc := Format('Account %s is for private sale to me but is out-of-lock period',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account)]); - end; - end; - as_ForAtomicAccountSwap : begin - if Not WalletKeys.TryGetKey(LAccount.accountInfo.new_publicKey,LNeededWalletKey) then Continue; - if TAccountComp.IsAccountLocked(LAccount.accountInfo,FNode.Bank.BlocksCount) then begin - if TAccountComp.IsValidAccountInfoHashLockKey(LAccount.accountInfo,LOpPayload.payload_raw) then begin - // Atomic Account swap using provided SECRET - LAccountOpDesc := Format('Account %s is for Atomic Account Swap to me using SECRET %s',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account),UCommon.Bytes2Hex(LOpPayload.payload_raw,True)]); - // - // No key needed... just a Buy Operation SELF SIGNED - LOpTransaction := TOpBuyAccount.CreateBuy(FNode.Bank.SafeBox.CurrentProtocol, - LAccount.account, LAccount.n_operation+1, - LAccount.account, LAccount.accountInfo.account_to_pay, LAccount.accountInfo.price, - 0,0, - LAccount.accountInfo.new_publicKey, - LNeededWalletKey.PrivateKey, - LOpPayload); - end else begin - LAccountOpDesc := Format('Account %s is for Atomic Account Swap to me but SECRET %s is not valid',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account),UCommon.Bytes2Hex(LOpPayload.payload_raw,True)]); - end; - end else begin - LAccountOpDesc := Format('Account %s is for Atomic Account Swap to me but is out-of-lock period',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account)]); - end; - - end; - as_ForAtomicCoinSwap : begin - if Not TAccountComp.IsValidAccountInfoHashLockKey(LAccount.accountInfo,LOpPayload.payload_raw) then Continue; - // Atomic Coin swap using provided SECRET - if TAccountComp.IsAccountLocked(LAccount.accountInfo,FNode.Bank.BlocksCount) then begin - // Single transaction using amount 0 from ANY sender - if CaptureSender0Coins(LAccountSender0Coins,LNeededWalletKey) then begin - // Atomic Account swap using provided SECRET - LAccountOpDesc := Format('Account %s is for Atomic Coin Swap to me using SECRET %s',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account),UCommon.Bytes2Hex(LOpPayload.payload_raw,True)]); - // - // No key needed... just a transaction SELF SIGNED - LOpTransaction := TOpTransaction.CreateTransaction(FNode.Bank.SafeBox.CurrentProtocol, - LAccountSender0Coins.account, LAccountSender0Coins.n_operation+1, - LAccount.account, - LNeededWalletKey.PrivateKey, - 0,0, // No Amount no Fee - LOpPayload); - end else begin - LAccountOpDesc := Format('Account %s is for Atomic Coin Swap using SECRET %s but I have no key to sign',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account),UCommon.Bytes2Hex(LOpPayload.payload_raw,True)]); - end; - end else begin - LAccountOpDesc := Format('Account %s is for Atomic Coin Swap using SECRET %s but is out-of-lock period',[TAccountComp.AccountNumberToAccountTxtNumber(LAccount.account),UCommon.Bytes2Hex(LOpPayload.payload_raw,True)]); - end; - end; - else Continue; - End; - - // Do - Inc(LCountAccountsFound_total); - LLines.Add(Format('%s',[LAccountOpDesc])); - if Assigned(LOpTransaction) then begin - Inc(LCountAccountsFound_Operation); - LOperationsHashTree := TOperationsHashTree.Create; - LStream := TMemoryStream.Create; - try - LOperationsHashTree.AddOperationToHashTree(LOpTransaction); - LGlobalOperationsHashTree.AddOperationToHashTree(LOpTransaction); - LLines.Add(Format('Operation: %s',[LOpTransaction.ToString])); - LOperationsHashTree.SaveOperationsHashTreeToStream(LStream,False); - LRaw.FromStream(LStream); - LLines.Add(Format('rawoperations (for JSON-RPC call): %s',[LRaw.ToHexaString])); - finally - LOperationsHashTree.Free; - LStream.Free; - end; - end; - - Finally - FreeAndNil(LOpTransaction); - End; - end; // For - LLines.Add(''); - LLines.Add(Format('Found %d of %d available account from a Safebox with %d accounts',[ - LCountAccountsFound_Operation, - LCountAccountsFound_total, - FNode.Bank.SafeBox.AccountsCount])); - LStream := TMemoryStream.Create; - try - LGlobalOperationsHashTree.SaveOperationsHashTreeToStream(LStream,False); - LRaw.FromStream(LStream); - LLines.Add(Format('rawoperations (for JSON-RPC call) of %d operations: %s',[LGlobalOperationsHashTree.OperationsCount, LRaw.ToHexaString])); - finally - LStream.Free; - end; - // - LFRM := TFRMMemoText.Create(Self); - try - LFRM.InitData('',LLines.Text); - LFRM.ShowModal; - finally - LFRM.Free; - end; - finally - LLines.Free; - LGlobalOperationsHashTree.Free; - end; -end; - -procedure TFRMWallet.Test_ShowDiagnosticTool(Sender: TObject); -{$IFDEF TESTNET} -var - LDialog : TFRMDiagnosticTool; -{$ENDIF} -begin -{$IFDEF TESTNET} - LDialog := TFRMDiagnosticTool.Create(Nil); - try - LDialog.ShowModal; - finally - LDialog.Free; - end; -{$ENDIF} -end; procedure TFRMWallet.MiFindaccountClick(Sender: TObject); begin diff --git a/src/pascalcoin_wallet_classic.dpr b/src/pascalcoin_wallet_classic.dpr index 5e624e44c..d64d2c4e9 100644 --- a/src/pascalcoin_wallet_classic.dpr +++ b/src/pascalcoin_wallet_classic.dpr @@ -96,7 +96,8 @@ uses UFrameLogs in 'gui-classic\Frames\UFrameLogs.pas' {FrameLogs: TFrame}, UFrameNodeStats in 'gui-classic\Frames\UFrameNodeStats.pas' {FrameNodeStats: TFrame}, UFrameMessages in 'gui-classic\Frames\UFrameMessages.pas' {FrameMessages: TFrame}, - UnitReIntegrate in 'gui-classic\UnitReIntegrate.pas'; + UnitReIntegrate in 'gui-classic\UnitReIntegrate.pas', + UFRMTestWallet in 'gui-classic\UFRMTestWallet.pas' {FRMTestWallet}; {$R *.res} @@ -104,6 +105,11 @@ begin Application.Initialize; {$IFDEF WINDOWS}Application.MainFormOnTaskbar := True;{$ENDIF} Application.Title := 'Pascal Coin Wallet, Miner & Explorer'; + + {$IFDEF TESTNET} + Application.CreateForm(TFRMTestWallet, FRMTestWallet); + {$ELSE} Application.CreateForm(TFRMWallet, FRMWallet); + {$ENDIF} Application.Run; end. diff --git a/src/pascalcoin_wallet_classic.dproj b/src/pascalcoin_wallet_classic.dproj index 86c736dd8..d2262fd9c 100644 --- a/src/pascalcoin_wallet_classic.dproj +++ b/src/pascalcoin_wallet_classic.dproj @@ -270,6 +270,11 @@ TFrame + +
FRMTestWallet
+ dfm +
+ Cfg_2 Base @@ -307,6 +312,12 @@ true + + + .\ + true + + 1 From 59b31f2a696c88692dd71b171d05ebea0c4f96bf Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Sun, 5 Dec 2021 02:51:13 +0100 Subject: [PATCH 13/44] FRMNodesIP re-designed to auto-resize --- src/gui-classic/UFRMNodesIp.dfm | 130 ++++++++++++++++++-------------- src/gui-classic/UFRMNodesIp.pas | 5 +- 2 files changed, 75 insertions(+), 60 deletions(-) diff --git a/src/gui-classic/UFRMNodesIp.dfm b/src/gui-classic/UFRMNodesIp.dfm index ebc059f6e..7f20edeff 100644 --- a/src/gui-classic/UFRMNodesIp.dfm +++ b/src/gui-classic/UFRMNodesIp.dfm @@ -4,8 +4,8 @@ object FRMNodesIp: TFRMNodesIp BorderIcons = [biSystemMenu] BorderStyle = bsSingle Caption = 'Nodes IP' - ClientHeight = 367 - ClientWidth = 334 + ClientHeight = 362 + ClientWidth = 362 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -17,70 +17,84 @@ object FRMNodesIp: TFRMNodesIp OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 - object Label1: TLabel - Left = 30 - Top = 25 - Width = 143 - Height = 13 - Caption = 'Available Nodes Ip to connect' - end object memoNodesIp: TMemo - Left = 30 - Top = 45 - Width = 276 - Height = 226 + Left = 0 + Top = 29 + Width = 362 + Height = 271 + Align = alClient Lines.Strings = ( 'memoNodesIp') ScrollBars = ssBoth TabOrder = 0 + ExplicitLeft = 198 + ExplicitTop = 109 + ExplicitWidth = 276 + ExplicitHeight = 226 end - object bbOk: TBitBtn - Left = 138 - Top = 317 - Width = 75 - Height = 25 - Caption = 'OK' - Default = True - DoubleBuffered = True - Glyph.Data = { - DE010000424DDE01000000000000760000002800000024000000120000000100 - 0400000000006801000000000000000000001000000000000000000000000000 - 80000080000000808000800000008000800080800000C0C0C000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 - 3333333333333333333333330000333333333333333333333333F33333333333 - 00003333344333333333333333388F3333333333000033334224333333333333 - 338338F3333333330000333422224333333333333833338F3333333300003342 - 222224333333333383333338F3333333000034222A22224333333338F338F333 - 8F33333300003222A3A2224333333338F3838F338F33333300003A2A333A2224 - 33333338F83338F338F33333000033A33333A222433333338333338F338F3333 - 0000333333333A222433333333333338F338F33300003333333333A222433333 - 333333338F338F33000033333333333A222433333333333338F338F300003333 - 33333333A222433333333333338F338F00003333333333333A22433333333333 - 3338F38F000033333333333333A223333333333333338F830000333333333333 - 333A333333333333333338330000333333333333333333333333333333333333 - 0000} - NumGlyphs = 2 - ParentDoubleBuffered = False + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 362 + Height = 29 + Align = alTop + Caption = 'Available Nodes IP to connect:' TabOrder = 1 - OnClick = bbOkClick end - object bbCancel: TBitBtn - Left = 231 - Top = 317 - Width = 75 - Height = 25 - DoubleBuffered = True - Kind = bkCancel - ParentDoubleBuffered = False + object Panel2: TPanel + Left = 0 + Top = 300 + Width = 362 + Height = 62 + Align = alBottom + Caption = ' ' TabOrder = 2 - end - object cbTryOnlyWithThisServers: TCheckBox - Left = 35 - Top = 285 - Width = 271 - Height = 17 - Caption = 'Try to connect ONLY with this servers' - TabOrder = 3 - OnClick = cbTryOnlyWithThisServersClick + ExplicitTop = 299 + object bbOk: TBitBtn + Left = 9 + Top = 29 + Width = 75 + Height = 25 + Caption = 'OK' + Default = True + Glyph.Data = { + DE010000424DDE01000000000000760000002800000024000000120000000100 + 0400000000006801000000000000000000001000000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 3333333333333333333333330000333333333333333333333333F33333333333 + 00003333344333333333333333388F3333333333000033334224333333333333 + 338338F3333333330000333422224333333333333833338F3333333300003342 + 222224333333333383333338F3333333000034222A22224333333338F338F333 + 8F33333300003222A3A2224333333338F3838F338F33333300003A2A333A2224 + 33333338F83338F338F33333000033A33333A222433333338333338F338F3333 + 0000333333333A222433333333333338F338F33300003333333333A222433333 + 333333338F338F33000033333333333A222433333333333338F338F300003333 + 33333333A222433333333333338F338F00003333333333333A22433333333333 + 3338F38F000033333333333333A223333333333333338F830000333333333333 + 333A333333333333333338330000333333333333333333333333333333333333 + 0000} + NumGlyphs = 2 + TabOrder = 0 + OnClick = bbOkClick + end + object bbCancel: TBitBtn + Left = 90 + Top = 29 + Width = 75 + Height = 25 + Kind = bkCancel + NumGlyphs = 2 + TabOrder = 1 + end + object cbTryOnlyWithThisServers: TCheckBox + Left = 9 + Top = 7 + Width = 271 + Height = 17 + Caption = 'Try to connect ONLY with this servers' + TabOrder = 2 + OnClick = cbTryOnlyWithThisServersClick + end end end diff --git a/src/gui-classic/UFRMNodesIp.pas b/src/gui-classic/UFRMNodesIp.pas index 1a0da863f..d1d451a3d 100644 --- a/src/gui-classic/UFRMNodesIp.pas +++ b/src/gui-classic/UFRMNodesIp.pas @@ -29,12 +29,13 @@ interface LCLIntf, LCLType, LMessages, {$ENDIF} Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, Buttons, UAppParams; + Dialogs, StdCtrls, Buttons, UAppParams, Vcl.ExtCtrls; type TFRMNodesIp = class(TForm) memoNodesIp: TMemo; - Label1: TLabel; + Panel1: TPanel; + Panel2: TPanel; bbOk: TBitBtn; bbCancel: TBitBtn; cbTryOnlyWithThisServers: TCheckBox; From 9745c1d00a636d27097af0cbd3048f94253eaab7 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Sun, 5 Dec 2021 03:25:59 +0100 Subject: [PATCH 14/44] WalletConfig re-design with PageControl/Tabsheets --- .../UFRMPascalCoinWalletConfig.dfm | 432 ---------------- src/gui-classic/UFRMTestWallet.pas | 2 +- src/gui-classic/UFRMWallet.pas | 2 +- src/gui-classic/UFRMWalletConfig.dfm | 483 ++++++++++++++++++ ...nWalletConfig.pas => UFRMWalletConfig.pas} | 59 ++- src/pascalcoin_wallet_classic.dpr | 2 +- src/pascalcoin_wallet_classic.dproj | 2 +- 7 files changed, 522 insertions(+), 460 deletions(-) delete mode 100644 src/gui-classic/UFRMPascalCoinWalletConfig.dfm create mode 100644 src/gui-classic/UFRMWalletConfig.dfm rename src/gui-classic/{UFRMPascalCoinWalletConfig.pas => UFRMWalletConfig.pas} (97%) diff --git a/src/gui-classic/UFRMPascalCoinWalletConfig.dfm b/src/gui-classic/UFRMPascalCoinWalletConfig.dfm deleted file mode 100644 index a67436c42..000000000 --- a/src/gui-classic/UFRMPascalCoinWalletConfig.dfm +++ /dev/null @@ -1,432 +0,0 @@ -object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig - Left = 462 - Top = 234 - BorderIcons = [biSystemMenu] - BorderStyle = bsSingle - Caption = 'Options' - ClientHeight = 581 - ClientWidth = 374 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = True - Position = poOwnerFormCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 30 - Top = 403 - Width = 120 - Height = 13 - Caption = 'Default fee for operation' - Color = clBtnFace - ParentColor = False - end - object Label2: TLabel - Left = 30 - Top = 116 - Width = 98 - Height = 13 - Caption = 'Internet Server Port' - Color = clBtnFace - ParentColor = False - end - object lblDefaultInternetServerPort: TLabel - Left = 248 - Top = 116 - Width = 70 - Height = 13 - Caption = '(Default XXXX)' - Color = clBtnFace - ParentColor = False - end - object Label3: TLabel - Left = 15 - Top = 67 - Width = 60 - Height = 13 - Caption = 'Miner Name:' - Color = clBtnFace - ParentColor = False - end - object Label4: TLabel - Left = 90 - Top = 90 - Width = 259 - Height = 13 - Caption = 'This name will be included in each new block you mine!' - Color = clBtnFace - Font.Charset = ANSI_CHARSET - Font.Color = clGray - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Pitch = fpVariable - Font.Style = [] - Font.Quality = fqDraft - ParentColor = False - ParentFont = False - end - object Label5: TLabel - Left = 30 - Top = 226 - Width = 73 - Height = 13 - Caption = 'JSON-RPC Port' - Color = clBtnFace - ParentColor = False - end - object lblDefaultJSONRPCMinerServerPort: TLabel - Left = 248 - Top = 226 - Width = 70 - Height = 13 - Caption = '(Default XXXX)' - Color = clBtnFace - ParentColor = False - end - object Label6: TLabel - Left = 24 - Top = 162 - Width = 57 - Height = 13 - Caption = 'Allowed IP'#39's' - Color = clBtnFace - ParentColor = False - end - object Label7: TLabel - Left = 90 - Top = 183 - Width = 209 - Height = 13 - Caption = 'Ip'#39's separated by semicolon or empty for all' - Color = clBtnFace - Font.Charset = ANSI_CHARSET - Font.Color = clGray - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Pitch = fpVariable - Font.Style = [] - Font.Quality = fqDraft - ParentColor = False - ParentFont = False - end - object cbJSONRPCMinerServerActive: TCheckBox - Left = 15 - Top = 200 - Width = 225 - Height = 19 - Caption = 'JSON-RPC Server Miner (TCP/IP, no HTTP)' - TabOrder = 6 - end - object ebDefaultFee: TEdit - Left = 170 - Top = 400 - Width = 56 - Height = 21 - Alignment = taRightJustify - TabOrder = 12 - Text = '0' - end - object cbSaveLogFiles: TCheckBox - Left = 15 - Top = 427 - Width = 78 - Height = 19 - Caption = 'Save log file' - TabOrder = 13 - OnClick = cbSaveLogFilesClick - end - object cbShowLogs: TCheckBox - Left = 15 - Top = 465 - Width = 68 - Height = 19 - Caption = 'Show logs' - TabOrder = 15 - end - object bbOk: TBitBtn - Left = 184 - Top = 530 - Width = 75 - Height = 30 - Kind = bkOK - NumGlyphs = 2 - TabOrder = 18 - OnClick = bbOkClick - end - object bbCancel: TBitBtn - Left = 274 - Top = 530 - Width = 75 - Height = 30 - Kind = bkCancel - NumGlyphs = 2 - TabOrder = 19 - end - object udInternetServerPort: TUpDown - Left = 226 - Top = 113 - Width = 16 - Height = 21 - Associate = ebInternetServerPort - Min = 1 - Max = 25000 - Position = 4004 - TabOrder = 3 - Thousands = False - end - object ebInternetServerPort: TEdit - Left = 170 - Top = 113 - Width = 56 - Height = 21 - Alignment = taRightJustify - TabOrder = 2 - Text = '4004' - end - object bbUpdatePassword: TBitBtn - Left = 15 - Top = 14 - Width = 337 - Height = 38 - Caption = 'Wallet Password' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - Glyph.Data = { - 76060000424D7606000000000000360400002800000018000000180000000100 - 0800000000004002000000000000000000000001000000010000000000000101 - 0100020202000303030004040400050505000606060007070700080808000909 - 09000A0A0A000B0B0B000C0C0C000D0D0D000E0E0E000F0F0F00101010001111 - 1100121212001313130014141400151515001616160017171700181818001919 - 19001A1A1A001B1B1B001C1C1C001D1D1D001E1E1E001F1F1F00202020002121 - 2100222222002323230024242400252525002626260027272700282828002929 - 29002A2A2A002B2B2B002C2C2C002D2D2D002E2E2E002F2F2F00303030003131 - 3100323232003333330034343400353535003636360037373700383838003939 - 39003A3A3A003B3B3B003C3C3C003D3D3D003E3E3E003F3F3F00404040004141 - 4100424242004343430044444400454545004646460047474700484848004949 - 49004A4A4A004B4B4B004C4C4C004D4D4D004E4E4E004F4F4F00505050005151 - 5100525252005353530054545400555555005656560057575700585858005959 - 59005A5A5A005B5B5B005C5C5C005D5D5D005E5E5E00685968007C4F7C009441 - 9400B72CB700DD15DD00F506F500FD01FD00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 - FE00FE00FE00FE00FE00FE00FE00F008F900D517F000BD24E800A830E1007B4B - D0005065C1003774B7002B7DB100237FAC001F82AD001C83AD001785AE001687 - AF001489B100128AB300108CB6000F8EB9000D91BB000C94BF000A97C3000A99 - C5000A9AC7000B9BC8000B9CCA000C9ECC000C9FCD000DA0CE000DA1CE000EA2 - CF0011A3CF0015A4CF0018A5CF001CA7D10021A9D1002AAAD00035AACD0035AD - D00035AFD30035B1D60037B5D8003AB8DB003EB9DC0040BBDD0045BEDE004CC1 - E00055C6E3005BC8E40061CAE40066CBE3006BCCE30072D3E60078D8EB0080D8 - EE0083D9F10085DCF40088DBF5008BDBF6008EDAF70091DAF70095DCF70097E0 - F7009EE3F800A4E7F900A9E9F900AEE9F900B5EBF900B2EBF800919191919191 - 919191919191919191919191919191919191919191919191D5E7E8E7E3DED591 - 919191919191919191919191919191D6DDF7F8F8F7F6F4EEE6D5919191919191 - 919191919191D7DADEF8F8F6F7F6EDF1F8F1E69191919191919191919191DADE - DFFAFAF8F7F7E9EDF7F7F8EB91919191919191919191DDE5E3FCFCFAFAEEE0E9 - F3F7F7F7DC919191919191919191DEE7E4FEFEFCFCEDC5E0EFF7F6F6DC919191 - 919191919191DEEAE7FEFEFEFDFBC4C4F5F7F6F6DC919191919191919191E3EC - E9FEFEFEFEFEE0C3F9F7F6F6DC919191919191919191E3E9E3F8F8F1F1F8FBFB - FCFAF7F6DC919191919191919191DCEAEAE0E1E9E5E3DEE4EBF2FAF9DC919191 - 919191919191DBF3EEC5C5EFF3EBE5DDD9D6E6F5DC91919191919191919191D5 - E8EDF1FAF6F0EAE4DAD1D2DBDC919191919191919191919191DBE8F0F3F3F3E4 - D0CFE4D8DC919191919191919191919191919191D5DEE4DED2CFD4D491919191 - 91919191919191919191919191919191D2CE9191919191919191919191919191 - 91C8C89191919191D2CE919191919191919191919191919191D9D09191919191 - D2CE919191919191919191919191919191E6E39191919191D2CE919191919191 - 919191919191919191E0F3CE91919191D2CE9191919191919191919191919191 - 9191EFF6E1C9C8CDD9CC91919191919191919191919191919191C9EDF9F3F3EB - DC91919191919191919191919191919191919191CBE0E1CF9191919191919191 - 9191919191919191919191919191919191919191919191919191} - ParentFont = False - TabOrder = 0 - OnClick = bbUpdatePasswordClick - end - object ebMinerName: TEdit - Left = 90 - Top = 64 - Width = 261 - Height = 21 - TabOrder = 1 - Text = 'ebMinerName' - end - object cbShowModalMessages: TCheckBox - Left = 170 - Top = 427 - Width = 127 - Height = 19 - Caption = 'Show modal messages' - TabOrder = 16 - end - object udJSONRPCMinerServerPort: TUpDown - Left = 226 - Top = 223 - Width = 16 - Height = 21 - Associate = ebJSONRPCMinerServerPort - Min = 1 - Max = 25000 - Position = 4009 - TabOrder = 8 - Thousands = False - end - object ebJSONRPCMinerServerPort: TEdit - Left = 170 - Top = 223 - Width = 56 - Height = 21 - Alignment = taRightJustify - TabOrder = 7 - Text = '4009' - end - object gbMinerPrivateKey: TGroupBox - Left = 8 - Top = 250 - Width = 334 - Height = 121 - Caption = ' Miner Server Private Key: ' - TabOrder = 9 - object rbGenerateANewPrivateKeyEachBlock: TRadioButton - Left = 18 - Top = 6 - Width = 277 - Height = 19 - Caption = 'Generate a new private key for each generated block' - TabOrder = 0 - end - object rbUseARandomKey: TRadioButton - Left = 18 - Top = 26 - Width = 146 - Height = 19 - Caption = 'Use a random existing key' - TabOrder = 1 - end - object rbMineAllwaysWithThisKey: TRadioButton - Left = 18 - Top = 47 - Width = 146 - Height = 19 - Caption = 'Always mine with this key:' - TabOrder = 2 - end - object cbPrivateKeyToMine: TComboBox - Left = 43 - Top = 71 - Width = 266 - Height = 21 - Style = csDropDownList - TabOrder = 3 - end - end - object cbSaveDebugLogs: TCheckBox - Left = 31 - Top = 445 - Width = 118 - Height = 19 - Caption = 'Save debug logs too' - TabOrder = 14 - end - object bbOpenDataFolder: TBitBtn - Left = 16 - Top = 530 - Width = 131 - Height = 30 - Caption = 'Open Data Folder' - Glyph.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000064000000640000000000000000000000078DBE4D078D - BEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078D - BEFF078DBEFF078DBEFF078DBEFF078DBEFFFFFFFF00FFFFFF00078DBEFF25A1 - D1FF70C6E7FF6BCFF9FF66CDF9FF65CDF9FF65CDF9FF65CDF9FF65CDF8FF65CD - F9FF65CDF8FF66CEF9FF39ADD8FF078DBEFF078DBE4DFFFFFF00078DBEFF4CBC - E7FF5EB8DAFF94DFFBFF6FD4FAFF6FD4F9FF6ED4FAFF6FD4F9FF6FD4FAFF6FD4 - FAFF6FD4FAFF6ED4F9FF3EB1D9FF84D7EBFF078DBEFFFFFFFF00078DBEFF72D6 - FAFF1593C2FFB6ECFDFF7DDDFBFF79DCFBFF79DCFBFF79DCFBFF79DCFBFF7ADC - FBFF79DCFAFF79DCFAFF44B5D9FFAEF1F9FF078DBEFFFFFFFF00078DBEFF79DD - FBFF1899C7FF94DDF3FFA2EBFCFF84E4FBFF83E4FCFF83E4FCFF84E4FCFF83E4 - FCFF83E4FBFF84E5FCFF48B9DAFFB3F4F9FF078DBEFF078DBE4D078DBEFF82E3 - FCFF43B7DCFF4BB9DBFFBFF4FDFF8EEBFCFF8DEBFCFF8DEBFDFF8DEBFDFF8DEB - FCFF8DEBFDFF8DEBFCFF4CBBDAFFB6F7F9FF6DCAE0FF078DBEFF078DBEFF8AEA - FCFF77DCF3FF1496C3FFFFFFFFFFC9F8FEFFC9F8FEFFC9F8FEFFC9F8FFFFC9F7 - FFFFC9F8FEFFC9F8FFFF9CD6E7FFDFFAFBFFDBF7FAFF078DBEFF078DBEFF93F0 - FEFF93F0FDFF1697C5FF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078D - BEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF9BF5 - FEFF9AF6FEFF9AF6FEFF9BF5FDFF9BF6FEFF9AF6FEFF9BF5FEFF9AF6FDFF9BF5 - FEFF9AF6FEFF9AF6FEFF0989BAFFFFFFFF00FFFFFF00FFFFFF00078DBEFFFEFE - FEFFA0FBFFFFA0FBFEFFA0FBFEFFA1FAFEFFA1FBFEFFA0FAFEFFA1FBFEFFA1FB - FFFFA0FBFFFFA1FBFFFF0989BAFFFFFFFF00FFFFFF00FFFFFF00078DBE4D078D - BEFFFEFEFEFFA5FEFFFFA5FEFFFFA5FEFFFF078DBEFF078DBEFF078DBEFF078D - BEFF078DBEFF078DBEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00078D - BE4D078DBEFF078DBEFF078DBEFF078DBEFF078DBE4DFFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00} - TabOrder = 17 - OnClick = bbOpenDataFolderClick - end - object cbJSONRPCPortEnabled: TCheckBox - Left = 15 - Top = 136 - Width = 205 - Height = 19 - Caption = 'JSON-RPC Server port enabled (HTTP)' - TabOrder = 4 - OnClick = cbJSONRPCPortEnabledClick - end - object ebJSONRPCAllowedIPs: TEdit - Left = 90 - Top = 159 - Width = 261 - Height = 21 - TabOrder = 5 - Text = 'ebJSONRPCAllowedIPs' - end - object cbDownloadNewCheckpoint: TCheckBox - Left = 16 - Top = 373 - Width = 271 - Height = 19 - Caption = 'Download new Checkpoint if blockchain older than...' - TabOrder = 10 - OnClick = cbDownloadNewCheckpointClick - end - object ebMinFutureBlocksToDownloadNewSafebox: TEdit - Left = 296 - Top = 373 - Width = 53 - Height = 21 - Alignment = taRightJustify - TabOrder = 11 - Text = '0' - end - object bbChangeLanguage: TBitBtn - Left = 15 - Top = 488 - Width = 131 - Height = 30 - Caption = 'Change UI language' - TabOrder = 20 - OnClick = bbChangeLanguageClick - end -end diff --git a/src/gui-classic/UFRMTestWallet.pas b/src/gui-classic/UFRMTestWallet.pas index b4dc80384..57dff08be 100644 --- a/src/gui-classic/UFRMTestWallet.pas +++ b/src/gui-classic/UFRMTestWallet.pas @@ -63,7 +63,7 @@ implementation UFileStorage, UThread, UOpTransaction, - UFRMPascalCoinWalletConfig, + UFRMWalletConfig, UFRMOperationsExplorer, {$IFDEF TESTNET} UFRMRandomOperations, diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index acb9abd63..0a064f0e5 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -252,7 +252,7 @@ implementation UOpenSSL, {$ENDIF} UTime, UFileStorage, - UThread, UOpTransaction, UFRMPascalCoinWalletConfig, + UThread, UOpTransaction, UFRMWalletConfig, UFRMOperationsExplorer, {$IFDEF TESTNET} UFRMRandomOperations, diff --git a/src/gui-classic/UFRMWalletConfig.dfm b/src/gui-classic/UFRMWalletConfig.dfm new file mode 100644 index 000000000..d0ed34f56 --- /dev/null +++ b/src/gui-classic/UFRMWalletConfig.dfm @@ -0,0 +1,483 @@ +object FRMPascalCoinWalletConfig: TFRMPascalCoinWalletConfig + Left = 462 + Top = 234 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = 'Options' + ClientHeight = 329 + ClientWidth = 475 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = True + Position = poOwnerFormCenter + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Panel1: TPanel + Left = 0 + Top = 270 + Width = 475 + Height = 59 + Align = alBottom + Caption = ' ' + TabOrder = 0 + object bbOk: TBitBtn + Left = 16 + Top = 14 + Width = 75 + Height = 30 + Kind = bkOK + NumGlyphs = 2 + TabOrder = 0 + OnClick = bbOkClick + end + object bbCancel: TBitBtn + Left = 107 + Top = 14 + Width = 75 + Height = 30 + Kind = bkCancel + NumGlyphs = 2 + TabOrder = 1 + end + end + object PageControlWalletConfig: TPageControl + Left = 0 + Top = 0 + Width = 475 + Height = 270 + ActivePage = TabSheetPassword + Align = alClient + TabOrder = 1 + ExplicitWidth = 830 + ExplicitHeight = 392 + object TabSheetPassword: TTabSheet + Caption = 'Password' + object bbUpdatePassword: TBitBtn + Left = 15 + Top = 14 + Width = 337 + Height = 38 + Caption = 'Wallet Password' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + Glyph.Data = { + 76060000424D7606000000000000360400002800000018000000180000000100 + 0800000000004002000000000000000000000001000000010000000000000101 + 0100020202000303030004040400050505000606060007070700080808000909 + 09000A0A0A000B0B0B000C0C0C000D0D0D000E0E0E000F0F0F00101010001111 + 1100121212001313130014141400151515001616160017171700181818001919 + 19001A1A1A001B1B1B001C1C1C001D1D1D001E1E1E001F1F1F00202020002121 + 2100222222002323230024242400252525002626260027272700282828002929 + 29002A2A2A002B2B2B002C2C2C002D2D2D002E2E2E002F2F2F00303030003131 + 3100323232003333330034343400353535003636360037373700383838003939 + 39003A3A3A003B3B3B003C3C3C003D3D3D003E3E3E003F3F3F00404040004141 + 4100424242004343430044444400454545004646460047474700484848004949 + 49004A4A4A004B4B4B004C4C4C004D4D4D004E4E4E004F4F4F00505050005151 + 5100525252005353530054545400555555005656560057575700585858005959 + 59005A5A5A005B5B5B005C5C5C005D5D5D005E5E5E00685968007C4F7C009441 + 9400B72CB700DD15DD00F506F500FD01FD00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00 + FE00FE00FE00FE00FE00FE00FE00F008F900D517F000BD24E800A830E1007B4B + D0005065C1003774B7002B7DB100237FAC001F82AD001C83AD001785AE001687 + AF001489B100128AB300108CB6000F8EB9000D91BB000C94BF000A97C3000A99 + C5000A9AC7000B9BC8000B9CCA000C9ECC000C9FCD000DA0CE000DA1CE000EA2 + CF0011A3CF0015A4CF0018A5CF001CA7D10021A9D1002AAAD00035AACD0035AD + D00035AFD30035B1D60037B5D8003AB8DB003EB9DC0040BBDD0045BEDE004CC1 + E00055C6E3005BC8E40061CAE40066CBE3006BCCE30072D3E60078D8EB0080D8 + EE0083D9F10085DCF40088DBF5008BDBF6008EDAF70091DAF70095DCF70097E0 + F7009EE3F800A4E7F900A9E9F900AEE9F900B5EBF900B2EBF800919191919191 + 919191919191919191919191919191919191919191919191D5E7E8E7E3DED591 + 919191919191919191919191919191D6DDF7F8F8F7F6F4EEE6D5919191919191 + 919191919191D7DADEF8F8F6F7F6EDF1F8F1E69191919191919191919191DADE + DFFAFAF8F7F7E9EDF7F7F8EB91919191919191919191DDE5E3FCFCFAFAEEE0E9 + F3F7F7F7DC919191919191919191DEE7E4FEFEFCFCEDC5E0EFF7F6F6DC919191 + 919191919191DEEAE7FEFEFEFDFBC4C4F5F7F6F6DC919191919191919191E3EC + E9FEFEFEFEFEE0C3F9F7F6F6DC919191919191919191E3E9E3F8F8F1F1F8FBFB + FCFAF7F6DC919191919191919191DCEAEAE0E1E9E5E3DEE4EBF2FAF9DC919191 + 919191919191DBF3EEC5C5EFF3EBE5DDD9D6E6F5DC91919191919191919191D5 + E8EDF1FAF6F0EAE4DAD1D2DBDC919191919191919191919191DBE8F0F3F3F3E4 + D0CFE4D8DC919191919191919191919191919191D5DEE4DED2CFD4D491919191 + 91919191919191919191919191919191D2CE9191919191919191919191919191 + 91C8C89191919191D2CE919191919191919191919191919191D9D09191919191 + D2CE919191919191919191919191919191E6E39191919191D2CE919191919191 + 919191919191919191E0F3CE91919191D2CE9191919191919191919191919191 + 9191EFF6E1C9C8CDD9CC91919191919191919191919191919191C9EDF9F3F3EB + DC91919191919191919191919191919191919191CBE0E1CF9191919191919191 + 9191919191919191919191919191919191919191919191919191} + ParentFont = False + TabOrder = 0 + OnClick = bbUpdatePasswordClick + end + end + object TabSheetMiner: TTabSheet + Caption = 'Miner' + ImageIndex = 1 + object Label3: TLabel + Left = 15 + Top = 19 + Width = 82 + Height = 13 + Caption = 'Miner Name:' + Color = clBtnFace + ParentColor = False + end + object Label4: TLabel + Left = 103 + Top = 43 + Width = 298 + Height = 13 + Caption = 'This name will be included in each new block you mine!' + Color = clBtnFace + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Pitch = fpVariable + Font.Style = [] + Font.Quality = fqDraft + ParentColor = False + ParentFont = False + end + object lblDefaultInternetServerPort: TLabel + Left = 281 + Top = 72 + Width = 104 + Height = 13 + Caption = '(Default XXXX)' + Color = clBtnFace + ParentColor = False + end + object Label2: TLabel + Left = 15 + Top = 72 + Width = 182 + Height = 13 + Caption = 'Internet Server Port' + Color = clBtnFace + ParentColor = False + end + object ebMinerName: TEdit + Left = 103 + Top = 16 + Width = 298 + Height = 21 + TabOrder = 0 + Text = 'ebMinerName' + end + object ebInternetServerPort: TEdit + Left = 203 + Top = 69 + Width = 56 + Height = 21 + Alignment = taRightJustify + TabOrder = 1 + Text = '4004' + end + object udInternetServerPort: TUpDown + Left = 259 + Top = 69 + Width = 16 + Height = 21 + Associate = ebInternetServerPort + Min = 1 + Max = 25000 + Position = 4004 + TabOrder = 2 + Thousands = False + end + object gbMinerPrivateKey: TGroupBox + Left = 15 + Top = 104 + Width = 386 + Height = 121 + Caption = ' Miner Server Private Key: ' + TabOrder = 3 + object rbGenerateANewPrivateKeyEachBlock: TRadioButton + Left = 18 + Top = 22 + Width = 351 + Height = 19 + Caption = 'Generate a new private key for each generated block' + TabOrder = 0 + end + object rbUseARandomKey: TRadioButton + Left = 18 + Top = 42 + Width = 351 + Height = 19 + Caption = 'Use a random existing key' + TabOrder = 1 + end + object rbMineAllwaysWithThisKey: TRadioButton + Left = 18 + Top = 63 + Width = 351 + Height = 19 + Caption = 'Always mine with this key:' + TabOrder = 2 + end + object cbPrivateKeyToMine: TComboBox + Left = 35 + Top = 88 + Width = 334 + Height = 21 + Style = csDropDownList + TabOrder = 3 + end + end + end + object TabSheetJSON: TTabSheet + Caption = 'JSON' + ImageIndex = 2 + object Label7: TLabel + Left = 114 + Top = 68 + Width = 295 + Height = 13 + Caption = 'Ip'#39's separated by semicolon or empty for all' + Color = clBtnFace + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Pitch = fpVariable + Font.Style = [] + Font.Quality = fqDraft + ParentColor = False + ParentFont = False + end + object Label6: TLabel + Left = 24 + Top = 44 + Width = 84 + Height = 13 + Caption = 'Allowed IP'#39's' + Color = clBtnFace + ParentColor = False + end + object lblDefaultJSONRPCMinerServerPort: TLabel + Left = 248 + Top = 124 + Width = 70 + Height = 13 + Caption = '(Default XXXX)' + Color = clBtnFace + ParentColor = False + end + object Label5: TLabel + Left = 30 + Top = 124 + Width = 134 + Height = 13 + Caption = 'JSON-RPC Port' + Color = clBtnFace + ParentColor = False + end + object ebJSONRPCAllowedIPs: TEdit + Left = 114 + Top = 41 + Width = 295 + Height = 21 + TabOrder = 0 + Text = 'ebJSONRPCAllowedIPs' + end + object cbJSONRPCPortEnabled: TCheckBox + Left = 15 + Top = 16 + Width = 394 + Height = 19 + Caption = 'JSON-RPC Server port enabled (HTTP)' + TabOrder = 1 + OnClick = cbJSONRPCPortEnabledClick + end + object ebJSONRPCMinerServerPort: TEdit + Left = 170 + Top = 121 + Width = 56 + Height = 21 + Alignment = taRightJustify + TabOrder = 2 + Text = '4009' + end + object udJSONRPCMinerServerPort: TUpDown + Left = 226 + Top = 121 + Width = 16 + Height = 21 + Associate = ebJSONRPCMinerServerPort + Min = 1 + Max = 25000 + Position = 4009 + TabOrder = 3 + Thousands = False + end + object cbJSONRPCMinerServerActive: TCheckBox + Left = 15 + Top = 98 + Width = 402 + Height = 19 + Caption = 'JSON-RPC Server Miner (TCP/IP, no HTTP)' + TabOrder = 4 + end + end + object TabSheetBlockchain: TTabSheet + Caption = 'Blockchain' + ImageIndex = 3 + object ebMinFutureBlocksToDownloadNewSafebox: TEdit + Left = 352 + Top = 16 + Width = 53 + Height = 21 + Alignment = taRightJustify + TabOrder = 0 + Text = '0' + end + object cbDownloadNewCheckpoint: TCheckBox + Left = 15 + Top = 16 + Width = 330 + Height = 19 + Caption = 'Download new Checkpoint if blockchain older than...' + TabOrder = 1 + OnClick = cbDownloadNewCheckpointClick + end + end + object TabSheetOperations: TTabSheet + Caption = 'Operations' + ImageIndex = 4 + object Label1: TLabel + Left = 15 + Top = 19 + Width = 120 + Height = 13 + Caption = 'Default fee for operation' + Color = clBtnFace + ParentColor = False + end + object ebDefaultFee: TEdit + Left = 178 + Top = 16 + Width = 56 + Height = 21 + Alignment = taRightJustify + TabOrder = 0 + Text = '0' + end + end + object TabSheetLogs: TTabSheet + Caption = 'Logs' + ImageIndex = 5 + object cbSaveLogFiles: TCheckBox + Left = 15 + Top = 19 + Width = 78 + Height = 19 + Caption = 'Save log file' + TabOrder = 0 + OnClick = cbSaveLogFilesClick + end + object cbShowLogs: TCheckBox + Left = 15 + Top = 57 + Width = 68 + Height = 19 + Caption = 'Show logs' + TabOrder = 1 + end + object cbShowModalMessages: TCheckBox + Left = 15 + Top = 82 + Width = 127 + Height = 19 + Caption = 'Show modal messages' + TabOrder = 2 + end + object cbSaveDebugLogs: TCheckBox + Left = 31 + Top = 37 + Width = 118 + Height = 19 + Caption = 'Save debug logs too' + TabOrder = 3 + end + end + object TabSheetLanguage: TTabSheet + Caption = 'Language' + ImageIndex = 6 + object bbChangeLanguage: TBitBtn + Left = 15 + Top = 16 + Width = 131 + Height = 30 + Caption = 'Change UI language' + TabOrder = 0 + OnClick = bbChangeLanguageClick + end + end + object TabSheetStorage: TTabSheet + Caption = 'Storage' + ImageIndex = 7 + object bbOpenDataFolder: TBitBtn + Left = 15 + Top = 16 + Width = 131 + Height = 30 + Caption = 'Open Data Folder' + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000078DBE4D078D + BEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078D + BEFF078DBEFF078DBEFF078DBEFF078DBEFFFFFFFF00FFFFFF00078DBEFF25A1 + D1FF70C6E7FF6BCFF9FF66CDF9FF65CDF9FF65CDF9FF65CDF9FF65CDF8FF65CD + F9FF65CDF8FF66CEF9FF39ADD8FF078DBEFF078DBE4DFFFFFF00078DBEFF4CBC + E7FF5EB8DAFF94DFFBFF6FD4FAFF6FD4F9FF6ED4FAFF6FD4F9FF6FD4FAFF6FD4 + FAFF6FD4FAFF6ED4F9FF3EB1D9FF84D7EBFF078DBEFFFFFFFF00078DBEFF72D6 + FAFF1593C2FFB6ECFDFF7DDDFBFF79DCFBFF79DCFBFF79DCFBFF79DCFBFF7ADC + FBFF79DCFAFF79DCFAFF44B5D9FFAEF1F9FF078DBEFFFFFFFF00078DBEFF79DD + FBFF1899C7FF94DDF3FFA2EBFCFF84E4FBFF83E4FCFF83E4FCFF84E4FCFF83E4 + FCFF83E4FBFF84E5FCFF48B9DAFFB3F4F9FF078DBEFF078DBE4D078DBEFF82E3 + FCFF43B7DCFF4BB9DBFFBFF4FDFF8EEBFCFF8DEBFCFF8DEBFDFF8DEBFDFF8DEB + FCFF8DEBFDFF8DEBFCFF4CBBDAFFB6F7F9FF6DCAE0FF078DBEFF078DBEFF8AEA + FCFF77DCF3FF1496C3FFFFFFFFFFC9F8FEFFC9F8FEFFC9F8FEFFC9F8FFFFC9F7 + FFFFC9F8FEFFC9F8FFFF9CD6E7FFDFFAFBFFDBF7FAFF078DBEFF078DBEFF93F0 + FEFF93F0FDFF1697C5FF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078D + BEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF078DBEFF9BF5 + FEFF9AF6FEFF9AF6FEFF9BF5FDFF9BF6FEFF9AF6FEFF9BF5FEFF9AF6FDFF9BF5 + FEFF9AF6FEFF9AF6FEFF0989BAFFFFFFFF00FFFFFF00FFFFFF00078DBEFFFEFE + FEFFA0FBFFFFA0FBFEFFA0FBFEFFA1FAFEFFA1FBFEFFA0FAFEFFA1FBFEFFA1FB + FFFFA0FBFFFFA1FBFFFF0989BAFFFFFFFF00FFFFFF00FFFFFF00078DBE4D078D + BEFFFEFEFEFFA5FEFFFFA5FEFFFFA5FEFFFF078DBEFF078DBEFF078DBEFF078D + BEFF078DBEFF078DBEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00078D + BE4D078DBEFF078DBEFF078DBEFF078DBEFF078DBE4DFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00} + TabOrder = 0 + OnClick = bbOpenDataFolderClick + end + end + end +end diff --git a/src/gui-classic/UFRMPascalCoinWalletConfig.pas b/src/gui-classic/UFRMWalletConfig.pas similarity index 97% rename from src/gui-classic/UFRMPascalCoinWalletConfig.pas rename to src/gui-classic/UFRMWalletConfig.pas index 80f40a195..86cee5a11 100644 --- a/src/gui-classic/UFRMPascalCoinWalletConfig.pas +++ b/src/gui-classic/UFRMWalletConfig.pas @@ -1,4 +1,4 @@ -unit UFRMPascalCoinWalletConfig; +unit UFRMWalletConfig; { Copyright (c) 2016 by Albert Molina @@ -30,7 +30,8 @@ interface LCLIntf, LCLType, LMessages, {$ENDIF} Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, Buttons, ComCtrls, UAppParams, USettings, UWallet; + Dialogs, StdCtrls, Buttons, ComCtrls, UAppParams, USettings, UWallet, + Vcl.ExtCtrls; type @@ -38,40 +39,50 @@ interface { TFRMPascalCoinWalletConfig } TFRMPascalCoinWalletConfig = class(TForm) - bbChangeLanguage: TBitBtn; + Panel1: TPanel; + PageControlWalletConfig: TPageControl; + TabSheetMiner: TTabSheet; + TabSheetPassword: TTabSheet; + TabSheetJSON: TTabSheet; + Label7: TLabel; + Label6: TLabel; + lblDefaultJSONRPCMinerServerPort: TLabel; + Label5: TLabel; + ebJSONRPCAllowedIPs: TEdit; + cbJSONRPCPortEnabled: TCheckBox; + ebJSONRPCMinerServerPort: TEdit; + udJSONRPCMinerServerPort: TUpDown; cbJSONRPCMinerServerActive: TCheckBox; - cbDownloadNewCheckpoint: TCheckBox; - ebDefaultFee: TEdit; + TabSheetBlockchain: TTabSheet; ebMinFutureBlocksToDownloadNewSafebox: TEdit; + cbDownloadNewCheckpoint: TCheckBox; + TabSheetOperations: TTabSheet; Label1: TLabel; + ebDefaultFee: TEdit; + TabSheetLogs: TTabSheet; cbSaveLogFiles: TCheckBox; cbShowLogs: TCheckBox; - bbOk: TBitBtn; - bbCancel: TBitBtn; - udInternetServerPort: TUpDown; - ebInternetServerPort: TEdit; - Label2: TLabel; - lblDefaultInternetServerPort: TLabel; - bbUpdatePassword: TBitBtn; + cbShowModalMessages: TCheckBox; + cbSaveDebugLogs: TCheckBox; + TabSheetLanguage: TTabSheet; + bbChangeLanguage: TBitBtn; + TabSheetStorage: TTabSheet; + bbOpenDataFolder: TBitBtn; Label3: TLabel; - ebMinerName: TEdit; Label4: TLabel; - cbShowModalMessages: TCheckBox; - Label5: TLabel; - udJSONRPCMinerServerPort: TUpDown; - ebJSONRPCMinerServerPort: TEdit; - lblDefaultJSONRPCMinerServerPort: TLabel; + lblDefaultInternetServerPort: TLabel; + Label2: TLabel; + ebMinerName: TEdit; + ebInternetServerPort: TEdit; + udInternetServerPort: TUpDown; gbMinerPrivateKey: TGroupBox; rbGenerateANewPrivateKeyEachBlock: TRadioButton; rbUseARandomKey: TRadioButton; rbMineAllwaysWithThisKey: TRadioButton; cbPrivateKeyToMine: TComboBox; - cbSaveDebugLogs: TCheckBox; - bbOpenDataFolder: TBitBtn; - cbJSONRPCPortEnabled: TCheckBox; - ebJSONRPCAllowedIPs: TEdit; - Label6: TLabel; - Label7: TLabel; + bbUpdatePassword: TBitBtn; + bbOk: TBitBtn; + bbCancel: TBitBtn; procedure bbChangeLanguageClick(Sender: TObject); procedure cbDownloadNewCheckpointClick(Sender: TObject); procedure FormCreate(Sender: TObject); diff --git a/src/pascalcoin_wallet_classic.dpr b/src/pascalcoin_wallet_classic.dpr index d64d2c4e9..40ae9feca 100644 --- a/src/pascalcoin_wallet_classic.dpr +++ b/src/pascalcoin_wallet_classic.dpr @@ -25,7 +25,7 @@ uses {$IFDEF USE_GNUGETTEXT} UFRMSelectLanguage in 'gui-classic\UFRMSelectLanguage.pas' {FRMChangeLanguage}, {$ENDIF } - UFRMPascalCoinWalletConfig in 'gui-classic\UFRMPascalCoinWalletConfig.pas' {FRMPascalCoinWalletConfig}, + UFRMWalletConfig in 'gui-classic\UFRMWalletConfig.pas' {FRMPascalCoinWalletConfig}, UFRMPayloadDecoder in 'gui-classic\UFRMPayloadDecoder.pas' {FRMPayloadDecoder}, UFRMRandomOperations in 'gui-classic\UFRMRandomOperations.pas' {FRMRandomOperations}, UFRMRPCCalls in 'gui-classic\UFRMRPCCalls.pas' {FRMRPCCalls}, diff --git a/src/pascalcoin_wallet_classic.dproj b/src/pascalcoin_wallet_classic.dproj index d2262fd9c..a08a97143 100644 --- a/src/pascalcoin_wallet_classic.dproj +++ b/src/pascalcoin_wallet_classic.dproj @@ -156,7 +156,7 @@
FRMChangeLanguage
- +
FRMPascalCoinWalletConfig
From 15e8635ccd7e926354f87757a2e8efa038a05e12 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Sun, 5 Dec 2021 03:31:50 +0100 Subject: [PATCH 15/44] FRMSelectLanguage re-designed to allow auto-resize --- src/gui-classic/UFRMSelectLanguage.dfm | 92 +++++++++++++++++--------- src/gui-classic/UFRMSelectLanguage.pas | 10 +-- 2 files changed, 65 insertions(+), 37 deletions(-) diff --git a/src/gui-classic/UFRMSelectLanguage.dfm b/src/gui-classic/UFRMSelectLanguage.dfm index 806ecac26..5a536af31 100644 --- a/src/gui-classic/UFRMSelectLanguage.dfm +++ b/src/gui-classic/UFRMSelectLanguage.dfm @@ -1,49 +1,75 @@ object FRMChangeLanguage: TFRMChangeLanguage Left = 2170 - Height = 451 Top = 250 - Width = 374 BorderIcons = [biSystemMenu] BorderStyle = bsSingle Caption = 'Language Selection' ClientHeight = 451 ClientWidth = 374 - OnCreate = FormCreate + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = True Position = poOwnerFormCenter - object bbOk: TBitBtn - Left = 184 - Height = 30 - Top = 400 - Width = 75 - Caption = 'OK' - Kind = bkOK - ModalResult = 1 + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object lbxAvailableLanguages: TListBox + Left = 0 + Top = 41 + Width = 374 + Height = 357 + Align = alClient + ItemHeight = 13 TabOrder = 0 + ExplicitLeft = 15 + ExplicitTop = 56 + ExplicitWidth = 337 + ExplicitHeight = 328 end - object bbCancel: TBitBtn - Left = 274 - Height = 30 - Top = 400 - Width = 75 - Caption = 'Cancel' - Kind = bkCancel - ModalResult = 2 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 374 + Height = 41 + Align = alTop + Caption = 'Select your preferred language' TabOrder = 1 + ExplicitLeft = 144 + ExplicitTop = 16 + ExplicitWidth = 185 end - object lbxAvailableLanguages: TListBox - Left = 15 - Height = 328 - Top = 56 - Width = 337 - ItemHeight = 0 + object Panel2: TPanel + Left = 0 + Top = 398 + Width = 374 + Height = 53 + Align = alBottom + Caption = ' ' TabOrder = 2 - end - object Label1: TLabel - Left = 16 - Height = 15 - Top = 24 - Width = 161 - Caption = 'Select your preferred language' - ParentColor = False + ExplicitLeft = 8 + ExplicitTop = 390 + ExplicitWidth = 358 + object bbOk: TBitBtn + Left = 15 + Top = 13 + Width = 75 + Height = 30 + Kind = bkOK + NumGlyphs = 2 + TabOrder = 0 + end + object bbCancel: TBitBtn + Left = 106 + Top = 13 + Width = 75 + Height = 30 + Kind = bkCancel + NumGlyphs = 2 + TabOrder = 1 + end end end diff --git a/src/gui-classic/UFRMSelectLanguage.pas b/src/gui-classic/UFRMSelectLanguage.pas index f7ea809a9..92eebf2fe 100644 --- a/src/gui-classic/UFRMSelectLanguage.pas +++ b/src/gui-classic/UFRMSelectLanguage.pas @@ -7,17 +7,19 @@ interface uses - gnugettext,Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Buttons, StdCtrls; + gnugettext,Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Buttons, StdCtrls, + Vcl.ExtCtrls; type { TFRMChangeLanguage } TFRMChangeLanguage = class(TForm) - bbCancel: TBitBtn; - bbOk: TBitBtn; - Label1: TLabel; lbxAvailableLanguages: TListBox; + Panel1: TPanel; + Panel2: TPanel; + bbOk: TBitBtn; + bbCancel: TBitBtn; procedure FormCreate(Sender: TObject); private public From 85efa1d63bf120af26e87420224d3c637508858d Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Sun, 5 Dec 2021 04:06:37 +0100 Subject: [PATCH 16/44] BugFix for FrameAccountExplorer access violation Cannot interact with FRMWallet in frame constructors, FRMWallet is not yet constructed. --- src/gui-classic/Frames/UFrameAccountExplorer.pas | 6 ++++++ src/gui-classic/UFRMWallet.dfm | 10 +++++----- src/gui-classic/UFRMWallet.pas | 7 +++++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index b04ab601c..0d5a38a9a 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -96,9 +96,15 @@ constructor TFrameAccountExplorer.Create(AOwner: TComponent); begin inherited Create( AOwner ); + // cannot set properties here that interact with FRMWallet because + // FRMWallet not yet created. + // problem code below, moved back to FRMWallet.FormCreate +{ pcAccountsOptions.ActivePage := tsAccountOperations; + // problem code: cbExploreMyAccounts.Checked:=True; // By default +} end; destructor TFrameAccountExplorer.Destroy; diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 6a29c713c..42d36e399 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -486,11 +486,11 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitWidth = 296 + ExplicitHeight = 59 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 857 + ExplicitWidth = 296 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 @@ -598,8 +598,8 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitWidth = 296 + ExplicitHeight = 59 inherited memoMessages: TMemo Width = 861 Height = 65 diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 0a064f0e5..a7975e166 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -589,6 +589,13 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FBackgroundLabel.Alignment := taCenter; FBackgroundLabel.WordWrap := True; + // set some frame properties + with FrameAccountExplorer do + begin + pcAccountsOptions.ActivePage := tsAccountOperations; + cbExploreMyAccounts.Checked:=True; // By default + end; + {$ifdef DARWIN} // this is macOS specific menu layout InitMacOSMenu; From cf9531801d28e29d5727cb8cb0ee908e02ef5dac Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 16:52:48 +0100 Subject: [PATCH 17/44] FrameNodeStats re-designed for auto-resize --- src/gui-classic/Frames/UFrameNodeStats.dfm | 116 ++++++++++++--------- src/gui-classic/Frames/UFrameNodeStats.pas | 10 +- src/gui-classic/UFRMWallet.dfm | 68 ++++++------ src/gui-classic/UFRMWallet.pas | 2 +- 4 files changed, 109 insertions(+), 87 deletions(-) diff --git a/src/gui-classic/Frames/UFrameNodeStats.dfm b/src/gui-classic/Frames/UFrameNodeStats.dfm index cfa206d21..098fa3fb2 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.dfm +++ b/src/gui-classic/Frames/UFrameNodeStats.dfm @@ -1,72 +1,94 @@ object FrameNodeStats: TFrameNodeStats Left = 0 Top = 0 - Width = 691 - Height = 572 + Width = 711 + Height = 458 TabOrder = 0 - DesignSize = ( - 691 - 572) - object Label3: TLabel - Left = 15 - Top = 15 - Width = 96 - Height = 13 - Caption = 'Active Connections:' - Color = clBtnFace - ParentColor = False - end - object Label6: TLabel - Left = 15 - Top = 291 - Width = 104 - Height = 13 - Anchors = [akLeft, akRight, akBottom] - Caption = 'Known Node Servers:' - Color = clBtnFace - ParentColor = False + object Splitter1: TSplitter + Left = 0 + Top = 139 + Width = 711 + Height = 3 + Cursor = crVSplit + Align = alTop + ResizeStyle = rsUpdate + ExplicitTop = 233 + ExplicitWidth = 399 end - object Label7: TLabel - Left = 15 - Top = 187 - Width = 82 - Height = 13 - Anchors = [akLeft, akRight, akBottom] - Caption = 'Blacklisted Nodes' - Color = clBtnFace - ParentColor = False + object Splitter2: TSplitter + Left = 0 + Top = 293 + Width = 711 + Height = 3 + Cursor = crVSplit + Align = alBottom + ResizeStyle = rsUpdate + ExplicitLeft = 3 + ExplicitTop = 482 + ExplicitWidth = 909 end object memoNetConnections: TMemo - Left = -139 - Top = 34 - Width = 830 - Height = 145 - Anchors = [akLeft, akTop, akRight, akBottom] + Left = 0 + Top = 22 + Width = 711 + Height = 117 + Align = alTop ReadOnly = True ScrollBars = ssBoth TabOrder = 0 WordWrap = False + ExplicitTop = 28 + ExplicitWidth = 763 end object memoNetServers: TMemo - Left = -139 - Top = 310 - Width = 830 - Height = 116 - Anchors = [akLeft, akRight, akBottom] + Left = 0 + Top = 315 + Width = 711 + Height = 143 + Align = alBottom ReadOnly = True ScrollBars = ssBoth TabOrder = 1 WordWrap = False end object memoNetBlackLists: TMemo - Left = -138 - Top = 206 - Width = 829 - Height = 79 - Anchors = [akLeft, akRight, akBottom] + Left = 0 + Top = 165 + Width = 711 + Height = 128 + Align = alClient ReadOnly = True ScrollBars = ssBoth TabOrder = 2 WordWrap = False + ExplicitHeight = 108 + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 711 + Height = 22 + Align = alTop + Caption = 'Active Connections:' + TabOrder = 3 + end + object Panel2: TPanel + Left = 0 + Top = 142 + Width = 711 + Height = 23 + Align = alTop + Caption = 'Blacklisted Nodes:' + TabOrder = 4 + end + object Panel3: TPanel + Left = 0 + Top = 296 + Width = 711 + Height = 19 + Align = alBottom + Caption = 'Known Node Servers:' + TabOrder = 5 + ExplicitTop = 303 end end diff --git a/src/gui-classic/Frames/UFrameNodeStats.pas b/src/gui-classic/Frames/UFrameNodeStats.pas index 252a0a9bf..7a9a1422c 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.pas +++ b/src/gui-classic/Frames/UFrameNodeStats.pas @@ -4,16 +4,18 @@ interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, - Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; type TFrameNodeStats = class(TFrame) - Label3: TLabel; - Label6: TLabel; - Label7: TLabel; memoNetConnections: TMemo; memoNetServers: TMemo; memoNetBlackLists: TMemo; + Panel1: TPanel; + Splitter1: TSplitter; + Panel2: TPanel; + Panel3: TPanel; + Splitter2: TSplitter; private { Private declarations } public diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 42d36e399..5cacae3f0 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -377,7 +377,7 @@ object FRMWallet: TFRMWallet Top = 91 Width = 865 Height = 466 - ActivePage = tsMyAccounts + ActivePage = tsNodeStats Align = alClient TabOrder = 2 OnChange = PageControlChange @@ -416,14 +416,6 @@ object FRMWallet: TFRMWallet Height = 372 ExplicitWidth = 452 ExplicitHeight = 372 - inherited tsAccountOperations: TTabSheet - inherited dgAccountOperations: TDrawGrid - Width = 444 - Height = 344 - ExplicitWidth = 444 - ExplicitHeight = 344 - end - end inherited tsMultiSelectAccounts: TTabSheet ExplicitWidth = 444 ExplicitHeight = 344 @@ -486,11 +478,11 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 59 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 296 + ExplicitWidth = 857 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 @@ -551,40 +543,46 @@ object FRMWallet: TFRMWallet object tsNodeStats: TTabSheet Caption = 'Node Stats' ImageIndex = 3 - inline FrameNodeStats: TFrameNodeStats + inline FrameNodeStats1: TFrameNodeStats Left = 0 Top = 0 Width = 857 Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 438 - inherited Label6: TLabel - Top = 157 - ExplicitTop = 157 + ExplicitLeft = 40 + ExplicitTop = -20 + inherited Splitter1: TSplitter + Width = 857 end - inherited Label7: TLabel - Top = 53 - ExplicitTop = 53 + inherited Splitter2: TSplitter + Top = 273 + Width = 857 end inherited memoNetConnections: TMemo - Width = 996 - Height = 11 - ExplicitWidth = 996 - ExplicitHeight = 11 + Width = 857 + ExplicitTop = 22 + ExplicitWidth = 711 end inherited memoNetServers: TMemo - Top = 176 - Width = 996 - ExplicitTop = 176 - ExplicitWidth = 996 + Top = 295 + Width = 857 end inherited memoNetBlackLists: TMemo - Top = 72 - Width = 995 - ExplicitTop = 72 - ExplicitWidth = 995 + Width = 857 + Height = 108 + ExplicitHeight = 128 + end + inherited Panel1: TPanel + Width = 857 + end + inherited Panel2: TPanel + Width = 857 + end + inherited Panel3: TPanel + Top = 276 + Width = 857 + ExplicitTop = 296 end end end @@ -598,8 +596,8 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 59 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited memoMessages: TMemo Width = 861 Height = 65 diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index a7975e166..db1222eb3 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -121,8 +121,8 @@ TFRMWallet = class(TForm) FrameBlockChainExplorer: TFrameBlockChainExplorer; FrameOperationsExplorer: TFrameOperationsExplorer; FrameLogs: TFrameLogs; - FrameNodeStats: TFrameNodeStats; FrameMessages: TFrameMessages; + FrameNodeStats1: TFrameNodeStats; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); From 5914eeb60e200f2b859ec58a87836c8b42904db8 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 16:59:56 +0100 Subject: [PATCH 18/44] FRMNodesIP is now re-sizeable --- src/gui-classic/UFRMNodesIp.dfm | 30 +++++++++++++++--------------- src/gui-classic/UFRMWallet.dfm | 20 ++++++++++++++------ src/gui-classic/UFRMWallet.pas | 2 +- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/gui-classic/UFRMNodesIp.dfm b/src/gui-classic/UFRMNodesIp.dfm index 7f20edeff..5a73cc863 100644 --- a/src/gui-classic/UFRMNodesIp.dfm +++ b/src/gui-classic/UFRMNodesIp.dfm @@ -2,10 +2,9 @@ object FRMNodesIp: TFRMNodesIp Left = 0 Top = 0 BorderIcons = [biSystemMenu] - BorderStyle = bsSingle Caption = 'Nodes IP' - ClientHeight = 362 - ClientWidth = 362 + ClientHeight = 411 + ClientWidth = 389 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -19,37 +18,38 @@ object FRMNodesIp: TFRMNodesIp TextHeight = 13 object memoNodesIp: TMemo Left = 0 - Top = 29 - Width = 362 - Height = 271 + Top = 23 + Width = 389 + Height = 326 Align = alClient Lines.Strings = ( 'memoNodesIp') ScrollBars = ssBoth TabOrder = 0 - ExplicitLeft = 198 - ExplicitTop = 109 - ExplicitWidth = 276 - ExplicitHeight = 226 + ExplicitTop = 29 + ExplicitWidth = 352 + ExplicitHeight = 261 end object Panel1: TPanel Left = 0 Top = 0 - Width = 362 - Height = 29 + Width = 389 + Height = 23 Align = alTop Caption = 'Available Nodes IP to connect:' TabOrder = 1 + ExplicitWidth = 352 end object Panel2: TPanel Left = 0 - Top = 300 - Width = 362 + Top = 349 + Width = 389 Height = 62 Align = alBottom Caption = ' ' TabOrder = 2 - ExplicitTop = 299 + ExplicitTop = 290 + ExplicitWidth = 352 object bbOk: TBitBtn Left = 9 Top = 29 diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 5cacae3f0..a856c79ec 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -543,46 +543,54 @@ object FRMWallet: TFRMWallet object tsNodeStats: TTabSheet Caption = 'Node Stats' ImageIndex = 3 - inline FrameNodeStats1: TFrameNodeStats + inline FrameNodeStats: TFrameNodeStats Left = 0 Top = 0 Width = 857 Height = 438 Align = alClient TabOrder = 0 - ExplicitLeft = 40 - ExplicitTop = -20 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited Splitter1: TSplitter Width = 857 + ExplicitWidth = 857 end inherited Splitter2: TSplitter Top = 273 Width = 857 + ExplicitTop = 273 + ExplicitWidth = 857 end inherited memoNetConnections: TMemo Width = 857 ExplicitTop = 22 - ExplicitWidth = 711 + ExplicitWidth = 857 end inherited memoNetServers: TMemo Top = 295 Width = 857 + ExplicitTop = 295 + ExplicitWidth = 857 end inherited memoNetBlackLists: TMemo Width = 857 Height = 108 - ExplicitHeight = 128 + ExplicitWidth = 857 end inherited Panel1: TPanel Width = 857 + ExplicitWidth = 857 end inherited Panel2: TPanel Width = 857 + ExplicitWidth = 857 end inherited Panel3: TPanel Top = 276 Width = 857 - ExplicitTop = 296 + ExplicitTop = 276 + ExplicitWidth = 857 end end end diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index db1222eb3..79d23a2d9 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -122,7 +122,7 @@ TFRMWallet = class(TForm) FrameOperationsExplorer: TFrameOperationsExplorer; FrameLogs: TFrameLogs; FrameMessages: TFrameMessages; - FrameNodeStats1: TFrameNodeStats; + FrameNodeStats: TFrameNodeStats; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); From 8c211eafdcfaa5e5ad8cc5c6c74e7480fdcb2593 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 17:15:47 +0100 Subject: [PATCH 19/44] UFramesMessages re-designed Bevels might need some more work. --- src/gui-classic/Frames/UFrameMessages.dfm | 243 ++++++++++++++------- src/gui-classic/Frames/UFrameMessages.pas | 20 +- src/gui-classic/Frames/UFrameNodeStats.dfm | 31 ++- src/gui-classic/UFRMNodesIp.dfm | 14 +- src/gui-classic/UFRMWallet.dfm | 82 ++++++- src/gui-classic/UFRMWallet.pas | 2 +- 6 files changed, 264 insertions(+), 128 deletions(-) diff --git a/src/gui-classic/Frames/UFrameMessages.dfm b/src/gui-classic/Frames/UFrameMessages.dfm index 683d396b9..30d5e28ee 100644 --- a/src/gui-classic/Frames/UFrameMessages.dfm +++ b/src/gui-classic/Frames/UFrameMessages.dfm @@ -1,81 +1,26 @@ object FrameMessages: TFrameMessages Left = 0 Top = 0 - Width = 817 - Height = 622 + Width = 764 + Height = 466 TabOrder = 0 - DesignSize = ( - 817 - 622) - object Label11: TLabel - Left = 15 - Top = 151 - Width = 51 - Height = 13 - Caption = 'Messages:' - Color = clBtnFace - ParentColor = False - end - object Label12: TLabel - Left = 315 - Top = 11 - Width = 85 - Height = 13 - Caption = 'Message to send:' - Color = clBtnFace - ParentColor = False - end - object Label13: TLabel - Left = 15 - Top = 11 - Width = 109 - Height = 13 - Caption = 'Available Connections:' - Color = clBtnFace - ParentColor = False - end - object Label14: TLabel - Left = 410 - Top = 11 - Width = 361 - Height = 13 - Caption = - '(Messages will be encrypted, so only dest connection will be abl' + - 'e to read it)' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clGrayText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - ParentColor = False - ParentFont = False - end - object lbNetConnections: TListBox - Left = 15 - Top = 30 - Width = 275 - Height = 96 - ItemHeight = 13 - MultiSelect = True - ScrollWidth = 273 - TabOrder = 0 - end - object bbSendAMessage: TButton - Left = 292 - Top = 101 - Width = 525 - Height = 25 - Caption = 'Send a Message' - TabOrder = 1 - OnClick = bbSendAMessageClick + object Splitter1: TSplitter + Left = 0 + Top = 233 + Width = 764 + Height = 3 + Cursor = crVSplit + Align = alBottom + ResizeStyle = rsUpdate + ExplicitTop = 0 + ExplicitWidth = 304 end object memoMessages: TMemo - Left = -4 - Top = 170 - Width = 821 - Height = 249 - Anchors = [akLeft, akTop, akRight, akBottom] + Left = 0 + Top = 256 + Width = 764 + Height = 210 + Align = alBottom Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -16 @@ -87,16 +32,150 @@ object FrameMessages: TFrameMessages ParentFont = False ReadOnly = True ScrollBars = ssBoth - TabOrder = 2 + TabOrder = 0 end - object memoMessageToSend: TMemo - Left = 292 - Top = 30 - Width = 525 - Height = 61 - Lines.Strings = ( - 'memoMessageToSend') - TabOrder = 3 - WantReturns = False + object PanelBottom: TPanel + Left = 0 + Top = 236 + Width = 764 + Height = 20 + Align = alBottom + Caption = 'Messages:' + TabOrder = 1 + ExplicitTop = 238 + end + object PanelTop: TPanel + Left = 0 + Top = 0 + Width = 764 + Height = 233 + Align = alClient + Caption = ' ' + TabOrder = 2 + ExplicitLeft = 256 + ExplicitTop = 192 + ExplicitWidth = 185 + ExplicitHeight = 41 + object Splitter2: TSplitter + Left = 289 + Top = 1 + Height = 231 + ResizeStyle = rsUpdate + ExplicitLeft = 440 + ExplicitTop = 144 + ExplicitHeight = 100 + end + object PanelLeft: TPanel + Left = 1 + Top = 1 + Width = 288 + Height = 231 + Align = alLeft + Caption = ' ' + TabOrder = 0 + ExplicitHeight = 299 + object lbNetConnections: TListBox + Left = 1 + Top = 21 + Width = 286 + Height = 209 + Align = alClient + ItemHeight = 13 + MultiSelect = True + ScrollWidth = 273 + TabOrder = 0 + ExplicitLeft = 0 + ExplicitTop = 19 + ExplicitHeight = 213 + end + object Panel5: TPanel + Left = 1 + Top = 1 + Width = 286 + Height = 20 + Align = alTop + Caption = 'Available Connections:' + TabOrder = 1 + end + end + object PanelRight: TPanel + Left = 292 + Top = 1 + Width = 471 + Height = 231 + Align = alClient + Caption = ' ' + TabOrder = 1 + ExplicitLeft = 504 + ExplicitTop = 152 + ExplicitWidth = 185 + ExplicitHeight = 41 + object memoMessageToSend: TMemo + Left = 1 + Top = 21 + Width = 469 + Height = 143 + Align = alClient + Lines.Strings = ( + 'memoMessageToSend') + TabOrder = 0 + WantReturns = False + ExplicitLeft = 64 + ExplicitTop = 103 + ExplicitWidth = 371 + ExplicitHeight = 61 + end + object Panel6: TPanel + Left = 1 + Top = 1 + Width = 469 + Height = 20 + Align = alTop + Caption = 'Message to send:' + TabOrder = 1 + end + object Panel7: TPanel + Left = 1 + Top = 164 + Width = 469 + Height = 66 + Align = alBottom + Caption = ' ' + TabOrder = 2 + ExplicitTop = 232 + ExplicitWidth = 522 + DesignSize = ( + 469 + 66) + object Label14: TLabel + Left = 14 + Top = 11 + Width = 361 + Height = 13 + Caption = + '(Messages will be encrypted, so only dest connection will be abl' + + 'e to read it)' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clGrayText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentColor = False + ParentFont = False + end + object bbSendAMessage: TButton + Left = 14 + Top = 30 + Width = 446 + Height = 25 + Anchors = [akLeft, akTop, akRight] + Caption = 'Send a Message' + TabOrder = 0 + OnClick = bbSendAMessageClick + ExplicitWidth = 499 + end + end + end end end diff --git a/src/gui-classic/Frames/UFrameMessages.pas b/src/gui-classic/Frames/UFrameMessages.pas index 63423ab88..8a1a47f59 100644 --- a/src/gui-classic/Frames/UFrameMessages.pas +++ b/src/gui-classic/Frames/UFrameMessages.pas @@ -4,18 +4,24 @@ interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, - Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; type TFrameMessages = class(TFrame) - Label11: TLabel; - Label12: TLabel; - Label13: TLabel; - Label14: TLabel; - lbNetConnections: TListBox; - bbSendAMessage: TButton; memoMessages: TMemo; + PanelBottom: TPanel; + Splitter1: TSplitter; + PanelTop: TPanel; + PanelLeft: TPanel; + Splitter2: TSplitter; + PanelRight: TPanel; memoMessageToSend: TMemo; + lbNetConnections: TListBox; + Panel5: TPanel; + Panel6: TPanel; + Panel7: TPanel; + Label14: TLabel; + bbSendAMessage: TButton; procedure bbSendAMessageClick(Sender: TObject); private { Private declarations } diff --git a/src/gui-classic/Frames/UFrameNodeStats.dfm b/src/gui-classic/Frames/UFrameNodeStats.dfm index 098fa3fb2..bec5185a8 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.dfm +++ b/src/gui-classic/Frames/UFrameNodeStats.dfm @@ -6,7 +6,7 @@ object FrameNodeStats: TFrameNodeStats TabOrder = 0 object Splitter1: TSplitter Left = 0 - Top = 139 + Top = 137 Width = 711 Height = 3 Cursor = crVSplit @@ -17,7 +17,7 @@ object FrameNodeStats: TFrameNodeStats end object Splitter2: TSplitter Left = 0 - Top = 293 + Top = 292 Width = 711 Height = 3 Cursor = crVSplit @@ -29,16 +29,14 @@ object FrameNodeStats: TFrameNodeStats end object memoNetConnections: TMemo Left = 0 - Top = 22 + Top = 20 Width = 711 Height = 117 Align = alTop ReadOnly = True - ScrollBars = ssBoth + ScrollBars = ssVertical TabOrder = 0 WordWrap = False - ExplicitTop = 28 - ExplicitWidth = 763 end object memoNetServers: TMemo Left = 0 @@ -47,48 +45,47 @@ object FrameNodeStats: TFrameNodeStats Height = 143 Align = alBottom ReadOnly = True - ScrollBars = ssBoth + ScrollBars = ssVertical TabOrder = 1 WordWrap = False end object memoNetBlackLists: TMemo Left = 0 - Top = 165 + Top = 160 Width = 711 - Height = 128 + Height = 132 Align = alClient ReadOnly = True - ScrollBars = ssBoth + ScrollBars = ssVertical TabOrder = 2 WordWrap = False - ExplicitHeight = 108 end object Panel1: TPanel Left = 0 Top = 0 Width = 711 - Height = 22 + Height = 20 Align = alTop Caption = 'Active Connections:' TabOrder = 3 end object Panel2: TPanel Left = 0 - Top = 142 + Top = 140 Width = 711 - Height = 23 + Height = 20 Align = alTop Caption = 'Blacklisted Nodes:' TabOrder = 4 end object Panel3: TPanel Left = 0 - Top = 296 + Top = 295 Width = 711 - Height = 19 + Height = 20 Align = alBottom Caption = 'Known Node Servers:' TabOrder = 5 - ExplicitTop = 303 + ExplicitTop = 293 end end diff --git a/src/gui-classic/UFRMNodesIp.dfm b/src/gui-classic/UFRMNodesIp.dfm index 5a73cc863..708abbbb9 100644 --- a/src/gui-classic/UFRMNodesIp.dfm +++ b/src/gui-classic/UFRMNodesIp.dfm @@ -18,27 +18,25 @@ object FRMNodesIp: TFRMNodesIp TextHeight = 13 object memoNodesIp: TMemo Left = 0 - Top = 23 + Top = 20 Width = 389 - Height = 326 + Height = 329 Align = alClient Lines.Strings = ( 'memoNodesIp') ScrollBars = ssBoth TabOrder = 0 - ExplicitTop = 29 - ExplicitWidth = 352 - ExplicitHeight = 261 + ExplicitTop = 23 + ExplicitHeight = 326 end object Panel1: TPanel Left = 0 Top = 0 Width = 389 - Height = 23 + Height = 20 Align = alTop Caption = 'Available Nodes IP to connect:' TabOrder = 1 - ExplicitWidth = 352 end object Panel2: TPanel Left = 0 @@ -48,8 +46,6 @@ object FRMNodesIp: TFRMNodesIp Align = alBottom Caption = ' ' TabOrder = 2 - ExplicitTop = 290 - ExplicitWidth = 352 object bbOk: TBitBtn Left = 9 Top = 29 diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index a856c79ec..3e63b8fb5 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -377,7 +377,7 @@ object FRMWallet: TFRMWallet Top = 91 Width = 865 Height = 466 - ActivePage = tsNodeStats + ActivePage = tsMessages Align = alClient TabOrder = 2 OnChange = PageControlChange @@ -557,14 +557,13 @@ object FRMWallet: TFRMWallet ExplicitWidth = 857 end inherited Splitter2: TSplitter - Top = 273 + Top = 272 Width = 857 ExplicitTop = 273 ExplicitWidth = 857 end inherited memoNetConnections: TMemo Width = 857 - ExplicitTop = 22 ExplicitWidth = 857 end inherited memoNetServers: TMemo @@ -575,7 +574,7 @@ object FRMWallet: TFRMWallet end inherited memoNetBlackLists: TMemo Width = 857 - Height = 108 + Height = 112 ExplicitWidth = 857 end inherited Panel1: TPanel @@ -587,9 +586,9 @@ object FRMWallet: TFRMWallet ExplicitWidth = 857 end inherited Panel3: TPanel - Top = 276 + Top = 275 Width = 857 - ExplicitTop = 276 + ExplicitTop = 273 ExplicitWidth = 857 end end @@ -604,13 +603,72 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitLeft = 93 + ExplicitTop = -28 + inherited Splitter1: TSplitter + Top = 205 + Width = 857 + end inherited memoMessages: TMemo - Width = 861 - Height = 65 - ExplicitWidth = 861 - ExplicitHeight = 65 + Top = 228 + Width = 857 + end + inherited PanelBottom: TPanel + Top = 208 + Width = 857 + ExplicitTop = 210 + ExplicitWidth = 857 + end + inherited PanelTop: TPanel + Width = 857 + Height = 205 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 764 + ExplicitHeight = 229 + inherited Splitter2: TSplitter + Height = 203 + end + inherited PanelLeft: TPanel + Height = 203 + ExplicitHeight = 227 + inherited lbNetConnections: TListBox + Height = 181 + ExplicitLeft = 1 + ExplicitTop = 25 + ExplicitHeight = 201 + end + end + inherited PanelRight: TPanel + Width = 564 + Height = 203 + ExplicitLeft = 292 + ExplicitTop = 1 + ExplicitWidth = 471 + ExplicitHeight = 227 + inherited memoMessageToSend: TMemo + Width = 562 + Height = 115 + ExplicitLeft = 1 + ExplicitTop = 25 + ExplicitWidth = 469 + ExplicitHeight = 135 + end + inherited Panel6: TPanel + Width = 562 + ExplicitWidth = 562 + end + inherited Panel7: TPanel + Top = 136 + Width = 562 + ExplicitTop = 160 + ExplicitWidth = 469 + inherited bbSendAMessage: TButton + Width = 539 + ExplicitWidth = 446 + end + end + end end end end diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 79d23a2d9..a7975e166 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -121,8 +121,8 @@ TFRMWallet = class(TForm) FrameBlockChainExplorer: TFrameBlockChainExplorer; FrameOperationsExplorer: TFrameOperationsExplorer; FrameLogs: TFrameLogs; - FrameMessages: TFrameMessages; FrameNodeStats: TFrameNodeStats; + FrameMessages: TFrameMessages; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); From 3d215e07982f943e51992a146468ce8db7451e08 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 17:23:36 +0100 Subject: [PATCH 20/44] FrameLogs copy to clipboard button added. --- src/gui-classic/Frames/UFrameLogs.dfm | 30 +++++++++------ src/gui-classic/Frames/UFrameLogs.pas | 7 ++++ src/gui-classic/UFRMWallet.dfm | 55 +++++++++++++++------------ src/gui-classic/UFRMWallet.pas | 2 +- 4 files changed, 58 insertions(+), 36 deletions(-) diff --git a/src/gui-classic/Frames/UFrameLogs.dfm b/src/gui-classic/Frames/UFrameLogs.dfm index 84d494b2c..4b3572dde 100644 --- a/src/gui-classic/Frames/UFrameLogs.dfm +++ b/src/gui-classic/Frames/UFrameLogs.dfm @@ -6,35 +6,43 @@ object FrameLogs: TFrameLogs TabOrder = 0 object memoLogs: TMemo Left = 0 - Top = 41 + Top = 33 Width = 821 - Height = 490 + Height = 498 Align = alClient ScrollBars = ssBoth TabOrder = 0 WordWrap = False - ExplicitLeft = -537 - ExplicitTop = -157 - ExplicitWidth = 857 - ExplicitHeight = 397 + ExplicitTop = 32 end object pnlTopLogs: TPanel Left = 0 Top = 0 Width = 821 - Height = 41 + Height = 33 Align = alTop BevelOuter = bvNone TabOrder = 1 - ExplicitLeft = -537 - ExplicitWidth = 857 + DesignSize = ( + 821 + 33) object cbShowDebugLogs: TCheckBox - Left = 15 - Top = 10 + Left = 13 + Top = 7 Width = 102 Height = 19 Caption = 'Show Debug Logs' TabOrder = 0 end + object Button1: TButton + Left = 680 + Top = 4 + Width = 133 + Height = 25 + Anchors = [akTop, akRight] + Caption = 'Copy log to clipboard' + TabOrder = 1 + OnClick = Button1Click + end end end diff --git a/src/gui-classic/Frames/UFrameLogs.pas b/src/gui-classic/Frames/UFrameLogs.pas index a37bd0598..2c0ce1066 100644 --- a/src/gui-classic/Frames/UFrameLogs.pas +++ b/src/gui-classic/Frames/UFrameLogs.pas @@ -11,6 +11,8 @@ TFrameLogs = class(TFrame) memoLogs: TMemo; pnlTopLogs: TPanel; cbShowDebugLogs: TCheckBox; + Button1: TButton; + procedure Button1Click(Sender: TObject); private { Private declarations } public @@ -24,6 +26,11 @@ implementation {$R *.dfm} +procedure TFrameLogs.Button1Click(Sender: TObject); +begin + memoLogs.CopyToClipboard; +end; + constructor TFrameLogs.Create(AOwner: TComponent); begin inherited Create( AOwner ); diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 3e63b8fb5..632ffd3b4 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -377,7 +377,7 @@ object FRMWallet: TFRMWallet Top = 91 Width = 865 Height = 466 - ActivePage = tsMessages + ActivePage = tsMyAccounts Align = alClient TabOrder = 2 OnChange = PageControlChange @@ -526,17 +526,18 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitLeft = 36 + ExplicitTop = -93 inherited memoLogs: TMemo Width = 857 - Height = 397 - ExplicitLeft = 0 - ExplicitTop = 41 + Height = 405 + ExplicitTop = 33 end inherited pnlTopLogs: TPanel Width = 857 - ExplicitLeft = 0 + inherited Button1: TButton + Left = 716 + end end end end @@ -576,6 +577,7 @@ object FRMWallet: TFRMWallet Width = 857 Height = 112 ExplicitWidth = 857 + ExplicitHeight = 112 end inherited Panel1: TPanel Width = 857 @@ -588,7 +590,7 @@ object FRMWallet: TFRMWallet inherited Panel3: TPanel Top = 275 Width = 857 - ExplicitTop = 273 + ExplicitTop = 275 ExplicitWidth = 857 end end @@ -603,20 +605,24 @@ object FRMWallet: TFRMWallet Height = 438 Align = alClient TabOrder = 0 - ExplicitLeft = 93 - ExplicitTop = -28 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited Splitter1: TSplitter Top = 205 Width = 857 + ExplicitTop = 205 + ExplicitWidth = 857 end inherited memoMessages: TMemo Top = 228 Width = 857 + ExplicitTop = 228 + ExplicitWidth = 857 end inherited PanelBottom: TPanel Top = 208 Width = 857 - ExplicitTop = 210 + ExplicitTop = 208 ExplicitWidth = 857 end inherited PanelTop: TPanel @@ -624,19 +630,20 @@ object FRMWallet: TFRMWallet Height = 205 ExplicitLeft = 0 ExplicitTop = 0 - ExplicitWidth = 764 - ExplicitHeight = 229 + ExplicitWidth = 857 + ExplicitHeight = 205 inherited Splitter2: TSplitter Height = 203 + ExplicitHeight = 203 end inherited PanelLeft: TPanel Height = 203 - ExplicitHeight = 227 + ExplicitHeight = 203 inherited lbNetConnections: TListBox Height = 181 ExplicitLeft = 1 - ExplicitTop = 25 - ExplicitHeight = 201 + ExplicitTop = 21 + ExplicitHeight = 181 end end inherited PanelRight: TPanel @@ -644,15 +651,15 @@ object FRMWallet: TFRMWallet Height = 203 ExplicitLeft = 292 ExplicitTop = 1 - ExplicitWidth = 471 - ExplicitHeight = 227 + ExplicitWidth = 564 + ExplicitHeight = 203 inherited memoMessageToSend: TMemo Width = 562 Height = 115 ExplicitLeft = 1 - ExplicitTop = 25 - ExplicitWidth = 469 - ExplicitHeight = 135 + ExplicitTop = 21 + ExplicitWidth = 562 + ExplicitHeight = 115 end inherited Panel6: TPanel Width = 562 @@ -661,11 +668,11 @@ object FRMWallet: TFRMWallet inherited Panel7: TPanel Top = 136 Width = 562 - ExplicitTop = 160 - ExplicitWidth = 469 + ExplicitTop = 136 + ExplicitWidth = 562 inherited bbSendAMessage: TButton Width = 539 - ExplicitWidth = 446 + ExplicitWidth = 539 end end end diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index a7975e166..f7ae822f3 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -120,9 +120,9 @@ TFRMWallet = class(TForm) FramePendingOperations: TFramePendingOperations; FrameBlockChainExplorer: TFrameBlockChainExplorer; FrameOperationsExplorer: TFrameOperationsExplorer; - FrameLogs: TFrameLogs; FrameNodeStats: TFrameNodeStats; FrameMessages: TFrameMessages; + FrameLogs: TFrameLogs; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); From ac6de8260303683d325edbdef2ca14e80c97d45d Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 18:21:57 +0100 Subject: [PATCH 21/44] UFrameInfo added. Info section re-designed. --- src/gui-classic/Frames/UFrameInfo.dfm | 393 +++++++++++++++++++++ src/gui-classic/Frames/UFrameInfo.pas | 61 ++++ src/gui-classic/UFRMWallet.dfm | 487 ++++++-------------------- src/gui-classic/UFRMWallet.pas | 118 +++---- src/pascalcoin_wallet_classic.dpr | 3 +- src/pascalcoin_wallet_classic.dproj | 5 + 6 files changed, 612 insertions(+), 455 deletions(-) create mode 100644 src/gui-classic/Frames/UFrameInfo.dfm create mode 100644 src/gui-classic/Frames/UFrameInfo.pas diff --git a/src/gui-classic/Frames/UFrameInfo.dfm b/src/gui-classic/Frames/UFrameInfo.dfm new file mode 100644 index 000000000..0cbacc332 --- /dev/null +++ b/src/gui-classic/Frames/UFrameInfo.dfm @@ -0,0 +1,393 @@ +object FrameInfo: TFrameInfo + Left = 0 + Top = 0 + Width = 924 + Height = 104 + TabOrder = 0 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 75 + Height = 104 + Align = alLeft + BevelOuter = bvNone + Caption = ' ' + TabOrder = 0 + ExplicitHeight = 105 + object Image1: TImage + Left = 0 + Top = 0 + Width = 64 + Height = 64 + Align = alClient + AutoSize = True + Center = True + Picture.Data = { + 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000400000 + 00400806000000AA6971DE0000000467414D410000B18F0BFC61050000000970 + 48597300000EC200000EC20115284A800000001874455874536F667477617265 + 007061696E742E6E657420342E312E36FD4E09E800000AD54944415478DAD55B + 0B7854C515FE67EEDD17848780402860B21BE4258A8116FD1004A4F889852282 + A808A2541113146DB5AD521A3EABD54AA186243E2A55D17E060111A42A5A9487 + F8E04D4185920DB18809280884ECFBCEF4DC0D6CB264F766B30F361EF86EF6EE + 3DF3F8FF397BE6CCB9334C4A89944A415FB3BF93B79F4F139733C97A32862C06 + 7402581B6AD9060649FF3C7439C1192A85645F7326BFD2A0ED6AF95DD65E14AC + 0FA4B27B2C1504B84B72BA494DDEC0384613B8218CB116F1D4437DAB26823630 + 897F694C7BAB655E4555B32560FB0B034D7D7CC7C7017C06757A388D324F6647 + C9420290EC7D29C4732D320FBE8389526B1E0410708FF7C434C9E42334D259C9 + 041D950C29F7D3E54FB6CE075F4F94888408A829768CE6600B69B42F3E1FC023 + 50B15B61E27ED3BD07379C5F025EE8D9C1E50B1473C66E4A0FF07A14D06F839C + E662B3C67FCDEE3B702AE504788A728651A97F52D12EE9061F4E842C975CDEDC + E2DEF2AD292380C0CFA2DFFA0206A6A61B70441220BD749961CB77BE92640218 + F314DBE7D3DF07530980B5EB09D6BE07E03D09ED7F1F074384FAC2330702199D + 21ABBF85ACDA118584E0FFB9B6FCF2C71103B8180860CC5BEC2821AD7B52091E + ADBBC17AEB0780526B5CBE8DF320F6BC5AD78B6E436119FB8F332825BC6F4D81 + FCF633830AC553D6BCF2DF254C80A7C8B180387820A5E049949EE3601A393F74 + EFDF58006DCF6BA17BF5CA87A0E6CE08DD7B57DE4A046C69041CE658F2CB1E8F + 9B006F91E37EC9D8DF520D3E08F0AA39502F9B16BAF7AD980851B533746F1AF3 + 3294EE57D5DED0D4EFFE7B2E98BFC6B04E7D8600D36EB7E51D7C359A4E54023C + 2539C3A5901F5070A3843DC8E802F3354F20E97EB0FDC5E0D676A15B51B51DD0 + FC751DED781998C976E66100A2721BA4D0204F7E0D796417F98C4D80EBBB4835 + BB158E21A69965DB6326E0F4B38E8EAA865D64FA99618CAA2D60B971297887DE + C9059F0C21ABD00E6D46605B3164653856C25856E332E57678785F754C04B88B + 1CCB68E427845542A1BDF9BA1228F691E986DA1813087CB914810DF3C852EA2C + 88603E6FCB2F6BE0C81B10E02AB48FE10A5F7DAEA27AE5C3E484EE4E37BA9845 + 73AE85EFBDFCD0544A57012187DA6639374725E040610F4B572EF6D2E8E7D457 + 527A8D8769C453FA8C986E5C4D12DF477320BE2C0DDD13D4EDB6EF9D3F438114 + 1109A0606726851B25610C650E8069EC1270D5926E3C4D1671EA10BCAF8E080B + A824B449342BBCD180802F0AFA9AB33B780F7086EE216D732B98473F0BD4F3CE + CD4AAC6DC15B763454F1965E0F796C7F1D0152FE87A2C4FE417BA84F807B51CE + 24C6518A1F91A8FDEF803AF851431DDFEAA910873E09FF528A51D6FCF20FC209 + 28767C448B9C61E906755E08805C61CD734E0811F04371F6455628E5C94E6335 + 5702F455A3D7AF756E3BBBE244900057916336676C6142BD69D515A621730C55 + 84F35D68FB57258D00A5DF6D300D2D683201B5246853F510394800053E6B69EA + 1B954867F8C5E360FEF97C431DDFFBB3210EAC491E01974C86E9EA7971114052 + 6ACD2BBB85C93FF631BB3B787E8837757D56D42173A15E3AD550C7B3641850FD + 4DF32040A2CA9A5F96C96A4A1C03B8C0B6443B631AFF0694CCDCA8CF85E738BC + 8B073548722444C0A5B7D3CFEE0FF11110EC94DFCEDC85D9D3C1F98B89744472 + 132CBFDA096EB246D5D1576BFEB7EF481A785D4C239E84D27B82A18E110142CA + F1CCBDC8F1171A968712EA49FBDEB0DEFCB6A18A9F5669DAE789F9D9FAC23AF6 + 83F986525A951B47A84604D06CF07B56B3C8BE34D1F436EF3309E6E1868917F8 + B716421EFE2CC61AA3C2066CEDC0BB0C82AA8FBC6A6DB4846FD514886F3E8D4C + 80C073CC55644F380052873D0EB5EFA404C1A5408420C73B04A83912F9B9C49B + CCB5C8BE836680CB1369C77CD36AF00BFBA41B6E43FC95DBE17B33FAC05004B0 + 8E7C807D2F2D73FBC6DD8A6A83951CE0D96C6EB3111A7DEFAADB8C13A7526E60 + 1404EDA18F97C4DB0EEBD41F9609CBD30DF75C64F06F7E0ADAAE4626379D00D7 + 22C716C6F0D3789B52FA4DA570746EBA118744D41C4560D363C1B0BB719AE45A + DD072414069B463E0DA5E70DE9451DF0401CDD0DEDBF6B68ADB132781F135914 + 0EEB16F01259C0B4B809B8652D94768EE88D545722F0C91361DFA9B9F790D33C + E376C813F9D73F02E93B1D7A6ED6C3DB334918E9AD0E3E8F248CE63171EA30E4 + 0F6531830E17B940B780B96401F3E2281DCC1859A76FA74020FA2A5A94BD03DF + DAFBC2BEB3DEBE31F87E21F8BCE63B785FBE1267B38DD2D412B6BB7610BADAD7 + 11DAE1CFE17F6B725CDD6B4CC84FCE623545D91338F8B2782AE03FB902E671AF + 19EAF8373F19E68C180532963B3F07CE40D6BEDE00FF9AE975CF3BE7C2726328 + 6587C0AEC5086CFE734A08A058F81A76624177BBC56C72C6535EE97F174C837F + 6BA873EE3B3C49D19B65D21AF0B659C19719BE0F1F81D8B7A2AE40ABAE304F5C + 096EBB00D2EF868FD60FB232E1B55A03D1D3E4367FA03DA30F7A2C70989DF316 + 2816315D5B0825677474052D00F78BB960015778E364DEBC457B48FD77EB6DB8 + A9432A16706B9B5ABFE077211522A5FCC296EFBC249810F1143996503034A589 + 0CC232652378EBE81B45C4F103F0BD7E5D4A00244C8010CFD86695CF3E9311B2 + 4F648CBFD1A41A6CED61BD535FDC447F5912D8B7128175892D345348C1486B9E + 735D9080A3C57D335A4B4F25594146ACC579F7AB611EB3D850E7DC4D0ECD46A4 + ACB2762AEFAA6FB1AB4B8B173916931FB833D63A948179300D32DE37E15D7E23 + E491DDE9861B8981F934FA41D30C11E02A720C2402B630239BAE27A6D1CF43C9 + BE26BA42C0470EF07230CD9B6EB4E7820F40E3BDACF71D708611A00B59C18744 + C2F046AB208E2CD33E016F7961541DEDE85EF8978D4B37DA48BD5F46A31F4A00 + 8513509C3D948C7B7DA356909149D1DC264395C0DE52043618BF2738EFD0A5D4 + 1405FDCD339D7B2312102461916315E36CAC51453C7B14CCA34B8C546A039CAF + 9A36B1A49C00E0255B5E59989F6B40C0C9C21E0EB322F7E8D9B76815A957FC06 + EA00E35D73DED25F401EDB976ECCF5E11F0F04649F8CFBCBC3F26351B6C8D81F + A4B8E0AFD1AA328D7D054AB7C1519B123E17BCBA034CCE8EF6E4C097725AA41D + A49177892D638AFBA8FD3D06D6704310E3B04CDF0A666913B531AD7207FC6FA6 + 7D1F757DF0CB09FCC448CFA26E93AB29CEEAAC40D94A2A5DC30AB4C982E5B67F + 1B3618D8FD0A021F3F966EDC67C1EFF79831E882BB9D279B44802EAE67730670 + 4DAE0F8B10DB66436D2403242AD641348B00481E637E31D832FBE0FE681A316C + 95CDB95632B98A7E0E3FAE4D42529EA67865942DBFEC5323B598768B7B4BECD7 + 0BC1973386C65FC5340B91A768CDFD4B6B7ED9FAC634633E2FE029CC190E8E15 + 14225D906E788DC811C1C498580F4E34E9C0447549566F55282B295CEE996E94 + 9145EE845F1B6F9D5D51116B89261F993956D8A3754B2E4AC831A62653190F6C + 7D57B814CFDB5A890730ADA249E9E1B84F8DB90AED13B8C29E49F7D921427E90 + 1CF4BDD6BCB2F7E2299FD0B1B95A6B908F4A865946A1734A80EBA74A81F9569F + EF69F6E02177BCF524E5E468CDC28B32B9497D886689E95465EB14033F4E643F + 6735AB0B71F7FEEF13AD2FA96787E5E25EADDC6EFF640E4C918C5D91AC7D87FA + 32966C7D1311BCE4F8F7EEA55D0ABE4D5AAA382587A7839D2EEADEC50B55CF99 + 8FD0C9A0A6B262CD3605B7B6034EEADCA7F4F9434DC1BB19339D4753D1CF9411 + D0405E70B471F9955E4C882CCE652721D13618589117231FE2A1CB0972665592 + 6B15AED3E67D914E77A442FE0F6724BE5B75E29AC60000000049454E44AE4260 + 82} + ExplicitLeft = -31 + ExplicitTop = 177 + ExplicitWidth = 121 + ExplicitHeight = 189 + end + end + object Panel2: TPanel + Left = 75 + Top = 0 + Width = 240 + Height = 104 + Align = alLeft + BevelOuter = bvNone + Caption = ' ' + TabOrder = 1 + ExplicitTop = 1 + object lblCurrentBlockCaption: TLabel + Left = 55 + Top = 7 + Width = 60 + Height = 13 + Alignment = taRightJustify + Caption = 'Total Blocks:' + Color = clBtnFace + ParentColor = False + end + object lblCurrentBlock: TLabel + Left = 121 + Top = 7 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + ParentColor = False + end + object lblCurrentBlockTimeCaption: TLabel + Left = 25 + Top = 26 + Width = 90 + Height = 13 + Alignment = taRightJustify + Caption = 'Current Block Age:' + Color = clBtnFace + ParentColor = False + end + object lblCurrentBlockTime: TLabel + Left = 121 + Top = 26 + Width = 81 + Height = 13 + Caption = '000 seconds ago' + Color = clBtnFace + ParentColor = False + end + object lblOperationsPendingCaption: TLabel + Left = 17 + Top = 45 + Width = 98 + Height = 13 + Alignment = taRightJustify + Caption = 'Pending Operations:' + Color = clBtnFace + ParentColor = False + end + object lblOperationsPending: TLabel + Left = 121 + Top = 45 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + ParentColor = False + end + object lblMiningStatusCaption: TLabel + Left = 50 + Top = 64 + Width = 65 + Height = 13 + Alignment = taRightJustify + Caption = 'Miner Clients:' + Color = clBtnFace + ParentColor = False + end + object lblMinersClients: TLabel + Left = 121 + Top = 64 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + ParentColor = False + end + object lblNodeCaption: TLabel + Left = 52 + Top = 83 + Width = 63 + Height = 13 + Alignment = taRightJustify + Caption = 'Node Status:' + Color = clBtnFace + ParentColor = False + end + object lblNodeStatus: TLabel + Left = 121 + Top = 83 + Width = 15 + Height = 13 + Caption = '???' + Color = clBtnFace + ParentColor = False + end + end + object Panel3: TPanel + Left = 315 + Top = 0 + Width = 240 + Height = 104 + Align = alLeft + BevelOuter = bvNone + Caption = ' ' + TabOrder = 2 + ExplicitLeft = 309 + ExplicitTop = -1 + ExplicitHeight = 105 + object lblTimeAverage: TLabel + Left = 104 + Top = 26 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + ParentColor = False + end + object lblTimeAverageCaption: TLabel + Left = 29 + Top = 26 + Width = 69 + Height = 13 + Alignment = taRightJustify + Caption = 'Time average:' + Color = clBtnFace + ParentColor = False + end + object lblCurrentAccountsCaption: TLabel + Left = 50 + Top = 7 + Width = 48 + Height = 13 + Alignment = taRightJustify + Caption = 'Accounts:' + Color = clBtnFace + ParentColor = False + end + object lblCurrentAccounts: TLabel + Left = 104 + Top = 7 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + ParentColor = False + end + object lblTimeAverageAux: TLabel + Left = 104 + Top = 45 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clGray + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentColor = False + ParentFont = False + end + object lblBlocksFoundCaption: TLabel + Left = 22 + Top = 64 + Width = 76 + Height = 13 + Alignment = taRightJustify + Caption = 'Blocks Found:' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object lblBlocksFound: TLabel + Left = 104 + Top = 64 + Width = 21 + Height = 13 + Hint = 'Blocks found while Miner is running...' + Caption = '000' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + ParentShowHint = False + ShowHint = True + end + object lblCurrentDifficultyCaption: TLabel + Left = 22 + Top = 83 + Width = 76 + Height = 13 + Alignment = taRightJustify + Caption = 'Current Target:' + Color = clBtnFace + ParentColor = False + end + object lblCurrentDifficulty: TLabel + Left = 104 + Top = 83 + Width = 18 + Height = 13 + Caption = '000' + Color = clBtnFace + ParentColor = False + end + end + object Panel4: TPanel + Left = 555 + Top = 0 + Width = 369 + Height = 104 + Align = alClient + BevelOuter = bvNone + Caption = ' ' + TabOrder = 3 + ExplicitLeft = 561 + ExplicitTop = -1 + ExplicitHeight = 105 + object lblReceivedMessages: TLabel + Left = 6 + Top = 36 + Width = 184 + Height = 23 + Cursor = crHandPoint + Caption = 'Received Messages' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -19 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object lblBuild: TLabel + Left = 6 + Top = 7 + Width = 49 + Height = 23 + Caption = 'Build' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + end +end diff --git a/src/gui-classic/Frames/UFrameInfo.pas b/src/gui-classic/Frames/UFrameInfo.pas new file mode 100644 index 000000000..66f93ebe1 --- /dev/null +++ b/src/gui-classic/Frames/UFrameInfo.pas @@ -0,0 +1,61 @@ +unit UFrameInfo; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, + Vcl.Imaging.pngimage, Vcl.ExtCtrls; + +type + TFrameInfo = class(TFrame) + Panel1: TPanel; + Image1: TImage; + Panel2: TPanel; + lblCurrentBlockCaption: TLabel; + lblCurrentBlock: TLabel; + lblCurrentBlockTimeCaption: TLabel; + lblCurrentBlockTime: TLabel; + lblOperationsPendingCaption: TLabel; + lblOperationsPending: TLabel; + lblMiningStatusCaption: TLabel; + lblMinersClients: TLabel; + lblNodeStatus: TLabel; + Panel3: TPanel; + lblTimeAverage: TLabel; + lblCurrentAccounts: TLabel; + lblTimeAverageAux: TLabel; + lblBlocksFound: TLabel; + Panel4: TPanel; + lblReceivedMessages: TLabel; + lblBuild: TLabel; + lblCurrentDifficultyCaption: TLabel; + lblCurrentDifficulty: TLabel; + + private + { Private declarations } + public + { Public declarations } + + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + end; + +implementation + +{$R *.dfm} + +constructor TFrameInfo.Create(AOwner: TComponent); +begin + inherited Create( AOwner ); + + +end; + +destructor TFrameInfo.Destroy; +begin + + inherited Destroy; +end; + +end. diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 632ffd3b4..9a596ce81 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -23,333 +23,40 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 865 - Height = 91 + Height = 104 Align = alTop BevelOuter = bvNone TabOrder = 0 - object Image1: TImage - Left = 15 - Top = 15 - Width = 64 - Height = 64 - AutoSize = True - Picture.Data = { - 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000400000 - 00400806000000AA6971DE0000000467414D410000B18F0BFC61050000000970 - 48597300000EC200000EC20115284A800000001874455874536F667477617265 - 007061696E742E6E657420342E312E36FD4E09E800000AD54944415478DAD55B - 0B7854C515FE67EEDD17848780402860B21BE4258A8116FD1004A4F889852282 - A808A2541113146DB5AD521A3EABD54AA186243E2A55D17E060111A42A5A9487 - F8E04D4185920DB18809280884ECFBCEF4DC0D6CB264F766B30F361EF86EF6EE - 3DF3F8FF397BE6CCB9334C4A89944A415FB3BF93B79F4F139733C97A32862C06 - 7402581B6AD9060649FF3C7439C1192A85645F7326BFD2A0ED6AF95DD65E14AC - 0FA4B27B2C1504B84B72BA494DDEC0384613B8218CB116F1D4437DAB26823630 - 897F694C7BAB655E4555B32560FB0B034D7D7CC7C7017C06757A388D324F6647 - C9420290EC7D29C4732D320FBE8389526B1E0410708FF7C434C9E42334D259C9 - 041D950C29F7D3E54FB6CE075F4F94888408A829768CE6600B69B42F3E1FC023 - 50B15B61E27ED3BD07379C5F025EE8D9C1E50B1473C66E4A0FF07A14D06F839C - E662B3C67FCDEE3B702AE504788A728651A97F52D12EE9061F4E842C975CDEDC - E2DEF2AD292380C0CFA2DFFA0206A6A61B70441220BD749961CB77BE92640218 - F314DBE7D3DF07530980B5EB09D6BE07E03D09ED7F1F074384FAC2330702199D - 21ABBF85ACDA118584E0FFB9B6FCF2C71103B8180860CC5BEC2821AD7B52091E - ADBBC17AEB0780526B5CBE8DF320F6BC5AD78B6E436119FB8F332825BC6F4D81 - FCF633830AC553D6BCF2DF254C80A7C8B180387820A5E049949EE3601A393F74 - EFDF58006DCF6BA17BF5CA87A0E6CE08DD7B57DE4A046C69041CE658F2CB1E8F - 9B006F91E37EC9D8DF520D3E08F0AA39502F9B16BAF7AD980851B533746F1AF3 - 3294EE57D5DED0D4EFFE7B2E98BFC6B04E7D8600D36EB7E51D7C359A4E54023C - 2539C3A5901F5070A3843DC8E802F3354F20E97EB0FDC5E0D676A15B51B51DD0 - FC751DED781998C976E66100A2721BA4D0204F7E0D796417F98C4D80EBBB4835 - BB158E21A69965DB6326E0F4B38E8EAA865D64FA99618CAA2D60B971297887DE - C9059F0C21ABD00E6D46605B3164653856C25856E332E57678785F754C04B88B - 1CCB68E427845542A1BDF9BA1228F691E986DA1813087CB914810DF3C852EA2C - 88603E6FCB2F6BE0C81B10E02AB48FE10A5F7DAEA27AE5C3E484EE4E37BA9845 - 73AE85EFBDFCD0544A57012187DA6639374725E040610F4B572EF6D2E8E7D457 - 527A8D8769C453FA8C986E5C4D12DF477320BE2C0DDD13D4EDB6EF9D3F438114 - 1109A0606726851B25610C650E8069EC1270D5926E3C4D1671EA10BCAF8E080B - A824B449342BBCD180802F0AFA9AB33B780F7086EE216D732B98473F0BD4F3CE - CD4AAC6DC15B763454F1965E0F796C7F1D0152FE87A2C4FE417BA84F807B51CE - 24C6518A1F91A8FDEF803AF851431DDFEAA910873E09FF528A51D6FCF20FC209 - 28767C448B9C61E906755E08805C61CD734E0811F04371F6455628E5C94E6335 - 5702F455A3D7AF756E3BBBE244900057916336676C6142BD69D515A621730C55 - 84F35D68FB57258D00A5DF6D300D2D683201B5246853F510394800053E6B69EA - 1B954867F8C5E360FEF97C431DDFFBB3210EAC491E01974C86E9EA7971114052 - 6ACD2BBB85C93FF631BB3B787E8837757D56D42173A15E3AD550C7B3641850FD - 4DF32040A2CA9A5F96C96A4A1C03B8C0B6443B631AFF0694CCDCA8CF85E738BC - 8B073548722444C0A5B7D3CFEE0FF11110EC94DFCEDC85D9D3C1F98B89744472 - 132CBFDA096EB246D5D1576BFEB7EF481A785D4C239E84D27B82A18E110142CA - F1CCBDC8F1171A968712EA49FBDEB0DEFCB6A18A9F5669DAE789F9D9FAC23AF6 - 83F986525A951B47A84604D06CF07B56B3C8BE34D1F436EF3309E6E1868917F8 - B716421EFE2CC61AA3C2066CEDC0BB0C82AA8FBC6A6DB4846FD514886F3E8D4C - 80C073CC55644F380052873D0EB5EFA404C1A5408420C73B04A83912F9B9C49B - CCB5C8BE836680CB1369C77CD36AF00BFBA41B6E43FC95DBE17B33FAC05004B0 - 8E7C807D2F2D73FBC6DD8A6A83951CE0D96C6EB3111A7DEFAADB8C13A7526E60 - 1404EDA18F97C4DB0EEBD41F9609CBD30DF75C64F06F7E0ADAAE4626379D00D7 - 22C716C6F0D3789B52FA4DA570746EBA118744D41C4560D363C1B0BB719AE45A - DD072414069B463E0DA5E70DE9451DF0401CDD0DEDBF6B68ADB132781F135914 - 0EEB16F01259C0B4B809B8652D94768EE88D545722F0C91361DFA9B9F790D33C - E376C813F9D73F02E93B1D7A6ED6C3DB334918E9AD0E3E8F248CE63171EA30E4 - 0F6531830E17B940B780B96401F3E2281DCC1859A76FA74020FA2A5A94BD03DF - DAFBC2BEB3DEBE31F87E21F8BCE63B785FBE1267B38DD2D412B6BB7610BADAD7 - 11DAE1CFE17F6B725CDD6B4CC84FCE623545D91338F8B2782AE03FB902E671AF - 19EAF8373F19E68C180532963B3F07CE40D6BEDE00FF9AE975CF3BE7C2726328 - 6587C0AEC5086CFE734A08A058F81A76624177BBC56C72C6535EE97F174C837F - 6BA873EE3B3C49D19B65D21AF0B659C19719BE0F1F81D8B7A2AE40ABAE304F5C - 096EBB00D2EF868FD60FB232E1B55A03D1D3E4367FA03DA30F7A2C70989DF316 - 2816315D5B0825677474052D00F78BB960015778E364DEBC457B48FD77EB6DB8 - A9432A16706B9B5ABFE077211522A5FCC296EFBC249810F1143996503034A589 - 0CC232652378EBE81B45C4F103F0BD7E5D4A00244C8010CFD86695CF3E9311B2 - 4F648CBFD1A41A6CED61BD535FDC447F5912D8B7128175892D345348C1486B9E - 735D9080A3C57D335A4B4F25594146ACC579F7AB611EB3D850E7DC4D0ECD46A4 - ACB2762AEFAA6FB1AB4B8B173916931FB833D63A948179300D32DE37E15D7E23 - E491DDE9861B8981F934FA41D30C11E02A720C2402B630239BAE27A6D1CF43C9 - BE26BA42C0470EF07230CD9B6EB4E7820F40E3BDACF71D708611A00B59C18744 - C2F046AB208E2CD33E016F7961541DEDE85EF8978D4B37DA48BD5F46A31F4A00 - 8513509C3D948C7B7DA356909149D1DC264395C0DE52043618BF2738EFD0A5D4 - 1405FDCD339D7B2312102461916315E36CAC51453C7B14CCA34B8C546A039CAF - 9A36B1A49C00E0255B5E59989F6B40C0C9C21E0EB322F7E8D9B76815A957FC06 - EA00E35D73DED25F401EDB976ECCF5E11F0F04649F8CFBCBC3F26351B6C8D81F - A4B8E0AFD1AA328D7D054AB7C1519B123E17BCBA034CCE8EF6E4C097725AA41D - A49177892D638AFBA8FD3D06D6704310E3B04CDF0A666913B531AD7207FC6FA6 - 7D1F757DF0CB09FCC448CFA26E93AB29CEEAAC40D94A2A5DC30AB4C982E5B67F - 1B3618D8FD0A021F3F966EDC67C1EFF79831E882BB9D279B44802EAE67730670 - 4DAE0F8B10DB66436D2403242AD641348B00481E637E31D832FBE0FE681A316C - 95CDB95632B98A7E0E3FAE4D42529EA67865942DBFEC5323B598768B7B4BECD7 - 0BC1973386C65FC5340B91A768CDFD4B6B7ED9FAC634633E2FE029CC190E8E15 - 14225D906E788DC811C1C498580F4E34E9C0447549566F55282B295CEE996E94 - 9145EE845F1B6F9D5D51116B89261F993956D8A3754B2E4AC831A62653190F6C - 7D57B814CFDB5A890730ADA249E9E1B84F8DB90AED13B8C29E49F7D921427E90 - 1CF4BDD6BCB2F7E2299FD0B1B95A6B908F4A865946A1734A80EBA74A81F9569F - EF69F6E02177BCF524E5E468CDC28B32B9497D886689E95465EB14033F4E643F - 6735AB0B71F7FEEF13AD2FA96787E5E25EADDC6EFF640E4C918C5D91AC7D87FA - 32966C7D1311BCE4F8F7EEA55D0ABE4D5AAA382587A7839D2EEADEC50B55CF99 - 8FD0C9A0A6B262CD3605B7B6034EEADCA7F4F9434DC1BB19339D4753D1CF9411 - D0405E70B471F9955E4C882CCE652721D13618589117231FE2A1CB0972665592 - 6B15AED3E67D914E77A442FE0F6724BE5B75E29AC60000000049454E44AE4260 - 82} - end - object lblCurrentBlockCaption: TLabel - Left = 90 - Top = 11 - Width = 60 - Height = 13 - Caption = 'Total Blocks:' - Color = clBtnFace - ParentColor = False - end - object lblCurrentBlock: TLabel - Left = 166 - Top = 11 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - ParentColor = False - end - object lblCurrentBlockTimeCaption: TLabel - Left = 90 - Top = 26 - Width = 90 - Height = 13 - Caption = 'Current Block Age:' - Color = clBtnFace - ParentColor = False - end - object lblCurrentBlockTime: TLabel - Left = 198 - Top = 26 - Width = 81 - Height = 13 - Caption = '000 seconds ago' - Color = clBtnFace - ParentColor = False - end - object lblOperationsPendingCaption: TLabel - Left = 90 - Top = 41 - Width = 98 - Height = 13 - Caption = 'Pending Operations:' - Color = clBtnFace - ParentColor = False - end - object lblOperationsPending: TLabel - Left = 207 - Top = 41 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - ParentColor = False - end - object lblMiningStatusCaption: TLabel - Left = 90 - Top = 56 - Width = 65 - Height = 13 - Caption = 'Miner Clients:' - Color = clBtnFace - ParentColor = False - end - object lblMinersClients: TLabel - Left = 177 - Top = 56 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - ParentColor = False - end - object lblCurrentDifficultyCaption: TLabel - Left = 429 - Top = 11 - Width = 76 - Height = 13 - Caption = 'Current Target:' - Color = clBtnFace - ParentColor = False - end - object lblCurrentDifficulty: TLabel - Left = 518 - Top = 11 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - ParentColor = False - end - object lblTimeAverage: TLabel - Left = 370 - Top = 26 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - ParentColor = False - end - object Label4: TLabel - Left = 285 - Top = 26 - Width = 69 - Height = 13 - Caption = 'Time average:' - Color = clBtnFace - ParentColor = False - end - object Label8: TLabel - Left = 90 - Top = 70 - Width = 63 - Height = 13 - Caption = 'Node Status:' - Color = clBtnFace - ParentColor = False - end - object lblNodeStatus: TLabel - Left = 168 - Top = 70 - Width = 15 - Height = 13 - Caption = '???' - Color = clBtnFace - ParentColor = False - end - object Label5: TLabel - Left = 285 - Top = 11 - Width = 48 - Height = 13 - Caption = 'Accounts:' - Color = clBtnFace - ParentColor = False - end - object lblCurrentAccounts: TLabel - Left = 344 - Top = 11 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - ParentColor = False - end - object lblTimeAverageAux: TLabel - Left = 370 - Top = 41 - Width = 18 - Height = 13 - Caption = '000' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clGray - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - ParentColor = False - ParentFont = False - end - object Label16: TLabel - Left = 360 - Top = 56 - Width = 76 - Height = 13 - Caption = 'Blocks Found:' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentColor = False - ParentFont = False - end - object lblBlocksFound: TLabel - Left = 450 - Top = 56 - Width = 21 - Height = 13 - Hint = 'Blocks found while Miner is running...' - Caption = '000' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentColor = False - ParentFont = False - ParentShowHint = False - ShowHint = True - end - object lblReceivedMessages: TLabel - Left = 360 - Top = 66 - Width = 184 - Height = 23 - Cursor = crHandPoint - Caption = 'Received Messages' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clRed - Font.Height = -19 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentColor = False - ParentFont = False - OnClick = lblReceivedMessagesClick - end - object lblBuild: TLabel - Left = 586 - Top = 3 - Width = 49 - Height = 23 - Caption = 'Build' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -19 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentColor = False - ParentFont = False + inline FrameInfo: TFrameInfo + Left = 0 + Top = 0 + Width = 865 + Height = 104 + Align = alTop + TabOrder = 0 + ExplicitWidth = 865 + inherited Panel1: TPanel + ExplicitHeight = 104 + inherited Image1: TImage + Width = 75 + Height = 104 + end + end + inherited Panel2: TPanel + ExplicitTop = 0 + end + inherited Panel3: TPanel + ExplicitLeft = 315 + ExplicitTop = 0 + ExplicitHeight = 104 + end + inherited Panel4: TPanel + Width = 310 + ExplicitLeft = 555 + ExplicitTop = 0 + ExplicitWidth = 310 + ExplicitHeight = 104 + end end end object StatusBar: TStatusBar @@ -374,9 +81,9 @@ object FRMWallet: TFRMWallet end object PageControl: TPageControl Left = 0 - Top = 91 + Top = 104 Width = 865 - Height = 466 + Height = 453 ActivePage = tsMyAccounts Align = alClient TabOrder = 2 @@ -387,55 +94,56 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 438 + Height = 425 Align = alClient TabOrder = 0 ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitHeight = 425 inherited Splitter1: TSplitter - Height = 372 + Height = 359 + ExplicitHeight = 359 end inherited pnlMyAccountsTop: TPanel Width = 857 ExplicitWidth = 857 end inherited pnlAccounts: TPanel - Height = 372 - ExplicitHeight = 372 + Height = 359 + ExplicitHeight = 359 inherited dgAccounts: TDrawGrid - Height = 338 - ExplicitHeight = 338 + Height = 325 + ExplicitHeight = 325 end inherited pnlAccountsInfo: TPanel - Top = 338 - ExplicitTop = 338 + Top = 325 + ExplicitTop = 325 end end inherited pcAccountsOptions: TPageControl Width = 452 - Height = 372 + Height = 359 ExplicitWidth = 452 - ExplicitHeight = 372 + ExplicitHeight = 359 inherited tsMultiSelectAccounts: TTabSheet ExplicitWidth = 444 - ExplicitHeight = 344 + ExplicitHeight = 331 inherited dgSelectedAccounts: TDrawGrid - Height = 287 - ExplicitHeight = 287 + Height = 274 + ExplicitHeight = 274 end inherited pnlSelectedAccountsTop: TPanel Width = 444 ExplicitWidth = 444 end inherited pnlSelectedAccountsBottom: TPanel - Top = 318 + Top = 305 Width = 444 - ExplicitTop = 318 + ExplicitTop = 305 ExplicitWidth = 444 end inherited pnlSelectedAccountsLeft: TPanel - Height = 287 - ExplicitHeight = 287 + Height = 274 + ExplicitHeight = 274 end end end @@ -448,16 +156,17 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 438 + Height = 425 Align = alClient TabOrder = 0 ExplicitWidth = 857 ExplicitHeight = 438 inherited dgPendingOperations: TDrawGrid Width = 857 - Height = 352 + Height = 339 ExplicitLeft = 0 ExplicitTop = 86 + ExplicitHeight = 339 end inherited pnlPendingOperations: TPanel Width = 857 @@ -475,20 +184,20 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 438 + Height = 425 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitWidth = 296 + ExplicitHeight = 46 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 857 + ExplicitWidth = 296 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 - Height = 397 + Height = 384 ExplicitWidth = 857 - ExplicitHeight = 397 + ExplicitHeight = 384 end end end @@ -499,7 +208,7 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 438 + Height = 425 Align = alClient TabOrder = 0 ExplicitWidth = 857 @@ -510,9 +219,9 @@ object FRMWallet: TFRMWallet end inherited dgOperationsExplorer: TDrawGrid Width = 857 - Height = 397 + Height = 384 ExplicitWidth = 857 - ExplicitHeight = 397 + ExplicitHeight = 384 end end end @@ -523,20 +232,24 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 438 + Height = 425 Align = alClient TabOrder = 0 - ExplicitLeft = 36 - ExplicitTop = -93 + ExplicitWidth = 857 + ExplicitHeight = 438 inherited memoLogs: TMemo Width = 857 - Height = 405 + Height = 392 ExplicitTop = 33 + ExplicitWidth = 857 + ExplicitHeight = 405 end inherited pnlTopLogs: TPanel Width = 857 + ExplicitWidth = 857 inherited Button1: TButton Left = 716 + ExplicitLeft = 716 end end end @@ -548,7 +261,7 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 438 + Height = 425 Align = alClient TabOrder = 0 ExplicitWidth = 857 @@ -558,7 +271,7 @@ object FRMWallet: TFRMWallet ExplicitWidth = 857 end inherited Splitter2: TSplitter - Top = 272 + Top = 259 Width = 857 ExplicitTop = 273 ExplicitWidth = 857 @@ -568,14 +281,14 @@ object FRMWallet: TFRMWallet ExplicitWidth = 857 end inherited memoNetServers: TMemo - Top = 295 + Top = 282 Width = 857 ExplicitTop = 295 ExplicitWidth = 857 end inherited memoNetBlackLists: TMemo Width = 857 - Height = 112 + Height = 99 ExplicitWidth = 857 ExplicitHeight = 112 end @@ -588,7 +301,7 @@ object FRMWallet: TFRMWallet ExplicitWidth = 857 end inherited Panel3: TPanel - Top = 275 + Top = 262 Width = 857 ExplicitTop = 275 ExplicitWidth = 857 @@ -602,71 +315,71 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 438 + Height = 425 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitWidth = 296 + ExplicitHeight = 46 inherited Splitter1: TSplitter - Top = 205 + Top = 192 Width = 857 ExplicitTop = 205 ExplicitWidth = 857 end inherited memoMessages: TMemo - Top = 228 + Top = 215 Width = 857 - ExplicitTop = 228 + ExplicitTop = 215 ExplicitWidth = 857 end inherited PanelBottom: TPanel - Top = 208 + Top = 195 Width = 857 ExplicitTop = 208 ExplicitWidth = 857 end inherited PanelTop: TPanel Width = 857 - Height = 205 + Height = 192 ExplicitLeft = 0 ExplicitTop = 0 - ExplicitWidth = 857 - ExplicitHeight = 205 + ExplicitWidth = 296 + ExplicitHeight = 192 inherited Splitter2: TSplitter - Height = 203 + Height = 190 ExplicitHeight = 203 end inherited PanelLeft: TPanel - Height = 203 - ExplicitHeight = 203 + Height = 190 + ExplicitHeight = 190 inherited lbNetConnections: TListBox - Height = 181 + Height = 168 ExplicitLeft = 1 ExplicitTop = 21 - ExplicitHeight = 181 + ExplicitHeight = 168 end end inherited PanelRight: TPanel Width = 564 - Height = 203 + Height = 190 ExplicitLeft = 292 ExplicitTop = 1 - ExplicitWidth = 564 - ExplicitHeight = 203 + ExplicitWidth = 3 + ExplicitHeight = 190 inherited memoMessageToSend: TMemo Width = 562 - Height = 115 + Height = 102 ExplicitLeft = 1 ExplicitTop = 21 ExplicitWidth = 562 - ExplicitHeight = 115 + ExplicitHeight = 102 end inherited Panel6: TPanel Width = 562 ExplicitWidth = 562 end inherited Panel7: TPanel - Top = 136 + Top = 123 Width = 562 ExplicitTop = 136 ExplicitWidth = 562 @@ -682,8 +395,8 @@ object FRMWallet: TFRMWallet end object TimerUpdateStatus: TTimer OnTimer = TimerUpdateStatusTimer - Left = 25 - Top = 45 + Left = 801 + Top = 13 end object MainMenu: TMainMenu Left = 165 diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index f7ae822f3..a78cbfca8 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -43,6 +43,7 @@ interface UFrameLogs, UFrameOperationsExplorer, UFrameBlockExplorer, + UFrameInfo, {$IFNDEF FPC} System.Generics.Collections {$ELSE} @@ -60,7 +61,6 @@ interface TFRMWallet = class(TForm) MiRPCCalls: TMenuItem; pnlTop: TPanel; - Image1: TImage; StatusBar: TStatusBar; PageControl: TPageControl; tsMyAccounts: TTabSheet; @@ -76,33 +76,12 @@ TFRMWallet = class(TForm) miAboutPascalCoin: TMenuItem; miNewOperation: TMenuItem; tsNodeStats: TTabSheet; - lblCurrentBlockCaption: TLabel; - lblCurrentBlock: TLabel; - lblCurrentBlockTimeCaption: TLabel; - lblCurrentBlockTime: TLabel; - lblOperationsPendingCaption: TLabel; - lblOperationsPending: TLabel; - lblMiningStatusCaption: TLabel; - lblMinersClients: TLabel; - lblCurrentDifficultyCaption: TLabel; - lblCurrentDifficulty: TLabel; - lblTimeAverage: TLabel; - Label4: TLabel; tsBlockChain: TTabSheet; - Label8: TLabel; - lblNodeStatus: TLabel; tsPendingOperations: TTabSheet; N1: TMenuItem; MiClose: TMenuItem; MiDecodePayload: TMenuItem; - Label5: TLabel; - lblCurrentAccounts: TLabel; - lblTimeAverageAux: TLabel; tsMessages: TTabSheet; - Label16: TLabel; - lblBlocksFound: TLabel; - lblReceivedMessages: TLabel; - lblBuild: TLabel; IPnodes1: TMenuItem; MiOperations: TMenuItem; MiAddaccounttoSelected: TMenuItem; @@ -123,6 +102,7 @@ TFRMWallet = class(TForm) FrameNodeStats: TFrameNodeStats; FrameMessages: TFrameMessages; FrameLogs: TFrameLogs; + FrameInfo: TFrameInfo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); @@ -508,7 +488,7 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FMinAccountBalance := 0; FMaxAccountBalance := CT_MaxWalletAmount; FMessagesUnreadCount := 0; - lblReceivedMessages.Visible := false; + FrameInfo.lblReceivedMessages.Visible := false; FUpdating := false; TimerUpdateStatus.Enabled := false; @@ -570,9 +550,9 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FrameAccountExplorer.cbExploreMyAccountsClick(nil); MinersBlocksFound := 0; - lblBuild.Caption := 'Build: '+CT_ClientAppVersion; + FrameInfo.lblBuild.Caption := 'Build: '+CT_ClientAppVersion; {$IFDEF TESTNET} - lblBuild.Font.Color := clRed; + FrameInfo.lblBuild.Font.Color := clRed; {$ENDIF} PageControl.Enabled := False; PageControl.Visible := False; @@ -1507,9 +1487,9 @@ procedure TFRMWallet.OnNodeMessageEvent(NetConnection: TNetConnection; MessageDa end else begin FrameMessages.memoMessages.Lines.Add(DateTimeToStr(now)+' Internal message: '+MessageData); end; - if FMessagesUnreadCount>1 then lblReceivedMessages.Caption := Format('You have received %d messages',[FMessagesUnreadCount]) - else lblReceivedMessages.Caption := 'You have received 1 message'; - lblReceivedMessages.Visible := true; + if FMessagesUnreadCount>1 then FrameInfo.lblReceivedMessages.Caption := Format('You have received %d messages',[FMessagesUnreadCount]) + else FrameInfo.lblReceivedMessages.Caption := 'You have received 1 message'; + FrameInfo.lblReceivedMessages.Visible := true; end; procedure TFRMWallet.OnNodeKeysActivity(Sender: TObject); @@ -1572,7 +1552,7 @@ procedure TFRMWallet.PageControlChange(Sender: TObject); if PageControl.ActivePage=tsMessages then begin UpdateAvailableConnections; FMessagesUnreadCount := 0; - lblReceivedMessages.Visible := false; + FrameInfo.lblReceivedMessages.Visible := false; end; end; @@ -1580,9 +1560,9 @@ procedure TFRMWallet.PageControlChange(Sender: TObject); procedure TFRMWallet.SetMinersBlocksFound(const Value: Integer); begin FMinersBlocksFound := Value; - lblBlocksFound.Caption := Inttostr(Value); - if Value>0 then lblBlocksFound.Font.Color := clGreen - else lblBlocksFound.Font.Color := clDkGray; + FrameInfo.lblBlocksFound.Caption := Inttostr(Value); + if Value>0 then FrameInfo.lblBlocksFound.Font.Color := clGreen + else FrameInfo.lblBlocksFound.Font.Color := clDkGray; end; procedure TFRMWallet.TimerUpdateStatusTimer(Sender: TObject); @@ -1701,26 +1681,26 @@ procedure TFRMWallet.UpdateBlockChainState; mc := 0; if Assigned(FNode) then begin if FNode.Bank.BlocksCount>0 then begin - lblCurrentBlock.Caption := Inttostr(FNode.Bank.BlocksCount)+' (0..'+Inttostr(FNode.Bank.BlocksCount-1)+')'; ; - end else lblCurrentBlock.Caption := '(none)'; - lblCurrentAccounts.Caption := Inttostr(FNode.Bank.AccountsCount); - lblCurrentBlockTime.Caption := UnixTimeToLocalElapsedTime(FNode.Bank.LastOperationBlock.timestamp); + FrameInfo.lblCurrentBlock.Caption := Inttostr(FNode.Bank.BlocksCount)+' (0..'+Inttostr(FNode.Bank.BlocksCount-1)+')'; ; + end else FrameInfo.lblCurrentBlock.Caption := '(none)'; + FrameInfo.lblCurrentAccounts.Caption := Inttostr(FNode.Bank.AccountsCount); + FrameInfo.lblCurrentBlockTime.Caption := UnixTimeToLocalElapsedTime(FNode.Bank.LastOperationBlock.timestamp); LLockedMempool := FNode.LockMempoolRead; try - lblOperationsPending.Caption := Inttostr(LLockedMempool.Count); - lblCurrentDifficulty.Caption := InttoHex(LLockedMempool.OperationBlock.compact_target,8); + FrameInfo.lblOperationsPending.Caption := Inttostr(LLockedMempool.Count); + FrameInfo.lblCurrentDifficulty.Caption := InttoHex(LLockedMempool.OperationBlock.compact_target,8); finally FNode.UnlockMempoolRead; end; favg := FNode.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage); f := (CT_NewLineSecondsAvg - favg) / CT_NewLineSecondsAvg; - lblTimeAverage.Caption := 'Last '+Inttostr(CT_CalcNewTargetBlocksAverage)+': '+FormatFloat('0.0',favg)+' sec. (Optimal '+Inttostr(CT_NewLineSecondsAvg)+'s) Deviation '+FormatFloat('0.00%',f*100); + FrameInfo.lblTimeAverage.Caption := 'Last '+Inttostr(CT_CalcNewTargetBlocksAverage)+': '+FormatFloat('0.0',favg)+' sec. (Optimal '+Inttostr(CT_NewLineSecondsAvg)+'s) Deviation '+FormatFloat('0.00%',f*100); if favg>=CT_NewLineSecondsAvg then begin - lblTimeAverage.Font.Color := clNavy; + FrameInfo.lblTimeAverage.Font.Color := clNavy; end else begin - lblTimeAverage.Font.Color := clOlive; + FrameInfo.lblTimeAverage.Font.Color := clOlive; end; - lblTimeAverageAux.Caption := Format('Last %d: %s sec. - %d: %s sec. - %d: %s sec. - %d: %s sec. - %d: %s sec.',[ + FrameInfo.lblTimeAverageAux.Caption := Format('Last %d: %s sec. - %d: %s sec. - %d: %s sec. - %d: %s sec. - %d: %s sec.',[ CT_CalcNewTargetBlocksAverage * 2 ,FormatFloat('0.0',FNode.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage * 2)), ((CT_CalcNewTargetBlocksAverage * 3) DIV 2) ,FormatFloat('0.0',FNode.Bank.GetActualTargetSecondsAverage((CT_CalcNewTargetBlocksAverage * 3) DIV 2)), ((CT_CalcNewTargetBlocksAverage DIV 4)*3),FormatFloat('0.0',FNode.Bank.GetActualTargetSecondsAverage(((CT_CalcNewTargetBlocksAverage DIV 4)*3))), @@ -1728,27 +1708,31 @@ procedure TFRMWallet.UpdateBlockChainState; CT_CalcNewTargetBlocksAverage DIV 4,FormatFloat('0.0',FNode.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage DIV 4))]); end else begin isMining := false; - lblCurrentBlock.Caption := ''; - lblCurrentAccounts.Caption := ''; - lblCurrentBlockTime.Caption := ''; - lblOperationsPending.Caption := ''; - lblCurrentDifficulty.Caption := ''; - lblTimeAverage.Caption := ''; - lblTimeAverageAux.Caption := ''; + + with FrameInfo do + begin + lblCurrentBlock.Caption := ''; + lblCurrentAccounts.Caption := ''; + lblCurrentBlockTime.Caption := ''; + lblOperationsPending.Caption := ''; + lblCurrentDifficulty.Caption := ''; + lblTimeAverage.Caption := ''; + lblTimeAverageAux.Caption := ''; + end; end; if (Assigned(FPoolMiningServer)) And (FPoolMiningServer.Active) then begin If FPoolMiningServer.ClientsCount>0 then begin - lblMinersClients.Caption := IntToStr(FPoolMiningServer.ClientsCount)+' connected JSON-RPC clients'; - lblMinersClients.Font.Color := clNavy; + FrameInfo.lblMinersClients.Caption := IntToStr(FPoolMiningServer.ClientsCount)+' connected JSON-RPC clients'; + FrameInfo.lblMinersClients.Font.Color := clNavy; end else begin - lblMinersClients.Caption := 'No JSON-RPC clients'; - lblMinersClients.Font.Color := clDkGray; + FrameInfo.lblMinersClients.Caption := 'No JSON-RPC clients'; + FrameInfo.lblMinersClients.Font.Color := clDkGray; end; MinersBlocksFound := FPoolMiningServer.ClientsWins; end else begin MinersBlocksFound := 0; - lblMinersClients.Caption := 'JSON-RPC server not active'; - lblMinersClients.Font.Color := clRed; + FrameInfo.lblMinersClients.Caption := 'JSON-RPC server not active'; + FrameInfo.lblMinersClients.Font.Color := clRed; end; end; @@ -1842,31 +1826,31 @@ procedure TFRMWallet.UpdateNodeStatus; Var status : String; begin If Not Assigned(FNode) then begin - lblNodeStatus.Font.Color := clRed; - lblNodeStatus.Caption := 'Initializing...'; + FrameInfo.lblNodeStatus.Font.Color := clRed; + FrameInfo.lblNodeStatus.Caption := 'Initializing...'; end else begin If FNode.IsReady(status) then begin if TNetData.NetData.NetStatistics.ActiveConnections>0 then begin - lblNodeStatus.Font.Color := clGreen; + FrameInfo.lblNodeStatus.Font.Color := clGreen; if TNetData.NetData.IsDiscoveringServers then begin - lblNodeStatus.Caption := 'Discovering servers'; + FrameInfo.lblNodeStatus.Caption := 'Discovering servers'; end else if TNetData.NetData.IsGettingNewBlockChainFromClient(status) then begin - lblNodeStatus.Caption := 'Obtaining new blockchain '+status; + FrameInfo.lblNodeStatus.Caption := 'Obtaining new blockchain '+status; end else begin - lblNodeStatus.Caption := 'Running'; + FrameInfo.lblNodeStatus.Caption := 'Running'; end; end else begin - lblNodeStatus.Font.Color := clRed; - lblNodeStatus.Caption := 'Alone in the world...'; + FrameInfo.lblNodeStatus.Font.Color := clRed; + FrameInfo.lblNodeStatus.Caption := 'Alone in the world...'; end; end else begin - lblNodeStatus.Font.Color := clRed; - lblNodeStatus.Caption := status; + FrameInfo.lblNodeStatus.Font.Color := clRed; + FrameInfo.lblNodeStatus.Caption := status; end; end; If Assigned(FBackgroundLabel) then begin - FBackgroundLabel.Font.Color:=lblNodeStatus.Font.Color; - FBackgroundLabel.Caption:='Please wait until finished: '+lblNodeStatus.Caption; + FBackgroundLabel.Font.Color:= FrameInfo.lblNodeStatus.Font.Color; + FBackgroundLabel.Caption:='Please wait until finished: '+FrameInfo.lblNodeStatus.Caption; end; end; diff --git a/src/pascalcoin_wallet_classic.dpr b/src/pascalcoin_wallet_classic.dpr index 40ae9feca..d776816c4 100644 --- a/src/pascalcoin_wallet_classic.dpr +++ b/src/pascalcoin_wallet_classic.dpr @@ -97,7 +97,8 @@ uses UFrameNodeStats in 'gui-classic\Frames\UFrameNodeStats.pas' {FrameNodeStats: TFrame}, UFrameMessages in 'gui-classic\Frames\UFrameMessages.pas' {FrameMessages: TFrame}, UnitReIntegrate in 'gui-classic\UnitReIntegrate.pas', - UFRMTestWallet in 'gui-classic\UFRMTestWallet.pas' {FRMTestWallet}; + UFRMTestWallet in 'gui-classic\UFRMTestWallet.pas' {FRMTestWallet}, + UFrameInfo in 'gui-classic\Frames\UFrameInfo.pas' {FrameInfo: TFrame}; {$R *.res} diff --git a/src/pascalcoin_wallet_classic.dproj b/src/pascalcoin_wallet_classic.dproj index a08a97143..55ea51518 100644 --- a/src/pascalcoin_wallet_classic.dproj +++ b/src/pascalcoin_wallet_classic.dproj @@ -274,6 +274,11 @@
FRMTestWallet
dfm
+ +
FrameInfo
+ dfm + TFrame +
Cfg_2 From 2f6053c356ade7bd1cc7d5f187ade4037c996624 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 19:42:04 +0100 Subject: [PATCH 22/44] Some GUI re-size bugs fixed --- src/gui-classic/Frames/UFrameInfo.dfm | 62 +++-- src/gui-classic/Frames/UFrameInfo.pas | 11 +- src/gui-classic/Frames/UFrameMessages.dfm | 175 +++++++------ src/gui-classic/Frames/UFrameMessages.pas | 3 +- src/gui-classic/Frames/UFrameNodeStats.dfm | 136 +++++++---- src/gui-classic/Frames/UFrameNodeStats.pas | 13 +- src/gui-classic/UFRMWallet.dfm | 270 ++++++++++++--------- src/gui-classic/UFRMWallet.pas | 4 +- 8 files changed, 401 insertions(+), 273 deletions(-) diff --git a/src/gui-classic/Frames/UFrameInfo.dfm b/src/gui-classic/Frames/UFrameInfo.dfm index 0cbacc332..eeb8740b7 100644 --- a/src/gui-classic/Frames/UFrameInfo.dfm +++ b/src/gui-classic/Frames/UFrameInfo.dfm @@ -2,23 +2,49 @@ object FrameInfo: TFrameInfo Left = 0 Top = 0 Width = 924 - Height = 104 + Height = 108 TabOrder = 0 + object Splitter1: TSplitter + Left = 75 + Top = 0 + Height = 108 + ResizeStyle = rsUpdate + ExplicitLeft = 160 + ExplicitTop = 48 + ExplicitHeight = 100 + end + object Splitter2: TSplitter + Left = 318 + Top = 0 + Height = 108 + ResizeStyle = rsUpdate + ExplicitLeft = 408 + ExplicitTop = 64 + ExplicitHeight = 100 + end + object Splitter3: TSplitter + Left = 561 + Top = 0 + Height = 108 + ResizeStyle = rsUpdate + ExplicitLeft = 560 + ExplicitHeight = 104 + end object Panel1: TPanel Left = 0 Top = 0 Width = 75 - Height = 104 + Height = 108 Align = alLeft + BevelKind = bkTile BevelOuter = bvNone Caption = ' ' TabOrder = 0 - ExplicitHeight = 105 object Image1: TImage Left = 0 Top = 0 - Width = 64 - Height = 64 + Width = 71 + Height = 104 Align = alClient AutoSize = True Center = True @@ -122,15 +148,16 @@ object FrameInfo: TFrameInfo end end object Panel2: TPanel - Left = 75 + Left = 78 Top = 0 Width = 240 - Height = 104 + Height = 108 Align = alLeft + BevelKind = bkTile BevelOuter = bvNone Caption = ' ' TabOrder = 1 - ExplicitTop = 1 + ExplicitLeft = 83 object lblCurrentBlockCaption: TLabel Left = 55 Top = 7 @@ -228,17 +255,16 @@ object FrameInfo: TFrameInfo end end object Panel3: TPanel - Left = 315 + Left = 321 Top = 0 Width = 240 - Height = 104 + Height = 108 Align = alLeft + BevelKind = bkSoft BevelOuter = bvNone Caption = ' ' TabOrder = 2 - ExplicitLeft = 309 - ExplicitTop = -1 - ExplicitHeight = 105 + ExplicitLeft = 318 object lblTimeAverage: TLabel Left = 104 Top = 26 @@ -347,17 +373,17 @@ object FrameInfo: TFrameInfo end end object Panel4: TPanel - Left = 555 + Left = 564 Top = 0 - Width = 369 - Height = 104 + Width = 360 + Height = 108 Align = alClient + BevelKind = bkTile BevelOuter = bvNone Caption = ' ' TabOrder = 3 ExplicitLeft = 561 - ExplicitTop = -1 - ExplicitHeight = 105 + ExplicitWidth = 363 object lblReceivedMessages: TLabel Left = 6 Top = 36 diff --git a/src/gui-classic/Frames/UFrameInfo.pas b/src/gui-classic/Frames/UFrameInfo.pas index 66f93ebe1..39703bf6c 100644 --- a/src/gui-classic/Frames/UFrameInfo.pas +++ b/src/gui-classic/Frames/UFrameInfo.pas @@ -11,6 +11,7 @@ interface TFrameInfo = class(TFrame) Panel1: TPanel; Image1: TImage; + Splitter1: TSplitter; Panel2: TPanel; lblCurrentBlockCaption: TLabel; lblCurrentBlock: TLabel; @@ -20,17 +21,23 @@ TFrameInfo = class(TFrame) lblOperationsPending: TLabel; lblMiningStatusCaption: TLabel; lblMinersClients: TLabel; + lblNodeCaption: TLabel; lblNodeStatus: TLabel; + Splitter2: TSplitter; Panel3: TPanel; lblTimeAverage: TLabel; + lblTimeAverageCaption: TLabel; + lblCurrentAccountsCaption: TLabel; lblCurrentAccounts: TLabel; lblTimeAverageAux: TLabel; + lblBlocksFoundCaption: TLabel; lblBlocksFound: TLabel; + lblCurrentDifficultyCaption: TLabel; + lblCurrentDifficulty: TLabel; + Splitter3: TSplitter; Panel4: TPanel; lblReceivedMessages: TLabel; lblBuild: TLabel; - lblCurrentDifficultyCaption: TLabel; - lblCurrentDifficulty: TLabel; private { Private declarations } diff --git a/src/gui-classic/Frames/UFrameMessages.dfm b/src/gui-classic/Frames/UFrameMessages.dfm index 30d5e28ee..a811f23c4 100644 --- a/src/gui-classic/Frames/UFrameMessages.dfm +++ b/src/gui-classic/Frames/UFrameMessages.dfm @@ -6,7 +6,7 @@ object FrameMessages: TFrameMessages TabOrder = 0 object Splitter1: TSplitter Left = 0 - Top = 233 + Top = 213 Width = 764 Height = 3 Cursor = crVSplit @@ -15,137 +15,162 @@ object FrameMessages: TFrameMessages ExplicitTop = 0 ExplicitWidth = 304 end - object memoMessages: TMemo - Left = 0 - Top = 256 - Width = 764 - Height = 210 - Align = alBottom - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -16 - Font.Name = 'Tahoma' - Font.Style = [] - Lines.Strings = ( - 'dsfa '#195#177'ldsaf '#195#177'lk dasf' - 'dsfklda'#195#177'fs '#195#177'l') - ParentFont = False - ReadOnly = True - ScrollBars = ssBoth - TabOrder = 0 - end object PanelBottom: TPanel Left = 0 - Top = 236 + Top = 216 Width = 764 - Height = 20 + Height = 250 Align = alBottom - Caption = 'Messages:' - TabOrder = 1 - ExplicitTop = 238 + Anchors = [akLeft, akTop, akRight] + BevelOuter = bvNone + Caption = ' ' + TabOrder = 0 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 764 + Height = 20 + Align = alTop + Caption = 'Messages:' + TabOrder = 0 + ExplicitLeft = 1 + ExplicitTop = 1 + ExplicitWidth = 762 + end + object memoMessages: TMemo + Left = 0 + Top = 20 + Width = 764 + Height = 230 + Align = alClient + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Tahoma' + Font.Style = [] + Lines.Strings = ( + 'dsfa '#195#177'ldsaf '#195#177'lk dasf' + 'dsfklda'#195#177'fs '#195#177'l') + ParentFont = False + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 1 + ExplicitTop = 256 + ExplicitHeight = 210 + end end object PanelTop: TPanel Left = 0 Top = 0 Width = 764 - Height = 233 + Height = 213 Align = alClient + BevelOuter = bvNone Caption = ' ' - TabOrder = 2 - ExplicitLeft = 256 - ExplicitTop = 192 - ExplicitWidth = 185 - ExplicitHeight = 41 + TabOrder = 1 + ExplicitHeight = 233 object Splitter2: TSplitter - Left = 289 - Top = 1 - Height = 231 + Left = 288 + Top = 0 + Height = 213 ResizeStyle = rsUpdate ExplicitLeft = 440 ExplicitTop = 144 ExplicitHeight = 100 end object PanelLeft: TPanel - Left = 1 - Top = 1 + Left = 0 + Top = 0 Width = 288 - Height = 231 + Height = 213 Align = alLeft + BevelOuter = bvNone Caption = ' ' TabOrder = 0 - ExplicitHeight = 299 + ExplicitLeft = 1 + ExplicitTop = 1 + ExplicitHeight = 231 object lbNetConnections: TListBox - Left = 1 - Top = 21 - Width = 286 - Height = 209 + Left = 0 + Top = 20 + Width = 288 + Height = 193 Align = alClient ItemHeight = 13 MultiSelect = True ScrollWidth = 273 TabOrder = 0 - ExplicitLeft = 0 - ExplicitTop = 19 - ExplicitHeight = 213 + ExplicitLeft = 1 + ExplicitTop = 21 + ExplicitWidth = 286 + ExplicitHeight = 209 end object Panel5: TPanel - Left = 1 - Top = 1 - Width = 286 + Left = 0 + Top = 0 + Width = 288 Height = 20 Align = alTop Caption = 'Available Connections:' TabOrder = 1 + ExplicitLeft = 1 + ExplicitTop = 1 + ExplicitWidth = 286 end end object PanelRight: TPanel - Left = 292 - Top = 1 - Width = 471 - Height = 231 + Left = 291 + Top = 0 + Width = 473 + Height = 213 Align = alClient + BevelOuter = bvNone Caption = ' ' TabOrder = 1 - ExplicitLeft = 504 - ExplicitTop = 152 - ExplicitWidth = 185 - ExplicitHeight = 41 + ExplicitLeft = 292 + ExplicitTop = 1 + ExplicitWidth = 471 + ExplicitHeight = 231 object memoMessageToSend: TMemo - Left = 1 - Top = 21 - Width = 469 - Height = 143 + Left = 0 + Top = 20 + Width = 473 + Height = 127 Align = alClient Lines.Strings = ( 'memoMessageToSend') TabOrder = 0 WantReturns = False - ExplicitLeft = 64 - ExplicitTop = 103 - ExplicitWidth = 371 - ExplicitHeight = 61 + ExplicitLeft = 1 + ExplicitTop = 21 + ExplicitWidth = 469 + ExplicitHeight = 143 end object Panel6: TPanel - Left = 1 - Top = 1 - Width = 469 + Left = 0 + Top = 0 + Width = 473 Height = 20 Align = alTop Caption = 'Message to send:' TabOrder = 1 + ExplicitLeft = 1 + ExplicitTop = 1 + ExplicitWidth = 469 end object Panel7: TPanel - Left = 1 - Top = 164 - Width = 469 + Left = 0 + Top = 147 + Width = 473 Height = 66 Align = alBottom Caption = ' ' TabOrder = 2 - ExplicitTop = 232 - ExplicitWidth = 522 + ExplicitLeft = 1 + ExplicitTop = 164 + ExplicitWidth = 469 DesignSize = ( - 469 + 473 66) object Label14: TLabel Left = 14 @@ -167,13 +192,13 @@ object FrameMessages: TFrameMessages object bbSendAMessage: TButton Left = 14 Top = 30 - Width = 446 + Width = 450 Height = 25 Anchors = [akLeft, akTop, akRight] Caption = 'Send a Message' TabOrder = 0 OnClick = bbSendAMessageClick - ExplicitWidth = 499 + ExplicitWidth = 446 end end end diff --git a/src/gui-classic/Frames/UFrameMessages.pas b/src/gui-classic/Frames/UFrameMessages.pas index 8a1a47f59..da9e8f724 100644 --- a/src/gui-classic/Frames/UFrameMessages.pas +++ b/src/gui-classic/Frames/UFrameMessages.pas @@ -8,7 +8,6 @@ interface type TFrameMessages = class(TFrame) - memoMessages: TMemo; PanelBottom: TPanel; Splitter1: TSplitter; PanelTop: TPanel; @@ -22,6 +21,8 @@ TFrameMessages = class(TFrame) Panel7: TPanel; Label14: TLabel; bbSendAMessage: TButton; + Panel1: TPanel; + memoMessages: TMemo; procedure bbSendAMessageClick(Sender: TObject); private { Private declarations } diff --git a/src/gui-classic/Frames/UFrameNodeStats.dfm b/src/gui-classic/Frames/UFrameNodeStats.dfm index bec5185a8..cd1f16e0d 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.dfm +++ b/src/gui-classic/Frames/UFrameNodeStats.dfm @@ -6,7 +6,7 @@ object FrameNodeStats: TFrameNodeStats TabOrder = 0 object Splitter1: TSplitter Left = 0 - Top = 137 + Top = 153 Width = 711 Height = 3 Cursor = crVSplit @@ -17,7 +17,7 @@ object FrameNodeStats: TFrameNodeStats end object Splitter2: TSplitter Left = 0 - Top = 292 + Top = 301 Width = 711 Height = 3 Cursor = crVSplit @@ -27,65 +27,101 @@ object FrameNodeStats: TFrameNodeStats ExplicitTop = 482 ExplicitWidth = 909 end - object memoNetConnections: TMemo + object PanelTop: TPanel Left = 0 - Top = 20 + Top = 0 Width = 711 - Height = 117 + Height = 153 Align = alTop - ReadOnly = True - ScrollBars = ssVertical + Caption = ' ' TabOrder = 0 - WordWrap = False + object Panel4: TPanel + Left = 1 + Top = 1 + Width = 709 + Height = 20 + Align = alTop + Caption = 'Active Connections:' + TabOrder = 0 + end + object memoNetConnections: TMemo + Left = 1 + Top = 21 + Width = 709 + Height = 131 + Align = alClient + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 1 + WordWrap = False + ExplicitHeight = 148 + end end - object memoNetServers: TMemo + object PanelMiddle: TPanel Left = 0 - Top = 315 + Top = 156 Width = 711 - Height = 143 - Align = alBottom - ReadOnly = True - ScrollBars = ssVertical - TabOrder = 1 - WordWrap = False - end - object memoNetBlackLists: TMemo - Left = 0 - Top = 160 - Width = 711 - Height = 132 + Height = 145 Align = alClient - ReadOnly = True - ScrollBars = ssVertical - TabOrder = 2 - WordWrap = False - end - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 711 - Height = 20 - Align = alTop - Caption = 'Active Connections:' - TabOrder = 3 - end - object Panel2: TPanel - Left = 0 - Top = 140 - Width = 711 - Height = 20 - Align = alTop - Caption = 'Blacklisted Nodes:' - TabOrder = 4 + Caption = ' ' + TabOrder = 1 + ExplicitHeight = 97 + object Panel1: TPanel + Left = 1 + Top = 1 + Width = 709 + Height = 20 + Align = alTop + Caption = 'Blacklisted Nodes:' + TabOrder = 0 + end + object memoNetBlackLists: TMemo + Left = 1 + Top = 21 + Width = 709 + Height = 123 + Align = alClient + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 1 + WordWrap = False + ExplicitLeft = 2 + ExplicitTop = 22 + ExplicitHeight = 135 + end end - object Panel3: TPanel + object PanelBottom: TPanel Left = 0 - Top = 295 + Top = 304 Width = 711 - Height = 20 + Height = 154 Align = alBottom - Caption = 'Known Node Servers:' - TabOrder = 5 - ExplicitTop = 293 + Anchors = [akLeft, akTop, akRight] + Caption = ' ' + TabOrder = 2 + object Panel2: TPanel + Left = 1 + Top = 1 + Width = 709 + Height = 20 + Align = alTop + Caption = 'Known Node Servers:' + TabOrder = 0 + end + object memoNetServers: TMemo + Left = 1 + Top = 21 + Width = 709 + Height = 132 + Align = alClient + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 1 + WordWrap = False + ExplicitLeft = 0 + ExplicitTop = 384 + ExplicitWidth = 711 + ExplicitHeight = 74 + end end end diff --git a/src/gui-classic/Frames/UFrameNodeStats.pas b/src/gui-classic/Frames/UFrameNodeStats.pas index 7a9a1422c..28fb757ed 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.pas +++ b/src/gui-classic/Frames/UFrameNodeStats.pas @@ -8,14 +8,17 @@ interface type TFrameNodeStats = class(TFrame) + PanelTop: TPanel; + Splitter1: TSplitter; + PanelMiddle: TPanel; + PanelBottom: TPanel; + Splitter2: TSplitter; + Panel4: TPanel; memoNetConnections: TMemo; - memoNetServers: TMemo; - memoNetBlackLists: TMemo; Panel1: TPanel; - Splitter1: TSplitter; + memoNetBlackLists: TMemo; Panel2: TPanel; - Panel3: TPanel; - Splitter2: TSplitter; + memoNetServers: TMemo; private { Private declarations } public diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 9a596ce81..2c9ed2775 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -23,7 +23,7 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 865 - Height = 104 + Height = 108 Align = alTop BevelOuter = bvNone TabOrder = 0 @@ -31,31 +31,28 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 865 - Height = 104 + Height = 108 Align = alTop TabOrder = 0 ExplicitWidth = 865 inherited Panel1: TPanel - ExplicitHeight = 104 inherited Image1: TImage - Width = 75 + Width = 71 Height = 104 + ExplicitWidth = 75 + ExplicitHeight = 104 end end inherited Panel2: TPanel - ExplicitTop = 0 + ExplicitLeft = 78 end inherited Panel3: TPanel - ExplicitLeft = 315 - ExplicitTop = 0 - ExplicitHeight = 104 + ExplicitLeft = 321 end inherited Panel4: TPanel - Width = 310 - ExplicitLeft = 555 - ExplicitTop = 0 - ExplicitWidth = 310 - ExplicitHeight = 104 + Width = 301 + ExplicitLeft = 564 + ExplicitWidth = 301 end end end @@ -81,9 +78,9 @@ object FRMWallet: TFRMWallet end object PageControl: TPageControl Left = 0 - Top = 104 + Top = 108 Width = 865 - Height = 453 + Height = 449 ActivePage = tsMyAccounts Align = alClient TabOrder = 2 @@ -94,13 +91,13 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 425 + Height = 421 Align = alClient TabOrder = 0 ExplicitWidth = 857 - ExplicitHeight = 425 + ExplicitHeight = 421 inherited Splitter1: TSplitter - Height = 359 + Height = 355 ExplicitHeight = 359 end inherited pnlMyAccountsTop: TPanel @@ -108,42 +105,42 @@ object FRMWallet: TFRMWallet ExplicitWidth = 857 end inherited pnlAccounts: TPanel - Height = 359 - ExplicitHeight = 359 + Height = 355 + ExplicitHeight = 355 inherited dgAccounts: TDrawGrid - Height = 325 - ExplicitHeight = 325 + Height = 321 + ExplicitHeight = 321 end inherited pnlAccountsInfo: TPanel - Top = 325 - ExplicitTop = 325 + Top = 321 + ExplicitTop = 321 end end inherited pcAccountsOptions: TPageControl Width = 452 - Height = 359 + Height = 355 ExplicitWidth = 452 - ExplicitHeight = 359 + ExplicitHeight = 355 inherited tsMultiSelectAccounts: TTabSheet ExplicitWidth = 444 - ExplicitHeight = 331 + ExplicitHeight = 327 inherited dgSelectedAccounts: TDrawGrid - Height = 274 - ExplicitHeight = 274 + Height = 270 + ExplicitHeight = 270 end inherited pnlSelectedAccountsTop: TPanel Width = 444 ExplicitWidth = 444 end inherited pnlSelectedAccountsBottom: TPanel - Top = 305 + Top = 301 Width = 444 - ExplicitTop = 305 + ExplicitTop = 301 ExplicitWidth = 444 end inherited pnlSelectedAccountsLeft: TPanel - Height = 274 - ExplicitHeight = 274 + Height = 270 + ExplicitHeight = 270 end end end @@ -156,17 +153,17 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 425 + Height = 421 Align = alClient TabOrder = 0 ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitHeight = 421 inherited dgPendingOperations: TDrawGrid Width = 857 - Height = 339 + Height = 335 ExplicitLeft = 0 ExplicitTop = 86 - ExplicitHeight = 339 + ExplicitHeight = 335 end inherited pnlPendingOperations: TPanel Width = 857 @@ -184,20 +181,20 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 425 + Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 46 + ExplicitWidth = 857 + ExplicitHeight = 421 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 296 + ExplicitWidth = 857 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 - Height = 384 + Height = 380 ExplicitWidth = 857 - ExplicitHeight = 384 + ExplicitHeight = 380 end end end @@ -208,20 +205,20 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 425 + Height = 421 Align = alClient TabOrder = 0 ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitHeight = 421 inherited Panel1: TPanel Width = 857 ExplicitWidth = 857 end inherited dgOperationsExplorer: TDrawGrid Width = 857 - Height = 384 + Height = 380 ExplicitWidth = 857 - ExplicitHeight = 384 + ExplicitHeight = 380 end end end @@ -232,17 +229,17 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 425 + Height = 421 Align = alClient TabOrder = 0 ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitHeight = 421 inherited memoLogs: TMemo Width = 857 - Height = 392 + Height = 388 ExplicitTop = 33 ExplicitWidth = 857 - ExplicitHeight = 405 + ExplicitHeight = 388 end inherited pnlTopLogs: TPanel Width = 857 @@ -261,50 +258,68 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 425 + Height = 421 Align = alClient TabOrder = 0 ExplicitWidth = 857 - ExplicitHeight = 438 + ExplicitHeight = 421 inherited Splitter1: TSplitter Width = 857 ExplicitWidth = 857 end inherited Splitter2: TSplitter - Top = 259 - Width = 857 - ExplicitTop = 273 - ExplicitWidth = 857 - end - inherited memoNetConnections: TMemo - Width = 857 - ExplicitWidth = 857 - end - inherited memoNetServers: TMemo - Top = 282 - Width = 857 - ExplicitTop = 295 - ExplicitWidth = 857 - end - inherited memoNetBlackLists: TMemo + Top = 264 Width = 857 - Height = 99 + ExplicitTop = 264 ExplicitWidth = 857 - ExplicitHeight = 112 end - inherited Panel1: TPanel + inherited PanelTop: TPanel Width = 857 ExplicitWidth = 857 + inherited Panel4: TPanel + Width = 855 + ExplicitWidth = 855 + end + inherited memoNetConnections: TMemo + Width = 855 + ExplicitWidth = 855 + ExplicitHeight = 131 + end end - inherited Panel2: TPanel + inherited PanelMiddle: TPanel Width = 857 + Height = 108 ExplicitWidth = 857 + ExplicitHeight = 108 + inherited Panel1: TPanel + Width = 855 + ExplicitWidth = 855 + end + inherited memoNetBlackLists: TMemo + Width = 855 + Height = 86 + ExplicitLeft = 1 + ExplicitTop = 21 + ExplicitWidth = 855 + ExplicitHeight = 86 + end end - inherited Panel3: TPanel - Top = 262 + inherited PanelBottom: TPanel + Top = 267 Width = 857 - ExplicitTop = 275 + ExplicitTop = 267 ExplicitWidth = 857 + inherited Panel2: TPanel + Width = 855 + ExplicitWidth = 855 + end + inherited memoNetServers: TMemo + Width = 855 + ExplicitLeft = 1 + ExplicitTop = 21 + ExplicitWidth = 855 + ExplicitHeight = 132 + end end end end @@ -315,77 +330,92 @@ object FRMWallet: TFRMWallet Left = 0 Top = 0 Width = 857 - Height = 425 + Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 46 + ExplicitWidth = 857 + ExplicitHeight = 421 inherited Splitter1: TSplitter - Top = 192 + Top = 168 Width = 857 ExplicitTop = 205 ExplicitWidth = 857 end - inherited memoMessages: TMemo - Top = 215 - Width = 857 - ExplicitTop = 215 - ExplicitWidth = 857 - end inherited PanelBottom: TPanel - Top = 195 + Top = 171 Width = 857 - ExplicitTop = 208 + ExplicitTop = 171 ExplicitWidth = 857 + inherited Panel1: TPanel + Width = 857 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 857 + end + inherited memoMessages: TMemo + Width = 857 + ExplicitWidth = 857 + end end inherited PanelTop: TPanel Width = 857 - Height = 192 - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 296 - ExplicitHeight = 192 + Height = 168 + ExplicitWidth = 857 + ExplicitHeight = 168 inherited Splitter2: TSplitter - Height = 190 + Height = 168 ExplicitHeight = 203 end inherited PanelLeft: TPanel - Height = 190 - ExplicitHeight = 190 + Height = 168 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitHeight = 168 inherited lbNetConnections: TListBox - Height = 168 - ExplicitLeft = 1 - ExplicitTop = 21 - ExplicitHeight = 168 + Height = 148 + ExplicitLeft = 0 + ExplicitTop = 20 + ExplicitWidth = 288 + ExplicitHeight = 148 + end + inherited Panel5: TPanel + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 288 end end inherited PanelRight: TPanel - Width = 564 - Height = 190 - ExplicitLeft = 292 - ExplicitTop = 1 - ExplicitWidth = 3 - ExplicitHeight = 190 + Width = 566 + Height = 168 + ExplicitLeft = 291 + ExplicitTop = 0 + ExplicitWidth = 566 + ExplicitHeight = 168 inherited memoMessageToSend: TMemo - Width = 562 - Height = 102 - ExplicitLeft = 1 - ExplicitTop = 21 - ExplicitWidth = 562 - ExplicitHeight = 102 + Width = 566 + Height = 82 + ExplicitLeft = 0 + ExplicitTop = 20 + ExplicitWidth = 566 + ExplicitHeight = 82 end inherited Panel6: TPanel - Width = 562 - ExplicitWidth = 562 + Width = 566 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 566 end inherited Panel7: TPanel - Top = 123 - Width = 562 - ExplicitTop = 136 - ExplicitWidth = 562 + Top = 102 + Width = 566 + ExplicitTop = 102 + ExplicitWidth = 566 + DesignSize = ( + 566 + 66) inherited bbSendAMessage: TButton - Width = 539 - ExplicitWidth = 539 + Width = 543 + ExplicitWidth = 543 end end end diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index a78cbfca8..2db3b5646 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -99,10 +99,10 @@ TFRMWallet = class(TForm) FramePendingOperations: TFramePendingOperations; FrameBlockChainExplorer: TFrameBlockChainExplorer; FrameOperationsExplorer: TFrameOperationsExplorer; - FrameNodeStats: TFrameNodeStats; FrameMessages: TFrameMessages; - FrameLogs: TFrameLogs; FrameInfo: TFrameInfo; + FrameNodeStats: TFrameNodeStats; + FrameLogs: TFrameLogs; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); From 3f915921536e186af1c2545eb6bda769277d242e Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 20:31:01 +0100 Subject: [PATCH 23/44] FrameInfo bevel fixed, FrameNodeStats bevel fixed --- src/gui-classic/Frames/UFrameInfo.dfm | 6 +- src/gui-classic/Frames/UFrameNodeStats.dfm | 75 +++++++++++++--------- src/gui-classic/UFRMWallet.dfm | 24 +++---- 3 files changed, 54 insertions(+), 51 deletions(-) diff --git a/src/gui-classic/Frames/UFrameInfo.dfm b/src/gui-classic/Frames/UFrameInfo.dfm index eeb8740b7..44aa7475e 100644 --- a/src/gui-classic/Frames/UFrameInfo.dfm +++ b/src/gui-classic/Frames/UFrameInfo.dfm @@ -157,7 +157,6 @@ object FrameInfo: TFrameInfo BevelOuter = bvNone Caption = ' ' TabOrder = 1 - ExplicitLeft = 83 object lblCurrentBlockCaption: TLabel Left = 55 Top = 7 @@ -260,11 +259,10 @@ object FrameInfo: TFrameInfo Width = 240 Height = 108 Align = alLeft - BevelKind = bkSoft + BevelKind = bkTile BevelOuter = bvNone Caption = ' ' TabOrder = 2 - ExplicitLeft = 318 object lblTimeAverage: TLabel Left = 104 Top = 26 @@ -382,8 +380,6 @@ object FrameInfo: TFrameInfo BevelOuter = bvNone Caption = ' ' TabOrder = 3 - ExplicitLeft = 561 - ExplicitWidth = 363 object lblReceivedMessages: TLabel Left = 6 Top = 36 diff --git a/src/gui-classic/Frames/UFrameNodeStats.dfm b/src/gui-classic/Frames/UFrameNodeStats.dfm index cd1f16e0d..b87393583 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.dfm +++ b/src/gui-classic/Frames/UFrameNodeStats.dfm @@ -33,28 +33,35 @@ object FrameNodeStats: TFrameNodeStats Width = 711 Height = 153 Align = alTop + BevelOuter = bvNone Caption = ' ' TabOrder = 0 object Panel4: TPanel - Left = 1 - Top = 1 - Width = 709 + Left = 0 + Top = 0 + Width = 711 Height = 20 Align = alTop Caption = 'Active Connections:' TabOrder = 0 + ExplicitLeft = 1 + ExplicitTop = 1 + ExplicitWidth = 709 end object memoNetConnections: TMemo - Left = 1 - Top = 21 - Width = 709 - Height = 131 + Left = 0 + Top = 20 + Width = 711 + Height = 133 Align = alClient ReadOnly = True ScrollBars = ssVertical TabOrder = 1 WordWrap = False - ExplicitHeight = 148 + ExplicitLeft = 1 + ExplicitTop = 21 + ExplicitWidth = 709 + ExplicitHeight = 131 end end object PanelMiddle: TPanel @@ -63,31 +70,35 @@ object FrameNodeStats: TFrameNodeStats Width = 711 Height = 145 Align = alClient + BevelOuter = bvNone Caption = ' ' TabOrder = 1 - ExplicitHeight = 97 object Panel1: TPanel - Left = 1 - Top = 1 - Width = 709 + Left = 0 + Top = 0 + Width = 711 Height = 20 Align = alTop Caption = 'Blacklisted Nodes:' TabOrder = 0 + ExplicitLeft = 1 + ExplicitTop = 1 + ExplicitWidth = 709 end object memoNetBlackLists: TMemo - Left = 1 - Top = 21 - Width = 709 - Height = 123 + Left = 0 + Top = 20 + Width = 711 + Height = 125 Align = alClient ReadOnly = True ScrollBars = ssVertical TabOrder = 1 WordWrap = False - ExplicitLeft = 2 - ExplicitTop = 22 - ExplicitHeight = 135 + ExplicitLeft = 1 + ExplicitTop = 21 + ExplicitWidth = 709 + ExplicitHeight = 123 end end object PanelBottom: TPanel @@ -97,31 +108,35 @@ object FrameNodeStats: TFrameNodeStats Height = 154 Align = alBottom Anchors = [akLeft, akTop, akRight] + BevelOuter = bvNone Caption = ' ' TabOrder = 2 object Panel2: TPanel - Left = 1 - Top = 1 - Width = 709 + Left = 0 + Top = 0 + Width = 711 Height = 20 Align = alTop Caption = 'Known Node Servers:' TabOrder = 0 + ExplicitLeft = 1 + ExplicitTop = 1 + ExplicitWidth = 709 end object memoNetServers: TMemo - Left = 1 - Top = 21 - Width = 709 - Height = 132 + Left = 0 + Top = 20 + Width = 711 + Height = 134 Align = alClient ReadOnly = True ScrollBars = ssVertical TabOrder = 1 WordWrap = False - ExplicitLeft = 0 - ExplicitTop = 384 - ExplicitWidth = 711 - ExplicitHeight = 74 + ExplicitLeft = 1 + ExplicitTop = 21 + ExplicitWidth = 709 + ExplicitHeight = 132 end end end diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 2c9ed2775..858c1a51d 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -37,21 +37,12 @@ object FRMWallet: TFRMWallet ExplicitWidth = 865 inherited Panel1: TPanel inherited Image1: TImage - Width = 71 - Height = 104 ExplicitWidth = 75 ExplicitHeight = 104 end end - inherited Panel2: TPanel - ExplicitLeft = 78 - end - inherited Panel3: TPanel - ExplicitLeft = 321 - end inherited Panel4: TPanel Width = 301 - ExplicitLeft = 564 ExplicitWidth = 301 end end @@ -283,7 +274,7 @@ object FRMWallet: TFRMWallet inherited memoNetConnections: TMemo Width = 855 ExplicitWidth = 855 - ExplicitHeight = 131 + ExplicitHeight = 133 end end inherited PanelMiddle: TPanel @@ -298,8 +289,8 @@ object FRMWallet: TFRMWallet inherited memoNetBlackLists: TMemo Width = 855 Height = 86 - ExplicitLeft = 1 - ExplicitTop = 21 + ExplicitLeft = 0 + ExplicitTop = 20 ExplicitWidth = 855 ExplicitHeight = 86 end @@ -315,10 +306,10 @@ object FRMWallet: TFRMWallet end inherited memoNetServers: TMemo Width = 855 - ExplicitLeft = 1 - ExplicitTop = 21 + ExplicitLeft = 0 + ExplicitTop = 20 ExplicitWidth = 855 - ExplicitHeight = 132 + ExplicitHeight = 134 end end end @@ -389,7 +380,7 @@ object FRMWallet: TFRMWallet Height = 168 ExplicitLeft = 291 ExplicitTop = 0 - ExplicitWidth = 566 + ExplicitWidth = 5 ExplicitHeight = 168 inherited memoMessageToSend: TMemo Width = 566 @@ -408,6 +399,7 @@ object FRMWallet: TFRMWallet inherited Panel7: TPanel Top = 102 Width = 566 + ExplicitLeft = 1 ExplicitTop = 102 ExplicitWidth = 566 DesignSize = ( From d71550bbb0ad5bfe649bf5a5a3ac4ee63b231700 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 21:08:34 +0100 Subject: [PATCH 24/44] Copy log to clipboard fixed by selecting all text --- src/gui-classic/Frames/UFrameLogs.pas | 1 + src/gui-classic/UFRMWallet.dfm | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/gui-classic/Frames/UFrameLogs.pas b/src/gui-classic/Frames/UFrameLogs.pas index 2c0ce1066..7753d8f47 100644 --- a/src/gui-classic/Frames/UFrameLogs.pas +++ b/src/gui-classic/Frames/UFrameLogs.pas @@ -28,6 +28,7 @@ implementation procedure TFrameLogs.Button1Click(Sender: TObject); begin + memoLogs.SelectAll; memoLogs.CopyToClipboard; end; diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 858c1a51d..1e87b491e 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -37,6 +37,8 @@ object FRMWallet: TFRMWallet ExplicitWidth = 865 inherited Panel1: TPanel inherited Image1: TImage + Width = 71 + Height = 104 ExplicitWidth = 75 ExplicitHeight = 104 end @@ -175,11 +177,11 @@ object FRMWallet: TFRMWallet Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 421 + ExplicitWidth = 296 + ExplicitHeight = 42 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 857 + ExplicitWidth = 296 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 @@ -324,8 +326,8 @@ object FRMWallet: TFRMWallet Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 421 + ExplicitWidth = 296 + ExplicitHeight = 42 inherited Splitter1: TSplitter Top = 168 Width = 857 @@ -335,8 +337,8 @@ object FRMWallet: TFRMWallet inherited PanelBottom: TPanel Top = 171 Width = 857 - ExplicitTop = 171 - ExplicitWidth = 857 + ExplicitTop = -208 + ExplicitWidth = 296 inherited Panel1: TPanel Width = 857 ExplicitLeft = 0 @@ -351,7 +353,7 @@ object FRMWallet: TFRMWallet inherited PanelTop: TPanel Width = 857 Height = 168 - ExplicitWidth = 857 + ExplicitWidth = 296 ExplicitHeight = 168 inherited Splitter2: TSplitter Height = 168 From 7a57773d54c110b763d84b020c7141cd9c09d2ef Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 21:48:41 +0100 Subject: [PATCH 25/44] TFrameBlockChainExplorer.ChangeHashRateUnits added --- .../Frames/UFrameBlockExplorer.pas | 21 +++++++++++++++++-- src/gui-classic/UFRMWallet.dfm | 6 +++--- src/gui-classic/UFRMWallet.pas | 15 +------------ 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/gui-classic/Frames/UFrameBlockExplorer.pas b/src/gui-classic/Frames/UFrameBlockExplorer.pas index 4671b0dca..9c209c0da 100644 --- a/src/gui-classic/Frames/UFrameBlockExplorer.pas +++ b/src/gui-classic/Frames/UFrameBlockExplorer.pas @@ -5,7 +5,8 @@ interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls, - Vcl.ExtCtrls; + Vcl.ExtCtrls, + USettings; type TFrameBlockChainExplorer = class(TFrame) @@ -28,6 +29,7 @@ TFrameBlockChainExplorer = class(TFrame) { Private declarations } public { Public declarations } + procedure ChangeHashRateUnits( ParaHashRateAs : TShowHashRateAs ); constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -38,7 +40,7 @@ implementation {$R *.dfm} uses - UFRMWallet, USettings; + UFRMWallet; constructor TFrameBlockChainExplorer.Create(AOwner: TComponent); begin @@ -139,5 +141,20 @@ procedure TFrameBlockChainExplorer.cbHashRateUnitsClick(Sender: TObject); end; end; +procedure TFrameBlockChainExplorer.ChangeHashRateUnits( ParaHashRateAs : TShowHashRateAs ); +begin + Case ParaHashRateAs of + hr_Unit : cbHashRateUnits.ItemIndex:=0; + hr_Kilo : cbHashRateUnits.ItemIndex:=1; + hr_Mega : cbHashRateUnits.ItemIndex:=2; + hr_Giga : cbHashRateUnits.ItemIndex:=3; + hr_Tera : cbHashRateUnits.ItemIndex:=4; + hr_Peta : cbHashRateUnits.ItemIndex:=5; + hr_Exa : cbHashRateUnits.ItemIndex:=6; + else + cbHashRateUnits.ItemIndex:=-1; + end; +end; + end. diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 1e87b491e..35198fd67 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -177,11 +177,11 @@ object FRMWallet: TFRMWallet Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 42 + ExplicitWidth = 857 + ExplicitHeight = 421 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 296 + ExplicitWidth = 857 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 2db3b5646..7acedb2b9 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -1783,20 +1783,7 @@ procedure TFRMWallet.UpdateConfigChanged(Sender:TObject); else FMinerPrivateKeyType := mpk_Random; FrameBlockChainExplorer.ebHashRateBackBlocks.Text := IntToStr(FBlockChainGrid.HashRateAverageBlocksCount); - with FrameBlockChainExplorer do - begin - Case FBlockChainGrid.HashRateAs of - hr_Unit : cbHashRateUnits.ItemIndex:=0; - hr_Kilo : cbHashRateUnits.ItemIndex:=1; - hr_Mega : cbHashRateUnits.ItemIndex:=2; - hr_Giga : cbHashRateUnits.ItemIndex:=3; - hr_Tera : cbHashRateUnits.ItemIndex:=4; - hr_Peta : cbHashRateUnits.ItemIndex:=5; - hr_Exa : cbHashRateUnits.ItemIndex:=6; - else - cbHashRateUnits.ItemIndex:=-1; - end; - end; + FrameBlockChainExplorer.ChangeHashRateUnits( FBlockChainGrid.HashRateAs ); if TNetData.NetDataExists then begin if TSettings.AppParams.ParamByName[CT_PARAM_AllowDownloadNewCheckpointIfOlderThan].GetAsBoolean(TNetData.NetData.MinFutureBlocksToDownloadNewSafebox>200) then begin From 60cda7edaefab414947edb0463e7aff260e2f07c Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 22:20:26 +0100 Subject: [PATCH 26/44] Fields/Methods TFRMWallet to TFrameAccountExplorer FAccountsGrid moved to TFrameAccountExplorer --- .../Frames/UFrameAccountExplorer.pas | 158 ++++++++++++++++-- src/gui-classic/UFRMWallet.dfm | 13 +- src/gui-classic/UFRMWallet.pas | 156 ++--------------- 3 files changed, 166 insertions(+), 161 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 0d5a38a9a..d6a2def75 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -5,7 +5,9 @@ interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.Grids, - Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls; + Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls, + UBaseTypes, + UGridUtils; type TFrameAccountExplorer = class(TFrame) @@ -77,8 +79,22 @@ TFrameAccountExplorer = class(TFrame) private { Private declarations } + FAccountsGrid : TAccountsGrid; + + FMinAccountBalance : Int64; + FMaxAccountBalance : Int64; + + FLastAccountsGridInvalidateTC : TTickCount; + + procedure OnAccountsGridUpdatedData(Sender : TObject); + public { Public declarations } + function DoUpdateAccountsFilter: Boolean; + + procedure UpdateAccounts(RefreshData : Boolean); + + property AccountsGrid : TAccountsGrid read FAccountsGrid; constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -90,12 +106,37 @@ implementation uses UFRMWallet, UConst, UPCOrderedLists, UFRMOperation, - USettings, UFRMAccountSelect, UBaseTypes, UAccounts; + USettings, UFRMAccountSelect, UAccounts, + UPCDataTypes; + +procedure TFrameAccountExplorer.OnAccountsGridUpdatedData(Sender: TObject); +begin + if FAccountsGrid.IsUpdatingData then begin + lblAccountsCount.Caption := '(Calculating)'; + lblAccountsBalance.Caption := '(Calculating)'; + end else begin + lblAccountsCount.Caption := IntToStr(FAccountsGrid.AccountsCount); + lblAccountsBalance.Caption := TAccountComp.FormatMoney(FAccountsGrid.AccountsBalance); + end; +end; constructor TFrameAccountExplorer.Create(AOwner: TComponent); begin inherited Create( AOwner ); + FMinAccountBalance := 0; + FMaxAccountBalance := CT_MaxWalletAmount; + + FLastAccountsGridInvalidateTC := TPlatform.GetTickCount; + + FAccountsGrid := TAccountsGrid.Create(Self); + FAccountsGrid.DrawGrid := dgAccounts; + FAccountsGrid.AllowMultiSelect := True; + FAccountsGrid.OnAccountsGridUpdatedData := OnAccountsGridUpdatedData; + FAccountsGrid.AccountsGridDatasource := acds_Node; + + + // cannot set properties here that interact with FRMWallet because // FRMWallet not yet created. // problem code below, moved back to FRMWallet.FormCreate @@ -115,7 +156,7 @@ destructor TFrameAccountExplorer.Destroy; procedure TFrameAccountExplorer.bbAccountsRefreshClick(Sender: TObject); begin - FRMWallet.UpdateAccounts(true); + UpdateAccounts(true); end; procedure TFrameAccountExplorer.bbChangeKeyNameClick(Sender: TObject); @@ -156,18 +197,18 @@ procedure TFrameAccountExplorer.bbSelectedAccountsOperationClick(Sender: TObject procedure TFrameAccountExplorer.cbExploreMyAccountsClick(Sender: TObject); begin cbMyPrivateKeys.Enabled := cbExploreMyAccounts.Checked; - FRMWallet.UpdateAccounts(true); + UpdateAccounts(true); FRMWallet.UpdateOperations; end; procedure TFrameAccountExplorer.cbFilterAccountsClick(Sender: TObject); begin - If not FRMWallet.DoUpdateAccountsFilter then FRMWallet.UpdateAccounts(true); + If not DoUpdateAccountsFilter then UpdateAccounts(true); end; procedure TFrameAccountExplorer.cbMyPrivateKeysChange(Sender: TObject); begin - FRMWallet.UpdateAccounts(true); + UpdateAccounts(true); end; procedure TFrameAccountExplorer.dgAccountsClick(Sender: TObject); @@ -197,7 +238,7 @@ procedure TFrameAccountExplorer.ebFindAccountNumberChange(Sender: TObject); ebFindAccountNumber.Font.Color := clDkGray; end else if TAccountComp.AccountTxtNumberToAccountNumber(ebFindAccountNumber.Text,an) then begin ebFindAccountNumber.Color := clWindow; - if FRMWallet.AccountsGrid.MoveRowToAccount(an) then begin + if FAccountsGrid.MoveRowToAccount(an) then begin ebFindAccountNumber.Font.Color := clWindowText; end else begin ebFindAccountNumber.Font.Color := clRed; @@ -209,7 +250,7 @@ procedure TFrameAccountExplorer.ebFindAccountNumberChange(Sender: TObject); if FRMWallet.Node.Bank.SafeBox.FindAccountsStartingByName(LAccountNameRawValue,LAccNames,1)>0 then begin an := LAccNames.GetTag(0); ebFindAccountNumber.Color := clWindow; - if FRMWallet.AccountsGrid.MoveRowToAccount(an) then begin + if FAccountsGrid.MoveRowToAccount(an) then begin ebFindAccountNumber.Font.Color := clWindowText; end else begin ebFindAccountNumber.Font.Color := clRed; @@ -247,7 +288,7 @@ procedure TFrameAccountExplorer.sbSelectedAccountsAddAllClick(Sender: TObject); Var lsource,ltarget : TOrderedCardinalList; i : Integer; begin - lsource := FRMWallet.AccountsGrid.LockAccountsList; + lsource := FAccountsGrid.LockAccountsList; Try ltarget := FRMWallet.SelectedAccountsGrid.LockAccountsList; Try @@ -259,7 +300,7 @@ procedure TFrameAccountExplorer.sbSelectedAccountsAddAllClick(Sender: TObject); FRMWallet.SelectedAccountsGrid.UnlockAccountsList; End; Finally - FRMWallet.AccountsGrid.UnlockAccountsList; + FAccountsGrid.UnlockAccountsList; End; end; @@ -268,7 +309,7 @@ procedure TFrameAccountExplorer.sbSelectedAccountsAddClick(Sender: TObject); an : Int64; i : Integer; begin - an := FRMWallet.AccountsGrid.AccountNumber(dgAccounts.Row); + an := FAccountsGrid.AccountNumber(dgAccounts.Row); if (an<0) then raise Exception.Create('No account selected'); if FRMWallet.WalletKeys.IndexOfAccountKey(FRMWallet.Node.Bank.SafeBox.Account(an).accountInfo.accountkey)<0 then raise Exception.Create(Format('You cannot add %s account because private key not found in your wallet.'#10+#10+'You''re not the owner!', @@ -277,7 +318,7 @@ procedure TFrameAccountExplorer.sbSelectedAccountsAddClick(Sender: TObject); l := FRMWallet.SelectedAccountsGrid.LockAccountsList; selected := TOrderedCardinalList.Create; Try - FRMWallet.AccountsGrid.SelectedAccounts(selected); + FAccountsGrid.SelectedAccounts(selected); for i := 0 to selected.Count-1 do begin l.Add(selected.Get(i)); end; @@ -313,15 +354,104 @@ procedure TFrameAccountExplorer.sbSelectedAccountsDelClick(Sender: TObject); procedure TFrameAccountExplorer.ebFilterAccountByBalanceMinExit(Sender: TObject); begin - FRMWallet.DoUpdateAccountsFilter; + DoUpdateAccountsFilter; end; procedure TFrameAccountExplorer.ebFilterAccountByBalanceMinKeyPress(Sender: TObject; var Key: Char); begin - if key=#13 then FRMWallet.DoUpdateAccountsFilter; + if key=#13 then DoUpdateAccountsFilter; +end; + +function TFrameAccountExplorer.DoUpdateAccountsFilter: Boolean; +Var m,bmin,bmax:Int64; + doupd : Boolean; +begin + if FRMWallet.Updating then exit; + FRMWallet.Updating := true; + Try + If Not TAccountComp.TxtToMoney(ebFilterAccountByBalanceMin.Text,bmin) then bmin := 0; + If not TAccountComp.TxtToMoney(ebFilterAccountByBalanceMax.Text,bmax) then bmax := CT_MaxWalletAmount; + if (bmaxbmax then bmin := 0; + doupd := (bmin<>FMinAccountBalance) Or (bmax<>FMaxAccountBalance); + if bmin>0 then + ebFilterAccountByBalanceMin.Text:=TAccountComp.FormatMoney(bmin) + else ebFilterAccountByBalanceMin.Text := ''; + if bmax1000 then begin + FLastAccountsGridInvalidateTC := TPlatform.GetTickCount; + dgAccounts.Invalidate; + end; + exit; + end; + + LApplyfilter := (cbFilterAccounts.Checked) and ((FMinAccountBalance>0) Or ((FMaxAccountBalance=0))); + if (Not cbExploreMyAccounts.Checked) And (not LApplyfilter) then begin + FAccountsGrid.AccountsGridDatasource := acds_Node; + FAccountsGrid.UpdateData; + end else begin + LFilters := FAccountsGrid.AccountsGridFilter; + LFilters.MinBalance := FMinAccountBalance; + LFilters.MaxBalance := FMaxAccountBalance; + if cbExploreMyAccounts.Checked then begin + //FNode.Bank.SafeBox.StartThreadSafe; + try + LFilters.OrderedAccountsKeyList := FRMWallet.WalletKeys.AccountsKeyList; + if cbMyPrivateKeys.ItemIndex>0 then begin + i := PtrInt(cbMyPrivateKeys.Items.Objects[cbMyPrivateKeys.ItemIndex]); + if (i>=0) And (ibmax then bmin := 0; - doupd := (bmin<>FMinAccountBalance) Or (bmax<>FMaxAccountBalance); - if bmin>0 then - FrameAccountExplorer.ebFilterAccountByBalanceMin.Text:=TAccountComp.FormatMoney(bmin) - else FrameAccountExplorer.ebFilterAccountByBalanceMin.Text := ''; - if bmax=FNode.Bank.SafeBox.AccountsCount then exit; @@ -1195,7 +1138,7 @@ procedure TFRMWallet.MiFindnextaccountwithhighbalanceClick(Sender: TObject); if FNode.Bank.SafeBox.Account(an).balance>start.balance then break else inc(an); end; - if (an=FNode.Bank.SafeBox.AccountsCount then exit; @@ -1233,7 +1176,7 @@ procedure TFRMWallet.MiFindpreviousaccountwithhighbalanceClick(Sender: TObject); if FNode.Bank.SafeBox.Account(an).balance>start.balance then break else dec(an); end; - if (FNode.Bank.SafeBox.Account(an).balance>start.balance) then FAccountsGrid.MoveRowToAccount(an) + if (FNode.Bank.SafeBox.Account(an).balance>start.balance) then FrameAccountExplorer.AccountsGrid.MoveRowToAccount(an) else raise Exception.Create('Not found any account lower than '+TAccountComp.AccountNumberToAccountTxtNumber(start.account)+' with balance higher than '+ TAccountComp.FormatMoney(start.balance)); end; @@ -1253,7 +1196,7 @@ procedure TFRMWallet.miNewOperationClick(Sender: TObject); Try l := TOrderedCardinalList.Create; try - If FAccountsGrid.SelectedAccounts(l)<1 then raise Exception.Create('No row selected'); + If FrameAccountExplorer.AccountsGrid.SelectedAccounts(l)<1 then raise Exception.Create('No row selected'); SenderAccounts.CopyFrom(l); finally l.Free; @@ -1303,16 +1246,7 @@ procedure TFRMWallet.MiRemoveaccountfromselectedClick(Sender: TObject); FrameAccountExplorer.sbSelectedAccountsDelClick(Sender); end; -procedure TFRMWallet.OnAccountsGridUpdatedData(Sender: TObject); -begin - if FAccountsGrid.IsUpdatingData then begin - FrameAccountExplorer.lblAccountsCount.Caption := '(Calculating)'; - FrameAccountExplorer.lblAccountsBalance.Caption := '(Calculating)'; - end else begin - FrameAccountExplorer.lblAccountsCount.Caption := IntToStr(FAccountsGrid.AccountsCount); - FrameAccountExplorer.lblAccountsBalance.Caption := TAccountComp.FormatMoney(FAccountsGrid.AccountsBalance); - end; -end; + procedure TFRMWallet.OnMiningServerNewBlockFound(Sender: TObject); begin @@ -1436,7 +1370,7 @@ procedure TFRMWallet.OnNetStatisticsChanged(Sender: TObject); procedure TFRMWallet.OnNewAccount(Sender: TObject); begin Try - UpdateAccounts(false); + FrameAccountExplorer.UpdateAccounts(false); UpdateBlockChainState; Except On E:Exception do begin @@ -1532,11 +1466,11 @@ procedure TFRMWallet.PageControlChange(Sender: TObject); begin MiDecodePayload.Enabled := false; if PageControl.ActivePage=tsMyAccounts then begin - FAccountsGrid.Node := FNode; + FrameAccountExplorer.AccountsGrid.Node := FNode; MiDecodePayload.Enabled := true; FSelectedAccountsGrid.Node := FNode; end else begin - FAccountsGrid.Node := Nil; + FrameAccountExplorer.AccountsGrid.Node := Nil; FSelectedAccountsGrid.Node := Nil; end; if PageControl.ActivePage=tsPendingOperations then begin @@ -1579,64 +1513,6 @@ procedure TFRMWallet.TimerUpdateStatusTimer(Sender: TObject); End; end; -procedure TFRMWallet.UpdateAccounts(RefreshData : Boolean); -Var accl : TOrderedCardinalList; - l : TOrderedCardinalList; - i,j,k : Integer; - c : Cardinal; - LApplyfilter : Boolean; - acc : TAccount; - LFilters : TAccountsGridFilter; -begin - If Not Assigned(FWalletKeys) Then exit; - if Not Assigned(FNode) then Exit; - - if Not RefreshData then begin - if TPlatform.GetElapsedMilliseconds(FLastAccountsGridInvalidateTC)>1000 then begin - FLastAccountsGridInvalidateTC := TPlatform.GetTickCount; - FrameAccountExplorer.dgAccounts.Invalidate; - end; - exit; - end; - - with FrameAccountExplorer do - begin - - LApplyfilter := (cbFilterAccounts.Checked) and ((FMinAccountBalance>0) Or ((FMaxAccountBalance=0))); - if (Not cbExploreMyAccounts.Checked) And (not LApplyfilter) then begin - FAccountsGrid.AccountsGridDatasource := acds_Node; - FAccountsGrid.UpdateData; - end else begin - LFilters := FAccountsGrid.AccountsGridFilter; - LFilters.MinBalance := FMinAccountBalance; - LFilters.MaxBalance := FMaxAccountBalance; - if cbExploreMyAccounts.Checked then begin - //FNode.Bank.SafeBox.StartThreadSafe; - try - LFilters.OrderedAccountsKeyList := FWalletKeys.AccountsKeyList; - if cbMyPrivateKeys.ItemIndex>0 then begin - i := PtrInt(cbMyPrivateKeys.Items.Objects[cbMyPrivateKeys.ItemIndex]); - if (i>=0) And (i Date: Mon, 6 Dec 2021 22:30:07 +0100 Subject: [PATCH 27/44] UpdatePrivateKeys moved to TFrameAccountExplorer --- .../Frames/UFrameAccountExplorer.pas | 42 +++++++++++++++- src/gui-classic/UFRMWallet.pas | 49 +++---------------- 2 files changed, 48 insertions(+), 43 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index d6a2def75..34a4a4a6e 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -93,6 +93,7 @@ TFrameAccountExplorer = class(TFrame) function DoUpdateAccountsFilter: Boolean; procedure UpdateAccounts(RefreshData : Boolean); + procedure UpdatePrivateKeys; property AccountsGrid : TAccountsGrid read FAccountsGrid; @@ -107,7 +108,7 @@ implementation uses UFRMWallet, UConst, UPCOrderedLists, UFRMOperation, USettings, UFRMAccountSelect, UAccounts, - UPCDataTypes; + UPCDataTypes, UWallet, UCrypto; procedure TFrameAccountExplorer.OnAccountsGridUpdatedData(Sender: TObject); begin @@ -170,7 +171,7 @@ procedure TFrameAccountExplorer.bbChangeKeyNameClick(Sender: TObject); if InputQuery('Change Key name','Input new name',name) then begin FRMWallet.WalletKeys.SetName(i,name); end; - FRMWallet.UpdatePrivateKeys; + UpdatePrivateKeys; end; procedure TFrameAccountExplorer.bbSelectedAccountsOperationClick(Sender: TObject); @@ -453,5 +454,42 @@ procedure TFrameAccountExplorer.UpdateAccounts(RefreshData : Boolean); FRMWallet.UpdateOperations; end; +procedure TFrameAccountExplorer.UpdatePrivateKeys; +Var + i,last_i : Integer; + wk : TWalletKey; + s : AnsiString; +begin + FRMWallet.NodeNotifyEvents.WatchKeys := FRMWallet.WalletKeys.AccountsKeyList; + if (cbMyPrivateKeys.ItemIndex>=0) then last_i := PtrInt(cbMyPrivateKeys.Items.Objects[cbMyPrivateKeys.ItemIndex]) + else last_i := -1; + cbMyPrivateKeys.items.BeginUpdate; + Try + cbMyPrivateKeys.Items.Clear; + For i:=0 to FRMWallet.WalletKeys.Count-1 do begin + wk := FRMWallet.WalletKeys.Key[i]; + if (wk.Name='') then begin + s := 'Sha256='+TCrypto.ToHexaString( TCrypto.DoSha256( TAccountComp.AccountKey2RawString(wk.AccountKey) ) ); + end else begin + s := wk.Name; + end; + if Not Assigned(wk.PrivateKey) then begin + if Length(wk.CryptedKey)>0 then s:=s+' (**NEED PASSWORD**)' + else s:=s+' (**PUBLIC KEY ONLY**)'; + end; + cbMyPrivateKeys.Items.AddObject(s,TObject(i)); + end; + cbMyPrivateKeys.Sorted := true; + cbMyPrivateKeys.Sorted := false; + cbMyPrivateKeys.Items.InsertObject(0,'(All my private keys)',TObject(-1)); + Finally + cbMyPrivateKeys.Items.EndUpdate; + End; + last_i := cbMyPrivateKeys.Items.IndexOfObject(TObject(last_i)); + if last_i<0 then last_i := 0; + if cbMyPrivateKeys.Items.Count>last_i then cbMyPrivateKeys.ItemIndex := last_i + else if cbMyPrivateKeys.Items.Count>=0 then cbMyPrivateKeys.ItemIndex := 0; +end; + end. diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 4eca2c2fa..9fc938c26 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -187,7 +187,6 @@ TFRMWallet = class(TForm) public Procedure CheckIsReady; - Procedure UpdatePrivateKeys; Procedure UpdateOperations; { Public declarations } @@ -196,6 +195,8 @@ TFRMWallet = class(TForm) Property WalletKeys : TWalletKeysExt read FWalletKeys; Property MinersBlocksFound : Integer read FMinersBlocksFound write SetMinersBlocksFound; + Property NodeNotifyEvents : TNodeNotifyEvents read FNodeNotifyEvents; + Property Updating : boolean read FUpdating write FUpdating; property OperationsExplorerGrid : TOperationsGrid read FOperationsExplorerGrid; @@ -380,7 +381,7 @@ procedure TFRMWallet.Activate; Halt; end; end; - UpdatePrivateKeys; + FrameAccountExplorer.UpdatePrivateKeys; FrameAccountExplorer.UpdateAccounts(false); if TSettings.FirstTime then begin TSettings.FirstTime := false; @@ -525,7 +526,7 @@ procedure TFRMWallet.FormCreate(Sender: TObject); RetranslateComponent(self); {$ENDIF} // - UpdatePrivateKeys; + FrameAccountExplorer.UpdatePrivateKeys; UpdateBlockChainState; UpdateConnectionStatus; PageControl.ActivePage := tsOperations; @@ -730,7 +731,7 @@ procedure TFRMWallet.CM_NetConnectionUpdated(var Msg: TMessage); procedure TFRMWallet.CM_WalletChanged(var Msg: TMessage); begin - UpdatePrivateKeys; + FrameAccountExplorer.UpdatePrivateKeys; FMustProcessWalletChanged := false; end; @@ -773,7 +774,7 @@ procedure TFRMWallet.FinishedLoadingApp; PageControl.Visible:=True; PageControl.Enabled:=True; - UpdatePrivateKeys; + FrameAccountExplorer.UpdatePrivateKeys; // LFoundAccounts := 0; FNode.Bank.SafeBox.StartThreadSafe; @@ -1232,7 +1233,7 @@ procedure TFRMWallet.miPrivatekeysClick(Sender: TObject); Try FRM.WalletKeys := FWalletKeys; FRM.ShowModal; - UpdatePrivateKeys; + FrameAccountExplorer.UpdatePrivateKeys; Finally FRM.Free; End; @@ -1724,41 +1725,7 @@ procedure TFRMWallet.UpdateOperations; FOperationsAccountGrid.AccountNumber := accn; end; -procedure TFRMWallet.UpdatePrivateKeys; -Var i,last_i : Integer; - wk : TWalletKey; - s : AnsiString; -begin - FNodeNotifyEvents.WatchKeys := FWalletKeys.AccountsKeyList; - if (FrameAccountExplorer.cbMyPrivateKeys.ItemIndex>=0) then last_i := PtrInt(FrameAccountExplorer.cbMyPrivateKeys.Items.Objects[FrameAccountExplorer.cbMyPrivateKeys.ItemIndex]) - else last_i := -1; - FrameAccountExplorer.cbMyPrivateKeys.items.BeginUpdate; - Try - FrameAccountExplorer.cbMyPrivateKeys.Items.Clear; - For i:=0 to FWalletKeys.Count-1 do begin - wk := FWalletKeys.Key[i]; - if (wk.Name='') then begin - s := 'Sha256='+TCrypto.ToHexaString( TCrypto.DoSha256( TAccountComp.AccountKey2RawString(wk.AccountKey) ) ); - end else begin - s := wk.Name; - end; - if Not Assigned(wk.PrivateKey) then begin - if Length(wk.CryptedKey)>0 then s:=s+' (**NEED PASSWORD**)' - else s:=s+' (**PUBLIC KEY ONLY**)'; - end; - FrameAccountExplorer.cbMyPrivateKeys.Items.AddObject(s,TObject(i)); - end; - FrameAccountExplorer.cbMyPrivateKeys.Sorted := true; - FrameAccountExplorer.cbMyPrivateKeys.Sorted := false; - FrameAccountExplorer.cbMyPrivateKeys.Items.InsertObject(0,'(All my private keys)',TObject(-1)); - Finally - FrameAccountExplorer.cbMyPrivateKeys.Items.EndUpdate; - End; - last_i := FrameAccountExplorer.cbMyPrivateKeys.Items.IndexOfObject(TObject(last_i)); - if last_i<0 then last_i := 0; - if FrameAccountExplorer.cbMyPrivateKeys.Items.Count>last_i then FrameAccountExplorer.cbMyPrivateKeys.ItemIndex := last_i - else if FrameAccountExplorer.cbMyPrivateKeys.Items.Count>=0 then FrameAccountExplorer.cbMyPrivateKeys.ItemIndex := 0; -end; + From 7228586eae6162548e6914185766d06dfda02db0 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 22:38:06 +0100 Subject: [PATCH 28/44] UpdateNodeStatus moved to TFrameInfo --- src/gui-classic/Frames/UFrameInfo.dfm | 4 +-- src/gui-classic/Frames/UFrameInfo.pas | 38 ++++++++++++++++++++++ src/gui-classic/UFRMWallet.pas | 46 ++++++--------------------- 3 files changed, 49 insertions(+), 39 deletions(-) diff --git a/src/gui-classic/Frames/UFrameInfo.dfm b/src/gui-classic/Frames/UFrameInfo.dfm index 44aa7475e..a778da43b 100644 --- a/src/gui-classic/Frames/UFrameInfo.dfm +++ b/src/gui-classic/Frames/UFrameInfo.dfm @@ -43,8 +43,8 @@ object FrameInfo: TFrameInfo object Image1: TImage Left = 0 Top = 0 - Width = 71 - Height = 104 + Width = 64 + Height = 64 Align = alClient AutoSize = True Center = True diff --git a/src/gui-classic/Frames/UFrameInfo.pas b/src/gui-classic/Frames/UFrameInfo.pas index 39703bf6c..d4d194581 100644 --- a/src/gui-classic/Frames/UFrameInfo.pas +++ b/src/gui-classic/Frames/UFrameInfo.pas @@ -44,6 +44,8 @@ TFrameInfo = class(TFrame) public { Public declarations } + procedure UpdateNodeStatus; + constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; @@ -52,6 +54,9 @@ implementation {$R *.dfm} +uses + UFRMWallet, UNetProtocol; + constructor TFrameInfo.Create(AOwner: TComponent); begin inherited Create( AOwner ); @@ -65,4 +70,37 @@ destructor TFrameInfo.Destroy; inherited Destroy; end; +procedure TFrameInfo.UpdateNodeStatus; +Var status : String; +begin + If Not Assigned(FRMWallet.Node) then begin + lblNodeStatus.Font.Color := clRed; + lblNodeStatus.Caption := 'Initializing...'; + end else begin + If FRMWallet.Node.IsReady(status) then begin + if TNetData.NetData.NetStatistics.ActiveConnections>0 then begin + lblNodeStatus.Font.Color := clGreen; + if TNetData.NetData.IsDiscoveringServers then begin + lblNodeStatus.Caption := 'Discovering servers'; + end else if TNetData.NetData.IsGettingNewBlockChainFromClient(status) then begin + lblNodeStatus.Caption := 'Obtaining new blockchain '+status; + end else begin + lblNodeStatus.Caption := 'Running'; + end; + end else begin + lblNodeStatus.Font.Color := clRed; + lblNodeStatus.Caption := 'Alone in the world...'; + end; + end else begin + lblNodeStatus.Font.Color := clRed; + lblNodeStatus.Caption := status; + end; + end; + + If Assigned(FRMWallet.BackgroundLabel) then begin + FRMWallet.BackgroundLabel.Font.Color:= lblNodeStatus.Font.Color; + FRMWallet.BackgroundLabel.Caption:='Please wait until finished: '+lblNodeStatus.Caption; + end; +end; + end. diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 9fc938c26..d1324eab1 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -176,7 +176,6 @@ TFRMWallet = class(TForm) Procedure UpdateConnectionStatus; Procedure UpdateBlockChainState; Procedure UpdateConfigChanged(Sender:TObject); - Procedure UpdateNodeStatus; Procedure UpdateAvailableConnections; procedure Activate; override; Function ForceMining : Boolean; virtual; @@ -189,6 +188,8 @@ TFRMWallet = class(TForm) Procedure UpdateOperations; + Property BackgroundLabel : TLabel read FBackgroundLabel; + { Public declarations } Property Node : TNode read FNode; @@ -205,6 +206,7 @@ TFRMWallet = class(TForm) Property SelectedAccountsGrid : TAccountsGrid read FSelectedAccountsGrid; + end; var @@ -269,7 +271,7 @@ procedure TThreadActivate.ThreadSafeNotify; if Assigned(FRMWallet.FBackgroundLabel) then begin FRMWallet.FBackgroundLabel.Caption:=FLastMsg; end; - end else FRMWallet.UpdateNodeStatus; + end else FRMWallet.FrameInfo.UpdateNodeStatus; end; procedure TThreadActivate.BCExecute; @@ -372,7 +374,7 @@ procedure TFRMWallet.Activate; TThreadActivate(FThreadActivate).FreeOnTerminate := true; TThreadActivate(FThreadActivate).Suspended := False; UpdateConfigChanged(Self); - UpdateNodeStatus; + FrameInfo.UpdateNodeStatus; TPCTNetDataExtraMessages.InitNetDataExtraMessages(FNode,TNetData.NetData,FWalletKeys); Except On E:Exception do begin @@ -1505,7 +1507,7 @@ procedure TFRMWallet.TimerUpdateStatusTimer(Sender: TObject); Try UpdateConnectionStatus; UpdateBlockChainState; - UpdateNodeStatus; + FrameInfo.UpdateNodeStatus; Except On E:Exception do begin E.Message := 'Exception at TimerUpdate '+E.ClassName+': '+E.Message; @@ -1554,7 +1556,7 @@ procedure TFRMWallet.UpdateBlockChainState; f, favg : real; LLockedMempool : TPCOperationsComp; begin - UpdateNodeStatus; + FrameInfo.UpdateNodeStatus; mc := 0; if Assigned(FNode) then begin if FNode.Bank.BlocksCount>0 then begin @@ -1672,7 +1674,7 @@ procedure TFRMWallet.UpdateConfigChanged(Sender:TObject); procedure TFRMWallet.UpdateConnectionStatus; var errors : String; begin - UpdateNodeStatus; + FrameInfo.UpdateNodeStatus; OnNetStatisticsChanged(Nil); if Assigned(FNode) then begin if FNode.IsBlockChainValid(errors) then begin @@ -1686,37 +1688,7 @@ procedure TFRMWallet.UpdateConnectionStatus; end; end; -procedure TFRMWallet.UpdateNodeStatus; -Var status : String; -begin - If Not Assigned(FNode) then begin - FrameInfo.lblNodeStatus.Font.Color := clRed; - FrameInfo.lblNodeStatus.Caption := 'Initializing...'; - end else begin - If FNode.IsReady(status) then begin - if TNetData.NetData.NetStatistics.ActiveConnections>0 then begin - FrameInfo.lblNodeStatus.Font.Color := clGreen; - if TNetData.NetData.IsDiscoveringServers then begin - FrameInfo.lblNodeStatus.Caption := 'Discovering servers'; - end else if TNetData.NetData.IsGettingNewBlockChainFromClient(status) then begin - FrameInfo.lblNodeStatus.Caption := 'Obtaining new blockchain '+status; - end else begin - FrameInfo.lblNodeStatus.Caption := 'Running'; - end; - end else begin - FrameInfo.lblNodeStatus.Font.Color := clRed; - FrameInfo.lblNodeStatus.Caption := 'Alone in the world...'; - end; - end else begin - FrameInfo.lblNodeStatus.Font.Color := clRed; - FrameInfo.lblNodeStatus.Caption := status; - end; - end; - If Assigned(FBackgroundLabel) then begin - FBackgroundLabel.Font.Color:= FrameInfo.lblNodeStatus.Font.Color; - FBackgroundLabel.Caption:='Please wait until finished: '+FrameInfo.lblNodeStatus.Caption; - end; -end; + procedure TFRMWallet.UpdateOperations; Var accn : Int64; From 4db863bc7bd724cc89539ecbc3683fa4cac42782 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 22:52:31 +0100 Subject: [PATCH 29/44] OnNetBlackListUpdated moved to TFrameNodeStats Risky initialization of TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; Not yet sure if this works, needs to be tested. --- src/gui-classic/Frames/UFrameNodeStats.dfm | 21 --------- src/gui-classic/Frames/UFrameNodeStats.pas | 55 ++++++++++++++++++++++ src/gui-classic/UFRMWallet.pas | 41 ++-------------- 3 files changed, 58 insertions(+), 59 deletions(-) diff --git a/src/gui-classic/Frames/UFrameNodeStats.dfm b/src/gui-classic/Frames/UFrameNodeStats.dfm index b87393583..85f6493fa 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.dfm +++ b/src/gui-classic/Frames/UFrameNodeStats.dfm @@ -44,9 +44,6 @@ object FrameNodeStats: TFrameNodeStats Align = alTop Caption = 'Active Connections:' TabOrder = 0 - ExplicitLeft = 1 - ExplicitTop = 1 - ExplicitWidth = 709 end object memoNetConnections: TMemo Left = 0 @@ -58,10 +55,6 @@ object FrameNodeStats: TFrameNodeStats ScrollBars = ssVertical TabOrder = 1 WordWrap = False - ExplicitLeft = 1 - ExplicitTop = 21 - ExplicitWidth = 709 - ExplicitHeight = 131 end end object PanelMiddle: TPanel @@ -81,9 +74,6 @@ object FrameNodeStats: TFrameNodeStats Align = alTop Caption = 'Blacklisted Nodes:' TabOrder = 0 - ExplicitLeft = 1 - ExplicitTop = 1 - ExplicitWidth = 709 end object memoNetBlackLists: TMemo Left = 0 @@ -95,10 +85,6 @@ object FrameNodeStats: TFrameNodeStats ScrollBars = ssVertical TabOrder = 1 WordWrap = False - ExplicitLeft = 1 - ExplicitTop = 21 - ExplicitWidth = 709 - ExplicitHeight = 123 end end object PanelBottom: TPanel @@ -119,9 +105,6 @@ object FrameNodeStats: TFrameNodeStats Align = alTop Caption = 'Known Node Servers:' TabOrder = 0 - ExplicitLeft = 1 - ExplicitTop = 1 - ExplicitWidth = 709 end object memoNetServers: TMemo Left = 0 @@ -133,10 +116,6 @@ object FrameNodeStats: TFrameNodeStats ScrollBars = ssVertical TabOrder = 1 WordWrap = False - ExplicitLeft = 1 - ExplicitTop = 21 - ExplicitWidth = 709 - ExplicitHeight = 132 end end end diff --git a/src/gui-classic/Frames/UFrameNodeStats.pas b/src/gui-classic/Frames/UFrameNodeStats.pas index 28fb757ed..4d802c769 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.pas +++ b/src/gui-classic/Frames/UFrameNodeStats.pas @@ -21,6 +21,9 @@ TFrameNodeStats = class(TFrame) memoNetServers: TMemo; private { Private declarations } + + procedure OnNetBlackListUpdated(Sender : TObject); + public { Public declarations } @@ -32,6 +35,16 @@ implementation {$R *.dfm} +uses + UNetProtocol, + Utime, + UConst, + {$IFNDEF FPC} + System.Generics.Collections + {$ELSE} + Generics.Collections + {$ENDIF}; + constructor TFrameNodeStats.Create(AOwner: TComponent); begin inherited Create( AOwner ); @@ -39,6 +52,8 @@ constructor TFrameNodeStats.Create(AOwner: TComponent); memoNetConnections.Lines.Clear; memoNetServers.Lines.Clear; memoNetBlackLists.Lines.Clear; + + TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; end; destructor TFrameNodeStats.Destroy; @@ -47,4 +62,44 @@ destructor TFrameNodeStats.Destroy; inherited Destroy; end; +procedure TFrameNodeStats.OnNetBlackListUpdated(Sender: TObject); +Const CT_TRUE_FALSE : Array[Boolean] Of AnsiString = ('FALSE','TRUE'); +Var i,j,n : integer; + P : PNodeServerAddress; + l : TList; + strings : TStrings; +begin + l := TNetData.NetData.NodeServersAddresses.LockList; + try + strings := memoNetBlackLists.Lines; + strings.BeginUpdate; + Try + strings.Clear; + strings.Add('BlackList Updated: '+DateTimeToStr(now)+' by TID:'+IntToHex(PtrInt(TThread.CurrentThread.ThreadID),8)); + j := 0; n:=0; + for i := 0 to l.Count - 1 do begin + P := l[i]; + if (P^.is_blacklisted) then begin + inc(n); + if Not P^.its_myself then begin + inc(j); + strings.Add(Format('Blacklist IP:%s:%d LastConnection:%s Reason: %s', + [ + P^.ip,P^.port, + DateTimeToStr(UnivDateTime2LocalDateTime( UnixToUnivDateTime(P^.last_connection))),P^.BlackListText])); + end; + end; + end; + Strings.Add(Format('Total Blacklisted IPs: %d (Total %d)',[j,n])); + Finally + strings.EndUpdate; + End; + finally + TNetData.NetData.NodeServersAddresses.UnlockList; + end; +end; + + + + end. diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index d1324eab1..124aeb339 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -168,7 +168,6 @@ TFRMWallet = class(TForm) procedure OnWalletChanged(Sender : TObject); procedure OnNetConnectionsUpdated(Sender : TObject); procedure OnNetNodeServersUpdated(Sender : TObject); - procedure OnNetBlackListUpdated(Sender : TObject); Procedure OnNodeMessageEvent(NetConnection : TNetConnection; MessageData : String); Procedure OnNodeKeysActivity(Sender : TObject); Procedure OnSelectedAccountsGridUpdated(Sender : TObject); @@ -753,7 +752,8 @@ procedure TFRMWallet.FinishedLoadingApp; TNetData.NetData.OnStatisticsChanged := OnNetStatisticsChanged; TNetData.NetData.OnNetConnectionsUpdated := onNetConnectionsUpdated; TNetData.NetData.OnNodeServersUpdated := OnNetNodeServersUpdated; - TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; +// TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; try to move to FrameNodeStats + // TimerUpdateStatus.Interval := 1000; TimerUpdateStatus.Enabled := true; @@ -1256,42 +1256,7 @@ procedure TFRMWallet.OnMiningServerNewBlockFound(Sender: TObject); FPoolMiningServer.MinerAccountKey := GetAccountKeyForMiner; end; -procedure TFRMWallet.OnNetBlackListUpdated(Sender: TObject); -Const CT_TRUE_FALSE : Array[Boolean] Of AnsiString = ('FALSE','TRUE'); -Var i,j,n : integer; - P : PNodeServerAddress; - l : TList; - strings : TStrings; -begin - l := TNetData.NetData.NodeServersAddresses.LockList; - try - strings := FrameNodeStats.memoNetBlackLists.Lines; - strings.BeginUpdate; - Try - strings.Clear; - strings.Add('BlackList Updated: '+DateTimeToStr(now)+' by TID:'+IntToHex(PtrInt(TThread.CurrentThread.ThreadID),8)); - j := 0; n:=0; - for i := 0 to l.Count - 1 do begin - P := l[i]; - if (P^.is_blacklisted) then begin - inc(n); - if Not P^.its_myself then begin - inc(j); - strings.Add(Format('Blacklist IP:%s:%d LastConnection:%s Reason: %s', - [ - P^.ip,P^.port, - DateTimeToStr(UnivDateTime2LocalDateTime( UnixToUnivDateTime(P^.last_connection))),P^.BlackListText])); - end; - end; - end; - Strings.Add(Format('Total Blacklisted IPs: %d (Total %d)',[j,n])); - Finally - strings.EndUpdate; - End; - finally - TNetData.NetData.NodeServersAddresses.UnlockList; - end; -end; + procedure TFRMWallet.OnNetConnectionsUpdated(Sender: TObject); begin From b066bcab7050349a023a76a04ea977fd25f1b1ff Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 23:01:50 +0100 Subject: [PATCH 30/44] TFRMWallet.OnNodeMessageEvent mov-> TFrameMessages --- src/gui-classic/Frames/UFrameMessages.dfm | 5 --- src/gui-classic/Frames/UFrameMessages.pas | 42 +++++++++++++++++++++-- src/gui-classic/UFRMWallet.pas | 34 ++---------------- 3 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/gui-classic/Frames/UFrameMessages.dfm b/src/gui-classic/Frames/UFrameMessages.dfm index a811f23c4..296da01a5 100644 --- a/src/gui-classic/Frames/UFrameMessages.dfm +++ b/src/gui-classic/Frames/UFrameMessages.dfm @@ -55,8 +55,6 @@ object FrameMessages: TFrameMessages ReadOnly = True ScrollBars = ssBoth TabOrder = 1 - ExplicitTop = 256 - ExplicitHeight = 210 end end object PanelTop: TPanel @@ -166,9 +164,6 @@ object FrameMessages: TFrameMessages Align = alBottom Caption = ' ' TabOrder = 2 - ExplicitLeft = 1 - ExplicitTop = 164 - ExplicitWidth = 469 DesignSize = ( 473 66) diff --git a/src/gui-classic/Frames/UFrameMessages.pas b/src/gui-classic/Frames/UFrameMessages.pas index da9e8f724..e9978e1d9 100644 --- a/src/gui-classic/Frames/UFrameMessages.pas +++ b/src/gui-classic/Frames/UFrameMessages.pas @@ -4,7 +4,8 @@ interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, - Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, + UNetProtocol; type TFrameMessages = class(TFrame) @@ -26,11 +27,17 @@ TFrameMessages = class(TFrame) procedure bbSendAMessageClick(Sender: TObject); private { Private declarations } + FMessagesUnreadCount : Integer; + public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; + + procedure OnNodeMessageEvent(NetConnection : TNetConnection; MessageData : String); + + property MessagesUnreadCount : integer read FMessagesUnreadCount write FMessagesUnreadCount; end; implementation @@ -38,7 +45,7 @@ implementation {$R *.dfm} uses - UFRMWallet, UNetProtocol; + UFRMWallet, USettings, UCrypto; constructor TFrameMessages.Create(AOwner: TComponent); begin @@ -46,6 +53,8 @@ constructor TFrameMessages.Create(AOwner: TComponent); memoMessages.Lines.Clear; memoMessageToSend.Lines.Clear; + + FMessagesUnreadCount := 0; end; destructor TFrameMessages.Destroy; @@ -104,4 +113,33 @@ procedure TFrameMessages.bbSendAMessageClick(Sender: TObject); 'Message: '+#10+m),PChar(Application.Title),MB_ICONINFORMATION+MB_OK); end; +procedure TFrameMessages.OnNodeMessageEvent(NetConnection: TNetConnection; MessageData: String); +Var s : String; +begin + inc(FMessagesUnreadCount); + if Assigned(NetConnection) then begin + s := DateTimeToStr(now)+' Message received from '+NetConnection.ClientRemoteAddr; + memoMessages.Lines.Add(DateTimeToStr(now)+' Message received from '+NetConnection.ClientRemoteAddr+' Length '+inttostr(Length(MessageData))+' bytes'); + memoMessages.Lines.Add('RECEIVED> '+MessageData); + if TSettings.ShowModalMessages then begin + s := DateTimeToStr(now)+' Message from '+NetConnection.ClientRemoteAddr+#10+ + 'Length '+inttostr(length(MessageData))+' bytes'+#10+#10; + if TCrypto.IsHumanReadable(TEncoding.ANSI.GetBytes(MessageData)) then begin + s := s + MessageData; + end else begin + s := s +'Value in hexadecimal:'+#10+ + TCrypto.ToHexaString(TEncoding.ANSI.GetBytes(MessageData)); + end; + Application.MessageBox(PChar(s),PChar(Application.Title),MB_ICONINFORMATION+MB_OK); + end; + end else begin + memoMessages.Lines.Add(DateTimeToStr(now)+' Internal message: '+MessageData); + end; + if FMessagesUnreadCount>1 then + FRMWallet.FrameInfo.lblReceivedMessages.Caption := Format('You have received %d messages',[FMessagesUnreadCount]) + else + FRMWallet.FrameInfo.lblReceivedMessages.Caption := 'You have received 1 message'; + FRMWallet.FrameInfo.lblReceivedMessages.Visible := true; +end; + end. diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 124aeb339..e6193a501 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -154,7 +154,6 @@ TFRMWallet = class(TForm) FBlockChainGrid : TBlockChainGrid; FMinerPrivateKeyType : TMinerPrivateKeyType; FUpdating : Boolean; - FMessagesUnreadCount : Integer; FPoolMiningServer : TPoolMiningServer; FRPCServer : TRPCServer; FMustProcessWalletChanged : Boolean; @@ -168,7 +167,6 @@ TFRMWallet = class(TForm) procedure OnWalletChanged(Sender : TObject); procedure OnNetConnectionsUpdated(Sender : TObject); procedure OnNetNodeServersUpdated(Sender : TObject); - Procedure OnNodeMessageEvent(NetConnection : TNetConnection; MessageData : String); Procedure OnNodeKeysActivity(Sender : TObject); Procedure OnSelectedAccountsGridUpdated(Sender : TObject); Procedure OnMiningServerNewBlockFound(Sender : TObject); @@ -477,7 +475,6 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FRPCServer := Nil; FNode := Nil; FPoolMiningServer := Nil; - FMessagesUnreadCount := 0; FrameInfo.lblReceivedMessages.Visible := false; FUpdating := false; @@ -495,7 +492,7 @@ procedure TFRMWallet.FormCreate(Sender: TObject); TSettings.OnChanged.Add(UpdateConfigChanged); FNodeNotifyEvents := TNodeNotifyEvents.Create(Self); FNodeNotifyEvents.OnBlocksChanged := OnNewAccount; - FNodeNotifyEvents.OnNodeMessageEvent := OnNodeMessageEvent; + FNodeNotifyEvents.OnNodeMessageEvent := FrameMessages.OnNodeMessageEvent; FNodeNotifyEvents.OnKeyActivity := OnNodeKeysActivity; FSelectedAccountsGrid := TAccountsGrid.Create(Self); @@ -1367,32 +1364,7 @@ procedure TFRMWallet.OnNewLog(logtype: TLogType; Time : TDateTime; ThreadID : TT // end; -procedure TFRMWallet.OnNodeMessageEvent(NetConnection: TNetConnection; MessageData: String); -Var s : String; -begin - inc(FMessagesUnreadCount); - if Assigned(NetConnection) then begin - s := DateTimeToStr(now)+' Message received from '+NetConnection.ClientRemoteAddr; - FrameMessages.memoMessages.Lines.Add(DateTimeToStr(now)+' Message received from '+NetConnection.ClientRemoteAddr+' Length '+inttostr(Length(MessageData))+' bytes'); - FrameMessages.memoMessages.Lines.Add('RECEIVED> '+MessageData); - if TSettings.ShowModalMessages then begin - s := DateTimeToStr(now)+' Message from '+NetConnection.ClientRemoteAddr+#10+ - 'Length '+inttostr(length(MessageData))+' bytes'+#10+#10; - if TCrypto.IsHumanReadable(TEncoding.ANSI.GetBytes(MessageData)) then begin - s := s + MessageData; - end else begin - s := s +'Value in hexadecimal:'+#10+ - TCrypto.ToHexaString(TEncoding.ANSI.GetBytes(MessageData)); - end; - Application.MessageBox(PChar(s),PChar(Application.Title),MB_ICONINFORMATION+MB_OK); - end; - end else begin - FrameMessages.memoMessages.Lines.Add(DateTimeToStr(now)+' Internal message: '+MessageData); - end; - if FMessagesUnreadCount>1 then FrameInfo.lblReceivedMessages.Caption := Format('You have received %d messages',[FMessagesUnreadCount]) - else FrameInfo.lblReceivedMessages.Caption := 'You have received 1 message'; - FrameInfo.lblReceivedMessages.Visible := true; -end; + procedure TFRMWallet.OnNodeKeysActivity(Sender: TObject); begin @@ -1453,7 +1425,7 @@ procedure TFRMWallet.PageControlChange(Sender: TObject); end else FOperationsExplorerGrid.Node := Nil; if PageControl.ActivePage=tsMessages then begin UpdateAvailableConnections; - FMessagesUnreadCount := 0; + FrameMessages.MessagesUnreadCount := 0; FrameInfo.lblReceivedMessages.Visible := false; end; end; From 8914eacff707a1b12276da488c9dbfa4cd805f2d Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 23:08:19 +0100 Subject: [PATCH 31/44] UpdateAvailableConnections moved to TFrameMessages --- src/gui-classic/Frames/UFrameMessages.dfm | 26 -------------- src/gui-classic/Frames/UFrameMessages.pas | 41 +++++++++++++++++++++- src/gui-classic/UFRMWallet.dfm | 42 +++++------------------ src/gui-classic/UFRMWallet.pas | 34 +----------------- 4 files changed, 50 insertions(+), 93 deletions(-) diff --git a/src/gui-classic/Frames/UFrameMessages.dfm b/src/gui-classic/Frames/UFrameMessages.dfm index 296da01a5..4c5a3e5a2 100644 --- a/src/gui-classic/Frames/UFrameMessages.dfm +++ b/src/gui-classic/Frames/UFrameMessages.dfm @@ -33,9 +33,6 @@ object FrameMessages: TFrameMessages Align = alTop Caption = 'Messages:' TabOrder = 0 - ExplicitLeft = 1 - ExplicitTop = 1 - ExplicitWidth = 762 end object memoMessages: TMemo Left = 0 @@ -66,7 +63,6 @@ object FrameMessages: TFrameMessages BevelOuter = bvNone Caption = ' ' TabOrder = 1 - ExplicitHeight = 233 object Splitter2: TSplitter Left = 288 Top = 0 @@ -85,9 +81,6 @@ object FrameMessages: TFrameMessages BevelOuter = bvNone Caption = ' ' TabOrder = 0 - ExplicitLeft = 1 - ExplicitTop = 1 - ExplicitHeight = 231 object lbNetConnections: TListBox Left = 0 Top = 20 @@ -98,10 +91,6 @@ object FrameMessages: TFrameMessages MultiSelect = True ScrollWidth = 273 TabOrder = 0 - ExplicitLeft = 1 - ExplicitTop = 21 - ExplicitWidth = 286 - ExplicitHeight = 209 end object Panel5: TPanel Left = 0 @@ -111,9 +100,6 @@ object FrameMessages: TFrameMessages Align = alTop Caption = 'Available Connections:' TabOrder = 1 - ExplicitLeft = 1 - ExplicitTop = 1 - ExplicitWidth = 286 end end object PanelRight: TPanel @@ -125,10 +111,6 @@ object FrameMessages: TFrameMessages BevelOuter = bvNone Caption = ' ' TabOrder = 1 - ExplicitLeft = 292 - ExplicitTop = 1 - ExplicitWidth = 471 - ExplicitHeight = 231 object memoMessageToSend: TMemo Left = 0 Top = 20 @@ -139,10 +121,6 @@ object FrameMessages: TFrameMessages 'memoMessageToSend') TabOrder = 0 WantReturns = False - ExplicitLeft = 1 - ExplicitTop = 21 - ExplicitWidth = 469 - ExplicitHeight = 143 end object Panel6: TPanel Left = 0 @@ -152,9 +130,6 @@ object FrameMessages: TFrameMessages Align = alTop Caption = 'Message to send:' TabOrder = 1 - ExplicitLeft = 1 - ExplicitTop = 1 - ExplicitWidth = 469 end object Panel7: TPanel Left = 0 @@ -193,7 +168,6 @@ object FrameMessages: TFrameMessages Caption = 'Send a Message' TabOrder = 0 OnClick = bbSendAMessageClick - ExplicitWidth = 446 end end end diff --git a/src/gui-classic/Frames/UFrameMessages.pas b/src/gui-classic/Frames/UFrameMessages.pas index e9978e1d9..7615e85bd 100644 --- a/src/gui-classic/Frames/UFrameMessages.pas +++ b/src/gui-classic/Frames/UFrameMessages.pas @@ -35,6 +35,8 @@ TFrameMessages = class(TFrame) constructor Create(AOwner: TComponent); override; destructor Destroy; override; + procedure UpdateAvailableConnections; + procedure OnNodeMessageEvent(NetConnection : TNetConnection; MessageData : String); property MessagesUnreadCount : integer read FMessagesUnreadCount write FMessagesUnreadCount; @@ -45,7 +47,12 @@ implementation {$R *.dfm} uses - UFRMWallet, USettings, UCrypto; + UFRMWallet, USettings, UCrypto, + {$IFNDEF FPC} + System.Generics.Collections + {$ELSE} + Generics.Collections + {$ENDIF}; constructor TFrameMessages.Create(AOwner: TComponent); begin @@ -142,4 +149,36 @@ procedure TFrameMessages.OnNodeMessageEvent(NetConnection: TNetConnection; Messa FRMWallet.FrameInfo.lblReceivedMessages.Visible := true; end; +procedure TFrameMessages.UpdateAvailableConnections; +Var i : integer; + NC : TNetConnection; + l : TList; +begin + if Not TNetData.NetData.NetConnections.TryLockList(100,l) then exit; + try + lbNetConnections.Items.BeginUpdate; + Try + lbNetConnections.Items.Clear; + for i := 0 to l.Count - 1 do begin + NC := l[i]; + if NC.Connected then begin + if NC is TNetServerClient then begin + if Not NC.IsMyselfServer then begin + lbNetConnections.Items.AddObject(Format('Client: IP:%s',[NC.ClientRemoteAddr]),NC); + end; + end else begin + if Not NC.IsMyselfServer then begin + lbNetConnections.Items.AddObject(Format('Server: IP:%s',[NC.ClientRemoteAddr]),NC); + end; + end; + end; + end; + Finally + lbNetConnections.Items.EndUpdate; + End; + finally + TNetData.NetData.NetConnections.UnlockList; + end; +end; + end. diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index 4b6119067..d8aa5f449 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -177,11 +177,11 @@ object FRMWallet: TFRMWallet Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 421 + ExplicitWidth = 296 + ExplicitHeight = 42 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 857 + ExplicitWidth = 296 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 @@ -276,7 +276,6 @@ object FRMWallet: TFRMWallet inherited memoNetConnections: TMemo Width = 855 ExplicitWidth = 855 - ExplicitHeight = 133 end end inherited PanelMiddle: TPanel @@ -291,8 +290,6 @@ object FRMWallet: TFRMWallet inherited memoNetBlackLists: TMemo Width = 855 Height = 86 - ExplicitLeft = 0 - ExplicitTop = 20 ExplicitWidth = 855 ExplicitHeight = 86 end @@ -308,10 +305,7 @@ object FRMWallet: TFRMWallet end inherited memoNetServers: TMemo Width = 855 - ExplicitLeft = 0 - ExplicitTop = 20 ExplicitWidth = 855 - ExplicitHeight = 134 end end end @@ -326,8 +320,8 @@ object FRMWallet: TFRMWallet Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 421 + ExplicitWidth = 296 + ExplicitHeight = 42 inherited Splitter1: TSplitter Top = 168 Width = 857 @@ -337,12 +331,10 @@ object FRMWallet: TFRMWallet inherited PanelBottom: TPanel Top = 171 Width = 857 - ExplicitTop = 171 - ExplicitWidth = 857 + ExplicitTop = -208 + ExplicitWidth = 296 inherited Panel1: TPanel Width = 857 - ExplicitLeft = 0 - ExplicitTop = 0 ExplicitWidth = 857 end inherited memoMessages: TMemo @@ -353,7 +345,7 @@ object FRMWallet: TFRMWallet inherited PanelTop: TPanel Width = 857 Height = 168 - ExplicitWidth = 857 + ExplicitWidth = 296 ExplicitHeight = 168 inherited Splitter2: TSplitter Height = 168 @@ -361,41 +353,25 @@ object FRMWallet: TFRMWallet end inherited PanelLeft: TPanel Height = 168 - ExplicitLeft = 0 - ExplicitTop = 0 ExplicitHeight = 168 inherited lbNetConnections: TListBox Height = 148 - ExplicitLeft = 0 - ExplicitTop = 20 - ExplicitWidth = 288 ExplicitHeight = 148 end - inherited Panel5: TPanel - ExplicitLeft = 0 - ExplicitTop = 0 - ExplicitWidth = 288 - end end inherited PanelRight: TPanel Width = 566 Height = 168 - ExplicitLeft = 291 - ExplicitTop = 0 - ExplicitWidth = 566 + ExplicitWidth = 5 ExplicitHeight = 168 inherited memoMessageToSend: TMemo Width = 566 Height = 82 - ExplicitLeft = 0 - ExplicitTop = 20 ExplicitWidth = 566 ExplicitHeight = 82 end inherited Panel6: TPanel Width = 566 - ExplicitLeft = 0 - ExplicitTop = 0 ExplicitWidth = 566 end inherited Panel7: TPanel diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index e6193a501..7487e8dd5 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -173,7 +173,6 @@ TFRMWallet = class(TForm) Procedure UpdateConnectionStatus; Procedure UpdateBlockChainState; Procedure UpdateConfigChanged(Sender:TObject); - Procedure UpdateAvailableConnections; procedure Activate; override; Function ForceMining : Boolean; virtual; Function GetAccountKeyForMiner : TAccountKey; @@ -1424,7 +1423,7 @@ procedure TFRMWallet.PageControlChange(Sender: TObject); MiDecodePayload.Enabled := true; end else FOperationsExplorerGrid.Node := Nil; if PageControl.ActivePage=tsMessages then begin - UpdateAvailableConnections; + FrameMessages.UpdateAvailableConnections; FrameMessages.MessagesUnreadCount := 0; FrameInfo.lblReceivedMessages.Visible := false; end; @@ -1454,37 +1453,6 @@ procedure TFRMWallet.TimerUpdateStatusTimer(Sender: TObject); end; -procedure TFRMWallet.UpdateAvailableConnections; -Var i : integer; - NC : TNetConnection; - l : TList; -begin - if Not TNetData.NetData.NetConnections.TryLockList(100,l) then exit; - try - FrameMessages.lbNetConnections.Items.BeginUpdate; - Try - FrameMessages.lbNetConnections.Items.Clear; - for i := 0 to l.Count - 1 do begin - NC := l[i]; - if NC.Connected then begin - if NC is TNetServerClient then begin - if Not NC.IsMyselfServer then begin - FrameMessages.lbNetConnections.Items.AddObject(Format('Client: IP:%s',[NC.ClientRemoteAddr]),NC); - end; - end else begin - if Not NC.IsMyselfServer then begin - FrameMessages.lbNetConnections.Items.AddObject(Format('Server: IP:%s',[NC.ClientRemoteAddr]),NC); - end; - end; - end; - end; - Finally - FrameMessages.lbNetConnections.Items.EndUpdate; - End; - finally - TNetData.NetData.NetConnections.UnlockList; - end; -end; procedure TFRMWallet.UpdateBlockChainState; Var isMining : boolean; From 6548271b8eece6c06f3017cacf8db59a636b9e50 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Mon, 6 Dec 2021 23:22:36 +0100 Subject: [PATCH 32/44] CM_NetConnectionUpdated moved to TFrameNodeStats Not yet sure if frames can received windows messages. Needs to be tested. --- src/gui-classic/Frames/UFrameNodeStats.pas | 101 ++++++++++++++++++- src/gui-classic/UFRMWallet.pas | 107 +-------------------- src/gui-classic/UFRMWalletUserMessages.pas | 18 ++++ src/pascalcoin_wallet_classic.dpr | 3 +- src/pascalcoin_wallet_classic.dproj | 1 + 5 files changed, 124 insertions(+), 106 deletions(-) create mode 100644 src/gui-classic/UFRMWalletUserMessages.pas diff --git a/src/gui-classic/Frames/UFrameNodeStats.pas b/src/gui-classic/Frames/UFrameNodeStats.pas index 4d802c769..d6c66fb77 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.pas +++ b/src/gui-classic/Frames/UFrameNodeStats.pas @@ -4,7 +4,8 @@ interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, - Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, + UFRMWalletUserMessages; type TFrameNodeStats = class(TFrame) @@ -22,8 +23,14 @@ TFrameNodeStats = class(TFrame) private { Private declarations } + FMustProcessNetConnectionUpdated : Boolean; + + procedure OnNetConnectionsUpdated(Sender : TObject); procedure OnNetBlackListUpdated(Sender : TObject); + procedure CM_NetConnectionUpdated(var Msg: TMessage); message CM_PC_NetConnectionUpdated; + + public { Public declarations } @@ -53,6 +60,9 @@ constructor TFrameNodeStats.Create(AOwner: TComponent); memoNetServers.Lines.Clear; memoNetBlackLists.Lines.Clear; + FMustProcessNetConnectionUpdated := false; + + TNetData.NetData.OnNetConnectionsUpdated := OnNetConnectionsUpdated; TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; end; @@ -62,6 +72,13 @@ destructor TFrameNodeStats.Destroy; inherited Destroy; end; +procedure TFrameNodeStats.OnNetConnectionsUpdated(Sender: TObject); +begin + if FMustProcessNetConnectionUpdated then exit; + FMustProcessNetConnectionUpdated := true; + PostMessage(Self.Handle,CM_PC_NetConnectionUpdated,0,0); +end; + procedure TFrameNodeStats.OnNetBlackListUpdated(Sender: TObject); Const CT_TRUE_FALSE : Array[Boolean] Of AnsiString = ('FALSE','TRUE'); Var i,j,n : integer; @@ -99,6 +116,88 @@ procedure TFrameNodeStats.OnNetBlackListUpdated(Sender: TObject); end; end; +procedure TFrameNodeStats.CM_NetConnectionUpdated(var Msg: TMessage); +Const CT_BooleanToString : Array[Boolean] of String = ('False','True'); +Var i : integer; + NC : TNetConnection; + l : TList; + sClientApp, sLastConnTime : String; + strings, sNSC, sRS, sDisc : TStrings; + hh,nn,ss,ms : Word; +begin + Try + if Not TNetData.NetData.NetConnections.TryLockList(100,l) then exit; + try + strings := memoNetConnections.Lines; + sNSC := TStringList.Create; + sRS := TStringList.Create; + sDisc := TStringList.Create; + strings.BeginUpdate; + Try + for i := 0 to l.Count - 1 do begin + NC := l[i]; + If NC.Client.BytesReceived>0 then begin + sClientApp := '['+IntToStr(NC.NetProtocolVersion.protocol_version)+'-'+IntToStr(NC.NetProtocolVersion.protocol_available)+'] '+NC.ClientAppVersion; + end else begin + sClientApp := '(no data)'; + end; + + if NC.Connected then begin + if NC.Client.LastCommunicationTime>1000 then begin + DecodeTime(now - NC.Client.LastCommunicationTime,hh,nn,ss,ms); + if (hh=0) and (nn=0) And (ss<10) then begin + sLastConnTime := ' - Last comunication <10 sec.'; + end else begin + sLastConnTime := Format(' - Last comunication %.2dm%.2ds',[(hh*60)+nn,ss]); + end; + end else begin + sLastConnTime := ''; + end; + if NC is TNetServerClient then begin + sNSC.Add(Format('Client: IP:%s Block:%d Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', + [NC.ClientRemoteAddr,NC.RemoteOperationBlock.block,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])); + end else begin + if NC.IsMyselfServer then sNSC.Add(Format('MySelf IP:%s Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', + [NC.ClientRemoteAddr,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])) + else begin + sRS.Add(Format('Remote Server: IP:%s Block:%d Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', + [NC.ClientRemoteAddr,NC.RemoteOperationBlock.block,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])); + end; + end; + end else begin + if NC is TNetServerClient then begin + sDisc.Add(Format('Disconnected client: IP:%s - %s',[NC.ClientRemoteAddr,sClientApp])); + end else if NC.IsMyselfServer then begin + sDisc.Add(Format('Disconnected MySelf IP:%s - %s',[NC.ClientRemoteAddr,sClientApp])); + end else begin + sDisc.Add(Format('Disconnected Remote Server: IP:%s %s - %s',[NC.ClientRemoteAddr,CT_BooleanToString[NC.Connected],sClientApp])); + end; + end; + end; + strings.Clear; + strings.Add(Format('Connections Updated %s Clients:%d Servers:%d (valid servers:%d)',[DateTimeToStr(now),sNSC.Count,sRS.Count,TNetData.NetData.NetStatistics.ServersConnectionsWithResponse])); + strings.AddStrings(sRS); + strings.AddStrings(sNSC); + if sDisc.Count>0 then begin + strings.Add(''); + strings.Add('Disconnected connections: '+Inttostr(sDisc.Count)); + strings.AddStrings(sDisc); + end; + Finally + strings.EndUpdate; + sNSC.Free; + sRS.Free; + sDisc.Free; + End; + //CheckMining; + finally + TNetData.NetData.NetConnections.UnlockList; + end; + Finally + FMustProcessNetConnectionUpdated := false; + End; +end; + diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 7487e8dd5..4f53454f7 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -36,6 +36,7 @@ interface UCrypto, Buttons, UPoolMining, URPC, UFRMAccountSelect, UConst, UAccountKeyStorage, UBaseTypes, UPCDataTypes, UOrderedList, UFRMRPCCalls, UTxMultiOperation, USettings, UEPasa, + UFRMWalletUserMessages, UFrameAccountExplorer, UFramePendingOperations, UFrameMessages, @@ -50,14 +51,8 @@ interface Generics.Collections {$ENDIF}; -Const - CM_PC_WalletKeysChanged = WM_USER + 1; - CM_PC_NetConnectionUpdated = WM_USER + 2; - type - { TFRMWallet } - TFRMWallet = class(TForm) MiRPCCalls: TMenuItem; pnlTop: TPanel; @@ -157,7 +152,6 @@ TFRMWallet = class(TForm) FPoolMiningServer : TPoolMiningServer; FRPCServer : TRPCServer; FMustProcessWalletChanged : Boolean; - FMustProcessNetConnectionUpdated : Boolean; FThreadActivate : TObject; Procedure OnNewAccount(Sender : TObject); @@ -165,7 +159,6 @@ TFRMWallet = class(TForm) Procedure OnNetStatisticsChanged(Sender : TObject); procedure OnNewLog(logtype : TLogType; Time : TDateTime; ThreadID : TThreadID; Const sender, logtext : String); procedure OnWalletChanged(Sender : TObject); - procedure OnNetConnectionsUpdated(Sender : TObject); procedure OnNetNodeServersUpdated(Sender : TObject); Procedure OnNodeKeysActivity(Sender : TObject); Procedure OnSelectedAccountsGridUpdated(Sender : TObject); @@ -178,7 +171,7 @@ TFRMWallet = class(TForm) Function GetAccountKeyForMiner : TAccountKey; Procedure DoUpdateAccounts; procedure CM_WalletChanged(var Msg: TMessage); message CM_PC_WalletKeysChanged; - procedure CM_NetConnectionUpdated(var Msg: TMessage); message CM_PC_NetConnectionUpdated; +// procedure CM_NetConnectionUpdated(var Msg: TMessage); message CM_PC_NetConnectionUpdated; // moved to UFrameNodeStats, Skybuck: not sure yet if Frames can received messages public Procedure CheckIsReady; @@ -434,13 +427,6 @@ procedure TFRMWallet.Activate; {$endif} end; - - - - - - - function TFRMWallet.ForceMining: Boolean; begin Result := false; @@ -470,7 +456,6 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FBackgroundLabel := Nil; FThreadActivate := Nil; FMustProcessWalletChanged := false; - FMustProcessNetConnectionUpdated := false; FRPCServer := Nil; FNode := Nil; FPoolMiningServer := Nil; @@ -644,87 +629,7 @@ procedure TFRMWallet.CheckIsReady; end; end; -procedure TFRMWallet.CM_NetConnectionUpdated(var Msg: TMessage); -Const CT_BooleanToString : Array[Boolean] of String = ('False','True'); -Var i : integer; - NC : TNetConnection; - l : TList; - sClientApp, sLastConnTime : String; - strings, sNSC, sRS, sDisc : TStrings; - hh,nn,ss,ms : Word; -begin - Try - if Not TNetData.NetData.NetConnections.TryLockList(100,l) then exit; - try - strings := FrameNodeStats.memoNetConnections.Lines; - sNSC := TStringList.Create; - sRS := TStringList.Create; - sDisc := TStringList.Create; - strings.BeginUpdate; - Try - for i := 0 to l.Count - 1 do begin - NC := l[i]; - If NC.Client.BytesReceived>0 then begin - sClientApp := '['+IntToStr(NC.NetProtocolVersion.protocol_version)+'-'+IntToStr(NC.NetProtocolVersion.protocol_available)+'] '+NC.ClientAppVersion; - end else begin - sClientApp := '(no data)'; - end; - if NC.Connected then begin - if NC.Client.LastCommunicationTime>1000 then begin - DecodeTime(now - NC.Client.LastCommunicationTime,hh,nn,ss,ms); - if (hh=0) and (nn=0) And (ss<10) then begin - sLastConnTime := ' - Last comunication <10 sec.'; - end else begin - sLastConnTime := Format(' - Last comunication %.2dm%.2ds',[(hh*60)+nn,ss]); - end; - end else begin - sLastConnTime := ''; - end; - if NC is TNetServerClient then begin - sNSC.Add(Format('Client: IP:%s Block:%d Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', - [NC.ClientRemoteAddr,NC.RemoteOperationBlock.block,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])); - end else begin - if NC.IsMyselfServer then sNSC.Add(Format('MySelf IP:%s Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', - [NC.ClientRemoteAddr,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])) - else begin - sRS.Add(Format('Remote Server: IP:%s Block:%d Sent/Received:%d/%d Bytes - %s - Time offset %d - Active since %s %s', - [NC.ClientRemoteAddr,NC.RemoteOperationBlock.block,NC.Client.BytesSent,NC.Client.BytesReceived,sClientApp,NC.TimestampDiff,DateTimeElapsedTime(NC.CreatedTime),sLastConnTime])); - end; - end; - end else begin - if NC is TNetServerClient then begin - sDisc.Add(Format('Disconnected client: IP:%s - %s',[NC.ClientRemoteAddr,sClientApp])); - end else if NC.IsMyselfServer then begin - sDisc.Add(Format('Disconnected MySelf IP:%s - %s',[NC.ClientRemoteAddr,sClientApp])); - end else begin - sDisc.Add(Format('Disconnected Remote Server: IP:%s %s - %s',[NC.ClientRemoteAddr,CT_BooleanToString[NC.Connected],sClientApp])); - end; - end; - end; - strings.Clear; - strings.Add(Format('Connections Updated %s Clients:%d Servers:%d (valid servers:%d)',[DateTimeToStr(now),sNSC.Count,sRS.Count,TNetData.NetData.NetStatistics.ServersConnectionsWithResponse])); - strings.AddStrings(sRS); - strings.AddStrings(sNSC); - if sDisc.Count>0 then begin - strings.Add(''); - strings.Add('Disconnected connections: '+Inttostr(sDisc.Count)); - strings.AddStrings(sDisc); - end; - Finally - strings.EndUpdate; - sNSC.Free; - sRS.Free; - sDisc.Free; - End; - //CheckMining; - finally - TNetData.NetData.NetConnections.UnlockList; - end; - Finally - FMustProcessNetConnectionUpdated := false; - End; -end; procedure TFRMWallet.CM_WalletChanged(var Msg: TMessage); begin @@ -746,7 +651,6 @@ procedure TFRMWallet.FinishedLoadingApp; // Init TNetData.NetData.OnReceivedHelloMessage := OnReceivedHelloMessage; TNetData.NetData.OnStatisticsChanged := OnNetStatisticsChanged; - TNetData.NetData.OnNetConnectionsUpdated := onNetConnectionsUpdated; TNetData.NetData.OnNodeServersUpdated := OnNetNodeServersUpdated; // TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; try to move to FrameNodeStats @@ -1254,12 +1158,7 @@ procedure TFRMWallet.OnMiningServerNewBlockFound(Sender: TObject); -procedure TFRMWallet.OnNetConnectionsUpdated(Sender: TObject); -begin - if FMustProcessNetConnectionUpdated then exit; - FMustProcessNetConnectionUpdated := true; - PostMessage(Self.Handle,CM_PC_NetConnectionUpdated,0,0); -end; + procedure TFRMWallet.OnNetNodeServersUpdated(Sender: TObject); Var i : integer; diff --git a/src/gui-classic/UFRMWalletUserMessages.pas b/src/gui-classic/UFRMWalletUserMessages.pas new file mode 100644 index 000000000..b458b3029 --- /dev/null +++ b/src/gui-classic/UFRMWalletUserMessages.pas @@ -0,0 +1,18 @@ +unit UFRMWalletUserMessages; + +interface + +uses +{$IFnDEF FPC} + Messages +{$ELSE} + LMessages +{$ENDIF}; + +Const + CM_PC_WalletKeysChanged = WM_USER + 1; + CM_PC_NetConnectionUpdated = WM_USER + 2; + +implementation + +end. diff --git a/src/pascalcoin_wallet_classic.dpr b/src/pascalcoin_wallet_classic.dpr index d776816c4..fa28b4e31 100644 --- a/src/pascalcoin_wallet_classic.dpr +++ b/src/pascalcoin_wallet_classic.dpr @@ -98,7 +98,8 @@ uses UFrameMessages in 'gui-classic\Frames\UFrameMessages.pas' {FrameMessages: TFrame}, UnitReIntegrate in 'gui-classic\UnitReIntegrate.pas', UFRMTestWallet in 'gui-classic\UFRMTestWallet.pas' {FRMTestWallet}, - UFrameInfo in 'gui-classic\Frames\UFrameInfo.pas' {FrameInfo: TFrame}; + UFrameInfo in 'gui-classic\Frames\UFrameInfo.pas' {FrameInfo: TFrame}, + UFRMWalletUserMessages in 'gui-classic\UFRMWalletUserMessages.pas'; {$R *.res} diff --git a/src/pascalcoin_wallet_classic.dproj b/src/pascalcoin_wallet_classic.dproj index 55ea51518..7c4456ee4 100644 --- a/src/pascalcoin_wallet_classic.dproj +++ b/src/pascalcoin_wallet_classic.dproj @@ -279,6 +279,7 @@ dfm TFrame
+ Cfg_2 From d26a3a5b5cef8bca8062d3eb436319689c951f1c Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 7 Dec 2021 00:08:20 +0100 Subject: [PATCH 33/44] OnNetNodeServersUpdated moved to TFrameNodeStats --- src/gui-classic/Frames/UFrameNodeStats.pas | 56 +++++++++++++++++++++ src/gui-classic/UFRMWallet.pas | 57 +--------------------- 2 files changed, 58 insertions(+), 55 deletions(-) diff --git a/src/gui-classic/Frames/UFrameNodeStats.pas b/src/gui-classic/Frames/UFrameNodeStats.pas index d6c66fb77..98fc6f31d 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.pas +++ b/src/gui-classic/Frames/UFrameNodeStats.pas @@ -27,6 +27,7 @@ TFrameNodeStats = class(TFrame) procedure OnNetConnectionsUpdated(Sender : TObject); procedure OnNetBlackListUpdated(Sender : TObject); + procedure OnNetNodeServersUpdated(Sender: TObject); procedure CM_NetConnectionUpdated(var Msg: TMessage); message CM_PC_NetConnectionUpdated; @@ -64,6 +65,7 @@ constructor TFrameNodeStats.Create(AOwner: TComponent); TNetData.NetData.OnNetConnectionsUpdated := OnNetConnectionsUpdated; TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; + TNetData.NetData.OnNodeServersUpdated := OnNetNodeServersUpdated; end; destructor TFrameNodeStats.Destroy; @@ -116,6 +118,60 @@ procedure TFrameNodeStats.OnNetBlackListUpdated(Sender: TObject); end; end; +procedure TFrameNodeStats.OnNetNodeServersUpdated(Sender: TObject); +Var i : integer; + P : PNodeServerAddress; + l : TList; + strings : TStrings; + s : String; +begin + l := TNetData.NetData.NodeServersAddresses.LockList; + try + strings := memoNetServers.Lines; + strings.BeginUpdate; + Try + strings.Clear; + strings.Add('NodeServers Updated: '+DateTimeToStr(now) +' Count: '+inttostr(l.Count)); + for i := 0 to l.Count - 1 do begin + P := l[i]; + if Not (P^.is_blacklisted) then begin + s := Format('Server IP:%s:%d',[P^.ip,P^.port]); + if (P^.last_connection_by_me>0) then begin + s := s + ' [Server] '; + end; + + if Assigned(P.netConnection) then begin + If P.last_connection>0 then s := s+ ' ** ACTIVE **' + else s := s+' ** TRYING TO CONNECT **'; + end; + if P.its_myself then begin + s := s+' ** NOT VALID ** '+P.BlackListText; + end; + if P.last_connection>0 then begin + s := s + ' Last connection: '+DateTimeToStr(UnivDateTime2LocalDateTime( UnixToUnivDateTime(P^.last_connection))); + end; + if P.last_connection_by_server>0 then begin + s := s + ' Last server connection: '+DateTimeToStr(UnivDateTime2LocalDateTime( UnixToUnivDateTime(P^.last_connection_by_server))); + end; + if (P.last_attempt_to_connect>0) then begin + s := s + ' Last attempt to connect: '+DateTimeToStr(P^.last_attempt_to_connect); + end; + if (P.total_failed_attemps_to_connect>0) then begin + s := s + ' (Attempts: '+inttostr(P^.total_failed_attemps_to_connect)+')'; + end; + + strings.Add(s); + end; + end; + Finally + strings.EndUpdate; + End; + finally + TNetData.NetData.NodeServersAddresses.UnlockList; + end; +end; + + procedure TFrameNodeStats.CM_NetConnectionUpdated(var Msg: TMessage); Const CT_BooleanToString : Array[Boolean] of String = ('False','True'); Var i : integer; diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 4f53454f7..09f6ceff2 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -159,7 +159,6 @@ TFRMWallet = class(TForm) Procedure OnNetStatisticsChanged(Sender : TObject); procedure OnNewLog(logtype : TLogType; Time : TDateTime; ThreadID : TThreadID; Const sender, logtext : String); procedure OnWalletChanged(Sender : TObject); - procedure OnNetNodeServersUpdated(Sender : TObject); Procedure OnNodeKeysActivity(Sender : TObject); Procedure OnSelectedAccountsGridUpdated(Sender : TObject); Procedure OnMiningServerNewBlockFound(Sender : TObject); @@ -651,8 +650,8 @@ procedure TFRMWallet.FinishedLoadingApp; // Init TNetData.NetData.OnReceivedHelloMessage := OnReceivedHelloMessage; TNetData.NetData.OnStatisticsChanged := OnNetStatisticsChanged; - TNetData.NetData.OnNodeServersUpdated := OnNetNodeServersUpdated; -// TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; try to move to FrameNodeStats +// TNetData.NetData.OnNodeServersUpdated := OnNetNodeServersUpdated; // try to move to FrameNodeStats +// TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; // try to move to FrameNodeStats // TimerUpdateStatus.Interval := 1000; @@ -1160,58 +1159,6 @@ procedure TFRMWallet.OnMiningServerNewBlockFound(Sender: TObject); -procedure TFRMWallet.OnNetNodeServersUpdated(Sender: TObject); -Var i : integer; - P : PNodeServerAddress; - l : TList; - strings : TStrings; - s : String; -begin - l := TNetData.NetData.NodeServersAddresses.LockList; - try - strings := FrameNodeStats.memoNetServers.Lines; - strings.BeginUpdate; - Try - strings.Clear; - strings.Add('NodeServers Updated: '+DateTimeToStr(now) +' Count: '+inttostr(l.Count)); - for i := 0 to l.Count - 1 do begin - P := l[i]; - if Not (P^.is_blacklisted) then begin - s := Format('Server IP:%s:%d',[P^.ip,P^.port]); - if (P^.last_connection_by_me>0) then begin - s := s + ' [Server] '; - end; - - if Assigned(P.netConnection) then begin - If P.last_connection>0 then s := s+ ' ** ACTIVE **' - else s := s+' ** TRYING TO CONNECT **'; - end; - if P.its_myself then begin - s := s+' ** NOT VALID ** '+P.BlackListText; - end; - if P.last_connection>0 then begin - s := s + ' Last connection: '+DateTimeToStr(UnivDateTime2LocalDateTime( UnixToUnivDateTime(P^.last_connection))); - end; - if P.last_connection_by_server>0 then begin - s := s + ' Last server connection: '+DateTimeToStr(UnivDateTime2LocalDateTime( UnixToUnivDateTime(P^.last_connection_by_server))); - end; - if (P.last_attempt_to_connect>0) then begin - s := s + ' Last attempt to connect: '+DateTimeToStr(P^.last_attempt_to_connect); - end; - if (P.total_failed_attemps_to_connect>0) then begin - s := s + ' (Attempts: '+inttostr(P^.total_failed_attemps_to_connect)+')'; - end; - - strings.Add(s); - end; - end; - Finally - strings.EndUpdate; - End; - finally - TNetData.NetData.NodeServersAddresses.UnlockList; - end; -end; procedure TFRMWallet.OnNetStatisticsChanged(Sender: TObject); Var NS : TNetStatistics; From 65fa57f30aa320342dbcc1ac6b0558a1a41d0d12 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 7 Dec 2021 00:26:09 +0100 Subject: [PATCH 34/44] UpdateBlockChainState moved to TFrameInfo --- src/gui-classic/Frames/UFrameInfo.dfm | 4 +- src/gui-classic/Frames/UFrameInfo.pas | 88 ++++++++++++++++++++++++++- src/gui-classic/UFRMWallet.pas | 88 ++------------------------- 3 files changed, 94 insertions(+), 86 deletions(-) diff --git a/src/gui-classic/Frames/UFrameInfo.dfm b/src/gui-classic/Frames/UFrameInfo.dfm index a778da43b..44aa7475e 100644 --- a/src/gui-classic/Frames/UFrameInfo.dfm +++ b/src/gui-classic/Frames/UFrameInfo.dfm @@ -43,8 +43,8 @@ object FrameInfo: TFrameInfo object Image1: TImage Left = 0 Top = 0 - Width = 64 - Height = 64 + Width = 71 + Height = 104 Align = alClient AutoSize = True Center = True diff --git a/src/gui-classic/Frames/UFrameInfo.pas b/src/gui-classic/Frames/UFrameInfo.pas index d4d194581..2b6a15180 100644 --- a/src/gui-classic/Frames/UFrameInfo.pas +++ b/src/gui-classic/Frames/UFrameInfo.pas @@ -41,13 +41,20 @@ TFrameInfo = class(TFrame) private { Private declarations } + FMinersBlocksFound: Integer; + + procedure SetMinersBlocksFound(const Value: Integer); + public { Public declarations } procedure UpdateNodeStatus; + procedure UpdateBlockChainState; constructor Create(AOwner: TComponent); override; destructor Destroy; override; + + property MinersBlocksFound : Integer read FMinersBlocksFound write SetMinersBlocksFound; end; implementation @@ -55,12 +62,13 @@ implementation {$R *.dfm} uses - UFRMWallet, UNetProtocol; + UFRMWallet, UNetProtocol, UBlockChain, UTime, UConst; constructor TFrameInfo.Create(AOwner: TComponent); begin inherited Create( AOwner ); + MinersBlocksFound := 0; end; @@ -70,6 +78,15 @@ destructor TFrameInfo.Destroy; inherited Destroy; end; +procedure TFrameInfo.SetMinersBlocksFound(const Value: Integer); +begin + FMinersBlocksFound := Value; + lblBlocksFound.Caption := Inttostr(Value); + if Value>0 then lblBlocksFound.Font.Color := clGreen + else lblBlocksFound.Font.Color := clDkGray; +end; + + procedure TFrameInfo.UpdateNodeStatus; Var status : String; begin @@ -103,4 +120,73 @@ procedure TFrameInfo.UpdateNodeStatus; end; end; +procedure TFrameInfo.UpdateBlockChainState; +Var isMining : boolean; + i,mc : Integer; + s : String; + f, favg : real; + LLockedMempool : TPCOperationsComp; +begin + UpdateNodeStatus; + mc := 0; + if Assigned(FRMWallet.Node) then begin + if FRMWallet.Node.Bank.BlocksCount>0 then begin + lblCurrentBlock.Caption := Inttostr(FRMWallet.Node.Bank.BlocksCount)+' (0..'+Inttostr(FRMWallet.Node.Bank.BlocksCount-1)+')'; ; + end else lblCurrentBlock.Caption := '(none)'; + lblCurrentAccounts.Caption := Inttostr(FRMWallet.Node.Bank.AccountsCount); + lblCurrentBlockTime.Caption := UnixTimeToLocalElapsedTime(FRMWallet.Node.Bank.LastOperationBlock.timestamp); + LLockedMempool := FRMWallet.Node.LockMempoolRead; + try + lblOperationsPending.Caption := Inttostr(LLockedMempool.Count); + lblCurrentDifficulty.Caption := InttoHex(LLockedMempool.OperationBlock.compact_target,8); + finally + FRMWallet.Node.UnlockMempoolRead; + end; + favg := FRMWallet.Node.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage); + f := (CT_NewLineSecondsAvg - favg) / CT_NewLineSecondsAvg; + lblTimeAverage.Caption := 'Last '+Inttostr(CT_CalcNewTargetBlocksAverage)+': '+FormatFloat('0.0',favg)+' sec. (Optimal '+Inttostr(CT_NewLineSecondsAvg)+'s) Deviation '+FormatFloat('0.00%',f*100); + if favg>=CT_NewLineSecondsAvg then begin + lblTimeAverage.Font.Color := clNavy; + end else begin + lblTimeAverage.Font.Color := clOlive; + end; + lblTimeAverageAux.Caption := + Format + ( + 'Last %d: %s sec. - %d: %s sec. - %d: %s sec. - %d: %s sec. - %d: %s sec.', + [ + CT_CalcNewTargetBlocksAverage * 2, FormatFloat('0.0', FRMWallet.Node.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage * 2)), + ((CT_CalcNewTargetBlocksAverage * 3) DIV 2) ,FormatFloat('0.0',FRMWallet.Node.Bank.GetActualTargetSecondsAverage((CT_CalcNewTargetBlocksAverage * 3) DIV 2)), + ((CT_CalcNewTargetBlocksAverage DIV 4)*3),FormatFloat('0.0',FRMWallet.Node.Bank.GetActualTargetSecondsAverage(((CT_CalcNewTargetBlocksAverage DIV 4)*3))), + CT_CalcNewTargetBlocksAverage DIV 2,FormatFloat('0.0',FRMWallet.Node.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage DIV 2)), + CT_CalcNewTargetBlocksAverage DIV 4,FormatFloat('0.0',FRMWallet.Node.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage DIV 4)) + ] + ); + end else begin + isMining := false; + + lblCurrentBlock.Caption := ''; + lblCurrentAccounts.Caption := ''; + lblCurrentBlockTime.Caption := ''; + lblOperationsPending.Caption := ''; + lblCurrentDifficulty.Caption := ''; + lblTimeAverage.Caption := ''; + lblTimeAverageAux.Caption := ''; + end; + if (Assigned(FRMWallet.PoolMiningServer)) And (FRMWallet.PoolMiningServer.Active) then begin + If FRMWallet.PoolMiningServer.ClientsCount>0 then begin + lblMinersClients.Caption := IntToStr(FRMWallet.PoolMiningServer.ClientsCount)+' connected JSON-RPC clients'; + lblMinersClients.Font.Color := clNavy; + end else begin + lblMinersClients.Caption := 'No JSON-RPC clients'; + lblMinersClients.Font.Color := clDkGray; + end; + MinersBlocksFound := FRMWallet.PoolMiningServer.ClientsWins; + end else begin + MinersBlocksFound := 0; + lblMinersClients.Caption := 'JSON-RPC server not active'; + lblMinersClients.Font.Color := clRed; + end; +end; + end. diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 09f6ceff2..a455d88d9 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -129,8 +129,6 @@ TFRMWallet = class(TForm) FLastNodesCacheUpdatedTS : TDateTime; FBackgroundPanel : TPanel; FBackgroundLabel : TLabel; - FMinersBlocksFound: Integer; - procedure SetMinersBlocksFound(const Value: Integer); Procedure FinishedLoadingApp; Procedure FillAccountInformation(Const Strings : TStrings; Const AccountNumber : Cardinal); Procedure FillOperationInformation(Const Strings : TStrings; Const OperationResume : TOperationResume); @@ -163,7 +161,6 @@ TFRMWallet = class(TForm) Procedure OnSelectedAccountsGridUpdated(Sender : TObject); Procedure OnMiningServerNewBlockFound(Sender : TObject); Procedure UpdateConnectionStatus; - Procedure UpdateBlockChainState; Procedure UpdateConfigChanged(Sender:TObject); procedure Activate; override; Function ForceMining : Boolean; virtual; @@ -182,7 +179,6 @@ TFRMWallet = class(TForm) Property Node : TNode read FNode; Property WalletKeys : TWalletKeysExt read FWalletKeys; - Property MinersBlocksFound : Integer read FMinersBlocksFound write SetMinersBlocksFound; Property NodeNotifyEvents : TNodeNotifyEvents read FNodeNotifyEvents; @@ -193,7 +189,7 @@ TFRMWallet = class(TForm) Property SelectedAccountsGrid : TAccountsGrid read FSelectedAccountsGrid; - + Property PoolMiningServer : TPoolMiningServer read FPoolMiningServer; end; @@ -508,13 +504,12 @@ procedure TFRMWallet.FormCreate(Sender: TObject); {$ENDIF} // FrameAccountExplorer.UpdatePrivateKeys; - UpdateBlockChainState; + FrameInfo.UpdateBlockChainState; UpdateConnectionStatus; PageControl.ActivePage := tsOperations; FrameAccountExplorer.cbExploreMyAccountsClick(nil); - MinersBlocksFound := 0; FrameInfo.lblBuild.Caption := 'Build: '+CT_ClientAppVersion; {$IFDEF TESTNET} FrameInfo.lblBuild.Font.Color := clRed; @@ -1181,7 +1176,7 @@ procedure TFRMWallet.OnNewAccount(Sender: TObject); begin Try FrameAccountExplorer.UpdateAccounts(false); - UpdateBlockChainState; + FrameInfo.UpdateBlockChainState; Except On E:Exception do begin E.Message := 'Exception at OnNewAccount '+E.ClassName+': '+E.Message; @@ -1275,20 +1270,11 @@ procedure TFRMWallet.PageControlChange(Sender: TObject); end; end; - -procedure TFRMWallet.SetMinersBlocksFound(const Value: Integer); -begin - FMinersBlocksFound := Value; - FrameInfo.lblBlocksFound.Caption := Inttostr(Value); - if Value>0 then FrameInfo.lblBlocksFound.Font.Color := clGreen - else FrameInfo.lblBlocksFound.Font.Color := clDkGray; -end; - procedure TFRMWallet.TimerUpdateStatusTimer(Sender: TObject); begin Try UpdateConnectionStatus; - UpdateBlockChainState; + FrameInfo.UpdateBlockChainState; FrameInfo.UpdateNodeStatus; Except On E:Exception do begin @@ -1300,71 +1286,7 @@ procedure TFRMWallet.TimerUpdateStatusTimer(Sender: TObject); -procedure TFRMWallet.UpdateBlockChainState; -Var isMining : boolean; - i,mc : Integer; - s : String; - f, favg : real; - LLockedMempool : TPCOperationsComp; -begin - FrameInfo.UpdateNodeStatus; - mc := 0; - if Assigned(FNode) then begin - if FNode.Bank.BlocksCount>0 then begin - FrameInfo.lblCurrentBlock.Caption := Inttostr(FNode.Bank.BlocksCount)+' (0..'+Inttostr(FNode.Bank.BlocksCount-1)+')'; ; - end else FrameInfo.lblCurrentBlock.Caption := '(none)'; - FrameInfo.lblCurrentAccounts.Caption := Inttostr(FNode.Bank.AccountsCount); - FrameInfo.lblCurrentBlockTime.Caption := UnixTimeToLocalElapsedTime(FNode.Bank.LastOperationBlock.timestamp); - LLockedMempool := FNode.LockMempoolRead; - try - FrameInfo.lblOperationsPending.Caption := Inttostr(LLockedMempool.Count); - FrameInfo.lblCurrentDifficulty.Caption := InttoHex(LLockedMempool.OperationBlock.compact_target,8); - finally - FNode.UnlockMempoolRead; - end; - favg := FNode.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage); - f := (CT_NewLineSecondsAvg - favg) / CT_NewLineSecondsAvg; - FrameInfo.lblTimeAverage.Caption := 'Last '+Inttostr(CT_CalcNewTargetBlocksAverage)+': '+FormatFloat('0.0',favg)+' sec. (Optimal '+Inttostr(CT_NewLineSecondsAvg)+'s) Deviation '+FormatFloat('0.00%',f*100); - if favg>=CT_NewLineSecondsAvg then begin - FrameInfo.lblTimeAverage.Font.Color := clNavy; - end else begin - FrameInfo.lblTimeAverage.Font.Color := clOlive; - end; - FrameInfo.lblTimeAverageAux.Caption := Format('Last %d: %s sec. - %d: %s sec. - %d: %s sec. - %d: %s sec. - %d: %s sec.',[ - CT_CalcNewTargetBlocksAverage * 2 ,FormatFloat('0.0',FNode.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage * 2)), - ((CT_CalcNewTargetBlocksAverage * 3) DIV 2) ,FormatFloat('0.0',FNode.Bank.GetActualTargetSecondsAverage((CT_CalcNewTargetBlocksAverage * 3) DIV 2)), - ((CT_CalcNewTargetBlocksAverage DIV 4)*3),FormatFloat('0.0',FNode.Bank.GetActualTargetSecondsAverage(((CT_CalcNewTargetBlocksAverage DIV 4)*3))), - CT_CalcNewTargetBlocksAverage DIV 2,FormatFloat('0.0',FNode.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage DIV 2)), - CT_CalcNewTargetBlocksAverage DIV 4,FormatFloat('0.0',FNode.Bank.GetActualTargetSecondsAverage(CT_CalcNewTargetBlocksAverage DIV 4))]); - end else begin - isMining := false; - - with FrameInfo do - begin - lblCurrentBlock.Caption := ''; - lblCurrentAccounts.Caption := ''; - lblCurrentBlockTime.Caption := ''; - lblOperationsPending.Caption := ''; - lblCurrentDifficulty.Caption := ''; - lblTimeAverage.Caption := ''; - lblTimeAverageAux.Caption := ''; - end; - end; - if (Assigned(FPoolMiningServer)) And (FPoolMiningServer.Active) then begin - If FPoolMiningServer.ClientsCount>0 then begin - FrameInfo.lblMinersClients.Caption := IntToStr(FPoolMiningServer.ClientsCount)+' connected JSON-RPC clients'; - FrameInfo.lblMinersClients.Font.Color := clNavy; - end else begin - FrameInfo.lblMinersClients.Caption := 'No JSON-RPC clients'; - FrameInfo.lblMinersClients.Font.Color := clDkGray; - end; - MinersBlocksFound := FPoolMiningServer.ClientsWins; - end else begin - MinersBlocksFound := 0; - FrameInfo.lblMinersClients.Caption := 'JSON-RPC server not active'; - FrameInfo.lblMinersClients.Font.Color := clRed; - end; -end; + procedure TFRMWallet.UpdateConfigChanged(Sender:TObject); Var wa : Boolean; From 6c92d3bc1cbf58dea27779884bf49350c4c8c898 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 7 Dec 2021 00:41:08 +0100 Subject: [PATCH 35/44] OnNewLog moved to TFrameLogs --- src/core/UConst.pas | 2 +- src/gui-classic/Frames/UFrameLogs.dfm | 5 +-- src/gui-classic/Frames/UFrameLogs.pas | 53 ++++++++++++++++++++++----- src/gui-classic/UFRMWallet.dfm | 23 +++++------- src/gui-classic/UFRMWallet.pas | 22 +---------- 5 files changed, 59 insertions(+), 46 deletions(-) diff --git a/src/core/UConst.pas b/src/core/UConst.pas index e5efef33d..0e5a08821 100644 --- a/src/core/UConst.pas +++ b/src/core/UConst.pas @@ -29,7 +29,7 @@ interface type PtrInt = NativeInt; PtrUInt = NativeUInt; - TThreadID = NativeUInt; + TThreadID = NativeUInt; // Skybuck: already defined in system under Delphi, could lead to (proto)type mismatches, consider disabling this in Delphi for more safety ?!? ULog.pas is activated by this as well as UFrameLogs.pas {$ENDIF} Const diff --git a/src/gui-classic/Frames/UFrameLogs.dfm b/src/gui-classic/Frames/UFrameLogs.dfm index 4b3572dde..4a77d0f88 100644 --- a/src/gui-classic/Frames/UFrameLogs.dfm +++ b/src/gui-classic/Frames/UFrameLogs.dfm @@ -13,7 +13,6 @@ object FrameLogs: TFrameLogs ScrollBars = ssBoth TabOrder = 0 WordWrap = False - ExplicitTop = 32 end object pnlTopLogs: TPanel Left = 0 @@ -34,7 +33,7 @@ object FrameLogs: TFrameLogs Caption = 'Show Debug Logs' TabOrder = 0 end - object Button1: TButton + object ButtonCopyLogToClipboard: TButton Left = 680 Top = 4 Width = 133 @@ -42,7 +41,7 @@ object FrameLogs: TFrameLogs Anchors = [akTop, akRight] Caption = 'Copy log to clipboard' TabOrder = 1 - OnClick = Button1Click + OnClick = ButtonCopyLogToClipboardClick end end end diff --git a/src/gui-classic/Frames/UFrameLogs.pas b/src/gui-classic/Frames/UFrameLogs.pas index 7753d8f47..7df3d2c2f 100644 --- a/src/gui-classic/Frames/UFrameLogs.pas +++ b/src/gui-classic/Frames/UFrameLogs.pas @@ -4,15 +4,16 @@ interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, - Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; + Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, + ULog, UConst; type TFrameLogs = class(TFrame) memoLogs: TMemo; pnlTopLogs: TPanel; cbShowDebugLogs: TCheckBox; - Button1: TButton; - procedure Button1Click(Sender: TObject); + ButtonCopyLogToClipboard: TButton; + procedure ButtonCopyLogToClipboardClick(Sender: TObject); private { Private declarations } public @@ -20,18 +21,21 @@ TFrameLogs = class(TFrame) constructor Create(AOwner: TComponent); override; destructor Destroy; override; + + procedure OnNewLog + ( + logtype : TLogType; + Time : TDateTime; + ThreadID : TThreadID; // carefull, two different types exist one in UConst.Pas and one in System.pas (in Delphi). + const sender, logtext : string + ); + end; implementation {$R *.dfm} -procedure TFrameLogs.Button1Click(Sender: TObject); -begin - memoLogs.SelectAll; - memoLogs.CopyToClipboard; -end; - constructor TFrameLogs.Create(AOwner: TComponent); begin inherited Create( AOwner ); @@ -44,4 +48,35 @@ destructor TFrameLogs.Destroy; inherited Destroy; end; +procedure TFrameLogs.ButtonCopyLogToClipboardClick(Sender: TObject); +begin + memoLogs.SelectAll; + memoLogs.CopyToClipboard; +end; + +procedure TFrameLogs.OnNewLog +( + logtype: TLogType; + Time : TDateTime; + ThreadID : TThreadID; + const sender,logtext: String +); +Var s : AnsiString; +begin + if (logtype=ltdebug) And (Not cbShowDebugLogs.Checked) then exit; + if ThreadID=MainThreadID then s := ' MAIN:' else s:=' TID:'; + if MemoLogs.Lines.Count>300 then begin + // Limit max lines in logs... + memoLogs.Lines.BeginUpdate; + try + while memoLogs.Lines.Count>250 do memoLogs.Lines.Delete(0); + finally + memoLogs.Lines.EndUpdate; + end; + end; + memoLogs.Lines.Add(formatDateTime('dd/mm/yyyy hh:nn:ss.zzz',Time)+s+IntToHex(PtrInt(ThreadID),8)+' ['+CT_LogType[Logtype]+'] <'+sender+'> '+logtext); + // +end; + + end. diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index d8aa5f449..b0722de94 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -37,8 +37,6 @@ object FRMWallet: TFRMWallet ExplicitWidth = 865 inherited Panel1: TPanel inherited Image1: TImage - Width = 71 - Height = 104 ExplicitWidth = 75 ExplicitHeight = 104 end @@ -177,11 +175,11 @@ object FRMWallet: TFRMWallet Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 42 + ExplicitWidth = 857 + ExplicitHeight = 421 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 296 + ExplicitWidth = 857 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 @@ -230,14 +228,13 @@ object FRMWallet: TFRMWallet inherited memoLogs: TMemo Width = 857 Height = 388 - ExplicitTop = 33 ExplicitWidth = 857 ExplicitHeight = 388 end inherited pnlTopLogs: TPanel Width = 857 ExplicitWidth = 857 - inherited Button1: TButton + inherited ButtonCopyLogToClipboard: TButton Left = 716 ExplicitLeft = 716 end @@ -320,8 +317,8 @@ object FRMWallet: TFRMWallet Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 296 - ExplicitHeight = 42 + ExplicitWidth = 857 + ExplicitHeight = 421 inherited Splitter1: TSplitter Top = 168 Width = 857 @@ -331,8 +328,8 @@ object FRMWallet: TFRMWallet inherited PanelBottom: TPanel Top = 171 Width = 857 - ExplicitTop = -208 - ExplicitWidth = 296 + ExplicitTop = 171 + ExplicitWidth = 857 inherited Panel1: TPanel Width = 857 ExplicitWidth = 857 @@ -345,7 +342,7 @@ object FRMWallet: TFRMWallet inherited PanelTop: TPanel Width = 857 Height = 168 - ExplicitWidth = 296 + ExplicitWidth = 857 ExplicitHeight = 168 inherited Splitter2: TSplitter Height = 168 @@ -362,7 +359,7 @@ object FRMWallet: TFRMWallet inherited PanelRight: TPanel Width = 566 Height = 168 - ExplicitWidth = 5 + ExplicitWidth = 566 ExplicitHeight = 168 inherited memoMessageToSend: TMemo Width = 566 diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index a455d88d9..21ecb98da 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -155,7 +155,6 @@ TFRMWallet = class(TForm) Procedure OnNewAccount(Sender : TObject); Procedure OnReceivedHelloMessage(Sender : TObject); Procedure OnNetStatisticsChanged(Sender : TObject); - procedure OnNewLog(logtype : TLogType; Time : TDateTime; ThreadID : TThreadID; Const sender, logtext : String); procedure OnWalletChanged(Sender : TObject); Procedure OnNodeKeysActivity(Sender : TObject); Procedure OnSelectedAccountsGridUpdated(Sender : TObject); @@ -464,7 +463,7 @@ procedure TFRMWallet.FormCreate(Sender: TObject); StatusBar.Panels[i].Text := ''; end; FLog := TLog.Create(Self); - FLog.OnNewLog := OnNewLog; + FLog.OnNewLog := FrameLogs.OnNewLog; FLog.SaveTypes := []; If Not ForceDirectories(TNode.GetPascalCoinDataFolder) then raise Exception.Create('Cannot create dir: '+TNode.GetPascalCoinDataFolder); TSettings.Load; @@ -1186,23 +1185,6 @@ procedure TFRMWallet.OnNewAccount(Sender: TObject); end; end; -procedure TFRMWallet.OnNewLog(logtype: TLogType; Time : TDateTime; ThreadID : TThreadID; const sender,logtext: String); -Var s : AnsiString; -begin - if (logtype=ltdebug) And (Not FrameLogs.cbShowDebugLogs.Checked) then exit; - if ThreadID=MainThreadID then s := ' MAIN:' else s:=' TID:'; - if FrameLogs.MemoLogs.Lines.Count>300 then begin - // Limit max lines in logs... - FrameLogs.memoLogs.Lines.BeginUpdate; - try - while FrameLogs.memoLogs.Lines.Count>250 do FrameLogs.memoLogs.Lines.Delete(0); - finally - FrameLogs.memoLogs.Lines.EndUpdate; - end; - end; - FrameLogs.memoLogs.Lines.Add(formatDateTime('dd/mm/yyyy hh:nn:ss.zzz',Time)+s+IntToHex(PtrInt(ThreadID),8)+' ['+CT_LogType[Logtype]+'] <'+sender+'> '+logtext); - // -end; @@ -1297,7 +1279,7 @@ procedure TFRMWallet.UpdateConfigChanged(Sender:TObject); if (Not tsLogs.TabVisible) then begin FLog.OnNewLog := Nil; if PageControl.ActivePage = tsLogs then PageControl.ActivePage := tsMyAccounts; - end else FLog.OnNewLog := OnNewLog; + end else FLog.OnNewLog := FrameLogs.OnNewLog; if TSettings.SaveLogFiles then begin if TSettings.SaveDebugLogs then FLog.SaveTypes := CT_TLogTypes_ALL else FLog.SaveTypes := CT_TLogTypes_DEFAULT; From ef037fd3dd88bd8370294bcea32c49e364486e43 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 7 Dec 2021 01:05:46 +0100 Subject: [PATCH 36/44] FillAccountInformation mov-> TFRMWalletInformation --- src/gui-classic/UFRMWallet.pas | 78 +------------- src/gui-classic/UFRMWalletInformation.pas | 121 ++++++++++++++++++++++ src/pascalcoin_wallet_classic.dpr | 4 +- src/pascalcoin_wallet_classic.dproj | 2 + 4 files changed, 131 insertions(+), 74 deletions(-) create mode 100644 src/gui-classic/UFRMWalletInformation.pas diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 21ecb98da..5e30fd328 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -130,7 +130,7 @@ TFRMWallet = class(TForm) FBackgroundPanel : TPanel; FBackgroundLabel : TLabel; Procedure FinishedLoadingApp; - Procedure FillAccountInformation(Const Strings : TStrings; Const AccountNumber : Cardinal); +// Procedure FillAccountInformation(Const Strings : TStrings; Const AccountNumber : Cardinal); Procedure FillOperationInformation(Const Strings : TStrings; Const OperationResume : TOperationResume); Procedure InitMacOSMenu; protected @@ -218,7 +218,8 @@ implementation UFRMAskForAccount, UAbstractBTree, UEPasaDecoder, UFRMAbout, UFRMOperation, UFRMWalletKeys, UFRMPayloadDecoder, UFRMNodesIp, UFRMMemoText, - UCommon, UPCOrderedLists; + UCommon, UPCOrderedLists, + UFRMWalletInformation; Type @@ -696,76 +697,6 @@ procedure TFRMWallet.FinishedLoadingApp; end; end; -procedure TFRMWallet.FillAccountInformation(const Strings: TStrings; - const AccountNumber: Cardinal); -Var account : TAccount; - s : String; - LjsonObj : TPCJSONObject; -begin - if AccountNumber<0 then exit; - account := FNode.GetMempoolAccount(AccountNumber); - if Length(account.name)>0 then s:='Name: '+TEncoding.ANSI.GetString(account.name) - else s:=''; - Strings.Add(Format('Account: %s %s Type:%d',[TAccountComp.AccountNumberToAccountTxtNumber(AccountNumber),s,account.account_type])); - Strings.Add(''); - Strings.Add(Format('Current balance: %s',[TAccountComp.FormatMoney(account.balance)])); - Strings.Add(''); - Strings.Add(Format('Updated on block: %d (%d blocks ago)',[account.GetLastUpdatedBlock,FNode.Bank.BlocksCount-account.GetLastUpdatedBlock])); - Strings.Add(Format('Updated on block as active mode: %d (%d blocks ago)',[account.updated_on_block_active_mode,FNode.Bank.BlocksCount-account.updated_on_block_active_mode])); - Strings.Add(Format('Public key type: %s',[TAccountComp.GetECInfoTxt(account.accountInfo.accountKey.EC_OpenSSL_NID)])); - Strings.Add(Format('Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.accountKey)])); - if Length(account.account_data)>0 then - Strings.Add(Format('Account Data: %s',[account.account_data.ToHexaString])) - else Strings.Add(Format('Account Data: (No data)',[])); - Strings.Add(Format('Account Seal: %s',[account.account_seal.ToHexaString])); - if TAccountComp.IsAccountForSale(account.accountInfo) then begin - Strings.Add(''); - Strings.Add('** Account is for sale: **'); - Strings.Add(Format('Price: %s',[TAccountComp.FormatMoney(account.accountInfo.price)])); - Strings.Add(Format('Seller account (where to pay): %s',[TAccountComp.AccountNumberToAccountTxtNumber(account.accountInfo.account_to_pay)])); - if TAccountComp.IsAccountForPrivateSale(account.accountInfo) then begin - Strings.Add(''); - Strings.Add('** Private sale **'); - Strings.Add(Format('New Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.new_publicKey)])); - Strings.Add(''); - if TAccountComp.IsAccountLocked(account.accountInfo,FNode.Bank.BlocksCount) then begin - Strings.Add(Format('PURCHASE IS SECURE UNTIL BLOCK %d (current %d, remains %d)', - [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount,account.accountInfo.locked_until_block-FNode.Bank.BlocksCount])); - end else begin - Strings.Add(Format('PURCHASE IS NOT SECURE (Expired on block %d, current %d)', - [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount])); - end; - end; - end else if TAccountComp.IsAccountForSwap(account.accountInfo) then begin - Strings.Add(''); - if TAccountComp.IsAccountForAccountSwap(account.accountInfo) then begin - Strings.Add('** Account is for Atomic Account Swap: **'); - Strings.Add(Format('New Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.new_publicKey)])); - end else if TAccountComp.IsAccountForCoinSwap(account.accountInfo) then begin - Strings.Add('** Account is for Atomic Coin Swap: **'); - Strings.Add(Format('Amount to swap: %s',[TAccountComp.FormatMoney(account.accountInfo.price)])); - Strings.Add(Format('Counterparty account: %s',[TAccountComp.AccountNumberToAccountTxtNumber(account.accountInfo.account_to_pay)])); - end; - Strings.Add(Format('Public secret to find: %s',[account.accountInfo.hashed_secret.ToHexaString])); - Strings.Add(''); - if TAccountComp.IsAccountLocked(account.accountInfo,FNode.Bank.BlocksCount) then begin - Strings.Add(Format('SWAP IS SECURE UNTIL BLOCK %d (current %d, remains %d)', - [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount,account.accountInfo.locked_until_block-FNode.Bank.BlocksCount])); - end else begin - Strings.Add(Format('SWAP IS NOT SECURE (Expired on block %d, current %d)', - [account.accountInfo.locked_until_block,FNode.Bank.BlocksCount])); - end; - end; - LjsonObj := TPCJSONObject.Create; - Try - TPascalCoinJSONComp.FillAccountObject(account,LjsonObj); - Strings.Add('ACCOUNT JSON:'); - Strings.Add(LjsonObj.ToJSON(False)); - Finally - LjsonObj.Free; - end; - -end; procedure TFRMWallet.FillOperationInformation(const Strings: TStrings; const OperationResume: TOperationResume); @@ -934,6 +865,7 @@ procedure TFRMWallet.MiAccountInformationClick(Sender: TObject); i : Integer; opr : TOperationResume; begin + accn := -1; title := ''; strings := TStringList.Create; @@ -952,7 +884,7 @@ procedure TFRMWallet.MiAccountInformationClick(Sender: TObject); end else if PageControl.ActivePage=tsMyAccounts then begin accn := FrameAccountExplorer.AccountsGrid.AccountNumber(FrameAccountExplorer.dgAccounts.Row); if accn<0 then raise Exception.Create('Select an account'); - FillAccountInformation(strings,accn); + TFRMWalletInformation.FillAccountInformation(strings,accn); title := 'Account '+TAccountComp.AccountNumberToAccountTxtNumber(accn)+' info'; i := FOperationsAccountGrid.DrawGrid.Row; if (i>0) and (i<=FOperationsAccountGrid.OperationsResume.Count) then begin diff --git a/src/gui-classic/UFRMWalletInformation.pas b/src/gui-classic/UFRMWalletInformation.pas new file mode 100644 index 000000000..3562059b4 --- /dev/null +++ b/src/gui-classic/UFRMWalletInformation.pas @@ -0,0 +1,121 @@ +unit UFRMWalletInformation; + +interface + +uses + UFRMWallet, Classes; + +type + TFRMWalletInformation = class + private + + public + class procedure FillAccountInformation + ( + const Strings: TStrings; + const AccountNumber: Cardinal + ); + + end; + + + +implementation + +uses + UPCDataTypes, UJSONFunctions, SysUtils, UAccounts, UBaseTypes, URPC; + +class procedure TFRMWalletInformation.FillAccountInformation +( + const Strings: TStrings; + const AccountNumber: Cardinal +); +Var + account : TAccount; + s : String; + LjsonObj : TPCJSONObject; + vString : string; +begin + if AccountNumber<0 then exit; + account := FRMWallet.Node.GetMempoolAccount(AccountNumber); + if + Length(account.name)>0 then + s:='Name: '+TEncoding.ANSI.GetString(account.name) + else + s:=''; + Strings.Add(Format('Account: %s %s Type:%d',[TAccountComp.AccountNumberToAccountTxtNumber(AccountNumber),s,account.account_type])); + Strings.Add(''); + Strings.Add(Format('Current balance: %s',[TAccountComp.FormatMoney(account.balance)])); + Strings.Add(''); + Strings.Add(Format('Updated on block: %d (%d blocks ago)',[account.GetLastUpdatedBlock,FRMWallet.Node.Bank.BlocksCount-account.GetLastUpdatedBlock])); + Strings.Add(Format('Updated on block as active mode: %d (%d blocks ago)',[account.updated_on_block_active_mode,FRMWallet.Node.Bank.BlocksCount-account.updated_on_block_active_mode])); + Strings.Add(Format('Public key type: %s',[TAccountComp.GetECInfoTxt(account.accountInfo.accountKey.EC_OpenSSL_NID)])); + Strings.Add(Format('Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.accountKey)])); + + if Length(account.account_data)>0 then + begin + // Skybuck: string compilation fail: needs UBaseTypes otherwise don't compile. + vString := account.account_data.ToHexaString; + Strings.Add + ( + Format + ( + 'Account Data: %s', + [ + vString + ] + ) + ) + end else Strings.Add(Format('Account Data: (No data)',[])); + Strings.Add(Format('Account Seal: %s',[account.account_seal.ToHexaString])); + if TAccountComp.IsAccountForSale(account.accountInfo) then begin + Strings.Add(''); + Strings.Add('** Account is for sale: **'); + Strings.Add(Format('Price: %s',[TAccountComp.FormatMoney(account.accountInfo.price)])); + Strings.Add(Format('Seller account (where to pay): %s',[TAccountComp.AccountNumberToAccountTxtNumber(account.accountInfo.account_to_pay)])); + if TAccountComp.IsAccountForPrivateSale(account.accountInfo) then begin + Strings.Add(''); + Strings.Add('** Private sale **'); + Strings.Add(Format('New Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.new_publicKey)])); + Strings.Add(''); + if TAccountComp.IsAccountLocked(account.accountInfo,FRMWallet.Node.Bank.BlocksCount) then begin + Strings.Add(Format('PURCHASE IS SECURE UNTIL BLOCK %d (current %d, remains %d)', + [account.accountInfo.locked_until_block,FRMWallet.Node.Bank.BlocksCount,account.accountInfo.locked_until_block-FRMWallet.Node.Bank.BlocksCount])); + end else begin + Strings.Add(Format('PURCHASE IS NOT SECURE (Expired on block %d, current %d)', + [account.accountInfo.locked_until_block,FRMWallet.Node.Bank.BlocksCount])); + end; + end; + end else if TAccountComp.IsAccountForSwap(account.accountInfo) then begin + Strings.Add(''); + if TAccountComp.IsAccountForAccountSwap(account.accountInfo) then begin + Strings.Add('** Account is for Atomic Account Swap: **'); + Strings.Add(Format('New Base58 Public key: %s',[TAccountComp.AccountPublicKeyExport(account.accountInfo.new_publicKey)])); + end else if TAccountComp.IsAccountForCoinSwap(account.accountInfo) then begin + Strings.Add('** Account is for Atomic Coin Swap: **'); + Strings.Add(Format('Amount to swap: %s',[TAccountComp.FormatMoney(account.accountInfo.price)])); + Strings.Add(Format('Counterparty account: %s',[TAccountComp.AccountNumberToAccountTxtNumber(account.accountInfo.account_to_pay)])); + end; + Strings.Add(Format('Public secret to find: %s',[account.accountInfo.hashed_secret.ToHexaString])); + Strings.Add(''); + if TAccountComp.IsAccountLocked(account.accountInfo,FRMWallet.Node.Bank.BlocksCount) then begin + Strings.Add(Format('SWAP IS SECURE UNTIL BLOCK %d (current %d, remains %d)', + [account.accountInfo.locked_until_block,FRMWallet.Node.Bank.BlocksCount,account.accountInfo.locked_until_block-FRMWallet.Node.Bank.BlocksCount])); + end else begin + Strings.Add(Format('SWAP IS NOT SECURE (Expired on block %d, current %d)', + [account.accountInfo.locked_until_block,FRMWallet.Node.Bank.BlocksCount])); + end; + end; + LjsonObj := TPCJSONObject.Create; + Try + TPascalCoinJSONComp.FillAccountObject(account,LjsonObj); + Strings.Add('ACCOUNT JSON:'); + Strings.Add(LjsonObj.ToJSON(False)); + Finally + LjsonObj.Free; + end; + +end; + + +end. diff --git a/src/pascalcoin_wallet_classic.dpr b/src/pascalcoin_wallet_classic.dpr index fa28b4e31..e11092764 100644 --- a/src/pascalcoin_wallet_classic.dpr +++ b/src/pascalcoin_wallet_classic.dpr @@ -99,7 +99,9 @@ uses UnitReIntegrate in 'gui-classic\UnitReIntegrate.pas', UFRMTestWallet in 'gui-classic\UFRMTestWallet.pas' {FRMTestWallet}, UFrameInfo in 'gui-classic\Frames\UFrameInfo.pas' {FrameInfo: TFrame}, - UFRMWalletUserMessages in 'gui-classic\UFRMWalletUserMessages.pas'; + UFRMWalletUserMessages in 'gui-classic\UFRMWalletUserMessages.pas', + UFRMWalletInformation in 'gui-classic\UFRMWalletInformation.pas', + UJSONFunctions in 'libraries\pascalcoin\UJSONFunctions.pas'; {$R *.res} diff --git a/src/pascalcoin_wallet_classic.dproj b/src/pascalcoin_wallet_classic.dproj index 7c4456ee4..30056cc57 100644 --- a/src/pascalcoin_wallet_classic.dproj +++ b/src/pascalcoin_wallet_classic.dproj @@ -280,6 +280,8 @@ TFrame + + Cfg_2 From afc230439e0cbab0c0697e8bf823da69ab74fdfe Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 7 Dec 2021 01:18:33 +0100 Subject: [PATCH 37/44] FSelectedAccountsGrid mov-> TFrameAccountExplorer --- .../Frames/UFrameAccountExplorer.pas | 39 +++++++++++------ src/gui-classic/UFRMWallet.pas | 42 +++---------------- 2 files changed, 32 insertions(+), 49 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 34a4a4a6e..9b3e8d24a 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -80,6 +80,8 @@ TFrameAccountExplorer = class(TFrame) private { Private declarations } FAccountsGrid : TAccountsGrid; + FSelectedAccountsGrid : TAccountsGrid; + FMinAccountBalance : Int64; FMaxAccountBalance : Int64; @@ -87,6 +89,7 @@ TFrameAccountExplorer = class(TFrame) FLastAccountsGridInvalidateTC : TTickCount; procedure OnAccountsGridUpdatedData(Sender : TObject); + Procedure OnSelectedAccountsGridUpdated(Sender : TObject); public { Public declarations } @@ -96,6 +99,7 @@ TFrameAccountExplorer = class(TFrame) procedure UpdatePrivateKeys; property AccountsGrid : TAccountsGrid read FAccountsGrid; + property SelectedAccountsGrid : TAccountsGrid read FSelectedAccountsGrid; constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -121,6 +125,12 @@ procedure TFrameAccountExplorer.OnAccountsGridUpdatedData(Sender: TObject); end; end; +procedure TFrameAccountExplorer.OnSelectedAccountsGridUpdated(Sender: TObject); +begin + lblSelectedAccountsCount.Caption := Inttostr(FSelectedAccountsGrid.AccountsCount); + lblSelectedAccountsBalance.Caption := TAccountComp.FormatMoney( FSelectedAccountsGrid.AccountsBalance ); +end; + constructor TFrameAccountExplorer.Create(AOwner: TComponent); begin inherited Create( AOwner ); @@ -136,6 +146,11 @@ constructor TFrameAccountExplorer.Create(AOwner: TComponent); FAccountsGrid.OnAccountsGridUpdatedData := OnAccountsGridUpdatedData; FAccountsGrid.AccountsGridDatasource := acds_Node; + FSelectedAccountsGrid := TAccountsGrid.Create(Self); + FSelectedAccountsGrid.AccountsGridDatasource := acds_InternalList; + FSelectedAccountsGrid.DrawGrid := dgSelectedAccounts; + FSelectedAccountsGrid.OnUpdated := OnSelectedAccountsGridUpdated; + // cannot set properties here that interact with FRMWallet because @@ -178,14 +193,14 @@ procedure TFrameAccountExplorer.bbSelectedAccountsOperationClick(Sender: TObject var l : TOrderedCardinalList; begin FRMWallet.CheckIsReady; - if FRMWallet.SelectedAccountsGrid.AccountsCount<=0 then raise Exception.Create('Must select at least 1 account'); + if FSelectedAccountsGrid.AccountsCount<=0 then raise Exception.Create('Must select at least 1 account'); With TFRMOperation.Create(Self) do Try - l := FRMWallet.SelectedAccountsGrid.LockAccountsList; + l := FSelectedAccountsGrid.LockAccountsList; try SenderAccounts.CopyFrom(l); finally - FRMWallet.SelectedAccountsGrid.UnlockAccountsList; + FSelectedAccountsGrid.UnlockAccountsList; end; DefaultFee := TSettings.DefaultFee; WalletKeys := FRMWallet.WalletKeys; @@ -291,14 +306,14 @@ procedure TFrameAccountExplorer.sbSelectedAccountsAddAllClick(Sender: TObject); begin lsource := FAccountsGrid.LockAccountsList; Try - ltarget := FRMWallet.SelectedAccountsGrid.LockAccountsList; + ltarget := FSelectedAccountsGrid.LockAccountsList; Try for i := 0 to lsource.Count-1 do begin if FRMWallet.WalletKeys.IndexOfAccountKey(FRMWallet.Node.Bank.SafeBox.Account(lsource.Get(i)).accountInfo.accountKey)<0 then raise Exception.Create(Format('You cannot operate with account %d because private key not found in your wallet',[lsource.Get(i)])); ltarget.Add(lsource.Get(i)); end; Finally - FRMWallet.SelectedAccountsGrid.UnlockAccountsList; + FSelectedAccountsGrid.UnlockAccountsList; End; Finally FAccountsGrid.UnlockAccountsList; @@ -316,7 +331,7 @@ procedure TFrameAccountExplorer.sbSelectedAccountsAddClick(Sender: TObject); raise Exception.Create(Format('You cannot add %s account because private key not found in your wallet.'#10+#10+'You''re not the owner!', [TAccountComp.AccountNumberToAccountTxtNumber(an)])); // Add - l := FRMWallet.SelectedAccountsGrid.LockAccountsList; + l := FSelectedAccountsGrid.LockAccountsList; selected := TOrderedCardinalList.Create; Try FAccountsGrid.SelectedAccounts(selected); @@ -325,18 +340,18 @@ procedure TFrameAccountExplorer.sbSelectedAccountsAddClick(Sender: TObject); end; Finally selected.Free; - FRMWallet.SelectedAccountsGrid.UnlockAccountsList; + FSelectedAccountsGrid.UnlockAccountsList; End; end; procedure TFrameAccountExplorer.sbSelectedAccountsDelAllClick(Sender: TObject); Var l : TOrderedCardinalList; begin - l := FRMWallet.SelectedAccountsGrid.LockAccountsList; + l := FSelectedAccountsGrid.LockAccountsList; try l.Clear; finally - FRMWallet.SelectedAccountsGrid.UnlockAccountsList; + FSelectedAccountsGrid.UnlockAccountsList; end; end; @@ -344,12 +359,12 @@ procedure TFrameAccountExplorer.sbSelectedAccountsDelClick(Sender: TObject); Var an : Int64; l : TOrderedCardinalList; begin - l := FRMWallet.SelectedAccountsGrid.LockAccountsList; + l := FSelectedAccountsGrid.LockAccountsList; try - an := FRMWallet.SelectedAccountsGrid.AccountNumber(dgSelectedAccounts.Row); + an := FSelectedAccountsGrid.AccountNumber(dgSelectedAccounts.Row); if an>=0 then l.Remove(an); finally - FRMWallet.SelectedAccountsGrid.UnlockAccountsList; + FSelectedAccountsGrid.UnlockAccountsList; end; end; diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 5e30fd328..800aee89b 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -140,7 +140,6 @@ TFRMWallet = class(TForm) FWalletKeys : TWalletKeysExt; FLog : TLog; FNodeNotifyEvents : TNodeNotifyEvents; - FSelectedAccountsGrid : TAccountsGrid; FOperationsAccountGrid : TOperationsGrid; FPendingOperationsGrid : TOperationsGrid; FOperationsExplorerGrid : TOperationsGrid; @@ -157,7 +156,6 @@ TFRMWallet = class(TForm) Procedure OnNetStatisticsChanged(Sender : TObject); procedure OnWalletChanged(Sender : TObject); Procedure OnNodeKeysActivity(Sender : TObject); - Procedure OnSelectedAccountsGridUpdated(Sender : TObject); Procedure OnMiningServerNewBlockFound(Sender : TObject); Procedure UpdateConnectionStatus; Procedure UpdateConfigChanged(Sender:TObject); @@ -186,7 +184,7 @@ TFRMWallet = class(TForm) property OperationsExplorerGrid : TOperationsGrid read FOperationsExplorerGrid; Property BlockChainGrid : TBlockChainGrid read FBlockChainGrid; - Property SelectedAccountsGrid : TAccountsGrid read FSelectedAccountsGrid; +// Property SelectedAccountsGrid : TAccountsGrid read FSelectedAccountsGrid; Property PoolMiningServer : TPoolMiningServer read FPoolMiningServer; @@ -345,7 +343,7 @@ procedure TFRMWallet.Activate; TFileStorage(FNode.Bank.Storage).DatabaseFolder := TNode.GetPascalCoinDataFolder+PathDelim+'Data'; TFileStorage(FNode.Bank.Storage).Initialize; // Init Grid - FSelectedAccountsGrid.Node := FNode; + FrameAccountExplorer.SelectedAccountsGrid.Node := FNode; FWalletKeys.OnChanged.Add( OnWalletChanged ); FrameAccountExplorer.AccountsGrid.Node := FNode; FOperationsAccountGrid.Node := FNode; @@ -474,10 +472,6 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FNodeNotifyEvents.OnNodeMessageEvent := FrameMessages.OnNodeMessageEvent; FNodeNotifyEvents.OnKeyActivity := OnNodeKeysActivity; - FSelectedAccountsGrid := TAccountsGrid.Create(Self); - FSelectedAccountsGrid.AccountsGridDatasource := acds_InternalList; - FSelectedAccountsGrid.DrawGrid := FrameAccountExplorer.dgSelectedAccounts; - FSelectedAccountsGrid.OnUpdated := OnSelectedAccountsGridUpdated; FOperationsAccountGrid := TOperationsGrid.Create(Self); FOperationsAccountGrid.DrawGrid := FrameAccountExplorer.dgAccountOperations; FOperationsAccountGrid.MustShowAlwaysAnAccount := true; @@ -566,7 +560,7 @@ procedure TFRMWallet.FormDestroy(Sender: TObject); FOperationsExplorerGrid.Node := Nil; FPendingOperationsGrid.Node := Nil; FrameAccountExplorer.AccountsGrid.Node := Nil; - FSelectedAccountsGrid.Node := Nil; + FrameAccountExplorer.SelectedAccountsGrid.Node := Nil; TNetData.NetData.OnReceivedHelloMessage := Nil; TNetData.NetData.OnStatisticsChanged := Nil; TNetData.NetData.OnNetConnectionsUpdated := Nil; @@ -1074,18 +1068,11 @@ procedure TFRMWallet.MiRemoveaccountfromselectedClick(Sender: TObject); FrameAccountExplorer.sbSelectedAccountsDelClick(Sender); end; - - procedure TFRMWallet.OnMiningServerNewBlockFound(Sender: TObject); begin FPoolMiningServer.MinerAccountKey := GetAccountKeyForMiner; end; - - - - - procedure TFRMWallet.OnNetStatisticsChanged(Sender: TObject); Var NS : TNetStatistics; begin @@ -1117,9 +1104,6 @@ procedure TFRMWallet.OnNewAccount(Sender: TObject); end; end; - - - procedure TFRMWallet.OnNodeKeysActivity(Sender: TObject); begin DoUpdateAccounts; @@ -1143,12 +1127,6 @@ procedure TFRMWallet.OnReceivedHelloMessage(Sender: TObject); TNode.Node.PeerCache := s; end; -procedure TFRMWallet.OnSelectedAccountsGridUpdated(Sender: TObject); -begin - FrameAccountExplorer.lblSelectedAccountsCount.Caption := Inttostr(FSelectedAccountsGrid.AccountsCount); - FrameAccountExplorer.lblSelectedAccountsBalance.Caption := TAccountComp.FormatMoney( FSelectedAccountsGrid.AccountsBalance ); -end; - procedure TFRMWallet.OnWalletChanged(Sender: TObject); begin if FMustProcessWalletChanged then exit; @@ -1162,10 +1140,10 @@ procedure TFRMWallet.PageControlChange(Sender: TObject); if PageControl.ActivePage=tsMyAccounts then begin FrameAccountExplorer.AccountsGrid.Node := FNode; MiDecodePayload.Enabled := true; - FSelectedAccountsGrid.Node := FNode; + FrameAccountExplorer.SelectedAccountsGrid.Node := FNode; end else begin FrameAccountExplorer.AccountsGrid.Node := Nil; - FSelectedAccountsGrid.Node := Nil; + FrameAccountExplorer.SelectedAccountsGrid.Node := Nil; end; if PageControl.ActivePage=tsPendingOperations then begin FPendingOperationsGrid.Node := FNode; @@ -1198,10 +1176,6 @@ procedure TFRMWallet.TimerUpdateStatusTimer(Sender: TObject); End; end; - - - - procedure TFRMWallet.UpdateConfigChanged(Sender:TObject); Var wa : Boolean; i : Integer; @@ -1275,8 +1249,6 @@ procedure TFRMWallet.UpdateConnectionStatus; end; end; - - procedure TFRMWallet.UpdateOperations; Var accn : Int64; begin @@ -1284,10 +1256,6 @@ procedure TFRMWallet.UpdateOperations; FOperationsAccountGrid.AccountNumber := accn; end; - - - - initialization FRMWallet := Nil; end. From 7003f371d9e8aa6612ab3e1f1022964ed32905ac Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 7 Dec 2021 01:23:35 +0100 Subject: [PATCH 38/44] DoUpdateAccountsFilter moved to private section --- src/gui-classic/Frames/UFrameAccountExplorer.pas | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 9b3e8d24a..96b21fdc8 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -88,12 +88,13 @@ TFrameAccountExplorer = class(TFrame) FLastAccountsGridInvalidateTC : TTickCount; + function DoUpdateAccountsFilter: Boolean; + procedure OnAccountsGridUpdatedData(Sender : TObject); Procedure OnSelectedAccountsGridUpdated(Sender : TObject); public { Public declarations } - function DoUpdateAccountsFilter: Boolean; procedure UpdateAccounts(RefreshData : Boolean); procedure UpdatePrivateKeys; From 86e0e7cebe21d2eda079c21ff172e6a3446e4fad Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 7 Dec 2021 01:29:01 +0100 Subject: [PATCH 39/44] PageControlChange space + begin/end for robustness --- src/gui-classic/UFRMWallet.pas | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 800aee89b..0d9968d9c 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -1137,6 +1137,7 @@ procedure TFRMWallet.OnWalletChanged(Sender: TObject); procedure TFRMWallet.PageControlChange(Sender: TObject); begin MiDecodePayload.Enabled := false; + if PageControl.ActivePage=tsMyAccounts then begin FrameAccountExplorer.AccountsGrid.Node := FNode; MiDecodePayload.Enabled := true; @@ -1145,16 +1146,28 @@ procedure TFRMWallet.PageControlChange(Sender: TObject); FrameAccountExplorer.AccountsGrid.Node := Nil; FrameAccountExplorer.SelectedAccountsGrid.Node := Nil; end; + if PageControl.ActivePage=tsPendingOperations then begin FPendingOperationsGrid.Node := FNode; MiDecodePayload.Enabled := true; - end else FPendingOperationsGrid.Node := Nil; - if PageControl.ActivePage=tsBlockChain then FBlockChainGrid.Node := FNode - else FBlockChainGrid.Node := Nil; + end else begin + FPendingOperationsGrid.Node := Nil; + end; + + if PageControl.ActivePage=tsBlockChain then + begin + FBlockChainGrid.Node := FNode; + end else begin + FBlockChainGrid.Node := Nil; + end; + if PageControl.ActivePage=tsOperations then begin FOperationsExplorerGrid.Node := FNode; MiDecodePayload.Enabled := true; - end else FOperationsExplorerGrid.Node := Nil; + end else begin + FOperationsExplorerGrid.Node := Nil; + end; + if PageControl.ActivePage=tsMessages then begin FrameMessages.UpdateAvailableConnections; FrameMessages.MessagesUnreadCount := 0; From b55ef65e4ff5ac714bf64299260e1e25bcbd7fec Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 7 Dec 2021 01:33:06 +0100 Subject: [PATCH 40/44] Some white space/empty lines removed --- src/gui-classic/UFRMWallet.pas | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 0d9968d9c..e9c6bdbb9 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -220,7 +220,6 @@ implementation UFRMWalletInformation; Type - { TThreadActivate } TThreadActivate = Class(TPCThread) @@ -303,7 +302,6 @@ procedure TFRMWallet.lblReceivedMessagesClick(Sender: TObject); PageControl.ActivePage := tsMessages; end; - procedure TFRMWallet.Activate; Var ips : AnsiString; nsarr : TNodeServerAddressArray; @@ -617,8 +615,6 @@ procedure TFRMWallet.CheckIsReady; end; end; - - procedure TFRMWallet.CM_WalletChanged(var Msg: TMessage); begin FrameAccountExplorer.UpdatePrivateKeys; @@ -691,7 +687,6 @@ procedure TFRMWallet.FinishedLoadingApp; end; end; - procedure TFRMWallet.FillOperationInformation(const Strings: TStrings; const OperationResume: TOperationResume); var i : Integer; @@ -750,10 +745,6 @@ procedure TFRMWallet.FillOperationInformation(const Strings: TStrings; end; end; - - - - procedure TFRMWallet.MiOperationsExplorerClick(Sender: TObject); begin With TFRMOperationsExplorer.Create(Self) do @@ -778,7 +769,6 @@ procedure TFRMWallet.MiRPCCallsClick(Sender: TObject); end; end; - function TFRMWallet.GetAccountKeyForMiner: TAccountKey; Var PK : TECPrivateKey; i : Integer; @@ -839,7 +829,6 @@ procedure TFRMWallet.IPnodes1Click(Sender: TObject); End; end; - procedure TFRMWallet.miAboutPascalCoinClick(Sender: TObject); begin With TFRMAbout.Create(Self) do @@ -859,7 +848,6 @@ procedure TFRMWallet.MiAccountInformationClick(Sender: TObject); i : Integer; opr : TOperationResume; begin - accn := -1; title := ''; strings := TStringList.Create; @@ -935,8 +923,6 @@ procedure TFRMWallet.MiDecodePayloadClick(Sender: TObject); end; end; - - procedure TFRMWallet.MiFindaccountClick(Sender: TObject); begin PageControl.ActivePage := tsMyAccounts; From d61475e977546b235a9acc7378d600722efb2a5a Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 7 Dec 2021 01:44:27 +0100 Subject: [PATCH 41/44] FillOperationInformation -> TFRMWalletInformation --- src/gui-classic/UFRMWallet.dfm | 20 ++++--- src/gui-classic/UFRMWallet.pas | 61 +------------------ src/gui-classic/UFRMWalletInformation.pas | 73 +++++++++++++++++++++-- src/pascalcoin_wallet_classic.dpr | 3 +- src/pascalcoin_wallet_classic.dproj | 1 + 5 files changed, 84 insertions(+), 74 deletions(-) diff --git a/src/gui-classic/UFRMWallet.dfm b/src/gui-classic/UFRMWallet.dfm index b0722de94..fc3981224 100644 --- a/src/gui-classic/UFRMWallet.dfm +++ b/src/gui-classic/UFRMWallet.dfm @@ -37,6 +37,8 @@ object FRMWallet: TFRMWallet ExplicitWidth = 865 inherited Panel1: TPanel inherited Image1: TImage + Width = 71 + Height = 104 ExplicitWidth = 75 ExplicitHeight = 104 end @@ -175,11 +177,11 @@ object FRMWallet: TFRMWallet Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 421 + ExplicitWidth = 296 + ExplicitHeight = 42 inherited Panel2: TPanel Width = 857 - ExplicitWidth = 857 + ExplicitWidth = 296 end inherited dgBlockChainExplorer: TDrawGrid Width = 857 @@ -317,8 +319,8 @@ object FRMWallet: TFRMWallet Height = 421 Align = alClient TabOrder = 0 - ExplicitWidth = 857 - ExplicitHeight = 421 + ExplicitWidth = 296 + ExplicitHeight = 42 inherited Splitter1: TSplitter Top = 168 Width = 857 @@ -328,8 +330,8 @@ object FRMWallet: TFRMWallet inherited PanelBottom: TPanel Top = 171 Width = 857 - ExplicitTop = 171 - ExplicitWidth = 857 + ExplicitTop = -208 + ExplicitWidth = 296 inherited Panel1: TPanel Width = 857 ExplicitWidth = 857 @@ -342,7 +344,7 @@ object FRMWallet: TFRMWallet inherited PanelTop: TPanel Width = 857 Height = 168 - ExplicitWidth = 857 + ExplicitWidth = 296 ExplicitHeight = 168 inherited Splitter2: TSplitter Height = 168 @@ -359,7 +361,7 @@ object FRMWallet: TFRMWallet inherited PanelRight: TPanel Width = 566 Height = 168 - ExplicitWidth = 566 + ExplicitWidth = 5 ExplicitHeight = 168 inherited memoMessageToSend: TMemo Width = 566 diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index e9c6bdbb9..0af36bbc0 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -131,7 +131,6 @@ TFRMWallet = class(TForm) FBackgroundLabel : TLabel; Procedure FinishedLoadingApp; // Procedure FillAccountInformation(Const Strings : TStrings; Const AccountNumber : Cardinal); - Procedure FillOperationInformation(Const Strings : TStrings; Const OperationResume : TOperationResume); Procedure InitMacOSMenu; protected { Private declarations } @@ -687,64 +686,6 @@ procedure TFRMWallet.FinishedLoadingApp; end; end; -procedure TFRMWallet.FillOperationInformation(const Strings: TStrings; - const OperationResume: TOperationResume); -var i : Integer; - jsonObj : TPCJSONObject; - LEPASA : TEPasa; -begin - If (not OperationResume.valid) then exit; - If OperationResume.Block=0) then begin - Strings.Add(Format('Block: %d/%d',[OperationResume.Block,OperationResume.NOpInsideBlock])) - end else begin - Strings.Add(Format('Block: %d',[OperationResume.Block])) - end - else Strings.Add('** Pending operation not included on blockchain **'); - Strings.Add(Format('%s',[OperationResume.OperationTxt])); - If (OperationResume.isMultiOperation) then begin - Strings.Add('Multioperation:'); - For i := 0 to High(OperationResume.Senders) do begin - Strings.Add(Format(' Sender (%d/%d): %s %s PASC Payload(%d):%s',[i+1,length(OperationResume.Senders),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Senders[i].Account),TAccountComp.FormatMoney(OperationResume.Senders[i].Amount),OperationResume.Senders[i].Payload.payload_type,OperationResume.Senders[i].Payload.payload_raw.ToHexaString])); - end; - For i := 0 to High(OperationResume.Receivers) do begin - Strings.Add(Format(' Receiver (%d/%d): %s %s PASC Payload(%d):%s',[i+1,length(OperationResume.Receivers),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Receivers[i].Account),TAccountComp.FormatMoney(OperationResume.Receivers[i].Amount),OperationResume.Receivers[i].Payload.payload_type,OperationResume.Receivers[i].Payload.payload_raw.ToHexaString])); - end; - For i := 0 to High(OperationResume.Changers) do begin - Strings.Add(Format(' Change info (%d/%d): %s [%s]',[i+1,length(OperationResume.Changers),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Changers[i].Account),TOpMultiOperation.OpChangeAccountInfoTypesToText(OperationResume.Changers[i].Changes_type)])); - end; - - end; - Strings.Add(Format('OpType:%d Subtype:%d',[OperationResume.OpType,OperationResume.OpSubtype])); - Strings.Add(Format('Operation Hash (ophash): %s',[TCrypto.ToHexaString(OperationResume.OperationHash)])); - If (Length(OperationResume.OperationHash_OLD)>0) then begin - Strings.Add(Format('Old Operation Hash (old_ophash): %s',[TCrypto.ToHexaString(OperationResume.OperationHash_OLD)])); - end; - if TEPasaDecoder.TryDecodeEPASA(OperationResume.DestAccount,OperationResume.OriginalPayload,FNode,FWalletKeys,Nil,LEPASA) then begin - Strings.Add('EPASA: '+LEPASA.ToString); - end else Strings.Add('No EPASA format'); - Strings.Add(Format('Payload type:%s length:%d',['0x'+IntToHex(OperationResume.OriginalPayload.payload_type,2), length(OperationResume.OriginalPayload.payload_raw)])); - if (Length(OperationResume.OriginalPayload.payload_raw)>0) then begin - If OperationResume.PrintablePayload<>'' then begin - Strings.Add(Format('Payload (human): %s',[OperationResume.PrintablePayload])); - end; - Strings.Add(Format('Payload (Hexadecimal): %s',[TCrypto.ToHexaString(OperationResume.OriginalPayload.payload_raw)])); - end; - If OperationResume.Balance>=0 then begin - Strings.Add(Format('Final balance: %s',[TAccountComp.FormatMoney(OperationResume.Balance)])); - end; - jsonObj := TPCJSONObject.Create; - Try - TPascalCoinJSONComp.FillOperationObject(OperationResume,FNode.Bank.BlocksCount, - FNode,FWalletKeys,Nil, - jsonObj); - Strings.Add('OPERATION JSON:'); - Strings.Add(jsonObj.ToJSON(False)); - Finally - jsonObj.Free; - end; -end; - procedure TFRMWallet.MiOperationsExplorerClick(Sender: TObject); begin With TFRMOperationsExplorer.Create(Self) do @@ -877,7 +818,7 @@ procedure TFRMWallet.MiAccountInformationClick(Sender: TObject); if accn>=0 then strings.Add('') else title := 'Operation info'; strings.Add('Operation info:'); - FillOperationInformation(strings,opr); + TFRMWalletInformation.FillOperationInformation(strings,opr); end else if accn<0 then Raise Exception.Create('No info available'); F := TFRMMemoText.Create(Self); Try diff --git a/src/gui-classic/UFRMWalletInformation.pas b/src/gui-classic/UFRMWalletInformation.pas index 3562059b4..214ea5050 100644 --- a/src/gui-classic/UFRMWalletInformation.pas +++ b/src/gui-classic/UFRMWalletInformation.pas @@ -3,7 +3,7 @@ interface uses - UFRMWallet, Classes; + UFRMWallet, Classes, UBlockChain; type TFRMWalletInformation = class @@ -16,14 +16,18 @@ TFRMWalletInformation = class const AccountNumber: Cardinal ); + class procedure FillOperationInformation + ( + const Strings: TStrings; + const OperationResume: TOperationResume + ); end; - - implementation uses - UPCDataTypes, UJSONFunctions, SysUtils, UAccounts, UBaseTypes, URPC; + UPCDataTypes, UJSONFunctions, SysUtils, UAccounts, UBaseTypes, URPC, + UEPasa, UTxMultiOperation, UCrypto, UEPasaDecoder; class procedure TFRMWalletInformation.FillAccountInformation ( @@ -117,5 +121,66 @@ class procedure TFRMWalletInformation.FillAccountInformation end; +class procedure TFRMWalletInformation.FillOperationInformation +( + const Strings: TStrings; + const OperationResume: TOperationResume +); +var i : Integer; + jsonObj : TPCJSONObject; + LEPASA : TEPasa; +begin + If (not OperationResume.valid) then exit; + If OperationResume.Block=0) then begin + Strings.Add(Format('Block: %d/%d',[OperationResume.Block,OperationResume.NOpInsideBlock])) + end else begin + Strings.Add(Format('Block: %d',[OperationResume.Block])) + end + else Strings.Add('** Pending operation not included on blockchain **'); + Strings.Add(Format('%s',[OperationResume.OperationTxt])); + If (OperationResume.isMultiOperation) then begin + Strings.Add('Multioperation:'); + For i := 0 to High(OperationResume.Senders) do begin + Strings.Add(Format(' Sender (%d/%d): %s %s PASC Payload(%d):%s',[i+1,length(OperationResume.Senders),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Senders[i].Account),TAccountComp.FormatMoney(OperationResume.Senders[i].Amount),OperationResume.Senders[i].Payload.payload_type,OperationResume.Senders[i].Payload.payload_raw.ToHexaString])); + end; + For i := 0 to High(OperationResume.Receivers) do begin + Strings.Add(Format(' Receiver (%d/%d): %s %s PASC Payload(%d):%s',[i+1,length(OperationResume.Receivers),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Receivers[i].Account),TAccountComp.FormatMoney(OperationResume.Receivers[i].Amount),OperationResume.Receivers[i].Payload.payload_type,OperationResume.Receivers[i].Payload.payload_raw.ToHexaString])); + end; + For i := 0 to High(OperationResume.Changers) do begin + Strings.Add(Format(' Change info (%d/%d): %s [%s]',[i+1,length(OperationResume.Changers),TAccountComp.AccountNumberToAccountTxtNumber(OperationResume.Changers[i].Account),TOpMultiOperation.OpChangeAccountInfoTypesToText(OperationResume.Changers[i].Changes_type)])); + end; + + end; + Strings.Add(Format('OpType:%d Subtype:%d',[OperationResume.OpType,OperationResume.OpSubtype])); + Strings.Add(Format('Operation Hash (ophash): %s',[TCrypto.ToHexaString(OperationResume.OperationHash)])); + If (Length(OperationResume.OperationHash_OLD)>0) then begin + Strings.Add(Format('Old Operation Hash (old_ophash): %s',[TCrypto.ToHexaString(OperationResume.OperationHash_OLD)])); + end; + if TEPasaDecoder.TryDecodeEPASA(OperationResume.DestAccount,OperationResume.OriginalPayload,FRMWallet.Node,FRMWallet.WalletKeys,Nil,LEPASA) then begin + Strings.Add('EPASA: '+LEPASA.ToString); + end else Strings.Add('No EPASA format'); + Strings.Add(Format('Payload type:%s length:%d',['0x'+IntToHex(OperationResume.OriginalPayload.payload_type,2), length(OperationResume.OriginalPayload.payload_raw)])); + if (Length(OperationResume.OriginalPayload.payload_raw)>0) then begin + If OperationResume.PrintablePayload<>'' then begin + Strings.Add(Format('Payload (human): %s',[OperationResume.PrintablePayload])); + end; + Strings.Add(Format('Payload (Hexadecimal): %s',[TCrypto.ToHexaString(OperationResume.OriginalPayload.payload_raw)])); + end; + If OperationResume.Balance>=0 then begin + Strings.Add(Format('Final balance: %s',[TAccountComp.FormatMoney(OperationResume.Balance)])); + end; + jsonObj := TPCJSONObject.Create; + Try + TPascalCoinJSONComp.FillOperationObject(OperationResume,FRMWallet.Node.Bank.BlocksCount, + FRMWallet.Node,FRMWallet.WalletKeys,Nil, + jsonObj); + Strings.Add('OPERATION JSON:'); + Strings.Add(jsonObj.ToJSON(False)); + Finally + jsonObj.Free; + end; +end; + end. diff --git a/src/pascalcoin_wallet_classic.dpr b/src/pascalcoin_wallet_classic.dpr index e11092764..cc3d1421b 100644 --- a/src/pascalcoin_wallet_classic.dpr +++ b/src/pascalcoin_wallet_classic.dpr @@ -101,7 +101,8 @@ uses UFrameInfo in 'gui-classic\Frames\UFrameInfo.pas' {FrameInfo: TFrame}, UFRMWalletUserMessages in 'gui-classic\UFRMWalletUserMessages.pas', UFRMWalletInformation in 'gui-classic\UFRMWalletInformation.pas', - UJSONFunctions in 'libraries\pascalcoin\UJSONFunctions.pas'; + UJSONFunctions in 'libraries\pascalcoin\UJSONFunctions.pas', + UEPasaDecoder in 'core\UEPasaDecoder.pas'; {$R *.res} diff --git a/src/pascalcoin_wallet_classic.dproj b/src/pascalcoin_wallet_classic.dproj index 30056cc57..a172e9dab 100644 --- a/src/pascalcoin_wallet_classic.dproj +++ b/src/pascalcoin_wallet_classic.dproj @@ -282,6 +282,7 @@ + Cfg_2 From c1750c8a2f1739a1589d873d6606264ca28dede8 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Tue, 7 Dec 2021 02:51:45 +0100 Subject: [PATCH 42/44] TNetData removed from TFrameNodeStats.Create Calling property TNetData.NetData is unsafe. Which calls TNetData.Create Which calls procedure TECPrivateKey.GenerateRandomPrivateKey(EC_OpenSSL_NID : Word); Which relies on UCrypto which is not yet initialized, Which leads to access violation because UCrypto API routine pointers not loaded. TNetData code moved back to procedure TFRMWallet.FinishedLoadingApp; --- src/gui-classic/Frames/UFrameNodeStats.pas | 13 +++++++++---- src/gui-classic/UFRMWallet.pas | 5 +++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/gui-classic/Frames/UFrameNodeStats.pas b/src/gui-classic/Frames/UFrameNodeStats.pas index 98fc6f31d..fbb44231d 100644 --- a/src/gui-classic/Frames/UFrameNodeStats.pas +++ b/src/gui-classic/Frames/UFrameNodeStats.pas @@ -25,16 +25,16 @@ TFrameNodeStats = class(TFrame) FMustProcessNetConnectionUpdated : Boolean; - procedure OnNetConnectionsUpdated(Sender : TObject); - procedure OnNetBlackListUpdated(Sender : TObject); - procedure OnNetNodeServersUpdated(Sender: TObject); - procedure CM_NetConnectionUpdated(var Msg: TMessage); message CM_PC_NetConnectionUpdated; public { Public declarations } + procedure OnNetConnectionsUpdated(Sender : TObject); + procedure OnNetBlackListUpdated(Sender : TObject); + procedure OnNetNodeServersUpdated(Sender: TObject); + constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; @@ -63,9 +63,14 @@ constructor TFrameNodeStats.Create(AOwner: TComponent); FMustProcessNetConnectionUpdated := false; + // Skybuck: + // unsafe, must be called by FRMWallet first, otherwise UCrypto not initialised. + // or initialize UCrypto before FRMWallet is create. +{ TNetData.NetData.OnNetConnectionsUpdated := OnNetConnectionsUpdated; TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; TNetData.NetData.OnNodeServersUpdated := OnNetNodeServersUpdated; +} end; destructor TFrameNodeStats.Destroy; diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index 0af36bbc0..eb32935c4 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -634,8 +634,9 @@ procedure TFRMWallet.FinishedLoadingApp; // Init TNetData.NetData.OnReceivedHelloMessage := OnReceivedHelloMessage; TNetData.NetData.OnStatisticsChanged := OnNetStatisticsChanged; -// TNetData.NetData.OnNodeServersUpdated := OnNetNodeServersUpdated; // try to move to FrameNodeStats -// TNetData.NetData.OnBlackListUpdated := OnNetBlackListUpdated; // try to move to FrameNodeStats + TNetData.NetData.OnNetConnectionsUpdated := FrameNodeStats.OnNetConnectionsUpdated; + TNetData.NetData.OnNodeServersUpdated := FrameNodeStats.OnNetNodeServersUpdated; + TNetData.NetData.OnBlackListUpdated := FrameNodeStats.OnNetBlackListUpdated; // TimerUpdateStatus.Interval := 1000; From 98b6cf955db6542bd5131f2603875be7140a27c1 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Wed, 8 Dec 2021 02:18:05 +0100 Subject: [PATCH 43/44] Potential bug fix for TFrameAccountExplorer To be tested in TestGUIImprovements --- .../Frames/UFrameAccountExplorer.pas | 22 +++++-------------- src/gui-classic/UFRMWallet.pas | 15 +++++++++++++ 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 96b21fdc8..73a4d6cc5 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -90,8 +90,6 @@ TFrameAccountExplorer = class(TFrame) function DoUpdateAccountsFilter: Boolean; - procedure OnAccountsGridUpdatedData(Sender : TObject); - Procedure OnSelectedAccountsGridUpdated(Sender : TObject); public { Public declarations } @@ -99,8 +97,12 @@ TFrameAccountExplorer = class(TFrame) procedure UpdateAccounts(RefreshData : Boolean); procedure UpdatePrivateKeys; - property AccountsGrid : TAccountsGrid read FAccountsGrid; - property SelectedAccountsGrid : TAccountsGrid read FSelectedAccountsGrid; + procedure OnAccountsGridUpdatedData(Sender : TObject); + Procedure OnSelectedAccountsGridUpdated(Sender : TObject); + + + property AccountsGrid : TAccountsGrid read FAccountsGrid write FAccountsGrid; + property SelectedAccountsGrid : TAccountsGrid read FSelectedAccountsGrid write FSelectedAccountsGrid; constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -141,18 +143,6 @@ constructor TFrameAccountExplorer.Create(AOwner: TComponent); FLastAccountsGridInvalidateTC := TPlatform.GetTickCount; - FAccountsGrid := TAccountsGrid.Create(Self); - FAccountsGrid.DrawGrid := dgAccounts; - FAccountsGrid.AllowMultiSelect := True; - FAccountsGrid.OnAccountsGridUpdatedData := OnAccountsGridUpdatedData; - FAccountsGrid.AccountsGridDatasource := acds_Node; - - FSelectedAccountsGrid := TAccountsGrid.Create(Self); - FSelectedAccountsGrid.AccountsGridDatasource := acds_InternalList; - FSelectedAccountsGrid.DrawGrid := dgSelectedAccounts; - FSelectedAccountsGrid.OnUpdated := OnSelectedAccountsGridUpdated; - - // cannot set properties here that interact with FRMWallet because // FRMWallet not yet created. diff --git a/src/gui-classic/UFRMWallet.pas b/src/gui-classic/UFRMWallet.pas index eb32935c4..8bd23469f 100644 --- a/src/gui-classic/UFRMWallet.pas +++ b/src/gui-classic/UFRMWallet.pas @@ -139,6 +139,8 @@ TFRMWallet = class(TForm) FWalletKeys : TWalletKeysExt; FLog : TLog; FNodeNotifyEvents : TNodeNotifyEvents; + FAccountsGrid : TAccountsGrid; + FSelectedAccountsGrid : TAccountsGrid; FOperationsAccountGrid : TOperationsGrid; FPendingOperationsGrid : TOperationsGrid; FOperationsExplorerGrid : TOperationsGrid; @@ -469,6 +471,19 @@ procedure TFRMWallet.FormCreate(Sender: TObject); FNodeNotifyEvents.OnNodeMessageEvent := FrameMessages.OnNodeMessageEvent; FNodeNotifyEvents.OnKeyActivity := OnNodeKeysActivity; + FAccountsGrid := TAccountsGrid.Create(Self); + FAccountsGrid.DrawGrid := FrameAccountExplorer.dgAccounts; + FAccountsGrid.AllowMultiSelect := True; + FAccountsGrid.OnAccountsGridUpdatedData := FrameAccountExplorer.OnAccountsGridUpdatedData; + FAccountsGrid.AccountsGridDatasource := acds_Node; + FrameAccountExplorer.AccountsGrid := FAccountsGrid; + + FSelectedAccountsGrid := TAccountsGrid.Create(Self); + FSelectedAccountsGrid.AccountsGridDatasource := acds_InternalList; + FSelectedAccountsGrid.DrawGrid := FrameAccountExplorer.dgSelectedAccounts; + FSelectedAccountsGrid.OnUpdated := FrameAccountExplorer.OnSelectedAccountsGridUpdated; + FrameAccountExplorer.SelectedAccountsGrid := FSelectedAccountsGrid; + FOperationsAccountGrid := TOperationsGrid.Create(Self); FOperationsAccountGrid.DrawGrid := FrameAccountExplorer.dgAccountOperations; FOperationsAccountGrid.MustShowAlwaysAnAccount := true; From 998edb9202b371cd42a3eeba1481e23f43aef8d6 Mon Sep 17 00:00:00 2001 From: Skybuck Flying Date: Fri, 10 Dec 2021 00:14:00 +0100 Subject: [PATCH 44/44] Filter accounts by balance max events fixed. --- .../Frames/UFrameAccountExplorer.dfm | 2 ++ .../Frames/UFrameAccountExplorer.pas | 32 +++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.dfm b/src/gui-classic/Frames/UFrameAccountExplorer.dfm index 00bbe43eb..080e958aa 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.dfm +++ b/src/gui-classic/Frames/UFrameAccountExplorer.dfm @@ -126,6 +126,8 @@ object FrameAccountExplorer: TFrameAccountExplorer Height = 21 Hint = 'Max balance' TabOrder = 6 + OnExit = ebFilterAccountByBalanceMaxExit + OnKeyPress = ebFilterAccountByBalanceMaxKeyPress end end object pnlAccounts: TPanel diff --git a/src/gui-classic/Frames/UFrameAccountExplorer.pas b/src/gui-classic/Frames/UFrameAccountExplorer.pas index 73a4d6cc5..c99b7192c 100644 --- a/src/gui-classic/Frames/UFrameAccountExplorer.pas +++ b/src/gui-classic/Frames/UFrameAccountExplorer.pas @@ -76,6 +76,9 @@ TFrameAccountExplorer = class(TFrame) procedure ebFilterAccountByBalanceMinKeyPress(Sender: TObject; var Key: Char); procedure cbFilterAccountsClick(Sender: TObject); + procedure ebFilterAccountByBalanceMaxExit(Sender: TObject); + procedure ebFilterAccountByBalanceMaxKeyPress(Sender: TObject; + var Key: Char); private { Private declarations } @@ -88,6 +91,9 @@ TFrameAccountExplorer = class(TFrame) FLastAccountsGridInvalidateTC : TTickCount; + procedure ebFilterAccountByBalanceExitShared( Sender : TObject ); + procedure ebFilterAccountByBalanceKeyPressShared( Sender : TObject; var Key : Char ); + function DoUpdateAccountsFilter: Boolean; @@ -359,15 +365,37 @@ procedure TFrameAccountExplorer.sbSelectedAccountsDelClick(Sender: TObject); end; end; -procedure TFrameAccountExplorer.ebFilterAccountByBalanceMinExit(Sender: TObject); +procedure TFrameAccountExplorer.ebFilterAccountByBalanceExitShared( Sender : TObject ); begin DoUpdateAccountsFilter; end; +procedure TFrameAccountExplorer.ebFilterAccountByBalanceKeyPressShared( Sender : TObject; var Key : Char ); +begin + if key=#13 then DoUpdateAccountsFilter; +end; + +procedure TFrameAccountExplorer.ebFilterAccountByBalanceMinExit(Sender: TObject); +begin + ebFilterAccountByBalanceExitShared( Sender );; +end; + +procedure TFrameAccountExplorer.ebFilterAccountByBalanceMaxExit( + Sender: TObject); +begin + ebFilterAccountByBalanceExitShared( Sender );; +end; + procedure TFrameAccountExplorer.ebFilterAccountByBalanceMinKeyPress(Sender: TObject; var Key: Char); begin - if key=#13 then DoUpdateAccountsFilter; + ebFilterAccountByBalanceKeyPressShared( Sender, Key ); +end; + +procedure TFrameAccountExplorer.ebFilterAccountByBalanceMaxKeyPress( + Sender: TObject; var Key: Char); +begin + ebFilterAccountByBalanceKeyPressShared( Sender, Key ); end; function TFrameAccountExplorer.DoUpdateAccountsFilter: Boolean;