mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 09:39:31 +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
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Dialogs, Graphics, ExtCtrls, Buttons, LResources, AVL_Tree,
|
||||
ComponentReg, PackageDefs, LazarusIDEStrConsts;
|
||||
Classes, SysUtils, Dialogs, Graphics, ExtCtrls, Buttons, Menus, LResources,
|
||||
AVL_Tree, ComponentReg, PackageDefs, LazarusIDEStrConsts;
|
||||
|
||||
const
|
||||
ComponentPaletteBtnWidth = 25;
|
||||
@ -47,18 +47,24 @@ const
|
||||
|
||||
type
|
||||
TComponentPalette = class(TBaseComponentPalette)
|
||||
PopupMenu: TPopupMenu;
|
||||
OpenPackageMenuItem: TMenuItem;
|
||||
procedure ActivePageChanged(Sender: TObject);
|
||||
procedure OpenPackageClicked(Sender: TObject);
|
||||
procedure PopupMenuPopup(Sender: TObject);
|
||||
private
|
||||
fComponents: TAVLTree; // tree of TRegisteredComponent sorted for componentclass
|
||||
FNoteBook: TNotebook;
|
||||
fNoteBookNeedsUpdate: boolean;
|
||||
FOnOpenPackage: TNotifyEvent;
|
||||
FSelected: TRegisteredComponent;
|
||||
fUpdatingNotebook: boolean;
|
||||
fComponents: TAVLTree; // tree of TRegisteredComponent sorted for componentclass
|
||||
fUnregisteredIcon: TBitmap;
|
||||
fUpdatingNotebook: boolean;
|
||||
procedure SetNoteBook(const AValue: TNotebook);
|
||||
procedure SelectionToolClick(Sender: TObject);
|
||||
procedure ComponentBtnClick(Sender: TObject);
|
||||
procedure SetSelected(const AValue: TRegisteredComponent);
|
||||
procedure CreatePopupMenu;
|
||||
protected
|
||||
procedure DoEndUpdate(Changed: boolean); override;
|
||||
procedure OnPageAddedComponent(Component: TRegisteredComponent); override;
|
||||
@ -78,6 +84,7 @@ type
|
||||
function FindComponent(const CompClassName: string): TRegisteredComponent; override;
|
||||
property NoteBook: TNotebook read FNoteBook write SetNoteBook;
|
||||
property Selected: TRegisteredComponent read FSelected write SetSelected;
|
||||
property OnOpenPackage: TNotifyEvent read FOnOpenPackage write FOnOpenPackage;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -114,13 +121,42 @@ begin
|
||||
Selected:=nil;
|
||||
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);
|
||||
begin
|
||||
if FNoteBook=AValue then exit;
|
||||
ClearButtons;
|
||||
FNoteBook:=AValue;
|
||||
if FNoteBook<>nil then
|
||||
if FNoteBook<>nil then begin
|
||||
FNoteBook.OnPageChanged:=@ActivePageChanged;
|
||||
end;
|
||||
UpdateNoteBookButtons;
|
||||
end;
|
||||
|
||||
@ -164,6 +200,22 @@ begin
|
||||
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);
|
||||
begin
|
||||
if Changed then UpdateNoteBookButtons;
|
||||
@ -231,6 +283,11 @@ end;
|
||||
procedure TComponentPalette.ClearButtons;
|
||||
begin
|
||||
Selected:=nil;
|
||||
if PopupMenu<>nil then begin
|
||||
PopupMenu.Free;
|
||||
PopupMenu:=nil;
|
||||
OpenPackageMenuItem:=nil;
|
||||
end;
|
||||
inherited ClearButtons;
|
||||
end;
|
||||
|
||||
@ -318,6 +375,7 @@ begin
|
||||
if CurComponent.Button=nil then begin
|
||||
CurBtn:=TSpeedButton.Create(nil);
|
||||
CurComponent.Button:=CurBtn;
|
||||
CreatePopupMenu;
|
||||
with CurBtn do begin
|
||||
Name:='PaletteBtnPage'+IntToStr(i)+'_'+IntToStr(j)
|
||||
+'_'+CurComponent.ComponentClass.ClassName;
|
||||
@ -331,6 +389,7 @@ begin
|
||||
Hint := CurComponent.ComponentClass.ClassName;
|
||||
SetBounds(ButtonX,0,ComponentPaletteBtnWidth,ComponentPaletteBtnHeight);
|
||||
inc(ButtonX,ComponentPaletteBtnWidth+2);
|
||||
PopupMenu:=Self.PopupMenu;
|
||||
end;
|
||||
end;
|
||||
end else if CurComponent.Button<>nil then begin
|
||||
|
@ -389,6 +389,8 @@ type
|
||||
function DoSaveStringToFile(const Filename, Src,
|
||||
FileDescription: string): TModalResult; virtual; abstract;
|
||||
|
||||
function DoShowProjectInspector: TModalResult; virtual; abstract;
|
||||
|
||||
function DoBuildLazarus(Flags: TBuildLazarusFlags): TModalResult; virtual; abstract;
|
||||
function DoSaveForBuild: TModalResult; virtual; abstract;
|
||||
function DoCheckFilesOnDisk: TModalResult; virtual; abstract;
|
||||
|
@ -663,7 +663,9 @@ function FindCompatibleDependencyInList(First: TPkgDependency;
|
||||
ListType: TPkgDependencyList; ComparePackage: TLazPackageID): TPkgDependency;
|
||||
function GetDependencyWithIndex(First: TPkgDependency;
|
||||
ListType: TPkgDependencyList; Index: integer): TPkgDependency;
|
||||
|
||||
function IndexOfDependencyInList(First: TPkgDependency;
|
||||
ListType: TPkgDependencyList; FindDependency: TPkgDependency): integer;
|
||||
|
||||
function FindLowestPkgDependencyWithName(const PkgName: string): TPkgDependency;
|
||||
function FindLowestPkgDependencyNodeWithName(const PkgName: string): TAVLTreeNode;
|
||||
function FindNextPkgDependecyNodeWithSameName(Node: TAVLTreeNode): TAVLTreeNode;
|
||||
@ -926,6 +928,21 @@ begin
|
||||
Result:=true;
|
||||
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;
|
||||
var
|
||||
ANode: TAVLTreeNode;
|
||||
|
@ -886,7 +886,7 @@ begin
|
||||
AutoCreated:=true;
|
||||
Name:='SynEdit';
|
||||
Filename:='$(LazarusDir)/components/synedit/';
|
||||
Version.SetValues(1,0,1,1);
|
||||
Version.SetValues(1,0,0,0);
|
||||
Author:='SynEdit - http://sourceforge.net/projects/synedit/';
|
||||
License:='LGPL-2';
|
||||
AutoInstall:=pitStatic;
|
||||
|
@ -90,6 +90,7 @@ type
|
||||
procedure PackageGraphEndUpdate(Sender: TObject; GraphChanged: boolean);
|
||||
procedure IDEComponentPaletteEndUpdate(Sender: TObject;
|
||||
PaletteChanged: boolean);
|
||||
procedure IDEComponentPaletteOpenPackage(Sender: TObject);
|
||||
private
|
||||
FirstInstalledDependency: TPkgDependency;
|
||||
FirstAutoInstallDependency: TPkgDependency;
|
||||
@ -217,6 +218,12 @@ begin
|
||||
UpdateVisibleComponentPalette;
|
||||
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);
|
||||
begin
|
||||
DoAddActiveUnitToAPackage;
|
||||
@ -622,8 +629,10 @@ function TPkgManager.CheckPackageGraphForCompilation(APackage: TLazPackage;
|
||||
FirstDependency: TPkgDependency): TModalResult;
|
||||
var
|
||||
PathList: TList;
|
||||
Dependency: TPkgDependency;
|
||||
begin
|
||||
writeln('TPkgManager.CheckPackageGraphForCompilation A');
|
||||
|
||||
// check for unsaved packages
|
||||
PathList:=PackageGraph.FindUnsavedDependencyPath(APackage,FirstDependency);
|
||||
if PathList<>nil then begin
|
||||
@ -637,6 +646,20 @@ begin
|
||||
// check for broken dependencies
|
||||
PathList:=PackageGraph.FindBrokenDependencyPath(APackage,FirstDependency);
|
||||
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);
|
||||
Result:=MessageDlg('Broken dependency',
|
||||
'A required packages was not found. See package graph.',
|
||||
@ -1120,6 +1143,7 @@ begin
|
||||
inherited Create(TheOwner);
|
||||
IDEComponentPalette:=TComponentPalette.Create;
|
||||
IDEComponentPalette.OnEndUpdate:=@IDEComponentPaletteEndUpdate;
|
||||
TComponentPalette(IDEComponentPalette).OnOpenPackage:=@IDEComponentPaletteOpenPackage;
|
||||
|
||||
PkgLinks:=TPackageLinks.Create;
|
||||
PkgLinks.UpdateAll;
|
||||
@ -1963,6 +1987,15 @@ var
|
||||
begin
|
||||
PackageGraph.BeginUpdate(false);
|
||||
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
|
||||
if APackage.IsVirtual or APackage.Modified then begin
|
||||
Result:=DoSavePackage(APackage,[]);
|
||||
@ -2006,9 +2039,29 @@ end;
|
||||
|
||||
function TPkgManager.DoCompileAutoInstallPackages(
|
||||
Flags: TPkgCompileFlags): TModalResult;
|
||||
var
|
||||
Dependency: TPkgDependency;
|
||||
OldDependency: TPkgDependency;
|
||||
begin
|
||||
PackageGraph.BeginUpdate(false);
|
||||
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
|
||||
Result:=CheckPackageGraphForCompilation(nil,FirstAutoInstallDependency);
|
||||
if Result<>mrOk then exit;
|
||||
|
Loading…
Reference in New Issue
Block a user