mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-10 07:17:23 +02:00
IDE: Update component palette correctly when icons are filtered by DataModule.
git-svn-id: trunk@47073 -
This commit is contained in:
parent
1892eb35a8
commit
cfcbe4b9c7
@ -145,7 +145,6 @@ type
|
|||||||
public
|
public
|
||||||
constructor Create(const ThePageName: string);
|
constructor Create(const ThePageName: string);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure UpdateVisible;
|
|
||||||
function GetScrollBox: TScrollBox;
|
function GetScrollBox: TScrollBox;
|
||||||
public
|
public
|
||||||
property PageName: string read FPageName;
|
property PageName: string read FPageName;
|
||||||
@ -188,7 +187,6 @@ type
|
|||||||
const AMethod: TMethod; AsLast: boolean = false);
|
const AMethod: TMethod; AsLast: boolean = false);
|
||||||
procedure RemoveHandler(HandlerType: TComponentPaletteHandlerType;
|
procedure RemoveHandler(HandlerType: TComponentPaletteHandlerType;
|
||||||
const AMethod: TMethod);
|
const AMethod: TMethod);
|
||||||
procedure SetHideControls(const AValue: boolean);
|
|
||||||
protected
|
protected
|
||||||
// List of pages, created based on user ordered and original pages.
|
// List of pages, created based on user ordered and original pages.
|
||||||
fPages: TBaseComponentPageList;
|
fPages: TBaseComponentPageList;
|
||||||
@ -204,7 +202,6 @@ type
|
|||||||
{%H-}Component: TRegisteredComponent); virtual;
|
{%H-}Component: TRegisteredComponent); virtual;
|
||||||
procedure OnComponentVisibleChanged({%H-}AComponent: TRegisteredComponent); virtual;
|
procedure OnComponentVisibleChanged({%H-}AComponent: TRegisteredComponent); virtual;
|
||||||
procedure OnPageVisibleChanged({%H-}APage: TBaseComponentPage); virtual;
|
procedure OnPageVisibleChanged({%H-}APage: TBaseComponentPage); virtual;
|
||||||
procedure Update; virtual;
|
|
||||||
function VoteCompVisibility(AComponent: TRegisteredComponent): Boolean; virtual;
|
function VoteCompVisibility(AComponent: TRegisteredComponent): Boolean; virtual;
|
||||||
function GetSelected: TRegisteredComponent; virtual;
|
function GetSelected: TRegisteredComponent; virtual;
|
||||||
procedure SetBaseComponentPageClass(const AValue: TBaseComponentPageClass); virtual;
|
procedure SetBaseComponentPageClass(const AValue: TBaseComponentPageClass); virtual;
|
||||||
@ -231,7 +228,7 @@ type
|
|||||||
function FindButton(Button: TComponent): TRegisteredComponent;
|
function FindButton(Button: TComponent): TRegisteredComponent;
|
||||||
function CreateNewClassName(const Prefix: string): string;
|
function CreateNewClassName(const Prefix: string): string;
|
||||||
function IndexOfPageComponent(AComponent: TComponent): integer;
|
function IndexOfPageComponent(AComponent: TComponent): integer;
|
||||||
procedure UpdateVisible; virtual;
|
procedure Update; virtual;
|
||||||
procedure IterateRegisteredClasses(Proc: TGetComponentClassEvent);
|
procedure IterateRegisteredClasses(Proc: TGetComponentClassEvent);
|
||||||
procedure RegisterCustomIDEComponents(
|
procedure RegisterCustomIDEComponents(
|
||||||
const RegisterProc: RegisterUnitComponentProc); virtual; abstract;
|
const RegisterProc: RegisterUnitComponentProc); virtual; abstract;
|
||||||
@ -254,7 +251,7 @@ type
|
|||||||
property UpdateLock: integer read FUpdateLock;
|
property UpdateLock: integer read FUpdateLock;
|
||||||
property OnBeginUpdate: TNotifyEvent read FOnBeginUpdate write FOnBeginUpdate;
|
property OnBeginUpdate: TNotifyEvent read FOnBeginUpdate write FOnBeginUpdate;
|
||||||
property OnEndUpdate: TEndUpdatePaletteEvent read FOnEndUpdate write FOnEndUpdate;
|
property OnEndUpdate: TEndUpdatePaletteEvent read FOnEndUpdate write FOnEndUpdate;
|
||||||
property HideControls: boolean read FHideControls write SetHideControls;
|
property HideControls: boolean read FHideControls write FHideControls;
|
||||||
property Selected: TRegisteredComponent read GetSelected write SetSelected;
|
property Selected: TRegisteredComponent read GetSelected write SetSelected;
|
||||||
property OrigPagePriorities: TPagePriorityList read fOrigPagePriorities;
|
property OrigPagePriorities: TPagePriorityList read fOrigPagePriorities;
|
||||||
end;
|
end;
|
||||||
@ -577,20 +574,6 @@ begin
|
|||||||
FPalette.OnComponentVisibleChanged(AComponent);
|
FPalette.OnComponentVisibleChanged(AComponent);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TBaseComponentPage.UpdateVisible;
|
|
||||||
var
|
|
||||||
i: Integer;
|
|
||||||
HasVisibleComponents: Boolean;
|
|
||||||
begin
|
|
||||||
if Palette = nil then Exit;
|
|
||||||
HasVisibleComponents:=false;
|
|
||||||
for i:=0 to Palette.Comps.Count-1 do
|
|
||||||
if (Palette.Comps[i].RealPage = Self) then
|
|
||||||
if Palette.VoteCompVisibility(Palette.Comps[i]) then
|
|
||||||
HasVisibleComponents:=true;
|
|
||||||
Visible:=HasVisibleComponents and (PageName<>'');
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TBaseComponentPage.GetScrollBox: TScrollBox;
|
function TBaseComponentPage.GetScrollBox: TScrollBox;
|
||||||
begin
|
begin
|
||||||
if Assigned(PageComponent) and (PageComponent.ComponentCount > 0)
|
if Assigned(PageComponent) and (PageComponent.ComponentCount > 0)
|
||||||
@ -654,13 +637,6 @@ begin
|
|||||||
FHandlers[HandlerType].Remove(AMethod);
|
FHandlers[HandlerType].Remove(AMethod);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TBaseComponentPalette.SetHideControls(const AValue: boolean);
|
|
||||||
begin
|
|
||||||
if FHideControls=AValue then exit;
|
|
||||||
FHideControls:=AValue;
|
|
||||||
UpdateVisible;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TBaseComponentPalette.DoChange;
|
procedure TBaseComponentPalette.DoChange;
|
||||||
begin
|
begin
|
||||||
if FUpdateLock>0 then
|
if FUpdateLock>0 then
|
||||||
@ -873,16 +849,6 @@ begin
|
|||||||
Result:=-1;
|
Result:=-1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TBaseComponentPalette.UpdateVisible;
|
|
||||||
var
|
|
||||||
i: Integer;
|
|
||||||
begin
|
|
||||||
BeginUpdate(false);
|
|
||||||
for i:=0 to Pages.Count-1 do
|
|
||||||
Pages[i].UpdateVisible;
|
|
||||||
EndUpdate;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TBaseComponentPalette.IterateRegisteredClasses(Proc: TGetComponentClassEvent);
|
procedure TBaseComponentPalette.IterateRegisteredClasses(Proc: TGetComponentClassEvent);
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
|
@ -103,17 +103,21 @@ type
|
|||||||
fUnregisteredIcon: TCustomBitmap;
|
fUnregisteredIcon: TCustomBitmap;
|
||||||
fSelectButtonIcon: TCustomBitmap;
|
fSelectButtonIcon: TCustomBitmap;
|
||||||
fUpdatingPageControl: boolean;
|
fUpdatingPageControl: boolean;
|
||||||
|
// Used by UpdateNoteBookButtons
|
||||||
fOldActivePage: TTabSheet;
|
fOldActivePage: TTabSheet;
|
||||||
// User ordered + original pages and components.
|
fVisiblePageIndex: integer;
|
||||||
|
fBtnIndex: integer;
|
||||||
|
// User ordered + original pages and components
|
||||||
fUserOrder: TCompPaletteUserOrder;
|
fUserOrder: TCompPaletteUserOrder;
|
||||||
|
//procedure AssociatePageComps(aPageInd: Integer; aCompNames: TStringList);
|
||||||
|
function CreatePagesFromUserOrder: Boolean;
|
||||||
procedure CacheOrigComponentPages;
|
procedure CacheOrigComponentPages;
|
||||||
procedure CreateButtons(aPageIndex: integer; aCompNames: TStringList);
|
procedure CreateButtons(aPageIndex: integer; aCompNames: TStringList);
|
||||||
procedure CreateOrDelButton(aComp: TPkgComponent;
|
procedure CreateOrDelButton(aComp: TPkgComponent; aButtonUniqueName: string;
|
||||||
aButtonUniqueName: string; aScrollBox: TScrollBox; var aBtnIndex: integer);
|
aScrollBox: TScrollBox);
|
||||||
procedure CreateSelectionButton(aCompPage: TBaseComponentPage;
|
procedure CreateSelectionButton(aCompPage: TBaseComponentPage;
|
||||||
aButtonUniqueName: string; aScrollBox: TScrollBox);
|
aButtonUniqueName: string; aScrollBox: TScrollBox);
|
||||||
procedure InsertVisiblePage(aCompPage: TBaseComponentPage;
|
procedure InsertVisiblePage(aCompPage: TBaseComponentPage);
|
||||||
var aVisPageIndex: integer);
|
|
||||||
procedure RemoveUnneededPage(aSheet: TCustomPage);
|
procedure RemoveUnneededPage(aSheet: TCustomPage);
|
||||||
procedure SetPageControl(const AValue: TPageControl);
|
procedure SetPageControl(const AValue: TPageControl);
|
||||||
procedure SelectionToolClick(Sender: TObject);
|
procedure SelectionToolClick(Sender: TObject);
|
||||||
@ -132,7 +136,6 @@ type
|
|||||||
procedure OnPageAddedComponent(Component: TRegisteredComponent); override;
|
procedure OnPageAddedComponent(Component: TRegisteredComponent); override;
|
||||||
procedure OnPageRemovedComponent(Page: TBaseComponentPage;
|
procedure OnPageRemovedComponent(Page: TBaseComponentPage;
|
||||||
Component: TRegisteredComponent); override;
|
Component: TRegisteredComponent); override;
|
||||||
procedure Update; override;
|
|
||||||
procedure CheckComponentDesignerVisible(AComponent: TComponent;
|
procedure CheckComponentDesignerVisible(AComponent: TComponent;
|
||||||
var Invisible: boolean);
|
var Invisible: boolean);
|
||||||
procedure SetSelected(const AValue: TRegisteredComponent); override;
|
procedure SetSelected(const AValue: TRegisteredComponent); override;
|
||||||
@ -142,19 +145,19 @@ type
|
|||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure Clear;
|
procedure Clear;
|
||||||
procedure ClearButtons;
|
procedure ClearButtons;
|
||||||
function CreatePagesFromUserOrder: Boolean;
|
|
||||||
procedure DoAfterComponentAdded; override;
|
procedure DoAfterComponentAdded; override;
|
||||||
function GetUnregisteredIcon: TCustomBitmap;
|
function GetUnregisteredIcon: TCustomBitmap;
|
||||||
function GetSelectButtonIcon: TCustomBitmap;
|
function GetSelectButtonIcon: TCustomBitmap;
|
||||||
function SelectButton(Button: TComponent): boolean;
|
function SelectButton(Button: TComponent): boolean;
|
||||||
procedure ReAlignButtons(Page: TCustomPage);
|
procedure ReAlignButtons(aSheet: TCustomPage);
|
||||||
procedure UpdateNoteBookButtons;
|
procedure UpdateNoteBookButtons;
|
||||||
procedure OnGetNonVisualCompIcon(Sender: TObject;
|
procedure OnGetNonVisualCompIcon(Sender: TObject;
|
||||||
AComponent: TComponent; var Icon: TCustomBitmap);
|
AComponent: TComponent; var Icon: TCustomBitmap);
|
||||||
function FindComponent(const CompClassName: string): TRegisteredComponent; override;
|
function FindComponent(const CompClassName: string): TRegisteredComponent; override;
|
||||||
procedure RegisterCustomIDEComponents(
|
procedure RegisterCustomIDEComponents(
|
||||||
const RegisterProc: RegisterUnitComponentProc); override;
|
const RegisterProc: RegisterUnitComponentProc); override;
|
||||||
procedure UpdateVisible; 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;
|
function RefOrigCompsForPage(PageName: string): TStringList; override;
|
||||||
function RefUserCompsForPage(PageName: string): TStringList; override;
|
function RefUserCompsForPage(PageName: string): TStringList; override;
|
||||||
@ -477,8 +480,10 @@ begin
|
|||||||
if (FSelected<>nil) and (FPageControl<>nil) then begin
|
if (FSelected<>nil) and (FPageControl<>nil) then begin
|
||||||
TSpeedButton(FSelected.Button).Down:=true;
|
TSpeedButton(FSelected.Button).Down:=true;
|
||||||
Assert(Assigned(FSelected.RealPage), 'TComponentPalette.SetSelected: FSelected.RealPage = Nil.');
|
Assert(Assigned(FSelected.RealPage), 'TComponentPalette.SetSelected: FSelected.RealPage = Nil.');
|
||||||
|
{$IFDEF VerboseComponentPalette}
|
||||||
DebugLn(['TComponentPalette.SetSelected: Setting FPageControl.ActivePage=',
|
DebugLn(['TComponentPalette.SetSelected: Setting FPageControl.ActivePage=',
|
||||||
FSelected.RealPage.PageComponent, ', Index ', FSelected.RealPage.PageComponent.PageIndex]);
|
FSelected.RealPage.PageComponent, ', Index ', FSelected.RealPage.PageComponent.PageIndex]);
|
||||||
|
{$ENDIF}
|
||||||
FPageControl.ActivePage:=TTabSheet(FSelected.RealPage.PageComponent);
|
FPageControl.ActivePage:=TTabSheet(FSelected.RealPage.PageComponent);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -697,39 +702,58 @@ end;
|
|||||||
|
|
||||||
function TComponentPalette.CreatePagesFromUserOrder: Boolean;
|
function TComponentPalette.CreatePagesFromUserOrder: Boolean;
|
||||||
var
|
var
|
||||||
i, j: Integer;
|
UserPageI, CurPgInd, CompI: Integer;
|
||||||
|
HasVisibleComps: Boolean;
|
||||||
PgName: String;
|
PgName: String;
|
||||||
Pg: TBaseComponentPage;
|
Pg: TBaseComponentPage;
|
||||||
CompNames, UserComps: TStringList;
|
CompNames, UserComps: TStringList;
|
||||||
Comp: TRegisteredComponent;
|
Comp: TRegisteredComponent;
|
||||||
begin
|
begin
|
||||||
Result := True;
|
Result := True;
|
||||||
for i:=0 to fPages.Count-1 do
|
|
||||||
fPages[i].Free;
|
|
||||||
fPages.Clear;
|
|
||||||
fUserComponentPageCache.Clear;
|
fUserComponentPageCache.Clear;
|
||||||
for i := 0 to fUserOrder.ComponentPages.Count-1 do
|
for UserPageI := 0 to fUserOrder.ComponentPages.Count-1 do
|
||||||
begin
|
begin
|
||||||
PgName := fUserOrder.ComponentPages[i];
|
PgName := fUserOrder.ComponentPages[UserPageI];
|
||||||
|
CurPgInd := IndexOfPageName(PgName);
|
||||||
|
if CurPgInd = -1 then begin
|
||||||
|
// Create a new page
|
||||||
|
Pg := TBaseComponentPage.Create(PgName);
|
||||||
|
fPages.Insert(UserPageI, Pg);
|
||||||
|
Pg.Palette := Self;
|
||||||
|
end
|
||||||
|
else if CurPgInd <> UserPageI then
|
||||||
|
Pages.Move(CurPgInd, UserPageI); // Move page to right place.
|
||||||
|
Pg := Pages[UserPageI];
|
||||||
|
Assert(PgName = Pg.PageName,
|
||||||
|
Format('TComponentPalette.CreatePagesFromUserOrder: Page names differ, "%s" and "%s".',
|
||||||
|
[PgName, Pg.PageName]));
|
||||||
// New cache page
|
// New cache page
|
||||||
UserComps := TStringList.Create;
|
UserComps := TStringList.Create;
|
||||||
fUserComponentPageCache.AddObject(PgName, UserComps);
|
fUserComponentPageCache.AddObject(PgName, UserComps);
|
||||||
// Create a new page
|
// Associate components belonging to this page
|
||||||
Pg:=TBaseComponentPage.Create(PgName);
|
HasVisibleComps := False;
|
||||||
fPages.Add(Pg);
|
CompNames := TStringList(fUserOrder.ComponentPages.Objects[UserPageI]);
|
||||||
Pg.Palette:=Self;
|
for CompI := 0 to CompNames.Count-1 do
|
||||||
if CompareText(PgName,'Hidden')=0 then
|
|
||||||
Pg.Visible:=false;
|
|
||||||
// Assign components belonging to this page
|
|
||||||
CompNames := TStringList(fUserOrder.ComponentPages.Objects[i]);
|
|
||||||
for j := 0 to CompNames.Count-1 do
|
|
||||||
begin
|
begin
|
||||||
Comp := FindComponent(CompNames[j]);
|
Comp := FindComponent(CompNames[CompI]);
|
||||||
Assert(Assigned(Comp),
|
Assert(Assigned(Comp),
|
||||||
Format('TComponentPalette.CreatePagesFromUserOrder: Comp %s not found.',[CompNames[j]]));
|
Format('TComponentPalette.CreatePagesFromUserOrder: Comp %s not found.',[CompNames[CompI]]));
|
||||||
Comp.RealPage := Pg;
|
Comp.RealPage := Pg;
|
||||||
UserComps.AddObject(CompNames[j], Comp);
|
UserComps.AddObject(CompNames[CompI], Comp);
|
||||||
|
if VoteCompVisibility(Comp) then
|
||||||
|
HasVisibleComps := True;
|
||||||
end;
|
end;
|
||||||
|
Pg.Visible := (CompareText(PgName,'Hidden')<>0) and HasVisibleComps;
|
||||||
|
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;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -767,7 +791,7 @@ begin
|
|||||||
Result := (Selected = NewComponent);
|
Result := (Selected = NewComponent);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TComponentPalette.ReAlignButtons(Page: TCustomPage);
|
procedure TComponentPalette.ReAlignButtons(aSheet: TCustomPage);
|
||||||
var
|
var
|
||||||
j: integer;
|
j: integer;
|
||||||
buttonx: integer;
|
buttonx: integer;
|
||||||
@ -776,17 +800,19 @@ var
|
|||||||
ButtonTree: TAVLTree;
|
ButtonTree: TAVLTree;
|
||||||
Node: TAVLTreeNode;
|
Node: TAVLTreeNode;
|
||||||
ScrollBox: TScrollBox;
|
ScrollBox: TScrollBox;
|
||||||
//WSClientRect: TRect;
|
|
||||||
begin
|
begin
|
||||||
//DebugLn(['TComponentPalette.ReAlignButtons ',Page.Caption,' ',Page.ClientWidth]);
|
{$IFDEF VerboseComponentPalette}
|
||||||
if not Page.Visible then exit;
|
if aSheet.Caption = 'Additional' then
|
||||||
|
DebugLn(['TComponentPalette.ReAlignButtons ',aSheet.Caption,' ',aSheet.ClientWidth]);
|
||||||
|
{$ENDIF}
|
||||||
|
if not aSheet.Visible then exit;
|
||||||
if FPageControl<>nil then
|
if FPageControl<>nil then
|
||||||
PageControl.DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF};
|
PageControl.DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF};
|
||||||
ButtonTree:=nil;
|
ButtonTree:=nil;
|
||||||
try
|
try
|
||||||
if (Page.ComponentCount=0) or not (Page.Components[0] is TScrollBox) then exit;
|
if (aSheet.ComponentCount=0) or not (aSheet.Components[0] is TScrollBox) then exit;
|
||||||
ButtonTree:=TAVLTree.Create(@CompareControlsWithTag);
|
ButtonTree:=TAVLTree.Create(@CompareControlsWithTag);
|
||||||
ScrollBox:=TScrollBox(Page.Components[0]);
|
ScrollBox:=TScrollBox(aSheet.Components[0]);
|
||||||
// skip the first control (this is the selection tool (TSpeedButton))
|
// skip the first control (this is the selection tool (TSpeedButton))
|
||||||
for j:= 1 to ScrollBox.ControlCount-1 do begin
|
for j:= 1 to ScrollBox.ControlCount-1 do begin
|
||||||
CurButton:=TSpeedbutton(ScrollBox.Controls[j]);
|
CurButton:=TSpeedbutton(ScrollBox.Controls[j]);
|
||||||
@ -797,9 +823,9 @@ begin
|
|||||||
|
|
||||||
ButtonX:= ((ComponentPaletteBtnWidth*3) div 2) + 2;
|
ButtonX:= ((ComponentPaletteBtnWidth*3) div 2) + 2;
|
||||||
|
|
||||||
{GetClientRect(ScrollBox.Handle,WSClientRect);
|
{$IFDEF VerboseComponentPalette}
|
||||||
debugln(['TComponentPalette.ReAlignButtons ScrollBox.Bounds=',dbgs(ScrollBox.BoundsRect),
|
if aSheet.Caption = 'Additional' then
|
||||||
' ClientRect=',dbgs(ScrollBox.ClientRect),' WSClientRect=',dbgs(WSClientRect),
|
DebugLn(['TComponentPalette.ReAlignButtons ScrollBox.Bounds=',dbgs(ScrollBox.BoundsRect),
|
||||||
' VertScrollBar.Size=',ScrollBox.VertScrollBar.Size,
|
' VertScrollBar.Size=',ScrollBox.VertScrollBar.Size,
|
||||||
' ClientSizeWithoutBar=',ScrollBox.VertScrollBar.ClientSizeWithoutBar,
|
' ClientSizeWithoutBar=',ScrollBox.VertScrollBar.ClientSizeWithoutBar,
|
||||||
' IsScrollBarVisible=',ScrollBox.VertScrollBar.IsScrollBarVisible,
|
' IsScrollBarVisible=',ScrollBox.VertScrollBar.IsScrollBarVisible,
|
||||||
@ -807,7 +833,8 @@ begin
|
|||||||
' Page=',ScrollBox.HorzScrollBar.Page,
|
' Page=',ScrollBox.HorzScrollBar.Page,
|
||||||
' Range=',ScrollBox.HorzScrollBar.Range,
|
' Range=',ScrollBox.HorzScrollBar.Range,
|
||||||
' IsScrollBarVisible=',ScrollBox.HorzScrollBar.IsScrollBarVisible
|
' IsScrollBarVisible=',ScrollBox.HorzScrollBar.IsScrollBarVisible
|
||||||
]);}
|
]);
|
||||||
|
{$ENDIF}
|
||||||
{$IFDEF LCLCarbon}
|
{$IFDEF LCLCarbon}
|
||||||
MaxBtnPerRow:=ButtonTree.Count;
|
MaxBtnPerRow:=ButtonTree.Count;
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
@ -826,10 +853,14 @@ begin
|
|||||||
CurButton.SetBounds(ButtonX + (j mod MaxBtnPerRow) * ComponentPaletteBtnWidth,
|
CurButton.SetBounds(ButtonX + (j mod MaxBtnPerRow) * ComponentPaletteBtnWidth,
|
||||||
(j div MaxBtnPerRow) * ComponentPaletteBtnHeight,
|
(j div MaxBtnPerRow) * ComponentPaletteBtnHeight,
|
||||||
CurButton.Width, CurButton.Height);
|
CurButton.Width, CurButton.Height);
|
||||||
//DebugLn(['TComponentPalette.ReAlignButtons ',CurButton.Name,' ',dbgs(CurButton.BoundsRect)]);
|
{$IFDEF VerboseComponentPalette}
|
||||||
|
if aSheet.Caption = 'Additional' then
|
||||||
|
DebugLn(['TComponentPalette.ReAlignButtons ',CurButton.Name,' ',dbgs(CurButton.BoundsRect)]);
|
||||||
|
{$ENDIF}
|
||||||
inc(j);
|
inc(j);
|
||||||
Node:=ButtonTree.FindSuccessor(Node);
|
Node:=ButtonTree.FindSuccessor(Node);
|
||||||
end;
|
end;
|
||||||
|
aSheet.Invalidate;
|
||||||
finally
|
finally
|
||||||
if PageControl<>nil then
|
if PageControl<>nil then
|
||||||
PageControl.EnableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF};
|
PageControl.EnableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ReAlignButtons'){$ENDIF};
|
||||||
@ -860,23 +891,32 @@ begin
|
|||||||
if aSheet=fOldActivePage then
|
if aSheet=fOldActivePage then
|
||||||
fOldActivePage:=nil;
|
fOldActivePage:=nil;
|
||||||
aSheet.Visible:=false;
|
aSheet.Visible:=false;
|
||||||
|
{$IFDEF VerboseComponentPalette}
|
||||||
|
if aSheet.Caption = 'Additional' then
|
||||||
|
DebugLn(['TComponentPalette.RemoveUnneededPage: Removing Page=', aSheet.Caption, ', index=', PageInd]);
|
||||||
|
{$ENDIF}
|
||||||
Application.ReleaseComponent(aSheet);
|
Application.ReleaseComponent(aSheet);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TComponentPalette.InsertVisiblePage(aCompPage: TBaseComponentPage; var aVisPageIndex: integer);
|
procedure TComponentPalette.InsertVisiblePage(aCompPage: TBaseComponentPage);
|
||||||
var
|
var
|
||||||
PageInd: Integer;
|
TabIndex: Integer;
|
||||||
PanelRight: TPanel;
|
PanelRight: TPanel;
|
||||||
BtnRight: TSpeedButton;
|
BtnRight: TSpeedButton;
|
||||||
TabControl: TCustomTabControl;
|
TabControl: TCustomTabControl;
|
||||||
begin
|
begin
|
||||||
if not aCompPage.Visible then Exit;
|
if not aCompPage.Visible then Exit;
|
||||||
TabControl := TCustomTabControl(FPageControl);
|
TabControl := TCustomTabControl(FPageControl);
|
||||||
if aCompPage.PageComponent=nil then begin
|
if aCompPage.PageComponent=nil then
|
||||||
|
begin
|
||||||
// insert a new PageControl page
|
// insert a new PageControl page
|
||||||
TabControl.Pages.Insert(aVisPageIndex, aCompPage.PageName);
|
{$IFDEF VerboseComponentPalette}
|
||||||
aCompPage.PageComponent := FPageControl.Page[aVisPageIndex];
|
if aCompPage.PageName = 'Additional' then
|
||||||
|
DebugLn(['TComponentPalette.InsertVisiblePage: Inserting Page=', aCompPage.PageName, ', at index=', fVisiblePageIndex]);
|
||||||
|
{$ENDIF}
|
||||||
|
TabControl.Pages.Insert(fVisiblePageIndex, aCompPage.PageName);
|
||||||
|
aCompPage.PageComponent := FPageControl.Page[fVisiblePageIndex];
|
||||||
with TScrollBox.Create(aCompPage.PageComponent) do begin
|
with TScrollBox.Create(aCompPage.PageComponent) do begin
|
||||||
Align := alClient;
|
Align := alClient;
|
||||||
BorderStyle := bsNone;
|
BorderStyle := bsNone;
|
||||||
@ -912,13 +952,20 @@ begin
|
|||||||
OnMouseWheel := @OnPageMouseWheel;
|
OnMouseWheel := @OnPageMouseWheel;
|
||||||
Parent := PanelRight;
|
Parent := PanelRight;
|
||||||
end;
|
end;
|
||||||
inc(aVisPageIndex);
|
end
|
||||||
end else begin
|
else begin
|
||||||
// move to the right position
|
// move to the right position
|
||||||
PageInd := aCompPage.PageComponent.PageIndex;
|
TabIndex := aCompPage.PageComponent.PageIndex;
|
||||||
if (PageInd<>aVisPageIndex) and (aVisPageIndex < TabControl.Pages.Count) then
|
if (TabIndex<>fVisiblePageIndex) and (fVisiblePageIndex < TabControl.Pages.Count) then
|
||||||
TabControl.Pages.Move(PageInd, aVisPageIndex);
|
begin
|
||||||
|
{$IFDEF VerboseComponentPalette}
|
||||||
|
if aCompPage.PageName = 'Additional' then
|
||||||
|
DebugLn(['TComponentPalette.InsertVisiblePage: Moving Page=', aCompPage.PageName, ' from ', TabIndex, ' to ', fVisiblePageIndex]);
|
||||||
|
{$ENDIF}
|
||||||
|
TabControl.Pages.Move(TabIndex, fVisiblePageIndex);
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
inc(fVisiblePageIndex);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TComponentPalette.CreateSelectionButton(aCompPage: TBaseComponentPage; aButtonUniqueName: string;
|
procedure TComponentPalette.CreateSelectionButton(aCompPage: TBaseComponentPage; aButtonUniqueName: string;
|
||||||
@ -945,13 +992,15 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TComponentPalette.CreateOrDelButton(aComp: TPkgComponent; aButtonUniqueName: string;
|
procedure TComponentPalette.CreateOrDelButton(aComp: TPkgComponent; aButtonUniqueName: string;
|
||||||
aScrollBox: TScrollBox; var aBtnIndex: integer);
|
aScrollBox: TScrollBox);
|
||||||
var
|
var
|
||||||
Btn: TSpeedButton;
|
Btn: TSpeedButton;
|
||||||
begin
|
begin
|
||||||
if aComp.Visible then begin
|
if aComp.Visible then begin
|
||||||
inc(aBtnIndex);
|
inc(fBtnIndex);
|
||||||
//DebugLn(['TComponentPalette.UpdateNoteBookButtons Component ',DbgSName(aComp.ComponentClass),' ',aComp.Visible,' Prio=',dbgs(aComp.GetPriority)]);
|
{$IFDEF VerboseComponentPalette}
|
||||||
|
//DebugLn(['TComponentPalette.CreateOrDelButton Component ',DbgSName(aComp.ComponentClass), ' ',aComp.Visible,' Prio=',dbgs(aComp.GetPriority)]);
|
||||||
|
{$ENDIF}
|
||||||
if aComp.Button=nil then begin
|
if aComp.Button=nil then begin
|
||||||
Btn := TSpeedButton.Create(nil);
|
Btn := TSpeedButton.Create(nil);
|
||||||
aComp.Button:=Btn;
|
aComp.Button:=Btn;
|
||||||
@ -972,16 +1021,25 @@ begin
|
|||||||
+ '(' + aComp.ComponentClass.UnitName + ')';
|
+ '(' + aComp.ComponentClass.UnitName + ')';
|
||||||
Btn.PopupMenu:=Self.PopupMenu;
|
Btn.PopupMenu:=Self.PopupMenu;
|
||||||
end;
|
end;
|
||||||
//debugln(['TComponentPalette.UpdateNoteBookButtons Created Button: ',aComp.ComponentClass.ClassName,' ',aComp.Button.Name]);
|
{$IFDEF VerboseComponentPalette}
|
||||||
|
if aComp.RealPage.PageName = 'Additional' then
|
||||||
|
DebugLn(['TComponentPalette.CreateOrDelButton Created Button: ',aComp.ComponentClass.ClassName,' ',aComp.Button.Name]);
|
||||||
|
{$ENDIF}
|
||||||
end else begin
|
end else begin
|
||||||
Btn:=TSpeedButton(aComp.Button);
|
Btn:=TSpeedButton(aComp.Button);
|
||||||
//DebugLn(['TComponentPalette.UpdateNoteBookButtons Keep Button: ',aComp.ComponentClass.ClassName,' ',aComp.Button.Name,' ',DbgSName(TControl(aComp.Button).Parent)]);
|
{$IFDEF VerboseComponentPalette}
|
||||||
|
if aComp.RealPage.PageName = 'Additional' then
|
||||||
|
DebugLn(['TComponentPalette.CreateOrDelButton Keep Button: ',aComp.ComponentClass.ClassName,' ',aComp.Button.Name,' ',DbgSName(TControl(aComp.Button).Parent)]);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
Btn.Parent := aScrollBox;
|
Btn.Parent := aScrollBox;
|
||||||
Btn.Tag:=aBtnIndex;
|
Btn.Tag:=fBtnIndex;
|
||||||
end
|
end
|
||||||
else if aComp.Button<>nil then begin
|
else if aComp.Button<>nil then begin
|
||||||
//debugln(['TComponentPalette.UpdateNoteBookButtons Destroy Button: ',aComp.ComponentClass.ClassName,' ',aComp.Button.Name]);
|
{$IFDEF VerboseComponentPalette}
|
||||||
|
if aComp.RealPage.PageName = 'Additional' then
|
||||||
|
DebugLn(['TComponentPalette.CreateOrDelButton Destroy Button: ',aComp.ComponentClass.ClassName,' ',aComp.Button.Name]);
|
||||||
|
{$ENDIF}
|
||||||
Application.ReleaseComponent(aComp.Button);
|
Application.ReleaseComponent(aComp.Button);
|
||||||
aComp.Button:=nil;
|
aComp.Button:=nil;
|
||||||
end;
|
end;
|
||||||
@ -990,7 +1048,7 @@ end;
|
|||||||
procedure TComponentPalette.CreateButtons(aPageIndex: integer; aCompNames: TStringList);
|
procedure TComponentPalette.CreateButtons(aPageIndex: integer; aCompNames: TStringList);
|
||||||
// Create speedbuttons for every visible component
|
// Create speedbuttons for every visible component
|
||||||
var
|
var
|
||||||
i, BtnIndex: Integer;
|
i: Integer;
|
||||||
ScrollBox: TScrollBox;
|
ScrollBox: TScrollBox;
|
||||||
Pg: TBaseComponentPage;
|
Pg: TBaseComponentPage;
|
||||||
Comp: TPkgComponent;
|
Comp: TPkgComponent;
|
||||||
@ -1001,21 +1059,25 @@ begin
|
|||||||
Assert(Assigned(ScrollBox), 'CreateButtons: ScrollBox not assigned.');
|
Assert(Assigned(ScrollBox), 'CreateButtons: ScrollBox not assigned.');
|
||||||
ScrollBox.OnResize := @OnScrollBoxResize;
|
ScrollBox.OnResize := @OnScrollBoxResize;
|
||||||
ScrollBox.OnMouseWheel := @OnPageMouseWheel;
|
ScrollBox.OnMouseWheel := @OnPageMouseWheel;
|
||||||
//DebugLn(['TComponentPalette.UpdateNoteBookButtons PAGE=',Pg.PageName,' PageIndex=',Pg.PageComponent.PageIndex]);
|
{$IFDEF VerboseComponentPalette}
|
||||||
|
if Pg.PageName = 'Additional' then
|
||||||
|
DebugLn(['TComponentPalette.CreateButtons PAGE=',Pg.PageName,' PageIndex=',Pg.PageComponent.PageIndex]);
|
||||||
|
{$ENDIF}
|
||||||
// create selection button
|
// create selection button
|
||||||
CreateSelectionButton(Pg, IntToStr(aPageIndex), ScrollBox);
|
CreateSelectionButton(Pg, IntToStr(aPageIndex), ScrollBox);
|
||||||
// create component buttons and delete unneeded ones
|
// create component buttons and delete unneeded ones
|
||||||
BtnIndex := 0;
|
fBtnIndex := 0;
|
||||||
for i := 0 to aCompNames.Count-1 do begin
|
for i := 0 to aCompNames.Count-1 do begin
|
||||||
Comp := FindComponent(aCompNames[i]) as TPkgComponent;
|
Comp := FindComponent(aCompNames[i]) as TPkgComponent;
|
||||||
CreateOrDelButton(Comp, Format('%d_%d_',[aPageIndex,i]), ScrollBox, BtnIndex);
|
CreateOrDelButton(Comp, Format('%d_%d_',[aPageIndex,i]), ScrollBox);
|
||||||
end;
|
end;
|
||||||
|
Application.ProcessMessages; // ScrollBox.ControlCount of tabs are not updated without this.
|
||||||
ReAlignButtons(Pg.PageComponent);
|
ReAlignButtons(Pg.PageComponent);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TComponentPalette.UpdateNoteBookButtons;
|
procedure TComponentPalette.UpdateNoteBookButtons;
|
||||||
var
|
var
|
||||||
i, PgInd, VisPageIndex: Integer;
|
i, PgInd: Integer;
|
||||||
PgName: String;
|
PgName: String;
|
||||||
begin
|
begin
|
||||||
if fUpdatingPageControl then exit;
|
if fUpdatingPageControl then exit;
|
||||||
@ -1030,31 +1092,35 @@ begin
|
|||||||
// lock
|
// lock
|
||||||
fUpdatingPageControl:=true;
|
fUpdatingPageControl:=true;
|
||||||
FPageControl.DisableAlign;
|
FPageControl.DisableAlign;
|
||||||
|
//FPageControl.DisableAutoSizing;
|
||||||
try
|
try
|
||||||
fOldActivePage:=FPageControl.ActivePage;
|
fOldActivePage:=FPageControl.ActivePage;
|
||||||
fUserOrder.SortPagesAndCompsUserOrder;
|
fUserOrder.SortPagesAndCompsUserOrder;
|
||||||
CreatePagesFromUserOrder;
|
CreatePagesFromUserOrder;
|
||||||
|
|
||||||
// remove every page in the PageControl without a visible page
|
// remove every page in the PageControl without a visible page
|
||||||
for i:=FPageControl.PageCount-1 downto 0 do
|
for i:=FPageControl.PageCount-1 downto 0 do
|
||||||
RemoveUnneededPage(FPageControl.Pages[i]);
|
RemoveUnneededPage(FPageControl.Pages[i]);
|
||||||
|
{$IFDEF LCLQt}
|
||||||
|
Application.ProcessMessages; // PageIndex of tabs are not updated without this.
|
||||||
|
{$ENDIF}
|
||||||
// insert a PageControl page for every visible palette page
|
// insert a PageControl page for every visible palette page
|
||||||
VisPageIndex := 0;
|
fVisiblePageIndex := 0;
|
||||||
for i := 0 to fUserOrder.ComponentPages.Count-1 do
|
for i := 0 to fPages.Count-1 do
|
||||||
begin
|
begin
|
||||||
PgName := fUserOrder.ComponentPages[i];
|
// fPages and fUserOrder.ComponentPages are now synchronized, same index applies.
|
||||||
PgInd := IndexOfPageName(PgName);
|
Assert(fPages[i].PageName = fUserOrder.ComponentPages[i],
|
||||||
Assert(PgInd = i, Format('PgInd (%d) <> i (%d)', [PgInd, i]));
|
'UpdateNoteBookButtons: Page names do not match.');
|
||||||
if PgInd >= 0 then
|
InsertVisiblePage(Pages[i]);
|
||||||
begin
|
CreateButtons(i, fUserOrder.ComponentPages.Objects[i] as TStringList);
|
||||||
InsertVisiblePage(Pages[PgInd], VisPageIndex);
|
|
||||||
CreateButtons(PgInd, fUserOrder.ComponentPages.Objects[i] as TStringList);
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// restore active page
|
// restore active page
|
||||||
if (fOldActivePage<>nil) and (FPageControl.IndexOf(fOldActivePage) >= 0) then begin
|
if (fOldActivePage<>nil) and (FPageControl.IndexOf(fOldActivePage) >= 0) then begin
|
||||||
|
{$IFDEF VerboseComponentPalette}
|
||||||
DebugLn(['TComponentPalette.UpdateNoteBookButtons: Restoring FPageControl.ActivePage=',
|
DebugLn(['TComponentPalette.UpdateNoteBookButtons: Restoring FPageControl.ActivePage=',
|
||||||
fOldActivePage]);
|
fOldActivePage.Caption]);
|
||||||
|
{$ENDIF}
|
||||||
FPageControl.ActivePage:=fOldActivePage
|
FPageControl.ActivePage:=fOldActivePage
|
||||||
end
|
end
|
||||||
else if FPageControl.PageCount>0 then
|
else if FPageControl.PageCount>0 then
|
||||||
@ -1063,6 +1129,7 @@ begin
|
|||||||
// unlock
|
// unlock
|
||||||
fUpdatingPageControl:=false;
|
fUpdatingPageControl:=false;
|
||||||
fNoteBookNeedsUpdate:=false;
|
fNoteBookNeedsUpdate:=false;
|
||||||
|
//FPageControl.EnableAutoSizing;
|
||||||
FPageControl.EnableAlign;
|
FPageControl.EnableAlign;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -1103,15 +1170,5 @@ begin
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TComponentPalette.UpdateVisible;
|
|
||||||
begin
|
|
||||||
PageControl.DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ShowHideControls'){$ENDIF};
|
|
||||||
try
|
|
||||||
inherited UpdateVisible;
|
|
||||||
finally
|
|
||||||
PageControl.EnableAutoSizing{$IFDEF DebugDisableAutoSizing}('TComponentPalette.ShowHideControls'){$ENDIF};
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -3679,7 +3679,7 @@ begin
|
|||||||
and (LastFormActivated.Designer<>nil)
|
and (LastFormActivated.Designer<>nil)
|
||||||
and (LastFormActivated.Designer.LookupRoot<>nil)
|
and (LastFormActivated.Designer.LookupRoot<>nil)
|
||||||
and not (LastFormActivated.Designer.LookupRoot is TControl);
|
and not (LastFormActivated.Designer.LookupRoot is TControl);
|
||||||
IDEComponentPalette.UpdateVisible;
|
IDEComponentPalette.Update;
|
||||||
TComponentPalette(IDEComponentPalette).OnClassSelected := @ComponentPaletteClassSelected;
|
TComponentPalette(IDEComponentPalette).OnClassSelected := @ComponentPaletteClassSelected;
|
||||||
SetupHints;
|
SetupHints;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user