瀏覽代碼

GUI: added grid to first send wizard screen

Herman Schoenfeld 7 年之前
父節點
當前提交
b8ede5d6ab
共有 3 個文件被更改,包括 118 次插入40 次删除
  1. 4 0
      src/gui/wizards/UWIZSendPASC.pas
  2. 22 24
      src/gui/wizards/UWIZSendPASC_Start.lfm
  3. 92 16
      src/gui/wizards/UWIZSendPASC_Start.pas

+ 4 - 0
src/gui/wizards/UWIZSendPASC.pas

@@ -6,6 +6,9 @@ unit UWIZSendPASC;
 
   Distributed under the MIT software license, see the accompanying file LICENSE
   or visit http://www.opensource.org/licenses/mit-license.php.
+
+  Acknowledgements:
+    Herman Schoenfeld <[email protected]>: added grid-based layout
 }
 
 interface
@@ -16,6 +19,7 @@ uses
 type
 
   { TWIZSendPASCModel }
+
   TWIZSendPASCModel = class(TComponent)
     public
       SelectedIndex: Integer;

+ 22 - 24
src/gui/wizards/UWIZSendPASC_Start.lfm

@@ -1,33 +1,31 @@
 object WIZSendPASC_Start: TWIZSendPASC_Start
   Left = 0
-  Height = 253
+  Height = 261
   Top = 0
-  Width = 429
-  ActiveControl = txtSelectedAccountNumbersAndBalances
+  Width = 474
   Caption = 'WIZSendPASC_Start'
-  ClientHeight = 253
-  ClientWidth = 429
-  LCLVersion = '1.8.1.0'
+  ClientHeight = 261
+  ClientWidth = 474
   Visible = False
-  object Label1: TLabel
-    Left = 96
-    Height = 32
-    Top = 16
-    Width = 479
-    Anchors = [akTop, akLeft, akRight]
-    AutoSize = False
-    Caption = 'List of Selected Accounts and Balances'
-    ParentColor = False
-    WordWrap = True
-  end
-  object txtSelectedAccountNumbersAndBalances: TMemo
-    Left = 24
-    Height = 160
-    Top = 56
-    Width = 379
+  object gpSender: TGroupBox
+    Left = 4
+    Height = 256
+    Top = 0
+    Width = 462
     Anchors = [akTop, akLeft, akRight, akBottom]
-    ReadOnly = True
-    ScrollBars = ssBoth
+    Caption = 'Sender Accounts'
+    ClientHeight = 236
+    ClientWidth = 458
     TabOrder = 0
+    object paGrid: TPanel
+      Left = 8
+      Height = 214
+      Top = 16
+      Width = 440
+      Anchors = [akTop, akLeft, akRight, akBottom]
+      BevelOuter = bvNone
+      Caption = 'GRID PANEL'
+      TabOrder = 0
+    end
   end
 end

+ 92 - 16
src/gui/wizards/UWIZSendPASC_Start.pas

@@ -6,12 +6,17 @@ unit UWIZSendPASC_Start;
 
   Distributed under the MIT software license, see the accompanying file LICENSE
   or visit http://www.opensource.org/licenses/mit-license.php.
+
+  Acknowledgements:
+    Herman Schoenfeld <[email protected]>: added grid-based layout
+
 }
 
 interface
 
 uses
   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
+  ExtCtrls, UVisualGrid, UCommon.Data,
   UWizard, UWIZSendPASC, UWIZSendPASC_Transaction, UWIZSendPASC_Completion;
 
 type
@@ -19,44 +24,115 @@ type
   { TWIZSendPASC_Start }
 
   TWIZSendPASC_Start = class(TWizardForm<TWIZSendPASCModel>)
-    Label1: TLabel;
-    txtSelectedAccountNumbersAndBalances: TMemo;
+    gpSender: TGroupBox;
+    paGrid: TPanel;
+  private
+    FSendersGrid : TVisualGrid;
   public
     procedure OnPresent; override;
     procedure OnNext; override;
   end;
 
 
+
 implementation
 
 {$R *.lfm}
 
-uses UAccounts;
+uses UAccounts, UCommon, UCommon.UI, Generics.Collections;
 
-{ TWIZSendPASC_Start }
+type
 
+  { TAccountSenderDataSource }
+
+  TAccountSenderDataSource = class(TCustomDataSource<TAccount>)
+    private
+      FModel : TWIZSendPASCModel;
+    protected
+      function GetColumns : TTableColumns;  override;
+    public
+      property Model : TWIZSendPASCModel read FModel write FModel;
+      function GetSearchCapabilities: TSearchCapabilities; override;
+      function GetEntityKey(constref AItem: TAccount) : Variant; override;
+      procedure FetchAll(const AContainer : TList<TAccount>); override;
+      function GetItemField(constref AItem: TAccount; const AColumnName : utf8string) : Variant; override;
+      procedure DehydrateItem(constref AItem: TAccount; var ATableRow: Variant); override;
+  end;
+
+{ TWIZSendPASC_Start }
 
 procedure TWIZSendPASC_Start.OnPresent;
+var
+  data : TAccountSenderDataSource;
+begin
+  FSendersGrid := TVisualGrid.Create(Self);
+  FSendersGrid.CanSearch:= False;
+  FSendersGrid.SortMode := smMultiColumn;
+  FSendersGrid.FetchDataInThread := False;
+  FSendersGrid.AutoPageSize := True;
+  FSendersGrid.SelectionType := stNone;
+  FSendersGrid.Options := [vgoColAutoFill, vgoColSizing, vgoSortDirectionAllowNone];
+  FSendersGrid.DefaultColumnWidths :=
+    TArray<integer>.Create(
+    CT_VISUALGRID_STRETCH, // Account
+    100                    // Amount
+   );
+   data := TAccountSenderDataSource.Create(FSendersGrid);
+   data.Model := Model;
+   FSendersGrid.DataSource := data;
+   paGrid.AddControlDockCenter(FSendersGrid);
+end;
+
+procedure TWIZSendPASC_Start.OnNext;
+begin
+  UpdatePath(ptReplaceAllNext, [TWIZSendPASC_Transaction, TWIZSendPASC_Completion]);
+end;
+
+{ TAccountSenderDataSource }
+
+function TAccountSenderDataSource.GetColumns : TTableColumns;
+begin
+  Result := TTableColumns.Create('Account', 'Amount');
+end;
+
+function TAccountSenderDataSource.GetSearchCapabilities: TSearchCapabilities;
+begin
+  Result := TSearchCapabilities.Create(
+    TSearchCapability.From('Account', SORTABLE_NUMERIC_FILTER),
+    TSearchCapability.From('Amount', SORTABLE_TEXT_FILTER)
+  );
+end;
 
-function GetAccNoWithChecksum(const AAccountNumber: Cardinal): String;
+function TAccountSenderDataSource.GetEntityKey(constref AItem: TAccount) : Variant;
 begin
-  result := TAccountComp.AccountNumberToAccountTxtNumber(AAccountNumber);
+  Result := AItem.account;
 end;
+
+function TAccountSenderDataSource.GetItemField(constref AItem: TAccount; const AColumnName : utf8string) : Variant;
 var
-  acc: TAccount;
-  i: Integer;
+  index : Integer;
 begin
-  txtSelectedAccountNumbersAndBalances.Clear;
-  for i := 0 to High(Model.SelectedAccounts) do
-  begin
-    acc := Model.SelectedAccounts[i];
-    txtSelectedAccountNumbersAndBalances.Append(Format('This Account %s has %s PASC', [GetAccNoWithChecksum(acc.Account), TAccountComp.FormatMoney(acc.balance)]));
-  end;
+   if AColumnName = 'Account' then
+     Result := AItem.account
+   else if AColumnName = 'Amount' then
+     Result := TAccountComp.FormatMoneyDecimal(AItem.Balance)
+   else raise Exception.Create(Format('Field not found [%s]', [AColumnName]));
 end;
 
-procedure TWIZSendPASC_Start.OnNext;
+procedure TAccountSenderDataSource.DehydrateItem(constref AItem: TAccount; var ATableRow: Variant);
 begin
-  UpdatePath(ptReplaceAllNext, [TWIZSendPASC_Transaction, TWIZSendPASC_Completion]);
+  ATableRow.Account := TAccountComp.AccountNumberToAccountTxtNumber(AItem.account);
+  ATableRow.Amount := TAccountComp.FormatMoney(AItem.balance);
+end;
+
+procedure TAccountSenderDataSource.FetchAll(const AContainer : TList<TAccount>);
+var
+  i: Integer;
+begin
+  for i := Low(Model.SelectedAccounts) to High(Model.SelectedAccounts) do
+  begin
+    AContainer.Add( Model.SelectedAccounts[i] );
+  end;
 end;
 
 end.