mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-20 19:39:29 +01:00
Designer: Update TabOrder component tree also when TabSheet is switched. Issue #30010.
git-svn-id: trunk@52633 -
This commit is contained in:
parent
3852d2bd5e
commit
1f77a3c790
@ -364,35 +364,34 @@ var
|
||||
LookupRoot: TPersistent;
|
||||
Candidates: TAvgLvlTree;
|
||||
begin
|
||||
if IsVisible and not FUpdating then
|
||||
begin
|
||||
FUpdating := true;
|
||||
ItemTreeview.BeginUpdate;
|
||||
try
|
||||
ItemTreeview.Items.Clear;
|
||||
LookupRoot := GlobalDesignHook.LookupRoot;
|
||||
if Assigned(LookupRoot) and (LookupRoot is TWinControl) then begin
|
||||
Candidates := TAvgLvlTree.Create;
|
||||
try
|
||||
CreateCandidates(TComponent(LookupRoot), Candidates);
|
||||
CreateNodes(TWinControl(LookupRoot), nil, Candidates);
|
||||
finally
|
||||
Candidates.Free;
|
||||
end;
|
||||
Caption := Format(lisTabOrderOf, [TWinControl(LookupRoot).Name]);
|
||||
end else
|
||||
Caption := lisMenuViewTabOrder;
|
||||
finally
|
||||
ItemTreeview.EndUpdate;
|
||||
FUpdating := false;
|
||||
end;
|
||||
if not IsVisible then Exit;
|
||||
ItemTreeview.BeginUpdate;
|
||||
try
|
||||
ItemTreeview.Items.Clear;
|
||||
LookupRoot := GlobalDesignHook.LookupRoot;
|
||||
if Assigned(LookupRoot) and (LookupRoot is TWinControl) then begin
|
||||
Candidates := TAvgLvlTree.Create;
|
||||
try
|
||||
CreateCandidates(TComponent(LookupRoot), Candidates);
|
||||
CreateNodes(TWinControl(LookupRoot), nil, Candidates);
|
||||
finally
|
||||
Candidates.Free;
|
||||
end;
|
||||
Caption := Format(lisTabOrderOf, [TWinControl(LookupRoot).Name]);
|
||||
end else
|
||||
Caption := lisMenuViewTabOrder;
|
||||
finally
|
||||
ItemTreeview.EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTabOrderDialog.OnSomethingChanged;
|
||||
begin
|
||||
if FUpdating then Exit;
|
||||
FUpdating := true;
|
||||
RefreshTree;
|
||||
CheckButtonsEnabled;
|
||||
FUpdating := false;
|
||||
end;
|
||||
|
||||
procedure TTabOrderDialog.OnPersistentAdded(APersistent: TPersistent; Select: boolean);
|
||||
@ -413,27 +412,36 @@ end;
|
||||
|
||||
procedure TTabOrderDialog.OnSetSelection(const ASelection: TPersistentSelectionList);
|
||||
// Select item also in TreeView when selection in Designer changes.
|
||||
|
||||
function FindSelection: TTreeNode;
|
||||
var
|
||||
Node: TTreeNode;
|
||||
begin
|
||||
Node := ItemTreeview.Items.GetFirstNode;
|
||||
while Assigned(Node) do
|
||||
begin
|
||||
if Assigned(Node.Data)
|
||||
and (ASelection.IndexOf(TPersistent(Node.Data)) >= 0) then
|
||||
Exit(Node);
|
||||
Node := Node.GetNext;
|
||||
end;
|
||||
Result := Nil;
|
||||
end;
|
||||
|
||||
var
|
||||
Ctrl: TPersistent;
|
||||
Node: TTreeNode;
|
||||
begin
|
||||
// ToDo: support also multiply selections.
|
||||
if FUpdating then Exit;
|
||||
FUpdating := True;
|
||||
ItemTreeview.BeginUpdate;
|
||||
Node := ItemTreeview.Items.GetFirstNode;
|
||||
while Assigned(Node) do begin
|
||||
if Assigned(Node.Data) then begin
|
||||
Ctrl := TPersistent(Node.Data);
|
||||
Assert(Ctrl is TWinControl);
|
||||
if ASelection.IndexOf(Ctrl) >= 0 then begin
|
||||
ItemTreeview.Selected := Node;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
Node := Node.GetNext;
|
||||
Node := FindSelection;
|
||||
if Node = Nil then
|
||||
begin // Changing TabSheet in a PageControl does not trigger handlers
|
||||
RefreshTree; // thus selection is not found -> refresh tree and try again.
|
||||
Node := FindSelection;
|
||||
end;
|
||||
ItemTreeview.EndUpdate;
|
||||
if Assigned(Node) then
|
||||
ItemTreeview.Selected := Node;
|
||||
FUpdating := False;
|
||||
CheckButtonsEnabled;
|
||||
end;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user