implemented open package for component palette

git-svn-id: trunk@4100 -
This commit is contained in:
mattias 2003-04-27 20:31:53 +00:00
parent b223d90480
commit 5800ad0cf3
5 changed files with 138 additions and 7 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;