Quellcode durchsuchen

Refactor: use of TNotifyManyEvent in TWalleyKeys

Herman Schoenfeld vor 8 Jahren
Ursprung
Commit
762f112bc5

+ 4 - 6
Units/Forms/UFRMOperation.pas

@@ -146,7 +146,6 @@ type
     FEncodedPayload : TRawBytes;
     FEncodedPayload : TRawBytes;
     FDisabled : Boolean;
     FDisabled : Boolean;
     FSenderAccounts: TOrderedCardinalList; // TODO: TOrderedCardinalList should be replaced with a "TCardinalList" since signer account should be processed last
     FSenderAccounts: TOrderedCardinalList; // TODO: TOrderedCardinalList should be replaced with a "TCardinalList" since signer account should be processed last
-    FOldOnChanged : TNotifyEvent;
     procedure SetWalletKeys(const Value: TWalletKeys);
     procedure SetWalletKeys(const Value: TWalletKeys);
     Procedure UpdateWalletKeys;
     Procedure UpdateWalletKeys;
     { Private declarations }
     { Private declarations }
@@ -546,7 +545,7 @@ end;
 
 
 procedure TFRMOperation.FormDestroy(Sender: TObject);
 procedure TFRMOperation.FormDestroy(Sender: TObject);
 begin
 begin
-  if Assigned(FWalletKeys) then FWalletKeys.OnChanged := FOldOnChanged;
+  if Assigned(FWalletKeys) then FWalletKeys.OnChanged.Remove(OnWalletKeysChanged);
   FreeAndNil(FSenderAccounts);
   FreeAndNil(FSenderAccounts);
 end;
 end;
 
 
@@ -621,7 +620,7 @@ end;
 procedure TFRMOperation.OnWalletKeysChanged(Sender: TObject);
 procedure TFRMOperation.OnWalletKeysChanged(Sender: TObject);
 begin
 begin
   PostMessage(Self.Handle,CM_PC_WalletKeysChanged,0,0);
   PostMessage(Self.Handle,CM_PC_WalletKeysChanged,0,0);
-  if Assigned(FOldOnChanged) then FOldOnChanged(Sender);
+  //if Assigned(FOldOnChanged) then FOldOnChanged(Sender);  // XXXXXXXX HS 2017-08-07 is this procedure needed anymore?
 end;
 end;
 
 
 procedure TFRMOperation.PageControlOpTypeChange(Sender: TObject);
 procedure TFRMOperation.PageControlOpTypeChange(Sender: TObject);
@@ -668,11 +667,10 @@ procedure TFRMOperation.SetWalletKeys(const Value: TWalletKeys);
 begin
 begin
   Try
   Try
     if FWalletKeys=Value then exit;
     if FWalletKeys=Value then exit;
-    if Assigned(FWalletKeys) then FWalletKeys.OnChanged := FOldOnChanged;
+    if Assigned(FWalletKeys) then FWalletKeys.OnChanged.Remove(OnWalletKeysChanged);
     FWalletKeys := Value;
     FWalletKeys := Value;
     if Assigned(FWalletKeys) then begin
     if Assigned(FWalletKeys) then begin
-      FOldOnChanged := FWalletKeys.OnChanged;
-      FWalletKeys.OnChanged := OnWalletKeysChanged;
+      FWalletKeys.OnChanged.Add(OnWalletKeysChanged);
     end;
     end;
   Finally
   Finally
     UpdateWalletKeys;
     UpdateWalletKeys;

+ 3 - 3
Units/Forms/UFRMWallet.pas

@@ -31,7 +31,7 @@ uses
   Dialogs, ExtCtrls, ComCtrls, UWalletKeys, StdCtrls,
   Dialogs, ExtCtrls, ComCtrls, UWalletKeys, StdCtrls,
   ULog, Grids, UAppParams,
   ULog, Grids, UAppParams,
   UBlockChain, UNode, UGridUtils, UAccounts, Menus, ImgList,
   UBlockChain, UNode, UGridUtils, UAccounts, Menus, ImgList,
-  UNetProtocol, UCrypto, Buttons, UPoolMining, URPC, UFRMAccountSelect;
+  UNetProtocol, UCrypto, Buttons, UPoolMining, URPC, UFRMAccountSelect, UCommon;
 
 
 Const
 Const
   CM_PC_WalletKeysChanged = WM_USER + 1;
   CM_PC_WalletKeysChanged = WM_USER + 1;
@@ -358,7 +358,6 @@ begin
     // Init Grid
     // Init Grid
     //FAccountsGrid.Node := FNode;
     //FAccountsGrid.Node := FNode;
     FSelectedAccountsGrid.Node := FNode;
     FSelectedAccountsGrid.Node := FNode;
-    FWalletKeys.OnChanged := OnWalletChanged;
     FAccountsGrid.Node := FNode;
     FAccountsGrid.Node := FNode;
     FOperationsAccountGrid.Node := FNode;
     FOperationsAccountGrid.Node := FNode;
     // Reading database
     // Reading database
@@ -880,7 +879,7 @@ begin
   FOperationsExplorerGrid.PendingOperations := False;
   FOperationsExplorerGrid.PendingOperations := False;
   FBlockChainGrid := TBlockChainGrid.Create(Self);
   FBlockChainGrid := TBlockChainGrid.Create(Self);
   FBlockChainGrid.DrawGrid := dgBlockChainExplorer;
   FBlockChainGrid.DrawGrid := dgBlockChainExplorer;
-  FWalletKeys.OnChanged := OnWalletChanged;
+  FWalletKeys.OnChanged.Add(OnWalletChanged);
   LoadAppParams;
   LoadAppParams;
   UpdatePrivateKeys;
   UpdatePrivateKeys;
   UpdateBlockChainState;
   UpdateBlockChainState;
@@ -979,6 +978,7 @@ begin
   Sleep(100);
   Sleep(100);
 end;
 end;
 
 
+
 procedure TFRMWallet.sbSearchAccountClick(Sender: TObject);
 procedure TFRMWallet.sbSearchAccountClick(Sender: TObject);
 Var F : TFRMAccountSelect;
 Var F : TFRMAccountSelect;
 begin
 begin

+ 6 - 7
Units/Forms/UFRMWalletKeys.pas

@@ -23,7 +23,7 @@ uses
   Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, UWalletKeys, Buttons,
   Dialogs, StdCtrls, UWalletKeys, Buttons,
   {$IFDEF FPC}LMessages,{$ENDIF}
   {$IFDEF FPC}LMessages,{$ENDIF}
-  clipbrd, UConst;
+  clipbrd, UConst, UCommon;
 
 
 Const
 Const
   CM_PC_WalletKeysChanged = {$IFDEF FPC}LM_USER{$ELSE}WM_USER{$ENDIF} + 1;
   CM_PC_WalletKeysChanged = {$IFDEF FPC}LM_USER{$ELSE}WM_USER{$ENDIF} + 1;
@@ -66,7 +66,7 @@ type
     procedure bbImportKeysFileClick(Sender: TObject);
     procedure bbImportKeysFileClick(Sender: TObject);
     procedure bbLockClick(Sender: TObject);
     procedure bbLockClick(Sender: TObject);
   private
   private
-    FOldOnChanged : TNotifyEvent;
+    //FOldOnChanged : TNotifyEvent;
     FWalletKeys: TWalletKeys;
     FWalletKeys: TWalletKeys;
     procedure SetWalletKeys(const Value: TWalletKeys);
     procedure SetWalletKeys(const Value: TWalletKeys);
     procedure OnWalletKeysChanged(Sender : TObject);
     procedure OnWalletKeysChanged(Sender : TObject);
@@ -437,7 +437,7 @@ end;
 
 
 destructor TFRMWalletKeys.Destroy;
 destructor TFRMWalletKeys.Destroy;
 begin
 begin
-  if Assigned(FWalletKeys) then FWalletKeys.OnChanged := FOldOnChanged;
+  if Assigned(FWalletKeys) then FWalletKeys.OnChanged.Remove(OnWalletKeysChanged);
   inherited;
   inherited;
 end;
 end;
 
 
@@ -475,17 +475,16 @@ end;
 procedure TFRMWalletKeys.OnWalletKeysChanged(Sender : TObject);
 procedure TFRMWalletKeys.OnWalletKeysChanged(Sender : TObject);
 begin
 begin
   PostMessage(Self.Handle,CM_PC_WalletKeysChanged,0,0);
   PostMessage(Self.Handle,CM_PC_WalletKeysChanged,0,0);
-  if Assigned(FOldOnChanged) then FOldOnChanged(Sender);
+  //if Assigned(FOldOnChanged) then FOldOnChanged(Sender);   XXXXX HS 2017-09-07: is this procedure needed anymore?
 end;
 end;
 
 
 procedure TFRMWalletKeys.SetWalletKeys(const Value: TWalletKeys);
 procedure TFRMWalletKeys.SetWalletKeys(const Value: TWalletKeys);
 begin
 begin
   if FWalletKeys=Value then exit;
   if FWalletKeys=Value then exit;
-  if Assigned(FWalletKeys) then FWalletKeys.OnChanged := FOldOnChanged;
+  if Assigned(FWalletKeys) then FWalletKeys.OnChanged.Remove(OnWalletKeysChanged);
   FWalletKeys := Value;
   FWalletKeys := Value;
   if Assigned(FWalletKeys) then begin
   if Assigned(FWalletKeys) then begin
-    FOldOnChanged := FWalletKeys.OnChanged;
-    FWalletKeys.OnChanged := OnWalletKeysChanged;
+    FWalletKeys.OnChanged.Add(OnWalletKeysChanged);
   end;
   end;
   UpdateWalletKeys;
   UpdateWalletKeys;
 end;
 end;

+ 10 - 10
Units/PascalCoin/UWalletKeys.pas

@@ -20,7 +20,7 @@ unit UWalletKeys;
 interface
 interface
 
 
 uses
 uses
-  Classes, UBlockChain, UAccounts, UCrypto;
+  Classes, UBlockChain, UAccounts, UCrypto, UCommon;
 
 
 Type
 Type
   TWalletKey = Record
   TWalletKey = Record
@@ -40,7 +40,7 @@ Type
     FIsValidPassword: Boolean;
     FIsValidPassword: Boolean;
     FWalletFileName: AnsiString;
     FWalletFileName: AnsiString;
     FIsReadingStream : Boolean;
     FIsReadingStream : Boolean;
-    FOnChanged: TNotifyEvent;
+    FOnChanged: TNotifyManyEvent;
     function GetKey(index: Integer): TWalletKey;
     function GetKey(index: Integer): TWalletKey;
     procedure SetWalletPassword(const Value: AnsiString);
     procedure SetWalletPassword(const Value: AnsiString);
     Procedure GeneratePrivateKeysFromPassword;
     Procedure GeneratePrivateKeysFromPassword;
@@ -61,7 +61,7 @@ Type
     Procedure Clear; virtual;
     Procedure Clear; virtual;
     Function Count : Integer;
     Function Count : Integer;
     Property WalletFileName : AnsiString read FWalletFileName write SetWalletFileName;
     Property WalletFileName : AnsiString read FWalletFileName write SetWalletFileName;
-    Property OnChanged : TNotifyEvent read FOnChanged write FOnChanged;
+    Property OnChanged : TNotifyManyEvent read FOnChanged write FOnChanged;
     Procedure SetName(index : Integer; Const newName : AnsiString);
     Procedure SetName(index : Integer; Const newName : AnsiString);
     Function LockWallet : Boolean;
     Function LockWallet : Boolean;
   End;
   End;
@@ -119,7 +119,7 @@ begin
     P^.Name := Name;
     P^.Name := Name;
   end;
   end;
   if Not FIsReadingStream then SaveToStream(FWalletFileStream);
   if Not FIsReadingStream then SaveToStream(FWalletFileStream);
-  if Assigned(FOnChanged) then  FOnChanged(Self);
+  FOnChanged.Invoke(Self);
 end;
 end;
 
 
 function TWalletKeys.AddPublicKey(const Name: AnsiString; ECDSA_Public: TECDSA_Public): Integer;
 function TWalletKeys.AddPublicKey(const Name: AnsiString; ECDSA_Public: TECDSA_Public): Integer;
@@ -139,7 +139,7 @@ begin
     P^.Name := Name;
     P^.Name := Name;
   end;
   end;
   if Not FIsReadingStream then SaveToStream(FWalletFileStream);
   if Not FIsReadingStream then SaveToStream(FWalletFileStream);
-  if Assigned(FOnChanged) then  FOnChanged(Self);
+  FOnChanged.Invoke(Self);
 end;
 end;
 
 
 procedure TWalletKeys.Clear;
 procedure TWalletKeys.Clear;
@@ -179,7 +179,7 @@ begin
   Dispose(P);
   Dispose(P);
   FSearchableKeys.Delete(index);
   FSearchableKeys.Delete(index);
   SaveToStream(FWalletFileStream);
   SaveToStream(FWalletFileStream);
-  if Assigned(FOnChanged) then FOnChanged(Self);
+  FOnChanged.Invoke(Self);
 end;
 end;
 
 
 destructor TWalletKeys.destroy;
 destructor TWalletKeys.destroy;
@@ -299,7 +299,7 @@ begin
   finally
   finally
     FIsReadingStream := false;
     FIsReadingStream := false;
   end;
   end;
-  if Assigned(FOnChanged) then FOnChanged(Self);
+  FOnChanged.Invoke(Self);
 end;
 end;
 
 
 function TWalletKeys.LockWallet: Boolean;
 function TWalletKeys.LockWallet: Boolean;
@@ -308,7 +308,7 @@ begin
   FWalletPassword := '';
   FWalletPassword := '';
   GeneratePrivateKeysFromPassword;
   GeneratePrivateKeysFromPassword;
   Result := Not IsValidPassword;
   Result := Not IsValidPassword;
-  if Assigned(FOnChanged) then FOnChanged(Self);
+  FOnChanged.Invoke(Self);
 end;
 end;
 
 
 procedure TWalletKeys.SaveToStream(Stream: TStream);
 procedure TWalletKeys.SaveToStream(Stream: TStream);
@@ -339,7 +339,7 @@ begin
   if PWalletKey(FSearchableKeys[index])^.Name=newName then exit;
   if PWalletKey(FSearchableKeys[index])^.Name=newName then exit;
   PWalletKey(FSearchableKeys[index])^.Name := newName;
   PWalletKey(FSearchableKeys[index])^.Name := newName;
   SaveToStream(FWalletFileStream);
   SaveToStream(FWalletFileStream);
-  if Assigned(FOnChanged) then  FOnChanged(Self);
+  FOnChanged.Invoke(Self);
 end;
 end;
 
 
 procedure TWalletKeys.SetWalletFileName(const Value: AnsiString);
 procedure TWalletKeys.SetWalletFileName(const Value: AnsiString);
@@ -378,7 +378,7 @@ begin
   // Try if password is Ok
   // Try if password is Ok
   GeneratePrivateKeysFromPassword;
   GeneratePrivateKeysFromPassword;
   if FIsValidPassword then SaveToStream(FWalletFileStream);
   if FIsValidPassword then SaveToStream(FWalletFileStream);
-  if Assigned(FOnChanged) then FOnChanged(Self);
+  FOnChanged.Invoke(Self);
 end;
 end;
 
 
 { TWalletKeysExt }
 { TWalletKeysExt }