mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 17:39:20 +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
|
uses
|
||||||
Classes, SysUtils, Forms, Controls, Dialogs, Buttons, ComCtrls,
|
Classes, SysUtils, Forms, Controls, Dialogs, Buttons, ComCtrls,
|
||||||
LCLType, PropEdits, IDEDialogs, LazarusIDEStrConsts;
|
LCLType, LCLProc, PropEdits, IDEDialogs, LazarusIDEStrConsts, AvgLvlTree;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
@ -55,7 +55,9 @@ type
|
|||||||
FUpdating: Boolean;
|
FUpdating: Boolean;
|
||||||
procedure SwapNodes(ANode1, ANode2, NewSelected: TTreeNode);
|
procedure SwapNodes(ANode1, ANode2, NewSelected: TTreeNode);
|
||||||
procedure CheckButtonsEnabled;
|
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 RefreshTree;
|
||||||
procedure OnSomethingChanged;
|
procedure OnSomethingChanged;
|
||||||
procedure OnPersistentAdded(APersistent: TPersistent; Select: boolean);
|
procedure OnPersistentAdded(APersistent: TPersistent; Select: boolean);
|
||||||
@ -279,7 +281,32 @@ begin
|
|||||||
SortByPositionButton.Enabled := Assigned(ItemTreeview.Items.GetFirstNode);
|
SortByPositionButton.Enabled := Assigned(ItemTreeview.Items.GetFirstNode);
|
||||||
end;
|
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.
|
// Add all controls in Designer to ItemTreeview.
|
||||||
var
|
var
|
||||||
AControl: TControl;
|
AControl: TControl;
|
||||||
@ -299,7 +326,9 @@ begin
|
|||||||
begin
|
begin
|
||||||
AControl := ParentControl.Controls[i];
|
AControl := ParentControl.Controls[i];
|
||||||
// skip non TWinControls and invisible form designer controls
|
// 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;
|
continue;
|
||||||
AWinControl := TWinControl(AControl);
|
AWinControl := TWinControl(AControl);
|
||||||
CurTab := AWinControl.TabOrder;
|
CurTab := AWinControl.TabOrder;
|
||||||
@ -313,7 +342,7 @@ begin
|
|||||||
NewNode := ItemTreeview.Items.AddChildObject(ParentNode, NodeText, AControl);
|
NewNode := ItemTreeview.Items.AddChildObject(ParentNode, NodeText, AControl);
|
||||||
if (FirstSibling = nil) or (NewNode.GetPrevSibling = nil) then
|
if (FirstSibling = nil) or (NewNode.GetPrevSibling = nil) then
|
||||||
FirstSibling := NewNode;
|
FirstSibling := NewNode;
|
||||||
CreateNodes(AWinControl, NewNode);
|
CreateNodes(AWinControl, NewNode, Candidates);
|
||||||
NewNode.Expanded := True;
|
NewNode.Expanded := True;
|
||||||
end;
|
end;
|
||||||
ItemTreeview.EndUpdate;
|
ItemTreeview.EndUpdate;
|
||||||
@ -322,6 +351,7 @@ end;
|
|||||||
procedure TTabOrderDialog.RefreshTree;
|
procedure TTabOrderDialog.RefreshTree;
|
||||||
var
|
var
|
||||||
LookupRoot: TPersistent;
|
LookupRoot: TPersistent;
|
||||||
|
Candidates: TAvgLvlTree;
|
||||||
begin
|
begin
|
||||||
if IsVisible and not FUpdating then
|
if IsVisible and not FUpdating then
|
||||||
begin
|
begin
|
||||||
@ -331,7 +361,13 @@ begin
|
|||||||
ItemTreeview.Items.Clear;
|
ItemTreeview.Items.Clear;
|
||||||
LookupRoot := GlobalDesignHook.LookupRoot;
|
LookupRoot := GlobalDesignHook.LookupRoot;
|
||||||
if Assigned(LookupRoot) and (LookupRoot is TWinControl) then begin
|
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]);
|
Caption := Format(lisTabOrderOf, [TWinControl(LookupRoot).Name]);
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
|
Loading…
Reference in New Issue
Block a user