IdeIntf: Move also CreatePagesFromUserOrder from ComponentPalette to ComponentReg.

git-svn-id: trunk@48309 -
This commit is contained in:
juha 2015-03-12 23:01:53 +00:00
parent c0b38940f9
commit 0fc74606c5
2 changed files with 82 additions and 81 deletions

View File

@ -151,6 +151,7 @@ type
FPalette: TBaseComponentPalette;
FVisible: boolean;
protected
FIndex: Integer; // Index in the Pages container.
procedure SetVisible(const AValue: boolean); virtual;
procedure OnComponentVisibleChanged(AComponent: TRegisteredComponent); virtual;
public
@ -162,7 +163,7 @@ type
property Visible: boolean read FVisible write SetVisible;
end;
//TBaseComponentPageClass = class of TBaseComponentPage;
TBaseComponentPageClass = class of TBaseComponentPage;
{ TBaseComponentPalette }
@ -184,7 +185,7 @@ type
TBaseComponentPalette = class
private
FHandlers: array[TComponentPaletteHandlerType] of TMethodList;
//FBaseComponentPageClass: TBaseComponentPageClass;
FComponentPageClass: TBaseComponentPageClass;
FOnBeginUpdate: TNotifyEvent;
FOnEndUpdate: TEndUpdatePaletteEvent;
FHideControls: boolean;
@ -213,7 +214,7 @@ type
fOrigComponentPageCache: TStringList; // Original
fUserComponentPageCache: TStringList; // User ordered
procedure CacheOrigComponentPages;
function CreatePagesFromUserOrder: Boolean;
procedure DoChange; virtual;
procedure DoBeginUpdate; virtual;
procedure DoEndUpdate(Changed: boolean); virtual;
@ -224,7 +225,6 @@ type
procedure OnPageVisibleChanged({%H-}APage: TBaseComponentPage); virtual;
function VoteCompVisibility(AComponent: TRegisteredComponent): Boolean; virtual;
function GetSelected: TRegisteredComponent; virtual;
//procedure SetBaseComponentPageClass(const AValue: TBaseComponentPageClass); virtual;
procedure SetSelected(const AValue: TRegisteredComponent); virtual; abstract;
public
constructor Create(EnvPaletteOptions: TCompPaletteOptions);
@ -265,7 +265,8 @@ type
property Pages: TBaseComponentPageList read fPages;
property Comps: TRegisteredComponentList read fComps;
property OrigPagePriorities: TPagePriorityList read fOrigPagePriorities;
//property BaseComponentPageClass: TBaseComponentPageClass read FBaseComponentPageClass;
property ComponentPageClass: TBaseComponentPageClass read FComponentPageClass
write FComponentPageClass;
property UpdateLock: integer read FUpdateLock;
property ChangeStamp: integer read fChangeStamp;
property OnBeginUpdate: TNotifyEvent read FOnBeginUpdate write FOnBeginUpdate;
@ -277,6 +278,10 @@ type
end;
const
{$IFDEF VerboseComponentPalette}
CompPalVerbPgName = 'Dialogs'; //'Standard';
{$ENDIF}
var
IDEComponentPalette: TBaseComponentPalette = nil;
@ -732,6 +737,75 @@ begin
end;
end;
function TBaseComponentPalette.CreatePagesFromUserOrder: Boolean;
var
UserPageI, CurPgInd, CompI: Integer;
aVisibleCompCnt: integer;
PgName: String;
Pg: TBaseComponentPage;
CompNames, UserComps: TStringList;
Comp: TRegisteredComponent;
begin
Result := True;
fUserComponentPageCache.Clear;
for UserPageI := 0 to fUserOrder.ComponentPages.Count-1 do
begin
PgName := fUserOrder.ComponentPages[UserPageI];
CurPgInd := IndexOfPageName(PgName);
if CurPgInd = -1 then begin
// Create a new page
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.CreatePagesFromUserOrder, page ', PgName, ' index ',UserPageI]);
{$ENDIF}
Pg := ComponentPageClass.Create(PgName);
fPages.Insert(UserPageI, Pg);
Pg.Palette := Self;
end
else if CurPgInd <> UserPageI then begin
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.CreatePagesFromUserOrder, move ', PgName, ' from ',CurPgInd, ' to ',UserPageI]);
{$ENDIF}
fPages.Move(CurPgInd, UserPageI); // Move page to right place.
end;
Pg := Pages[UserPageI];
Pg.FIndex := UserPageI;
Assert(PgName = Pg.PageName,
Format('TComponentPalette.CreatePagesFromUserOrder: Page names differ, "%s" and "%s".',
[PgName, Pg.PageName]));
// New cache page
UserComps := TStringList.Create;
UserComps.CaseSensitive := True;
fUserComponentPageCache.AddObject(PgName, UserComps);
// Associate components belonging to this page
aVisibleCompCnt := 0;
CompNames := TStringList(fUserOrder.ComponentPages.Objects[UserPageI]);
for CompI := 0 to CompNames.Count-1 do
begin
Comp := FindComponent(CompNames[CompI]);
if not Assigned(Comp) then Continue;
Comp.RealPage := Pg;
UserComps.AddObject(CompNames[CompI], Comp);
if VoteCompVisibility(Comp) then
inc(aVisibleCompCnt);
end;
{$IFDEF VerboseComponentPalette}
if PgName=CompPalVerbPgName then
debugln(['TComponentPalette.CreatePagesFromUserOrder HideControls=',HideControls,' aVisibleCompCnt=',aVisibleCompCnt]);
{$ENDIF}
Pg.Visible := (CompareText(PgName,'Hidden')<>0) and (aVisibleCompCnt>0);
end;
// Remove left-over pages.
while fPages.Count > fUserOrder.ComponentPages.Count do begin
Pg := fPages[fPages.Count-1];
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.CreatePagesFromUserOrder: Deleting left-over page=',
Pg.PageName, ', Index=', fPages.Count-1]);
{$ENDIF}
fPages.Delete(fPages.Count-1);
Pg.Free;
end;
end;
function TBaseComponentPalette.AssignOrigCompsForPage(PageName: string;
DestComps: TStringList): Boolean;
// Returns True if the page was found.

View File

@ -49,9 +49,6 @@ uses
const
CompPalSelectionToolBtnPrefix = 'PaletteSelectBtn';
CompPaletteCompBtnPrefix = 'PaletteBtn';
{$IFDEF VerboseComponentPalette}
CompPalVerbPgName = 'Dialogs'; //'Standard';
{$ENDIF}
type
TComponentSelectionMode = (
csmSingle, // reset selection on component add
@ -65,7 +62,6 @@ type
fPageComponent: TCustomPage;
fSelectButton: TComponent;
fBtnIndex: integer;
fIndex: Integer; // Index in the Pages container.
fCompNames: TStringList; // Reference to component names.
fGuiCreated: Boolean;
procedure ReAlignButtons;
@ -124,7 +120,6 @@ type
// Component layout :
procedure ReAlignButtons(aSheet: TCustomPage);
procedure UpdateNoteBookButtons(ForceUpdateAll: Boolean);
function CreatePagesFromUserOrder: Boolean;
procedure RemoveUnneededPage(aSheet: TCustomPage);
procedure SetPageControl(const AValue: TPageControl);
@ -519,14 +514,14 @@ begin
DebugLn(['TComponentPalette.CreateButtons PAGE="',PageName,'", PageIndex=',PageComponent.PageIndex]);
{$ENDIF}
// create selection button
CreateSelectionButton(IntToStr(fIndex), ScrollBox);
CreateSelectionButton(IntToStr(FIndex), ScrollBox);
// create component buttons and delete unneeded ones
fBtnIndex := 0;
Assert(Assigned(fCompNames), 'TComponentPage.CreateButtons: fCompNames is not assigned.');
for i := 0 to fCompNames.Count-1 do begin
Comp := Pal.FindComponent(fCompNames[i]) as TPkgComponent;
if Assigned(Comp) then
CreateOrDelButton(Comp, Format('%d_%d_',[fIndex,i]), ScrollBox);
CreateOrDelButton(Comp, Format('%d_%d_',[FIndex,i]), ScrollBox);
end;
fGuiCreated := True;
end;
@ -905,75 +900,6 @@ begin
FPageControl.EnableAlign;
end;
function TComponentPalette.CreatePagesFromUserOrder: Boolean;
var
UserPageI, CurPgInd, CompI: Integer;
aVisibleCompCnt: integer;
PgName: String;
Pg: TComponentPage;
CompNames, UserComps: TStringList;
Comp: TRegisteredComponent;
begin
Result := True;
fUserComponentPageCache.Clear;
for UserPageI := 0 to fUserOrder.ComponentPages.Count-1 do
begin
PgName := fUserOrder.ComponentPages[UserPageI];
CurPgInd := IndexOfPageName(PgName);
if CurPgInd = -1 then begin
// Create a new page
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.CreatePagesFromUserOrder, page ', PgName, ' index ',UserPageI]);
{$ENDIF}
Pg := TComponentPage.Create(PgName);
fPages.Insert(UserPageI, Pg);
Pg.Palette := Self;
end
else if CurPgInd <> UserPageI then begin
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.CreatePagesFromUserOrder, move ', PgName, ' from ',CurPgInd, ' to ',UserPageI]);
{$ENDIF}
fPages.Move(CurPgInd, UserPageI); // Move page to right place.
end;
Pg := TComponentPage(Pages[UserPageI]);
Pg.fIndex := UserPageI;
Assert(PgName = Pg.PageName,
Format('TComponentPalette.CreatePagesFromUserOrder: Page names differ, "%s" and "%s".',
[PgName, Pg.PageName]));
// New cache page
UserComps := TStringList.Create;
UserComps.CaseSensitive := True;
fUserComponentPageCache.AddObject(PgName, UserComps);
// Associate components belonging to this page
aVisibleCompCnt := 0;
CompNames := TStringList(fUserOrder.ComponentPages.Objects[UserPageI]);
for CompI := 0 to CompNames.Count-1 do
begin
Comp := FindComponent(CompNames[CompI]);
if not Assigned(Comp) then Continue;
Comp.RealPage := Pg;
UserComps.AddObject(CompNames[CompI], Comp);
if VoteCompVisibility(Comp) then
inc(aVisibleCompCnt);
end;
{$IFDEF VerboseComponentPalette}
if PgName=CompPalVerbPgName then
debugln(['TComponentPalette.CreatePagesFromUserOrder HideControls=',HideControls,' aVisibleCompCnt=',aVisibleCompCnt]);
{$ENDIF}
Pg.Visible := (CompareText(PgName,'Hidden')<>0) and (aVisibleCompCnt>0);
end;
// Remove left-over pages.
while fPages.Count > fUserOrder.ComponentPages.Count do begin
Pg := TComponentPage(fPages[fPages.Count-1]);
{$IFDEF VerboseComponentPalette}
DebugLn(['TComponentPalette.CreatePagesFromUserOrder: Deleting left-over page=',
Pg.PageName, ', Index=', fPages.Count-1]);
{$ENDIF}
fPages.Delete(fPages.Count-1);
Pg.Free;
end;
end;
procedure TComponentPalette.DoAfterComponentAdded;
begin
inherited DoAfterComponentAdded;
@ -1062,6 +988,7 @@ begin
try
fOldActivePage:=FPageControl.ActivePage;
fUserOrder.SortPagesAndCompsUserOrder;
ComponentPageClass := TComponentPage; // Used by CreatePagesFromUserOrder
CreatePagesFromUserOrder;
CreatePopupMenu;