mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 22:38:03 +02:00
Merged revision(s) 49310 #663e1b5ca2 from trunk:
TabOrder dialog: Prevent an extra item under EditButton. Issue #28191, patch from Ondrej Pokorny. ........ git-svn-id: branches/fixes_1_4@49444 -
This commit is contained in:
parent
9afc021050
commit
23bec6671c
@ -33,7 +33,7 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, Dialogs, Buttons, ComCtrls,
|
||||
LCLType, PropEdits, IDEDialogs, LazarusIDEStrConsts;
|
||||
LCLType, LCLProc, PropEdits, IDEDialogs, LazarusIDEStrConsts, AvgLvlTree;
|
||||
|
||||
type
|
||||
|
||||
@ -55,7 +55,9 @@ type
|
||||
FUpdating: Boolean;
|
||||
procedure SwapNodes(ANode1, ANode2, NewSelected: TTreeNode);
|
||||
procedure CheckButtonsEnabled;
|
||||
procedure CreateNodes(ParentControl: TWinControl; ParentNode: TTreeNode);
|
||||
procedure CreateCandidates(OwnerComponent: TComponent; Candidates: TAvgLvlTree);
|
||||
procedure CreateNodes(ParentControl: TWinControl; ParentNode: TTreeNode;
|
||||
Candidates: TAvgLvlTree);
|
||||
procedure RefreshTree;
|
||||
procedure OnSomethingChanged;
|
||||
procedure OnPersistentAdded(APersistent: TPersistent; Select: boolean);
|
||||
@ -279,7 +281,32 @@ begin
|
||||
SortByPositionButton.Enabled := Assigned(ItemTreeview.Items.GetFirstNode);
|
||||
end;
|
||||
|
||||
procedure TTabOrderDialog.CreateNodes(ParentControl: TWinControl; ParentNode: TTreeNode);
|
||||
procedure TTabOrderDialog.CreateCandidates(OwnerComponent: TComponent;
|
||||
Candidates: TAvgLvlTree);
|
||||
var
|
||||
i: Integer;
|
||||
AComponent: TComponent;
|
||||
begin
|
||||
if OwnerComponent = nil then Exit;
|
||||
if csDestroying in OwnerComponent.ComponentState then exit;
|
||||
for i := 0 to OwnerComponent.ComponentCount - 1 do
|
||||
begin
|
||||
AComponent := OwnerComponent.Components[i];
|
||||
if csDestroying in AComponent.ComponentState then continue;
|
||||
if Candidates.Find(AComponent)<>nil then
|
||||
begin
|
||||
DebugLn('WARNING: TTabOrderDialog.CreateCandidates doppelganger found ', AComponent.Name);
|
||||
end
|
||||
else
|
||||
begin
|
||||
Candidates.Add(AComponent);
|
||||
if csInline in AComponent.ComponentState then
|
||||
CreateCandidates(AComponent, Candidates);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTabOrderDialog.CreateNodes(ParentControl: TWinControl; ParentNode: TTreeNode; Candidates: TAvgLvlTree);
|
||||
// Add all controls in Designer to ItemTreeview.
|
||||
var
|
||||
AControl: TControl;
|
||||
@ -299,7 +326,9 @@ begin
|
||||
begin
|
||||
AControl := ParentControl.Controls[i];
|
||||
// skip non TWinControls and invisible form designer controls
|
||||
if not (AControl is TWinControl) or (csNoDesignVisible in AControl.ControlStyle) then
|
||||
if not (AControl is TWinControl) or (csNoDesignVisible in AControl.ControlStyle) or
|
||||
not Assigned(Candidates.Find(AControl))
|
||||
then
|
||||
continue;
|
||||
AWinControl := TWinControl(AControl);
|
||||
CurTab := AWinControl.TabOrder;
|
||||
@ -313,7 +342,7 @@ begin
|
||||
NewNode := ItemTreeview.Items.AddChildObject(ParentNode, NodeText, AControl);
|
||||
if (FirstSibling = nil) or (NewNode.GetPrevSibling = nil) then
|
||||
FirstSibling := NewNode;
|
||||
CreateNodes(AWinControl, NewNode);
|
||||
CreateNodes(AWinControl, NewNode, Candidates);
|
||||
NewNode.Expanded := True;
|
||||
end;
|
||||
ItemTreeview.EndUpdate;
|
||||
@ -322,6 +351,7 @@ end;
|
||||
procedure TTabOrderDialog.RefreshTree;
|
||||
var
|
||||
LookupRoot: TPersistent;
|
||||
Candidates: TAvgLvlTree;
|
||||
begin
|
||||
if IsVisible and not FUpdating then
|
||||
begin
|
||||
@ -331,7 +361,13 @@ begin
|
||||
ItemTreeview.Items.Clear;
|
||||
LookupRoot := GlobalDesignHook.LookupRoot;
|
||||
if Assigned(LookupRoot) and (LookupRoot is TWinControl) then begin
|
||||
CreateNodes(TWinControl(LookupRoot), nil);
|
||||
Candidates := TAvgLvlTree.Create;
|
||||
try
|
||||
CreateCandidates(TComponent(LookupRoot), Candidates);
|
||||
CreateNodes(TWinControl(LookupRoot), nil, Candidates);
|
||||
finally
|
||||
Candidates.Free;
|
||||
end;
|
||||
Caption := Format(lisTabOrderOf, [TWinControl(LookupRoot).Name]);
|
||||
end;
|
||||
finally
|
||||
|
Loading…
Reference in New Issue
Block a user