Performance: Let TMainForm.RefreshHelperNode update only the active tab, not all open tabs. Do further calls to RefreshHelperNode when active tab gets switched. See https://www.heidisql.com/forum.php?t=37961

This commit is contained in:
Ansgar Becker
2021-06-05 14:58:18 +02:00
parent a241b6920d
commit 2b29b51aaf

View File

@ -6034,6 +6034,11 @@ begin
Exit;
tab := PageControlMain.ActivePage;
// Query helpers need a hit here, since RefreshHelperNode now only does its update on the active tab
// See https://www.heidisql.com/forum.php?t=37961
RefreshHelperNode(TQueryTab.HelperNodeColumns);
RefreshHelperNode(TQueryTab.HelperNodeSnippets);
RefreshHelperNode(TQueryTab.HelperNodeHistory);
// Move focus to relevant controls in order for them to receive keyboard events.
// Do this only if the user clicked the new tab. Not on automatic tab changes.
@ -11433,6 +11438,7 @@ begin
QueryTab.Uid := TQueryTab.GenerateUid;
QueryTab.TabSheet := TTabSheet.Create(PageControlMain);
QueryTab.TabSheet.Name := tabQuery.Name + i.ToString;
QueryTab.TabSheet.PageControl := PageControlMain;
QueryTab.TabSheet.ImageIndex := tabQuery.ImageIndex;
@ -11448,6 +11454,7 @@ begin
// Dumb code which replicates all controls from tabQuery
QueryTab.pnlMemo := TPanel.Create(QueryTab.TabSheet);
QueryTab.pnlMemo.Name := pnlQueryMemo.Name + i.ToString;
QueryTab.pnlMemo.Parent := QueryTab.TabSheet;
QueryTab.pnlMemo.BevelOuter := pnlQueryMemo.BevelOuter;
QueryTab.pnlMemo.Align := pnlQueryMemo.Align;
@ -11455,6 +11462,7 @@ begin
QueryTab.pnlMemo.Constraints := pnlQueryMemo.Constraints;
QueryTab.Memo := TSynMemo.Create(QueryTab.pnlMemo);
QueryTab.Memo.Name := SynMemoQuery.Name + i.ToString;
QueryTab.Memo.Parent := QueryTab.pnlMemo;
QueryTab.Memo.Align := SynMemoQuery.Align;
QueryTab.Memo.Constraints := SynMemoQuery.Constraints;
@ -11487,6 +11495,7 @@ begin
QueryTab.spltHelpers.Width := spltQueryHelpers.Width;
QueryTab.pnlHelpers := TPanel.Create(QueryTab.pnlMemo);
QueryTab.pnlHelpers.Name := pnlQueryHelpers.Name + i.ToString;
QueryTab.pnlHelpers.Parent := QueryTab.pnlMemo;
QueryTab.pnlHelpers.Align := pnlQueryHelpers.Align;
QueryTab.pnlHelpers.Constraints := pnlQueryHelpers.Constraints;
@ -11495,6 +11504,7 @@ begin
QueryTab.pnlHelpers.Width := pnlQueryHelpers.Width;
QueryTab.filterHelpers := TButtonedEdit.Create(QueryTab.pnlHelpers);
QueryTab.filterHelpers.Name := filterQueryHelpers.Name + i.ToString;
QueryTab.filterHelpers.Parent := QueryTab.pnlHelpers;
QueryTab.filterHelpers.Align := filterQueryHelpers.Align;
QueryTab.filterHelpers.TextHint := filterQueryHelpers.TextHint;
@ -11507,6 +11517,7 @@ begin
QueryTab.filterHelpers.OnRightButtonClick := filterQueryHelpers.OnRightButtonClick;
QueryTab.treeHelpers := TVirtualStringTree.Create(QueryTab.pnlHelpers);
QueryTab.treeHelpers.Name := treeQueryHelpers.Name + i.ToString;
QueryTab.treeHelpers.Parent := QueryTab.pnlHelpers;
QueryTab.treeHelpers.Align := treeQueryHelpers.Align;
QueryTab.treeHelpers.Left := treeQueryHelpers.Left;
@ -11555,6 +11566,7 @@ begin
QueryTab.ResultTabs := TResultTabs.Create(True);
QueryTab.tabsetQuery := TTabSet.Create(QueryTab.TabSheet);
QueryTab.tabsetQuery.Name := tabsetQuery.Name + i.ToString;
QueryTab.tabsetQuery.Parent := QueryTab.TabSheet;
// Prevent various problems with alignment of controls. See http://www.heidisql.com/forum.php?t=18924
QueryTab.tabsetQuery.Top := QueryTab.spltQuery.Top + QueryTab.spltQuery.Height;
@ -13489,7 +13501,9 @@ begin
if not Assigned(QueryTabs) then
Exit;
Conn := ActiveConnection;
for Tab in QueryTabs do begin
Tab := QueryTabs.ActiveTab;
if Tab = nil then
Exit;
Node := FindNode(Tab.treeHelpers, NodeIndex, nil);
// Store node + children states
OldStates := Node.States;
@ -13524,7 +13538,6 @@ begin
ExpandedChildren.Free;
Tab.treeHelpers.EndUpdate;
end;
end;
procedure TMainForm.ApplicationEvents1Deactivate(Sender: TObject);