IDE: Use truely original pages and comps as reference when saving palette configuration.

git-svn-id: trunk@47261 -
This commit is contained in:
juha 2014-12-28 13:50:35 +00:00
parent bd66a6083c
commit 9e3b5ca504
3 changed files with 26 additions and 33 deletions

View File

@ -210,10 +210,10 @@ type
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
procedure Clear; procedure Clear;
procedure AssignOrigCompsForPage(DestComps: TStringList; function AssignOrigCompsForPage(PageName: string;
PageName: string); virtual; abstract; DestComps: TStringList): Boolean; virtual; abstract;
procedure AssignOrigVisibleCompsForPage(DestComps: TStringList; function AssignOrigVisibleCompsForPage(PageName: string;
PageName: string); virtual; abstract; DestComps: TStringList): Boolean; 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;

View File

@ -177,8 +177,10 @@ type
procedure RegisterCustomIDEComponents( procedure RegisterCustomIDEComponents(
const RegisterProc: RegisterUnitComponentProc); override; const RegisterProc: RegisterUnitComponentProc); override;
procedure Update(ForceUpdateAll: Boolean); override; procedure Update(ForceUpdateAll: Boolean); override;
procedure AssignOrigCompsForPage(DestComps: TStringList; PageName: string); override; function AssignOrigCompsForPage(PageName: string;
procedure AssignOrigVisibleCompsForPage(DestComps: TStringList; PageName: string); override; DestComps: TStringList): Boolean; override;
function AssignOrigVisibleCompsForPage(PageName: string;
DestComps: TStringList): Boolean; 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;
@ -286,7 +288,7 @@ begin
if i >= 0 then // Add components reordered by user. if i >= 0 then // Add components reordered by user.
DstComps.Assign(fOptions.ComponentPages.Objects[i] as TStringList) DstComps.Assign(fOptions.ComponentPages.Objects[i] as TStringList)
else // Add components that were not reordered. else // Add components that were not reordered.
fPalette.AssignOrigCompsForPage(DstComps, PgName); fPalette.AssignOrigCompsForPage(PgName, DstComps);
end; end;
end; end;
@ -950,12 +952,15 @@ begin
end; end;
end; end;
procedure TComponentPalette.AssignOrigCompsForPage(DestComps: TStringList; PageName: string); function TComponentPalette.AssignOrigCompsForPage(PageName: string;
DestComps: TStringList): Boolean;
// Returns True if the page was found.
var var
sl: TStringList; sl: TStringList;
i: Integer; i: Integer;
begin begin
if fOrigComponentPageCache.Find(PageName, i) then begin Result := fOrigComponentPageCache.Find(PageName, i);
if Result then begin
sl := fOrigComponentPageCache.Objects[i] as TStringList; sl := fOrigComponentPageCache.Objects[i] as TStringList;
DestComps.Assign(sl); DestComps.Assign(sl);
end end
@ -964,20 +969,20 @@ begin
//raise Exception.Create(Format('AssignOrigCompsForPage: %s not found in cache.', [PageName])); //raise Exception.Create(Format('AssignOrigCompsForPage: %s not found in cache.', [PageName]));
end; end;
procedure TComponentPalette.AssignOrigVisibleCompsForPage(DestComps: TStringList; function TComponentPalette.AssignOrigVisibleCompsForPage(PageName: string;
PageName: string); DestComps: TStringList): Boolean;
// Returns True if the page was found.
var var
sl: TStringList; sl: TStringList;
i: Integer; i: Integer;
begin begin
DestComps.Clear; DestComps.Clear;
if fOrigComponentPageCache.Find(PageName, i) then Result := fOrigComponentPageCache.Find(PageName, i);
begin if not Result then Exit;
sl := fOrigComponentPageCache.Objects[i] as TStringList; sl := fOrigComponentPageCache.Objects[i] as TStringList;
for i := 0 to sl.Count-1 do for i := 0 to sl.Count-1 do
if FindComponent(sl[i]).Visible then if FindComponent(sl[i]).Visible then
DestComps.Add(sl[i]); DestComps.Add(sl[i]);
end;
end; end;
function TComponentPalette.RefUserCompsForPage(PageName: string): TStringList; function TComponentPalette.RefUserCompsForPage(PageName: string): TStringList;

View File

@ -216,9 +216,7 @@ end;
procedure TCompPaletteOptionsFrame.WritePages(cpo: TCompPaletteOptions); procedure TCompPaletteOptionsFrame.WritePages(cpo: TCompPaletteOptions);
var var
OrigPages, UserPages: TStringList; OrigPages, UserPages: TStringList;
Pg: TBaseComponentPage;
i: Integer; i: Integer;
PgName: String;
begin begin
Assert(Assigned(IDEComponentPalette), Assert(Assigned(IDEComponentPalette),
'TCompPaletteOptionsFrame.WritePages: IDEComponentPalette is not assigned.'); 'TCompPaletteOptionsFrame.WritePages: IDEComponentPalette is not assigned.');
@ -227,12 +225,7 @@ begin
try try
// Collect original page names // Collect original page names
for i := 0 to IDEComponentPalette.OrigPagePriorities.Count-1 do for i := 0 to IDEComponentPalette.OrigPagePriorities.Count-1 do
begin OrigPages.Add(IDEComponentPalette.OrigPagePriorities.Keys[i]);
PgName := IDEComponentPalette.OrigPagePriorities.Keys[i];
Pg := IDEComponentPalette.GetPage(PgName);
if Assigned(Pg) and Pg.Visible then
OrigPages.Add(Pg.PageName);
end;
// Collect user defined page names // Collect user defined page names
for i := 1 to PagesListBox.Items.Count-1 do // Skip "all components" page for i := 1 to PagesListBox.Items.Count-1 do // Skip "all components" page
UserPages.Add(PagesListBox.Items[i]); UserPages.Add(PagesListBox.Items[i]);
@ -250,7 +243,6 @@ end;
procedure TCompPaletteOptionsFrame.WriteComponents(cpo: TCompPaletteOptions); procedure TCompPaletteOptionsFrame.WriteComponents(cpo: TCompPaletteOptions);
var var
UserComps, OrigComps: TStringList; UserComps, OrigComps: TStringList;
Pg: TBaseComponentPage;
PgName: String; PgName: String;
i: Integer; i: Integer;
begin begin
@ -262,12 +254,8 @@ begin
PgName := PagesListBox.Items[i]; PgName := PagesListBox.Items[i];
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); // Collect original visible components from this page.
if Assigned(Pg) and Pg.Visible then // Can be Nil if this page was added or renamed. IDEComponentPalette.AssignOrigVisibleCompsForPage(PgName, OrigComps);
// Collect original visible components from this page.
IDEComponentPalette.AssignOrigVisibleCompsForPage(OrigComps, PgName)
else
OrigComps.Clear;
// Differs from original order -> add configuration for components. // Differs from original order -> add configuration for components.
if (OrigComps.Count=0) or not OrigComps.Equals(UserComps) then if (OrigComps.Count=0) or not OrigComps.Equals(UserComps) then
cpo.AssignComponentPage(PgName, UserComps); cpo.AssignComponentPage(PgName, UserComps);