Skip to content

Commit d54e555

Browse files
committed
feat: when nodes are filtered, change "Check all" action to "Change all visible"
Refs #1983
1 parent b878004 commit d54e555

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

source/tabletools.pas

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,7 +1088,7 @@ procedure TfrmTableTools.editDatabaseTableFilterChange(Sender: TObject);
10881088
Node: PVirtualNode;
10891089
Obj: PDBObject;
10901090
rxdb, rxtable: TRegExpr;
1091-
NodeMatches: Boolean;
1091+
NodeMatches, SomeHidden: Boolean;
10921092
Errors: TStringList;
10931093
begin
10941094
// Immediately apply database filter
@@ -1102,6 +1102,7 @@ procedure TfrmTableTools.editDatabaseTableFilterChange(Sender: TObject);
11021102
rxtable.Expression := '('+StringReplace(editTableFilter.Text, ';', '|', [rfReplaceAll])+')';
11031103

11041104
Errors := TStringList.Create;
1105+
SomeHidden := False;
11051106

11061107
TreeObjects.BeginUpdate;
11071108
Node := TreeObjects.GetFirst;
@@ -1135,6 +1136,8 @@ procedure TfrmTableTools.editDatabaseTableFilterChange(Sender: TObject);
11351136
end;
11361137
end;
11371138
TreeObjects.IsVisible[Node] := NodeMatches;
1139+
if not NodeMatches then
1140+
SomeHidden := True;
11381141

11391142
Node := TreeObjects.GetNextInitialized(Node);
11401143
end;
@@ -1145,6 +1148,10 @@ procedure TfrmTableTools.editDatabaseTableFilterChange(Sender: TObject);
11451148

11461149
editDatabaseFilter.RightButton.Visible := editDatabaseFilter.Text <> '';
11471150
editTableFilter.RightButton.Visible := editTableFilter.Text <> '';
1151+
if SomeHidden then
1152+
menuCheckAll.Caption := _('Check all visible')
1153+
else
1154+
menuCheckAll.Caption := _('Check all');
11481155
timerCalcSize.Enabled := False;
11491156
timerCalcSize.Enabled := True;
11501157
end;
@@ -2512,7 +2519,7 @@ procedure TfrmTableTools.CheckAllClick(Sender: TObject);
25122519
DBNode, ObjNode: PVirtualNode;
25132520
WantedType: TListNodeType;
25142521
DBObj: PDBObject;
2515-
CheckNone: Boolean;
2522+
CheckNone, DoCheck: Boolean;
25162523
InvertCheck: Boolean;
25172524
CheckedNodes: Int64;
25182525
begin
@@ -2530,25 +2537,29 @@ procedure TfrmTableTools.CheckAllClick(Sender: TObject);
25302537
CheckedNodes := 0;
25312538
while Assigned(ObjNode) do begin
25322539
DBObj := TreeObjects.GetNodeData(ObjNode);
2540+
25332541
if CheckNone then
2534-
TreeObjects.CheckState[ObjNode] := csUncheckedNormal
2535-
else if InvertCheck then begin
2536-
if ObjNode.CheckState in CheckedStates then
2537-
TreeObjects.CheckState[ObjNode] := csUncheckedNormal
2538-
else
2539-
TreeObjects.CheckState[ObjNode] := csCheckedNormal;
2542+
DoCheck := False
2543+
else if not TreeObjects.IsVisible[ObjNode] then
2544+
DoCheck := False
2545+
else if InvertCheck then
2546+
DoCheck := not (ObjNode.CheckState in CheckedStates)
2547+
else
2548+
DoCheck := (WantedType = lntNone) or (DBObj.NodeType = WantedType) or (DBObj.GroupType = WantedType);
2549+
2550+
if DoCheck then begin
2551+
TreeObjects.CheckState[ObjNode] := csCheckedNormal;
2552+
Inc(CheckedNodes);
25402553
end
25412554
else begin
2542-
if (WantedType = lntNone) or (DBObj.NodeType = WantedType) or (DBObj.GroupType = WantedType) then
2543-
TreeObjects.CheckState[ObjNode] := csCheckedNormal
2544-
else
2545-
TreeObjects.CheckState[ObjNode] := csUncheckedNormal;
2555+
TreeObjects.CheckState[ObjNode] := csUncheckedNormal;
25462556
end;
2547-
if ObjNode.CheckState = csCheckedNormal then
2548-
Inc(CheckedNodes);
2557+
25492558
TreeObjects.RepaintNode(ObjNode);
25502559
ObjNode := TreeObjects.GetNextSibling(ObjNode);
25512560
end;
2561+
2562+
// Update parent node's checkbox
25522563
if CheckedNodes = 0 then
25532564
TreeObjects.CheckState[DBNode] := csUncheckedNormal
25542565
else if CheckedNodes = TreeObjects.ChildCount[DBNode] then

0 commit comments

Comments
 (0)