mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 00:19:15 +02:00
IDE: Save component palette options correctly when palette is filtered by DataModule.
git-svn-id: trunk@47074 -
This commit is contained in:
parent
cfcbe4b9c7
commit
51cdfe8e79
@ -213,7 +213,8 @@ type
|
|||||||
procedure Clear;
|
procedure Clear;
|
||||||
procedure AssignOrigCompsForPage(DestComps: TStringList;
|
procedure AssignOrigCompsForPage(DestComps: TStringList;
|
||||||
PageName: string); virtual; abstract;
|
PageName: string); virtual; abstract;
|
||||||
function RefOrigCompsForPage(PageName: string): TStringList; virtual; abstract;
|
procedure AssignOrigVisibleCompsForPage(DestComps: TStringList;
|
||||||
|
PageName: string); virtual; abstract;
|
||||||
function RefUserCompsForPage(PageName: string): TStringList; virtual; abstract;
|
function RefUserCompsForPage(PageName: string): TStringList; virtual; abstract;
|
||||||
procedure BeginUpdate(Change: boolean);
|
procedure BeginUpdate(Change: boolean);
|
||||||
procedure EndUpdate;
|
procedure EndUpdate;
|
||||||
|
@ -157,9 +157,8 @@ type
|
|||||||
procedure RegisterCustomIDEComponents(
|
procedure RegisterCustomIDEComponents(
|
||||||
const RegisterProc: RegisterUnitComponentProc); override;
|
const RegisterProc: RegisterUnitComponentProc); override;
|
||||||
procedure Update; override;
|
procedure Update; override;
|
||||||
//procedure UpdateVisible; override;
|
|
||||||
procedure AssignOrigCompsForPage(DestComps: TStringList; PageName: string); override;
|
procedure AssignOrigCompsForPage(DestComps: TStringList; PageName: string); override;
|
||||||
function RefOrigCompsForPage(PageName: string): TStringList; override;
|
procedure AssignOrigVisibleCompsForPage(DestComps: TStringList; PageName: string); override;
|
||||||
function RefUserCompsForPage(PageName: string): TStringList; override;
|
function RefUserCompsForPage(PageName: string): TStringList; override;
|
||||||
public
|
public
|
||||||
property PageControl: TPageControl read FPageControl write SetPageControl;
|
property PageControl: TPageControl read FPageControl write SetPageControl;
|
||||||
@ -603,17 +602,24 @@ begin
|
|||||||
DestComps.Assign(sl);
|
DestComps.Assign(sl);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
raise Exception.Create(Format('AssignCompsFromCache: %s not found in cache.', [PageName]));
|
raise Exception.Create(Format('AssignOrigCompsForPage: %s not found in cache.', [PageName]));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TComponentPalette.RefOrigCompsForPage(PageName: string): TStringList;
|
procedure TComponentPalette.AssignOrigVisibleCompsForPage(DestComps: TStringList;
|
||||||
|
PageName: string);
|
||||||
var
|
var
|
||||||
|
sl: TStringList;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
if fOrigComponentPageCache.Find(PageName, i) then
|
if fOrigComponentPageCache.Find(PageName, i) then
|
||||||
Result := fOrigComponentPageCache.Objects[i] as TStringList
|
begin
|
||||||
|
sl := fOrigComponentPageCache.Objects[i] as TStringList;
|
||||||
|
for i := 0 to sl.Count-1 do
|
||||||
|
if FindComponent(sl[i]).Visible then
|
||||||
|
DestComps.Add(sl[i]);
|
||||||
|
end
|
||||||
else
|
else
|
||||||
Result := Nil;
|
raise Exception.Create(Format('AssignOrigVisibleCompsForPage: %s not found in cache.', [PageName]));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TComponentPalette.RefUserCompsForPage(PageName: string): TStringList;
|
function TComponentPalette.RefUserCompsForPage(PageName: string): TStringList;
|
||||||
|
@ -77,7 +77,7 @@ type
|
|||||||
procedure WritePages(cpo: TCompPaletteOptions);
|
procedure WritePages(cpo: TCompPaletteOptions);
|
||||||
procedure WriteComponents(cpo: TCompPaletteOptions);
|
procedure WriteComponents(cpo: TCompPaletteOptions);
|
||||||
procedure FillPages;
|
procedure FillPages;
|
||||||
procedure InitialComps(aPageName: string; aCompList: TStringList);
|
procedure InitialComps(aPageInd: Integer; aCompList: TStringList);
|
||||||
procedure FillComponents(aPageName: string);
|
procedure FillComponents(aPageName: string);
|
||||||
procedure MarkAsChanged;
|
procedure MarkAsChanged;
|
||||||
procedure UpdatePageMoveButtons(ListIndex: integer);
|
procedure UpdatePageMoveButtons(ListIndex: integer);
|
||||||
@ -189,9 +189,8 @@ begin
|
|||||||
for i := 0 to IDEComponentPalette.OrigPagePriorities.Count-1 do
|
for i := 0 to IDEComponentPalette.OrigPagePriorities.Count-1 do
|
||||||
begin
|
begin
|
||||||
PgName := IDEComponentPalette.OrigPagePriorities.Keys[i];
|
PgName := IDEComponentPalette.OrigPagePriorities.Keys[i];
|
||||||
Pg := IDEComponentPalette.GetPage(PgName, True);
|
Pg := IDEComponentPalette.GetPage(PgName);
|
||||||
Assert(Assigned(Pg), 'TCompPaletteOptionsFrame.WritePages: PageName "'+PgName+'" not found.');
|
if Assigned(Pg) and Pg.Visible then
|
||||||
if (Pg<>nil) and Pg.Visible then
|
|
||||||
OrigPages.Add(Pg.PageName);
|
OrigPages.Add(Pg.PageName);
|
||||||
end;
|
end;
|
||||||
// Collect user defined page names
|
// Collect user defined page names
|
||||||
@ -215,6 +214,7 @@ var
|
|||||||
PgName: String;
|
PgName: String;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
|
OrigComps := Nil;
|
||||||
cpo.ComponentPages.Clear;
|
cpo.ComponentPages.Clear;
|
||||||
for i := 1 to PagesListBox.Count-1 do // Skip all components page
|
for i := 1 to PagesListBox.Count-1 do // Skip all components page
|
||||||
begin
|
begin
|
||||||
@ -222,14 +222,19 @@ begin
|
|||||||
UserComps := PagesListBox.Items.Objects[i] as TStringList;
|
UserComps := PagesListBox.Items.Objects[i] as TStringList;
|
||||||
Assert(Assigned(UserComps), 'TCompPaletteOptionsFrame.WriteComponents: No UserComps for '+PgName);
|
Assert(Assigned(UserComps), 'TCompPaletteOptionsFrame.WriteComponents: No UserComps for '+PgName);
|
||||||
Pg := IDEComponentPalette.GetPage(PgName);
|
Pg := IDEComponentPalette.GetPage(PgName);
|
||||||
if Assigned(Pg) then // Can be Nil if this page was added or renamed.
|
try
|
||||||
// Collect original components from this page
|
if Assigned(Pg) and Pg.Visible then // Can be Nil if this page was added or renamed.
|
||||||
OrigComps := IDEComponentPalette.RefOrigCompsForPage(PgName)
|
begin
|
||||||
else
|
OrigComps := TStringList.Create;
|
||||||
OrigComps := Nil;
|
// Collect original visible components from this page.
|
||||||
// Differs from original order -> add configuration for components
|
IDEComponentPalette.AssignOrigVisibleCompsForPage(OrigComps, PgName)
|
||||||
if (OrigComps=Nil) or not OrigComps.Equals(UserComps) then
|
end;
|
||||||
cpo.AssignComponentPage(PgName, UserComps);
|
// Differs from original order -> add configuration for components.
|
||||||
|
if (OrigComps=Nil) or not OrigComps.Equals(UserComps) then
|
||||||
|
cpo.AssignComponentPage(PgName, UserComps);
|
||||||
|
finally
|
||||||
|
FreeAndNil(OrigComps);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -239,7 +244,9 @@ var
|
|||||||
CompList: TStringList;
|
CompList: TStringList;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
PgName: String;
|
PgName: String;
|
||||||
|
Pg: TBaseComponentPage;
|
||||||
begin
|
begin
|
||||||
|
// First clear existing items and add <All> page.
|
||||||
for i := 0 to PagesListBox.Items.Count-1 do
|
for i := 0 to PagesListBox.Items.Count-1 do
|
||||||
PagesListBox.Items.Objects[i].Free;
|
PagesListBox.Items.Objects[i].Free;
|
||||||
PagesListBox.Clear;
|
PagesListBox.Clear;
|
||||||
@ -248,28 +255,30 @@ begin
|
|||||||
begin
|
begin
|
||||||
PgName := fLocalUserOrder.ComponentPages[i];
|
PgName := fLocalUserOrder.ComponentPages[i];
|
||||||
Assert(PgName<>'', 'TCompPaletteOptionsFrame.FillPages: PageName is empty.');
|
Assert(PgName<>'', 'TCompPaletteOptionsFrame.FillPages: PageName is empty.');
|
||||||
CompList := TStringList.Create; // StringList will hold components for this page.
|
Pg := IDEComponentPalette.GetPage(PgName);
|
||||||
InitialComps(PgName, CompList);
|
Assert(Assigned(Pg), 'TCompPaletteOptionsFrame.FillPages: Page is not assigned.');
|
||||||
PagesListBox.AddItem(PgName, CompList);
|
if Pg.Visible then
|
||||||
|
begin
|
||||||
|
CompList := TStringList.Create; // StringList will hold components for this page.
|
||||||
|
InitialComps(i, CompList);
|
||||||
|
PagesListBox.AddItem(PgName, CompList);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
PagesListBox.ItemIndex := 0; // Activate first item
|
PagesListBox.ItemIndex := 0; // Activate first item
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCompPaletteOptionsFrame.InitialComps(aPageName: string; aCompList: TStringList);
|
procedure TCompPaletteOptionsFrame.InitialComps(aPageInd: Integer; aCompList: TStringList);
|
||||||
var
|
var
|
||||||
OrderedComps: TStringList;
|
OrderedComps: TStringList;
|
||||||
Comp: TRegisteredComponent;
|
Comp: TRegisteredComponent;
|
||||||
CompName: String;
|
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
i := fLocalUserOrder.ComponentPages.IndexOf(aPageName);
|
OrderedComps := fLocalUserOrder.ComponentPages.Objects[aPageInd] as TStringList;
|
||||||
Assert(i > -1, 'TCompPaletteOptionsFrame.InitialComps: PageName "'+aPageName+'" not found');
|
|
||||||
OrderedComps := fLocalUserOrder.ComponentPages.Objects[i] as TStringList;
|
|
||||||
for i := 0 to OrderedComps.Count-1 do
|
for i := 0 to OrderedComps.Count-1 do
|
||||||
begin
|
begin
|
||||||
CompName := OrderedComps[i];
|
Comp := IDEComponentPalette.FindComponent(OrderedComps[i]);
|
||||||
Comp := IDEComponentPalette.FindComponent(CompName);
|
Assert(Assigned(Comp), 'TCompPaletteOptionsFrame.InitialComps: Component "'+
|
||||||
Assert(Assigned(Comp), 'TCompPaletteOptionsFrame.InitialComps: Component "'+CompName+'" not found');
|
OrderedComps[i]+'" not found');
|
||||||
if Comp.Visible then
|
if Comp.Visible then
|
||||||
aCompList.AddObject(Comp.ComponentClass.ClassName, Comp);
|
aCompList.AddObject(Comp.ComponentClass.ClassName, Comp);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user