diff --git a/source/tabletools.dfm b/source/tabletools.dfm index a0878473..86b03ce3 100644 --- a/source/tabletools.dfm +++ b/source/tabletools.dfm @@ -21,6 +21,14 @@ object frmTableTools: TfrmTableTools 383) PixelsPerInch = 96 TextHeight = 13 + object lblCheckedSize: TLabel + Left = 8 + Top = 355 + Width = 70 + Height = 13 + Anchors = [akLeft, akBottom] + Caption = 'lblCheckedSize' + end object btnClose: TButton Left = 461 Top = 350 diff --git a/source/tabletools.pas b/source/tabletools.pas index 9563b225..2934cdd5 100644 --- a/source/tabletools.pas +++ b/source/tabletools.pas @@ -66,6 +66,7 @@ type comboBulkTableEditCharset: TComboBox; btnSeeResults: TButton; chkCaseSensitive: TCheckBox; + lblCheckedSize: TLabel; procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); @@ -119,6 +120,7 @@ type FHeaderCreated: Boolean; FFindSeeResultSQL: TStringList; ToFile, ToDir, ToClipboard, ToDb, ToServer: Boolean; + FObjectSizes: Int64; procedure SetToolMode(Value: TToolMode); procedure Output(SQL: String; IsEndOfQuery, ForFile, ForDir, ForDb, ForServer: Boolean); procedure AddResults(SQL: String); @@ -244,6 +246,8 @@ begin TreeObjects.Clear; TreeObjects.RootNodeCount := Mainform.DBtree.RootNodeCount; + FObjectSizes := 0; + // Init all objects in active database, so the tree does not just check the db node // if we want the first child only. See issue #2267. Node := MainForm.FindDBNode(TreeObjects, MainForm.ActiveDatabase); @@ -323,6 +327,7 @@ var begin SomeChecked := TreeObjects.CheckedCount > 0; btnSeeResults.Visible := tabsTools.ActivePage = tabFind; + lblCheckedSize.Caption := 'Selected object sizes: '+FormatByteNumber(FObjectSizes); if tabsTools.ActivePage = tabMaintenance then begin btnExecute.Caption := 'Execute'; btnExecute.Enabled := (Pos(SUnsupported, comboOperation.Text) = 0) and SomeChecked; @@ -371,7 +376,17 @@ end; procedure TfrmTableTools.TreeObjectsChecked(Sender: TBaseVirtualTree; Node: PVirtualNode); +var + Obj: PDBObject; + ObjSize: Int64; begin + // Track sum of checked objects size + Obj := Sender.GetNodeData(Node); + ObjSize := Max(Obj.Size, 0); + if Node.CheckState in CheckedStates then + Inc(FObjectSizes, ObjSize) + else + Dec(FObjectSizes, ObjSize); ValidateControls(Sender); end;