mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-07-28 16:16:07 +02:00
IDE: Update ComponentList after component visibility in Palette changed. Issue #23541.
This commit is contained in:
parent
163a3a2018
commit
cbc97e5a03
@ -190,9 +190,10 @@ type
|
|||||||
{ TBaseComponentPalette }
|
{ TBaseComponentPalette }
|
||||||
|
|
||||||
TComponentPaletteHandlerType = (
|
TComponentPaletteHandlerType = (
|
||||||
cphtUpdateVisible, // Visibility of component palette icons is recomputed
|
cphtVoteVisibility, // Visibility of component palette icons is recomputed
|
||||||
cphtComponentAdded, // Typically selection is changed after component was added.
|
cphtComponentAdded, // Typically selection is changed after component was added.
|
||||||
cphtSelectionChanged
|
cphtSelectionChanged,
|
||||||
|
cphtUpdated
|
||||||
);
|
);
|
||||||
|
|
||||||
TComponentSelectionMode = (
|
TComponentSelectionMode = (
|
||||||
@ -281,14 +282,17 @@ type
|
|||||||
procedure DoAfterComponentAdded(ALookupRoot, AComponent: TComponent;
|
procedure DoAfterComponentAdded(ALookupRoot, AComponent: TComponent;
|
||||||
ARegisteredComponent: TRegisteredComponent); virtual;
|
ARegisteredComponent: TRegisteredComponent); virtual;
|
||||||
procedure DoAfterSelectionChanged;
|
procedure DoAfterSelectionChanged;
|
||||||
|
procedure DoAfterUpdate;
|
||||||
procedure RemoveAllHandlersOfObject(AnObject: TObject);
|
procedure RemoveAllHandlersOfObject(AnObject: TObject);
|
||||||
procedure AddHandlerUpdateVisible(const OnUpdateCompVisibleEvent: TUpdateCompVisibleEvent;
|
procedure AddHandlerVoteVisibility(const OnUpdateCompVisibleEvent: TUpdateCompVisibleEvent;
|
||||||
AsLast: boolean = false);
|
AsLast: boolean = false);
|
||||||
procedure RemoveHandlerUpdateVisible(OnUpdateCompVisibleEvent: TUpdateCompVisibleEvent);
|
procedure RemoveHandlerVoteVisibility(OnUpdateCompVisibleEvent: TUpdateCompVisibleEvent);
|
||||||
procedure AddHandlerComponentAdded(OnComponentAddedEvent: TComponentAddedEvent);
|
procedure AddHandlerComponentAdded(OnComponentAddedEvent: TComponentAddedEvent);
|
||||||
procedure RemoveHandlerComponentAdded(OnComponentAddedEvent: TComponentAddedEvent);
|
procedure RemoveHandlerComponentAdded(OnComponentAddedEvent: TComponentAddedEvent);
|
||||||
procedure AddHandlerSelectionChanged(OnSelectionChangedEvent: TPaletteHandlerEvent);
|
procedure AddHandlerSelectionChanged(OnSelectionChangedEvent: TPaletteHandlerEvent);
|
||||||
procedure RemoveHandlerSelectionChanged(OnSelectionChangedEvent: TPaletteHandlerEvent);
|
procedure RemoveHandlerSelectionChanged(OnSelectionChangedEvent: TPaletteHandlerEvent);
|
||||||
|
procedure AddHandlerUpdated(OnUpdateEvent: TPaletteHandlerEvent);
|
||||||
|
procedure RemoveHandlerUpdated(OnUpdateEvent: TPaletteHandlerEvent);
|
||||||
public
|
public
|
||||||
property Pages: TBaseComponentPageList read fPages;
|
property Pages: TBaseComponentPageList read fPages;
|
||||||
property Comps: TRegisteredCompList read fComps;
|
property Comps: TRegisteredCompList read fComps;
|
||||||
@ -1173,6 +1177,7 @@ procedure TBaseComponentPalette.Update(ForceUpdateAll: Boolean);
|
|||||||
begin
|
begin
|
||||||
fUserOrder.SortPagesAndCompsUserOrder;
|
fUserOrder.SortPagesAndCompsUserOrder;
|
||||||
CreatePagesFromUserOrder;
|
CreatePagesFromUserOrder;
|
||||||
|
DoAfterUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TBaseComponentPalette.IterateRegisteredClasses(Proc: TGetComponentClassEvent);
|
procedure TBaseComponentPalette.IterateRegisteredClasses(Proc: TGetComponentClassEvent);
|
||||||
@ -1198,9 +1203,9 @@ begin
|
|||||||
Vote:=1;
|
Vote:=1;
|
||||||
if HideControls and AComponent.ComponentClass.InheritsFrom(TControl) then
|
if HideControls and AComponent.ComponentClass.InheritsFrom(TControl) then
|
||||||
Dec(Vote);
|
Dec(Vote);
|
||||||
i:=FHandlers[cphtUpdateVisible].Count;
|
i:=FHandlers[cphtVoteVisibility].Count;
|
||||||
while FHandlers[cphtUpdateVisible].NextDownIndex(i) do
|
while FHandlers[cphtVoteVisibility].NextDownIndex(i) do
|
||||||
TUpdateCompVisibleEvent(FHandlers[cphtUpdateVisible][i])(AComponent,Vote);
|
TUpdateCompVisibleEvent(FHandlers[cphtVoteVisibility][i])(AComponent,Vote);
|
||||||
Result:=Vote>0;
|
Result:=Vote>0;
|
||||||
AComponent.Visible:=Result;
|
AComponent.Visible:=Result;
|
||||||
end;
|
end;
|
||||||
@ -1224,6 +1229,15 @@ begin
|
|||||||
TPaletteHandlerEvent(FHandlers[cphtSelectionChanged][i])();
|
TPaletteHandlerEvent(FHandlers[cphtSelectionChanged][i])();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TBaseComponentPalette.DoAfterUpdate;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
i:=FHandlers[cphtUpdated].Count;
|
||||||
|
while FHandlers[cphtUpdated].NextDownIndex(i) do
|
||||||
|
TPaletteHandlerEvent(FHandlers[cphtUpdated][i])();
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TBaseComponentPalette.RemoveAllHandlersOfObject(AnObject: TObject);
|
procedure TBaseComponentPalette.RemoveAllHandlersOfObject(AnObject: TObject);
|
||||||
var
|
var
|
||||||
HandlerType: TComponentPaletteHandlerType;
|
HandlerType: TComponentPaletteHandlerType;
|
||||||
@ -1235,16 +1249,16 @@ end;
|
|||||||
// Add / Remove handlers
|
// Add / Remove handlers
|
||||||
|
|
||||||
// UpdateVisible
|
// UpdateVisible
|
||||||
procedure TBaseComponentPalette.AddHandlerUpdateVisible(
|
procedure TBaseComponentPalette.AddHandlerVoteVisibility(
|
||||||
const OnUpdateCompVisibleEvent: TUpdateCompVisibleEvent; AsLast: boolean);
|
const OnUpdateCompVisibleEvent: TUpdateCompVisibleEvent; AsLast: boolean);
|
||||||
begin
|
begin
|
||||||
AddHandler(cphtUpdateVisible,TMethod(OnUpdateCompVisibleEvent),AsLast);
|
AddHandler(cphtVoteVisibility,TMethod(OnUpdateCompVisibleEvent),AsLast);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TBaseComponentPalette.RemoveHandlerUpdateVisible(
|
procedure TBaseComponentPalette.RemoveHandlerVoteVisibility(
|
||||||
OnUpdateCompVisibleEvent: TUpdateCompVisibleEvent);
|
OnUpdateCompVisibleEvent: TUpdateCompVisibleEvent);
|
||||||
begin
|
begin
|
||||||
RemoveHandler(cphtUpdateVisible,TMethod(OnUpdateCompVisibleEvent));
|
RemoveHandler(cphtVoteVisibility,TMethod(OnUpdateCompVisibleEvent));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// ComponentAdded
|
// ComponentAdded
|
||||||
@ -1273,5 +1287,17 @@ begin
|
|||||||
RemoveHandler(cphtSelectionChanged,TMethod(OnSelectionChangedEvent));
|
RemoveHandler(cphtSelectionChanged,TMethod(OnSelectionChangedEvent));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TBaseComponentPalette.AddHandlerUpdated(
|
||||||
|
OnUpdateEvent: TPaletteHandlerEvent);
|
||||||
|
begin
|
||||||
|
AddHandler(cphtUpdated,TMethod(OnUpdateEvent));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TBaseComponentPalette.RemoveHandlerUpdated(
|
||||||
|
OnUpdateEvent: TPaletteHandlerEvent);
|
||||||
|
begin
|
||||||
|
RemoveHandler(cphtUpdated,TMethod(OnUpdateEvent));
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -7,11 +7,10 @@ object ComponentListForm: TComponentListForm
|
|||||||
ClientHeight = 467
|
ClientHeight = 467
|
||||||
ClientWidth = 300
|
ClientWidth = 300
|
||||||
KeyPreview = True
|
KeyPreview = True
|
||||||
OnActivate = FormActivate
|
|
||||||
OnClose = FormClose
|
OnClose = FormClose
|
||||||
OnKeyDown = FormKeyDown
|
OnKeyDown = FormKeyDown
|
||||||
OnShow = FormShow
|
OnShow = FormShow
|
||||||
LCLVersion = '1.9.0.0'
|
LCLVersion = '2.3.0.0'
|
||||||
object PageControl: TPageControl
|
object PageControl: TPageControl
|
||||||
Left = 0
|
Left = 0
|
||||||
Height = 397
|
Height = 397
|
||||||
|
@ -74,7 +74,6 @@ type
|
|||||||
TreeFilterEd: TTreeFilterEdit;
|
TreeFilterEd: TTreeFilterEdit;
|
||||||
SelectionToolButton: TSpeedButton;
|
SelectionToolButton: TSpeedButton;
|
||||||
procedure chbKeepOpenChange(Sender: TObject);
|
procedure chbKeepOpenChange(Sender: TObject);
|
||||||
procedure FormActivate(Sender: TObject);
|
|
||||||
procedure FormShow(Sender: TObject);
|
procedure FormShow(Sender: TObject);
|
||||||
procedure ListTreeSelectionChanged(Sender: TObject);
|
procedure ListTreeSelectionChanged(Sender: TObject);
|
||||||
procedure miCollapseAllClick(Sender: TObject);
|
procedure miCollapseAllClick(Sender: TObject);
|
||||||
@ -102,9 +101,9 @@ type
|
|||||||
FAddCompNewLeft, FAddCompNewTop: Integer;
|
FAddCompNewLeft, FAddCompNewTop: Integer;
|
||||||
FAddCompNewParent: TComponent;
|
FAddCompNewParent: TComponent;
|
||||||
procedure ClearSelection;
|
procedure ClearSelection;
|
||||||
procedure SelectionWasChanged;
|
|
||||||
procedure ComponentWasAdded({%H-}ALookupRoot, {%H-}AComponent: TComponent;
|
procedure ComponentWasAdded({%H-}ALookupRoot, {%H-}AComponent: TComponent;
|
||||||
{%H-}ARegisteredComponent: TRegisteredComponent);
|
{%H-}ARegisteredComponent: TRegisteredComponent);
|
||||||
|
procedure SelectionWasChanged;
|
||||||
procedure DoComponentInheritence(Comp: TRegisteredComponent);
|
procedure DoComponentInheritence(Comp: TRegisteredComponent);
|
||||||
procedure UpdateComponents;
|
procedure UpdateComponents;
|
||||||
procedure UpdateButtonState;
|
procedure UpdateButtonState;
|
||||||
@ -158,14 +157,26 @@ begin
|
|||||||
begin
|
begin
|
||||||
UpdateComponents;
|
UpdateComponents;
|
||||||
TreeFilterEd.InvalidateFilter;
|
TreeFilterEd.InvalidateFilter;
|
||||||
IDEComponentPalette.AddHandlerSelectionChanged(@SelectionWasChanged);
|
|
||||||
IDEComponentPalette.AddHandlerComponentAdded(@ComponentWasAdded);
|
IDEComponentPalette.AddHandlerComponentAdded(@ComponentWasAdded);
|
||||||
|
IDEComponentPalette.AddHandlerSelectionChanged(@SelectionWasChanged);
|
||||||
|
IDEComponentPalette.AddHandlerUpdated(@UpdateComponents);
|
||||||
end;
|
end;
|
||||||
chbKeepOpen.Checked := EnvironmentOptions.ComponentListKeepOpen;
|
chbKeepOpen.Checked := EnvironmentOptions.ComponentListKeepOpen;
|
||||||
PageControl.PageIndex := EnvironmentOptions.ComponentListPageIndex;
|
PageControl.PageIndex := EnvironmentOptions.ComponentListPageIndex;
|
||||||
PageControlChange(Nil);
|
PageControlChange(Nil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
destructor TComponentListForm.Destroy;
|
||||||
|
begin
|
||||||
|
if Assigned(IDEComponentPalette) then begin
|
||||||
|
IDEComponentPalette.RemoveHandlerUpdated(@UpdateComponents);
|
||||||
|
IDEComponentPalette.RemoveHandlerSelectionChanged(@SelectionWasChanged);
|
||||||
|
IDEComponentPalette.RemoveHandlerComponentAdded(@ComponentWasAdded);
|
||||||
|
end;
|
||||||
|
ComponentListForm := nil;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TComponentListForm.AddSelectedComponent;
|
procedure TComponentListForm.AddSelectedComponent;
|
||||||
var
|
var
|
||||||
AComponent: TRegisteredComponent;
|
AComponent: TRegisteredComponent;
|
||||||
@ -214,14 +225,6 @@ begin
|
|||||||
EnvironmentOptions.ComponentListKeepOpen := chbKeepOpen.Checked;
|
EnvironmentOptions.ComponentListKeepOpen := chbKeepOpen.Checked;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TComponentListForm.Destroy;
|
|
||||||
begin
|
|
||||||
if Assigned(IDEComponentPalette) then
|
|
||||||
IDEComponentPalette.RemoveHandlerComponentAdded(@ComponentWasAdded);
|
|
||||||
ComponentListForm := nil;
|
|
||||||
inherited Destroy;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TComponentListForm.FormShow(Sender: TObject);
|
procedure TComponentListForm.FormShow(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
//DebugLn(['*** TComponentListForm.FormShow, Parent=', Parent, ', Parent.Parent=', ParentParent]);
|
//DebugLn(['*** TComponentListForm.FormShow, Parent=', Parent, ', Parent.Parent=', ParentParent]);
|
||||||
@ -238,12 +241,6 @@ begin
|
|||||||
PageControl.AnchorSideBottom.Side := asrBottom;
|
PageControl.AnchorSideBottom.Side := asrBottom;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TComponentListForm.FormActivate(Sender: TObject);
|
|
||||||
begin
|
|
||||||
if Assigned(IDEComponentPalette) and (IDEComponentPalette.ChangeStamp<>PrevChangeStamp) then
|
|
||||||
UpdateComponents;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TComponentListForm.ClearSelection;
|
procedure TComponentListForm.ClearSelection;
|
||||||
begin
|
begin
|
||||||
ListTree.Selected := Nil;
|
ListTree.Selected := Nil;
|
||||||
@ -265,22 +262,6 @@ begin
|
|||||||
aTree.Selected.MakeVisible;
|
aTree.Selected.MakeVisible;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TComponentListForm.SelectionWasChanged;
|
|
||||||
begin
|
|
||||||
SelectionToolButton.Down := (IDEComponentPalette.Selected = nil);
|
|
||||||
|
|
||||||
// ToDo: Select the component in active treeview.
|
|
||||||
if FIgnoreSelection then
|
|
||||||
Exit;
|
|
||||||
|
|
||||||
if ListTree.IsVisible then
|
|
||||||
SelectTreeComp(ListTree)
|
|
||||||
else if PalletteTree.IsVisible then
|
|
||||||
SelectTreeComp(PalletteTree)
|
|
||||||
else if InheritanceTree.IsVisible then
|
|
||||||
SelectTreeComp(InheritanceTree)
|
|
||||||
end;
|
|
||||||
|
|
||||||
function GetSelectedTreeComp(aTree: TTreeView): TRegisteredComponent;
|
function GetSelectedTreeComp(aTree: TTreeView): TRegisteredComponent;
|
||||||
begin
|
begin
|
||||||
if Assigned(aTree.Selected) then
|
if Assigned(aTree.Selected) then
|
||||||
@ -312,6 +293,20 @@ begin
|
|||||||
UpdateButtonState;
|
UpdateButtonState;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TComponentListForm.SelectionWasChanged;
|
||||||
|
begin
|
||||||
|
SelectionToolButton.Down := (IDEComponentPalette.Selected = nil);
|
||||||
|
// ToDo: Select the component in active treeview.
|
||||||
|
if FIgnoreSelection then
|
||||||
|
Exit;
|
||||||
|
if ListTree.IsVisible then
|
||||||
|
SelectTreeComp(ListTree)
|
||||||
|
else if PalletteTree.IsVisible then
|
||||||
|
SelectTreeComp(PalletteTree)
|
||||||
|
else if InheritanceTree.IsVisible then
|
||||||
|
SelectTreeComp(InheritanceTree)
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TComponentListForm.UpdateButtonState;
|
procedure TComponentListForm.UpdateButtonState;
|
||||||
begin
|
begin
|
||||||
OKButton.Enabled := Assigned(GetSelectedComponent);
|
OKButton.Enabled := Assigned(GetSelectedComponent);
|
||||||
@ -410,12 +405,14 @@ begin
|
|||||||
for i := 0 to IDEComponentPalette.Pages.Count-1 do
|
for i := 0 to IDEComponentPalette.Pages.Count-1 do
|
||||||
begin
|
begin
|
||||||
Pg := IDEComponentPalette.Pages[i];
|
Pg := IDEComponentPalette.Pages[i];
|
||||||
|
if not Pg.Visible then Continue;
|
||||||
Comps := IDEComponentPalette.RefUserCompsForPage(Pg.PageName);
|
Comps := IDEComponentPalette.RefUserCompsForPage(Pg.PageName);
|
||||||
// Palette layout Page header
|
// Palette layout Page header
|
||||||
ParentNode := PalletteTree.Items.AddChild(nil, Pg.PageName);
|
ParentNode := PalletteTree.Items.AddChild(nil, Pg.PageName);
|
||||||
// Iterate components of one page
|
// Iterate components of one page
|
||||||
for j := 0 to Comps.Count-1 do begin
|
for j := 0 to Comps.Count-1 do begin
|
||||||
Comp := Comps[j];
|
Comp := Comps[j];
|
||||||
|
if not Comp.Visible then Continue;
|
||||||
// Flat list item
|
// Flat list item
|
||||||
AListNode := ListTree.Items.AddChildObject(Nil, Comp.ComponentClass.ClassName, Comp);
|
AListNode := ListTree.Items.AddChildObject(Nil, Comp.ComponentClass.ClassName, Comp);
|
||||||
// Palette layout item
|
// Palette layout item
|
||||||
|
Loading…
Reference in New Issue
Block a user