mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-22 21:19:24 +02:00
implemented open package for component palette
git-svn-id: trunk@4100 -
This commit is contained in:
parent
b223d90480
commit
5800ad0cf3
@ -38,8 +38,8 @@ unit ComponentPalette;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, Dialogs, Graphics, ExtCtrls, Buttons, LResources, AVL_Tree,
|
Classes, SysUtils, Dialogs, Graphics, ExtCtrls, Buttons, Menus, LResources,
|
||||||
ComponentReg, PackageDefs, LazarusIDEStrConsts;
|
AVL_Tree, ComponentReg, PackageDefs, LazarusIDEStrConsts;
|
||||||
|
|
||||||
const
|
const
|
||||||
ComponentPaletteBtnWidth = 25;
|
ComponentPaletteBtnWidth = 25;
|
||||||
@ -47,18 +47,24 @@ const
|
|||||||
|
|
||||||
type
|
type
|
||||||
TComponentPalette = class(TBaseComponentPalette)
|
TComponentPalette = class(TBaseComponentPalette)
|
||||||
|
PopupMenu: TPopupMenu;
|
||||||
|
OpenPackageMenuItem: TMenuItem;
|
||||||
procedure ActivePageChanged(Sender: TObject);
|
procedure ActivePageChanged(Sender: TObject);
|
||||||
|
procedure OpenPackageClicked(Sender: TObject);
|
||||||
|
procedure PopupMenuPopup(Sender: TObject);
|
||||||
private
|
private
|
||||||
|
fComponents: TAVLTree; // tree of TRegisteredComponent sorted for componentclass
|
||||||
FNoteBook: TNotebook;
|
FNoteBook: TNotebook;
|
||||||
fNoteBookNeedsUpdate: boolean;
|
fNoteBookNeedsUpdate: boolean;
|
||||||
|
FOnOpenPackage: TNotifyEvent;
|
||||||
FSelected: TRegisteredComponent;
|
FSelected: TRegisteredComponent;
|
||||||
fUpdatingNotebook: boolean;
|
|
||||||
fComponents: TAVLTree; // tree of TRegisteredComponent sorted for componentclass
|
|
||||||
fUnregisteredIcon: TBitmap;
|
fUnregisteredIcon: TBitmap;
|
||||||
|
fUpdatingNotebook: boolean;
|
||||||
procedure SetNoteBook(const AValue: TNotebook);
|
procedure SetNoteBook(const AValue: TNotebook);
|
||||||
procedure SelectionToolClick(Sender: TObject);
|
procedure SelectionToolClick(Sender: TObject);
|
||||||
procedure ComponentBtnClick(Sender: TObject);
|
procedure ComponentBtnClick(Sender: TObject);
|
||||||
procedure SetSelected(const AValue: TRegisteredComponent);
|
procedure SetSelected(const AValue: TRegisteredComponent);
|
||||||
|
procedure CreatePopupMenu;
|
||||||
protected
|
protected
|
||||||
procedure DoEndUpdate(Changed: boolean); override;
|
procedure DoEndUpdate(Changed: boolean); override;
|
||||||
procedure OnPageAddedComponent(Component: TRegisteredComponent); override;
|
procedure OnPageAddedComponent(Component: TRegisteredComponent); override;
|
||||||
@ -78,6 +84,7 @@ type
|
|||||||
function FindComponent(const CompClassName: string): TRegisteredComponent; override;
|
function FindComponent(const CompClassName: string): TRegisteredComponent; override;
|
||||||
property NoteBook: TNotebook read FNoteBook write SetNoteBook;
|
property NoteBook: TNotebook read FNoteBook write SetNoteBook;
|
||||||
property Selected: TRegisteredComponent read FSelected write SetSelected;
|
property Selected: TRegisteredComponent read FSelected write SetSelected;
|
||||||
|
property OnOpenPackage: TNotifyEvent read FOnOpenPackage write FOnOpenPackage;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -114,13 +121,42 @@ begin
|
|||||||
Selected:=nil;
|
Selected:=nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TComponentPalette.OpenPackageClicked(Sender: TObject);
|
||||||
|
var
|
||||||
|
PkgComponent: TPkgComponent;
|
||||||
|
begin
|
||||||
|
PkgComponent:=TPkgComponent(FindButton(PopupMenu.PopupComponent));
|
||||||
|
if (PkgComponent=nil) or (PkgComponent.PkgFile=nil)
|
||||||
|
or (PkgComponent.PkgFile.LazPackage=nil) then exit;
|
||||||
|
if Assigned(OnOpenPackage) then
|
||||||
|
OnOpenPackage(PkgComponent.PkgFile.LazPackage);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TComponentPalette.PopupMenuPopup(Sender: TObject);
|
||||||
|
var
|
||||||
|
PkgComponent: TPkgComponent;
|
||||||
|
APackage: TLazPackage;
|
||||||
|
begin
|
||||||
|
PkgComponent:=TPkgComponent(FindButton(PopupMenu.PopupComponent));
|
||||||
|
APackage:=nil;
|
||||||
|
if (PkgComponent<>nil) and (PkgComponent.PkgFile<>nil) then
|
||||||
|
APackage:=PkgComponent.PkgFile.LazPackage;
|
||||||
|
if APackage=nil then begin
|
||||||
|
OpenPackageMenuItem.Visible:=false;
|
||||||
|
end else begin
|
||||||
|
OpenPackageMenuItem.Caption:='Open Package '+APackage.IDAsString;
|
||||||
|
OpenPackageMenuItem.Visible:=true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TComponentPalette.SetNoteBook(const AValue: TNotebook);
|
procedure TComponentPalette.SetNoteBook(const AValue: TNotebook);
|
||||||
begin
|
begin
|
||||||
if FNoteBook=AValue then exit;
|
if FNoteBook=AValue then exit;
|
||||||
ClearButtons;
|
ClearButtons;
|
||||||
FNoteBook:=AValue;
|
FNoteBook:=AValue;
|
||||||
if FNoteBook<>nil then
|
if FNoteBook<>nil then begin
|
||||||
FNoteBook.OnPageChanged:=@ActivePageChanged;
|
FNoteBook.OnPageChanged:=@ActivePageChanged;
|
||||||
|
end;
|
||||||
UpdateNoteBookButtons;
|
UpdateNoteBookButtons;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -164,6 +200,22 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TComponentPalette.CreatePopupMenu;
|
||||||
|
begin
|
||||||
|
if PopupMenu<>nil then exit;
|
||||||
|
PopupMenu:=TPopupMenu.Create(nil);
|
||||||
|
PopupMenu.OnPopup:=@PopupMenuPopup;
|
||||||
|
PopupMenu.Name:='ComponentPalettePopupMenu';
|
||||||
|
|
||||||
|
OpenPackageMenuItem:=TMenuItem.Create(PopupMenu);
|
||||||
|
with OpenPackageMenuItem do begin
|
||||||
|
Name:='OpenPackageMenuItem';
|
||||||
|
Caption:='Open package';
|
||||||
|
OnClick:=@OpenPackageClicked;
|
||||||
|
end;
|
||||||
|
PopupMenu.Items.Add(OpenPackageMenuItem);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TComponentPalette.DoEndUpdate(Changed: boolean);
|
procedure TComponentPalette.DoEndUpdate(Changed: boolean);
|
||||||
begin
|
begin
|
||||||
if Changed then UpdateNoteBookButtons;
|
if Changed then UpdateNoteBookButtons;
|
||||||
@ -231,6 +283,11 @@ end;
|
|||||||
procedure TComponentPalette.ClearButtons;
|
procedure TComponentPalette.ClearButtons;
|
||||||
begin
|
begin
|
||||||
Selected:=nil;
|
Selected:=nil;
|
||||||
|
if PopupMenu<>nil then begin
|
||||||
|
PopupMenu.Free;
|
||||||
|
PopupMenu:=nil;
|
||||||
|
OpenPackageMenuItem:=nil;
|
||||||
|
end;
|
||||||
inherited ClearButtons;
|
inherited ClearButtons;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -318,6 +375,7 @@ begin
|
|||||||
if CurComponent.Button=nil then begin
|
if CurComponent.Button=nil then begin
|
||||||
CurBtn:=TSpeedButton.Create(nil);
|
CurBtn:=TSpeedButton.Create(nil);
|
||||||
CurComponent.Button:=CurBtn;
|
CurComponent.Button:=CurBtn;
|
||||||
|
CreatePopupMenu;
|
||||||
with CurBtn do begin
|
with CurBtn do begin
|
||||||
Name:='PaletteBtnPage'+IntToStr(i)+'_'+IntToStr(j)
|
Name:='PaletteBtnPage'+IntToStr(i)+'_'+IntToStr(j)
|
||||||
+'_'+CurComponent.ComponentClass.ClassName;
|
+'_'+CurComponent.ComponentClass.ClassName;
|
||||||
@ -331,6 +389,7 @@ begin
|
|||||||
Hint := CurComponent.ComponentClass.ClassName;
|
Hint := CurComponent.ComponentClass.ClassName;
|
||||||
SetBounds(ButtonX,0,ComponentPaletteBtnWidth,ComponentPaletteBtnHeight);
|
SetBounds(ButtonX,0,ComponentPaletteBtnWidth,ComponentPaletteBtnHeight);
|
||||||
inc(ButtonX,ComponentPaletteBtnWidth+2);
|
inc(ButtonX,ComponentPaletteBtnWidth+2);
|
||||||
|
PopupMenu:=Self.PopupMenu;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end else if CurComponent.Button<>nil then begin
|
end else if CurComponent.Button<>nil then begin
|
||||||
|
@ -389,6 +389,8 @@ type
|
|||||||
function DoSaveStringToFile(const Filename, Src,
|
function DoSaveStringToFile(const Filename, Src,
|
||||||
FileDescription: string): TModalResult; virtual; abstract;
|
FileDescription: string): TModalResult; virtual; abstract;
|
||||||
|
|
||||||
|
function DoShowProjectInspector: TModalResult; virtual; abstract;
|
||||||
|
|
||||||
function DoBuildLazarus(Flags: TBuildLazarusFlags): TModalResult; virtual; abstract;
|
function DoBuildLazarus(Flags: TBuildLazarusFlags): TModalResult; virtual; abstract;
|
||||||
function DoSaveForBuild: TModalResult; virtual; abstract;
|
function DoSaveForBuild: TModalResult; virtual; abstract;
|
||||||
function DoCheckFilesOnDisk: TModalResult; virtual; abstract;
|
function DoCheckFilesOnDisk: TModalResult; virtual; abstract;
|
||||||
|
@ -663,6 +663,8 @@ function FindCompatibleDependencyInList(First: TPkgDependency;
|
|||||||
ListType: TPkgDependencyList; ComparePackage: TLazPackageID): TPkgDependency;
|
ListType: TPkgDependencyList; ComparePackage: TLazPackageID): TPkgDependency;
|
||||||
function GetDependencyWithIndex(First: TPkgDependency;
|
function GetDependencyWithIndex(First: TPkgDependency;
|
||||||
ListType: TPkgDependencyList; Index: integer): TPkgDependency;
|
ListType: TPkgDependencyList; Index: integer): TPkgDependency;
|
||||||
|
function IndexOfDependencyInList(First: TPkgDependency;
|
||||||
|
ListType: TPkgDependencyList; FindDependency: TPkgDependency): integer;
|
||||||
|
|
||||||
function FindLowestPkgDependencyWithName(const PkgName: string): TPkgDependency;
|
function FindLowestPkgDependencyWithName(const PkgName: string): TPkgDependency;
|
||||||
function FindLowestPkgDependencyNodeWithName(const PkgName: string): TAVLTreeNode;
|
function FindLowestPkgDependencyNodeWithName(const PkgName: string): TAVLTreeNode;
|
||||||
@ -926,6 +928,21 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function IndexOfDependencyInList(First: TPkgDependency;
|
||||||
|
ListType: TPkgDependencyList; FindDependency: TPkgDependency): integer;
|
||||||
|
var
|
||||||
|
Dependency: TPkgDependency;
|
||||||
|
begin
|
||||||
|
Result:=-1;
|
||||||
|
Dependency:=First;
|
||||||
|
while Dependency<>nil do begin
|
||||||
|
inc(Result);
|
||||||
|
if Dependency=FindDependency then exit;
|
||||||
|
Dependency:=Dependency.NextDependency[ListType];
|
||||||
|
end;
|
||||||
|
Result:=-1;
|
||||||
|
end;
|
||||||
|
|
||||||
function FindLowestPkgDependencyWithName(const PkgName: string): TPkgDependency;
|
function FindLowestPkgDependencyWithName(const PkgName: string): TPkgDependency;
|
||||||
var
|
var
|
||||||
ANode: TAVLTreeNode;
|
ANode: TAVLTreeNode;
|
||||||
|
@ -886,7 +886,7 @@ begin
|
|||||||
AutoCreated:=true;
|
AutoCreated:=true;
|
||||||
Name:='SynEdit';
|
Name:='SynEdit';
|
||||||
Filename:='$(LazarusDir)/components/synedit/';
|
Filename:='$(LazarusDir)/components/synedit/';
|
||||||
Version.SetValues(1,0,1,1);
|
Version.SetValues(1,0,0,0);
|
||||||
Author:='SynEdit - http://sourceforge.net/projects/synedit/';
|
Author:='SynEdit - http://sourceforge.net/projects/synedit/';
|
||||||
License:='LGPL-2';
|
License:='LGPL-2';
|
||||||
AutoInstall:=pitStatic;
|
AutoInstall:=pitStatic;
|
||||||
|
@ -90,6 +90,7 @@ type
|
|||||||
procedure PackageGraphEndUpdate(Sender: TObject; GraphChanged: boolean);
|
procedure PackageGraphEndUpdate(Sender: TObject; GraphChanged: boolean);
|
||||||
procedure IDEComponentPaletteEndUpdate(Sender: TObject;
|
procedure IDEComponentPaletteEndUpdate(Sender: TObject;
|
||||||
PaletteChanged: boolean);
|
PaletteChanged: boolean);
|
||||||
|
procedure IDEComponentPaletteOpenPackage(Sender: TObject);
|
||||||
private
|
private
|
||||||
FirstInstalledDependency: TPkgDependency;
|
FirstInstalledDependency: TPkgDependency;
|
||||||
FirstAutoInstallDependency: TPkgDependency;
|
FirstAutoInstallDependency: TPkgDependency;
|
||||||
@ -217,6 +218,12 @@ begin
|
|||||||
UpdateVisibleComponentPalette;
|
UpdateVisibleComponentPalette;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TPkgManager.IDEComponentPaletteOpenPackage(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if (Sender=nil) or (not (Sender is TLazPackage)) then exit;
|
||||||
|
DoOpenPackage(TLazPackage(Sender));
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TPkgManager.MainIDEitmPkgAddCurUnitToPkgClick(Sender: TObject);
|
procedure TPkgManager.MainIDEitmPkgAddCurUnitToPkgClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoAddActiveUnitToAPackage;
|
DoAddActiveUnitToAPackage;
|
||||||
@ -622,8 +629,10 @@ function TPkgManager.CheckPackageGraphForCompilation(APackage: TLazPackage;
|
|||||||
FirstDependency: TPkgDependency): TModalResult;
|
FirstDependency: TPkgDependency): TModalResult;
|
||||||
var
|
var
|
||||||
PathList: TList;
|
PathList: TList;
|
||||||
|
Dependency: TPkgDependency;
|
||||||
begin
|
begin
|
||||||
writeln('TPkgManager.CheckPackageGraphForCompilation A');
|
writeln('TPkgManager.CheckPackageGraphForCompilation A');
|
||||||
|
|
||||||
// check for unsaved packages
|
// check for unsaved packages
|
||||||
PathList:=PackageGraph.FindUnsavedDependencyPath(APackage,FirstDependency);
|
PathList:=PackageGraph.FindUnsavedDependencyPath(APackage,FirstDependency);
|
||||||
if PathList<>nil then begin
|
if PathList<>nil then begin
|
||||||
@ -637,6 +646,20 @@ begin
|
|||||||
// check for broken dependencies
|
// check for broken dependencies
|
||||||
PathList:=PackageGraph.FindBrokenDependencyPath(APackage,FirstDependency);
|
PathList:=PackageGraph.FindBrokenDependencyPath(APackage,FirstDependency);
|
||||||
if PathList<>nil then begin
|
if PathList<>nil then begin
|
||||||
|
if (PathList.Count=1) then begin
|
||||||
|
Dependency:=TPkgDependency(PathList[0]);
|
||||||
|
if Dependency is TPkgDependency then begin
|
||||||
|
// check if project
|
||||||
|
if Dependency.Owner is TProject then begin
|
||||||
|
MainIDE.DoShowProjectInspector;
|
||||||
|
Result:=MessageDlg('Broken dependency',
|
||||||
|
'The project requires the package "'+Dependency.AsString+'".'#13
|
||||||
|
+'But it was not found. See Project -> Project Inspector.',
|
||||||
|
mtError,[mbCancel,mbAbort],0);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
DoShowPackageGraphPathList(PathList);
|
DoShowPackageGraphPathList(PathList);
|
||||||
Result:=MessageDlg('Broken dependency',
|
Result:=MessageDlg('Broken dependency',
|
||||||
'A required packages was not found. See package graph.',
|
'A required packages was not found. See package graph.',
|
||||||
@ -1120,6 +1143,7 @@ begin
|
|||||||
inherited Create(TheOwner);
|
inherited Create(TheOwner);
|
||||||
IDEComponentPalette:=TComponentPalette.Create;
|
IDEComponentPalette:=TComponentPalette.Create;
|
||||||
IDEComponentPalette.OnEndUpdate:=@IDEComponentPaletteEndUpdate;
|
IDEComponentPalette.OnEndUpdate:=@IDEComponentPaletteEndUpdate;
|
||||||
|
TComponentPalette(IDEComponentPalette).OnOpenPackage:=@IDEComponentPaletteOpenPackage;
|
||||||
|
|
||||||
PkgLinks:=TPackageLinks.Create;
|
PkgLinks:=TPackageLinks.Create;
|
||||||
PkgLinks.UpdateAll;
|
PkgLinks.UpdateAll;
|
||||||
@ -1963,6 +1987,15 @@ var
|
|||||||
begin
|
begin
|
||||||
PackageGraph.BeginUpdate(false);
|
PackageGraph.BeginUpdate(false);
|
||||||
try
|
try
|
||||||
|
// check if package is designtime package
|
||||||
|
if APackage.PackageType=lptRunTime then begin
|
||||||
|
Result:=MessageDlg('Package is no designtime package',
|
||||||
|
'The package '+APackage.IDAsString+' is a runtime only package.'#13
|
||||||
|
+'Runtime only packages can not be installed in the IDE.',
|
||||||
|
mtError,[mbCancel,mbAbort],0);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
// save package
|
// save package
|
||||||
if APackage.IsVirtual or APackage.Modified then begin
|
if APackage.IsVirtual or APackage.Modified then begin
|
||||||
Result:=DoSavePackage(APackage,[]);
|
Result:=DoSavePackage(APackage,[]);
|
||||||
@ -2006,9 +2039,29 @@ end;
|
|||||||
|
|
||||||
function TPkgManager.DoCompileAutoInstallPackages(
|
function TPkgManager.DoCompileAutoInstallPackages(
|
||||||
Flags: TPkgCompileFlags): TModalResult;
|
Flags: TPkgCompileFlags): TModalResult;
|
||||||
|
var
|
||||||
|
Dependency: TPkgDependency;
|
||||||
|
OldDependency: TPkgDependency;
|
||||||
begin
|
begin
|
||||||
PackageGraph.BeginUpdate(false);
|
PackageGraph.BeginUpdate(false);
|
||||||
try
|
try
|
||||||
|
Dependency:=FirstAutoInstallDependency;
|
||||||
|
while Dependency<>nil do begin
|
||||||
|
OldDependency:=Dependency;
|
||||||
|
Dependency:=Dependency.NextRequiresDependency;
|
||||||
|
if OldDependency.LoadPackageResult<>lprSuccess then begin
|
||||||
|
Result:=MessageDlg('Package not found',
|
||||||
|
'The package "'+OldDependency.AsString+'" is marked for installation,'
|
||||||
|
+' but can not be found.'#13
|
||||||
|
+'Remove dependency from the installation list of packages?',
|
||||||
|
mtError,[mbYes,mbNo,mbAbort],0);
|
||||||
|
if Result=mrNo then Result:=mrCancel;
|
||||||
|
if Result<>mrYes then exit;
|
||||||
|
OldDependency.RemoveFromList(FirstAutoInstallDependency,pdlRequires);
|
||||||
|
OldDependency.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
// check consistency
|
// check consistency
|
||||||
Result:=CheckPackageGraphForCompilation(nil,FirstAutoInstallDependency);
|
Result:=CheckPackageGraphForCompilation(nil,FirstAutoInstallDependency);
|
||||||
if Result<>mrOk then exit;
|
if Result<>mrOk then exit;
|
||||||
|
Loading…
Reference in New Issue
Block a user