implemented closing unneeded package

git-svn-id: trunk@4047 -
This commit is contained in:
mattias 2003-04-11 21:21:34 +00:00
parent e55f738b83
commit 1007c59db7
6 changed files with 312 additions and 57 deletions

View File

@ -367,6 +367,7 @@ type
procedure Close;
procedure Release;
procedure Hide;
procedure ShowOnTop;
function WantChildKey(Child : TControl;
var Message : TLMessage): Boolean; virtual;
procedure SetFocus; override;

View File

@ -437,9 +437,9 @@ procedure TCustomForm.WMSize(var Message: TLMSize);
var
OldState: TWindowState;
begin
{$IFDEF CHECK_POSITION}
Writeln('[TCustomForm.WMSize] Name=',Name,' Class=',ClassName,' Message.Width=',Message.Width,' Message.Height=',Message.Height);
{$ENDIF}
{$IFDEF CHECK_POSITION}
Writeln('[TCustomForm.WMSize] Name=',Name,' Class=',ClassName,' Message.Width=',Message.Width,' Message.Height=',Message.Height);
{$ENDIF}
Assert(False, 'Trace:WMSIZE in TCustomForm');
if not (csDesigning in ComponentState) then begin
OldState:=FWindowState;
@ -1087,9 +1087,19 @@ begin
Visible := False;
end;
{------------------------------------------------------------------------------}
{ TCustomForm Method IsForm }
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------
procedure TCustomForm.ShowOnTop;
------------------------------------------------------------------------------}
procedure TCustomForm.ShowOnTop;
begin
Show;
BringToFront;
LCLLinux.ShowWindow(Handle,SW_SHOWNORMAL);
end;
{------------------------------------------------------------------------------
TCustomForm Method IsForm
------------------------------------------------------------------------------}
function TCustomForm.IsForm: Boolean;
begin
//TODO:
@ -1399,6 +1409,9 @@ end;
{ =============================================================================
$Log$
Revision 1.94 2003/04/11 21:21:34 mattias
implemented closing unneeded package
Revision 1.93 2003/04/11 09:32:20 mattias
added some help stuff

View File

@ -273,9 +273,14 @@ type
TLazPackageFlag = (
lpfAutoIncrementVersionOnBuild, // increment version before
lpfModified, // package needs saving
lpfAutoUpdate // auto compile, if this package
// or any required package has been modified
lpfModified, // package needs saving
lpfAutoUpdate, // auto compile, if this package
// or any required package has been modified
lpfNeeded, // Set by PackageGraph, if package is in use
// (for example because it is Installed or an Installed
// package requires this package)
lpfVisited, // Used by the PackageGraph to avoid double checking
lpfDestroying // set during destruction
);
TLazPackageFlags = set of TLazPackageFlag;
@ -425,6 +430,8 @@ type
read FUsageOptions;
end;
PLazPackage = ^TLazPackage;
{ TBasePackageEditor }
@ -449,25 +456,32 @@ const
LazPackageTypeIdents: array[TLazPackageType] of string = (
'RunTime', 'DesignTime', 'RunAndDesignTime');
LazPackageFlagNames: array[TLazPackageFlag] of string = (
'lpfAutoIncrementVersionOnBuild', 'lpfModified', 'lpfAutoUpdate');
'lpfAutoIncrementVersionOnBuild', 'lpfModified', 'lpfAutoUpdate',
'lpfNeeded', 'lpfVisited', 'lpfDestroying');
var
// All TPkgDependency are added to this AVL tree
// All TPkgDependency are added to this AVL tree (sorted for names, not version!)
PackageDependencies: TAVLTree; // tree of TPkgDependency
function PkgFileTypeIdentToType(const s: string): TPkgFileType;
function LazPackageTypeIdentToType(const s: string): TLazPackageType;
procedure SortDependencyList(Dependencies: TList);
function CompareLazPackageID(Data1, Data2: Pointer): integer;
function CompareNameWithPackageID(Key, Data: Pointer): integer;
function CompareLazPackageIDNames(Data1, Data2: Pointer): integer;
function CompareNameWithPkgDependency(Key, Data: Pointer): integer;
function ComparePkgDependencyNames(Data1, Data2: Pointer): integer;
function FindDependencyByNameInList(First: TPkgDependency;
ListType: TPkgDependencyList; const Name: string): TPkgDependency;
function FindCompatibleDependencyInList(First: TPkgDependency;
ListType: TPkgDependencyList; ComparePackage: TLazPackageID): TPkgDependency;
function GetDependencyWithIndex(First: TPkgDependency;
ListType: TPkgDependencyList; Index: integer): TPkgDependency;
function FindLowestPkgDependencyWithName(const PkgName: string): TPkgDependency;
function FindLowestPkgDependencyNodeWithName(const PkgName: string): TAVLTreeNode;
function FindNextPkgDependecyNodeWithSameName(Node: TAVLTreeNode): TAVLTreeNode;
@ -557,6 +571,26 @@ begin
Result:=AnsiCompareText(Pkg1.Name,Pkg2.Name);
end;
function CompareNameWithPkgDependency(Key, Data: Pointer): integer;
var
PkgName: String;
Dependency: TPkgDependency;
begin
PkgName:=String(Key);
Dependency:=TPkgDependency(Data);
Result:=AnsiCompareText(PkgName,Dependency.PackageName);
end;
function ComparePkgDependencyNames(Data1, Data2: Pointer): integer;
var
Dependency1: TPkgDependency;
Dependency2: TPkgDependency;
begin
Dependency1:=TPkgDependency(Data1);
Dependency2:=TPkgDependency(Data2);
Result:=AnsiCompareText(Dependency1.PackageName,Dependency2.PackageName);
end;
function FindDependencyByNameInList(First: TPkgDependency;
ListType: TPkgDependencyList; const Name: string): TPkgDependency;
begin
@ -595,7 +629,8 @@ var
begin
Result:=nil;
if PackageDependencies=nil then exit;
Result:=PackageDependencies.FindKey(PChar(PkgName),@CompareNameWithPackageID);
Result:=
PackageDependencies.FindKey(PChar(PkgName),@CompareNameWithPkgDependency);
if Result=nil then exit;
while true do begin
PrecNode:=PackageDependencies.FindPrecessor(Result);
@ -832,7 +867,11 @@ end;
procedure TPkgDependency.SetPackageName(const AValue: string);
begin
if FPackageName=AValue then exit;
if (PackageDependencies<>nil) and (FPackageName<>'') then
PackageDependencies.Remove(Self);
FPackageName:=AValue;
if (PackageDependencies<>nil) and (FPackageName<>'') then
PackageDependencies.Add(Self);
end;
procedure TPkgDependency.SetRemoved(const AValue: boolean);
@ -856,14 +895,13 @@ constructor TPkgDependency.Create;
begin
MinVersion:=TPkgVersion.Create;
MaxVersion:=TPkgVersion.Create;
if PackageDependencies<>nil then PackageDependencies.Add(Self);
Clear;
end;
destructor TPkgDependency.Destroy;
begin
RequiredPackage:=nil;
if PackageDependencies<>nil then PackageDependencies.Remove(Self);
PackageName:='';
FreeAndNil(fMinVersion);
FreeAndNil(fMaxVersion);
inherited Destroy;
@ -872,11 +910,11 @@ end;
procedure TPkgDependency.Clear;
begin
RequiredPackage:=nil;
PackageName:='';
FRemoved:=false;
FFlags:=[];
FMaxVersion.Clear;
FMinVersion.Clear;
FPackageName:='';
end;
procedure TPkgDependency.LoadFromXMLConfig(XMLConfig: TXMLConfig;
@ -1215,10 +1253,14 @@ begin
end;
procedure TLazPackage.SetFlags(const AValue: TLazPackageFlags);
var
ChangedFlags: TLazPackageFlags;
begin
if FFlags=AValue then exit;
ChangedFlags:=FFlags+AValue-(FFlags*AValue);
FFlags:=AValue;
Modified:=true;
if ChangedFlags*[lpfAutoIncrementVersionOnBuild,lpfAutoUpdate]<>[] then
Modified:=true;
end;
procedure TLazPackage.SetIconFile(const AValue: string);
@ -1906,7 +1948,10 @@ begin
end;
initialization
PackageDependencies:=nil;
PackageDependencies:=TAVLTree.Create(@ComparePkgDependencyNames);
finalization
FreeThenNil(PackageDependencies);
end.

View File

@ -45,12 +45,15 @@ uses
type
TOnOpenFile =
function(Sender: TObject; const Filename: string): TModalResult of Object;
function(Sender: TObject; const Filename: string): TModalResult of object;
TOnOpenPackage =
function(Sender: TObject; APackage: TLazPackage): TModalResult of Object;
function(Sender: TObject; APackage: TLazPackage): TModalResult of object;
TOnSavePackage =
function(Sender: TObject; APackage: TLazPackage): TModalResult of object;
TOnCreateNewPkgFile =
function(Sender: TObject;
const Params: TAddToPkgResult): TModalResult of object;
TOnFreePkgEditor = procedure(APackage: TLazPackage) of object;
{ TPackageEditorForm }
@ -92,6 +95,9 @@ type
procedure MaxVersionEditChange(Sender: TObject);
procedure MinVersionEditChange(Sender: TObject);
procedure OpenFileMenuItemClick(Sender: TObject);
procedure PackageEditorFormClose(Sender: TObject; var Action: TCloseAction);
procedure PackageEditorFormCloseQuery(Sender: TObject; var CanClose: boolean
);
procedure PackageEditorFormResize(Sender: TObject);
procedure ReAddMenuItemClick(Sender: TObject);
procedure RegisteredListBoxDrawItem(Control: TWinControl; Index: Integer;
@ -134,11 +140,12 @@ type
private
FItems: TList; // list of TPackageEditorForm
FOnCreateNewFile: TOnCreateNewPkgFile;
FOnFreeEditor: TOnFreePkgEditor;
FOnGetIDEFileInfo: TGetIDEFileStateEvent;
FOnGetUnitRegisterInfo: TOnGetUnitRegisterInfo;
FOnOpenFile: TOnOpenFile;
FOnOpenPackage: TOnOpenPackage;
FOnSavePackage: TNotifyEvent;
FOnSavePackage: TOnSavePackage;
function GetEditors(Index: integer): TPackageEditorForm;
public
constructor Create;
@ -152,9 +159,10 @@ type
function OpenFile(Sender: TObject; const Filename: string): TModalResult;
function OpenDependency(Sender: TObject;
Dependency: TPkgDependency): TModalResult;
procedure DoFreeEditor(Pkg: TLazPackage);
function CreateNewFile(Sender: TObject;
const Params: TAddToPkgResult): TModalResult;
procedure SavePackage(APackage: TLazPackage);
function SavePackage(APackage: TLazPackage): TModalResult;
public
property Editors[Index: integer]: TPackageEditorForm read GetEditors;
property OnCreateNewFile: TOnCreateNewPkgFile read FOnCreateNewFile
@ -165,7 +173,8 @@ type
write FOnGetIDEFileInfo;
property OnGetUnitRegisterInfo: TOnGetUnitRegisterInfo
read FOnGetUnitRegisterInfo write FOnGetUnitRegisterInfo;
property OnSavePackage: TNotifyEvent read FOnSavePackage write FOnSavePackage;
property OnFreeEditor: TOnFreePkgEditor read FOnFreeEditor write FOnFreeEditor;
property OnSavePackage: TOnSavePackage read FOnSavePackage write FOnSavePackage;
end;
var
@ -350,6 +359,31 @@ begin
end;
end;
procedure TPackageEditorForm.PackageEditorFormClose(Sender: TObject;
var Action: TCloseAction);
begin
if LazPackage=nil then exit;
end;
procedure TPackageEditorForm.PackageEditorFormCloseQuery(Sender: TObject;
var CanClose: boolean);
var
MsgResult: Integer;
begin
if (LazPackage=nil) or (lpfDestroying in LazPackage.Flags)
or (LazPackage.ReadOnly) or (not LazPackage.Modified) then exit;
MsgResult:=MessageDlg('Save Changes?',
'Package "'+LazPackage.IDAsString+'" has changed.'#13
+'Save package?',
mtConfirmation,[mbYes,mbNo,mbAbort],0);
if MsgResult=mrYes then begin
MsgResult:=PackageEditors.SavePackage(LazPackage);
end;
if MsgResult=mrAbort then CanClose:=false;
end;
procedure TPackageEditorForm.RegisteredListBoxDrawItem(Control: TWinControl;
Index: Integer; ARect: TRect; State: TOwnerDrawState);
var
@ -362,6 +396,7 @@ var
IconHeight: Integer;
CurRect: TRect;
begin
if LazPackage=nil then exit;
if (Index<0) or (Index>=FPlugins.Count) then exit;
CurObject:=FPlugins.Objects[Index];
if CurObject is TPkgComponent then begin
@ -594,6 +629,7 @@ var
NodeIndex: Integer;
CurFile: TPkgFile;
begin
if LazPackage=nil then exit;
CurNode:=FilesTreeView.Selected;
if (CurNode=nil) then exit;
if (CurNode.Parent=FilesNode) then begin
@ -618,7 +654,9 @@ var
ARect: TRect;
begin
if FLazPackage=AValue then exit;
if FLazPackage<>nil then FLazPackage.Editor:=nil;
FLazPackage:=AValue;
if FLazPackage=nil then exit;
FLazPackage.Editor:=Self;
// find a nice position for the editor
ARect:=FLazPackage.EditorRect;
@ -830,6 +868,7 @@ end;
procedure TPackageEditorForm.UpdateAll;
begin
if LazPackage=nil then exit;
FilesTreeView.BeginUpdate;
UpdateTitle;
UpdateButtons;
@ -844,6 +883,7 @@ procedure TPackageEditorForm.UpdateTitle;
var
NewCaption: String;
begin
if LazPackage=nil then exit;
NewCaption:='Package '+FLazPackage.Name;
if LazPackage.Modified then
NewCaption:=NewCaption+'*';
@ -852,6 +892,7 @@ end;
procedure TPackageEditorForm.UpdateButtons;
begin
if LazPackage=nil then exit;
SaveBitBtn.Enabled:=(not LazPackage.ReadOnly)
and (LazPackage.IsVirtual or LazPackage.Modified);
CompileBitBtn.Enabled:=(not LazPackage.IsVirtual);
@ -889,6 +930,7 @@ var
CurNode: TTreeNode;
NextNode: TTreeNode;
begin
if LazPackage=nil then exit;
FilesTreeView.BeginUpdate;
// files
@ -947,6 +989,7 @@ var
CurDependency: TPkgDependency;
NextNode: TTreeNode;
begin
if LazPackage=nil then exit;
FilesTreeView.BeginUpdate;
// required packages
@ -1011,6 +1054,7 @@ var
Dependency: TPkgDependency;
Removed: boolean;
begin
if LazPackage=nil then exit;
FPlugins.Clear;
CurFile:=GetCurrentFile(Removed);
if CurFile=nil then
@ -1067,6 +1111,7 @@ var
AVersion: TPkgVersion;
Removed: boolean;
begin
if LazPackage=nil then exit;
DepencyChanged:=false;
CurDependency:=GetCurrentDependency(Removed);
if (CurDependency<>nil) then begin
@ -1106,6 +1151,7 @@ procedure TPackageEditorForm.UpdateStatusBar;
var
StatusText: String;
begin
if LazPackage=nil then exit;
if LazPackage.IsVirtual and (not LazPackage.ReadOnly) then begin
StatusText:='package '+LazPackage.Name+' not saved';
end else begin
@ -1171,10 +1217,13 @@ begin
FPlugins:=TStringList.Create;
SetupComponents;
OnResize:=@PackageEditorFormResize;
OnCloseQuery:=@PackageEditorFormCloseQuery;
OnClose:=@PackageEditorFormClose;
end;
destructor TPackageEditorForm.Destroy;
begin
PackageEditors.DoFreeEditor(LazPackage);
FreeAndNil(FPlugins);
inherited Destroy;
end;
@ -1261,6 +1310,12 @@ begin
end;
end;
procedure TPackageEditors.DoFreeEditor(Pkg: TLazPackage);
begin
FItems.Remove(Pkg.Editor);
if Assigned(OnFreeEditor) then OnFreeEditor(Pkg);
end;
function TPackageEditors.CreateNewFile(Sender: TObject;
const Params: TAddToPkgResult): TModalResult;
begin
@ -1269,9 +1324,9 @@ begin
Result:=OnCreateNewFile(Sender,Params);
end;
procedure TPackageEditors.SavePackage(APackage: TLazPackage);
function TPackageEditors.SavePackage(APackage: TLazPackage): TModalResult;
begin
if Assigned(OnSavePackage) then OnSavePackage(APackage);
if Assigned(OnSavePackage) then Result:=OnSavePackage(Self,APackage);
end;
initialization

View File

@ -65,7 +65,8 @@ const
fpfSearchInPckgsWithEditor,fpfSearchInPkgLinks];
type
TPkgAddedEvent = procedure(Pkg: TLazPackage) of object;
TPkgAddedEvent = procedure(APackage: TLazPackage) of object;
TPkgDeleteEvent = procedure(APackage: TLazPackage) of object;
TLazPackageGraph = class
private
@ -75,6 +76,7 @@ type
FLCLPackage: TLazPackage;
FOnAddPackage: TPkgAddedEvent;
FOnChangePackageName: TPkgChangeNameEvent;
FOnDeletePackage: TPkgDeleteEvent;
FRegistrationFile: TPkgFile;
FRegistrationPackage: TLazPackage;
FRegistrationUnitName: string;
@ -90,6 +92,7 @@ type
constructor Create;
destructor Destroy; override;
procedure Clear;
procedure Delete(Index: integer);
function Count: integer;
function FindLowestPkgNodeByName(const PkgName: string): TAVLTreeNode;
function FindNextSameName(ANode: TAVLTreeNode): TAVLTreeNode;
@ -122,6 +125,11 @@ type
procedure RegistrationError(const Msg: string);
procedure AddPackage(APackage: TLazPackage);
procedure AddStaticBasePackages;
procedure ClosePackage(APackage: TLazPackage);
procedure MarkNeededPackages;
procedure CloseUnneededPackages;
function CheckIfPackageCanBeClosed(APackage: TLazPackage): boolean;
function PackageIsNeeded(APackage: TLazPackage): boolean;
procedure RegisterStaticPackages;
function OpenDependency(Dependency: TPkgDependency;
var APackage: TLazPackage): TLoadPackageResult;
@ -147,6 +155,7 @@ type
property OnChangePackageName: TPkgChangeNameEvent read FOnChangePackageName
write FOnChangePackageName;
property OnAddPackage: TPkgAddedEvent read FOnAddPackage write FOnAddPackage;
property OnDeletePackage: TPkgDeleteEvent read FOnDeletePackage write FOnDeletePackage;
end;
var
@ -218,14 +227,20 @@ end;
procedure TLazPackageGraph.Clear;
var
i: Integer;
begin
for i:=FItems.Count-1 downto 0 do Delete(i);
end;
procedure TLazPackageGraph.Delete(Index: integer);
var
CurPkg: TLazPackage;
begin
for i:=FItems.Count-1 downto 0 do begin
CurPkg:=Packages[i];
FItems.Delete(i);
FTree.Remove(CurPkg);
CurPkg.Free;
end;
CurPkg:=Packages[Index];
CurPkg.Flags:=CurPkg.Flags+[lpfDestroying];
if Assigned(OnDeletePackage) then OnDeletePackage(CurPkg);
FItems.Delete(Index);
FTree.Remove(CurPkg);
CurPkg.Free;
end;
function TLazPackageGraph.Count: integer;
@ -676,6 +691,7 @@ procedure TLazPackageGraph.AddPackage(APackage: TLazPackage);
var
RequiredPackage: TLazPackage;
Dependency: TPkgDependency;
DepNode: TAVLTreeNode;
begin
FTree.Add(APackage);
FItems.Add(APackage);
@ -688,8 +704,17 @@ begin
Dependency:=Dependency.NextRequiresDependency;
end;
// update all dependencies
// update all missing dependencies
DepNode:=FindLowestPkgDependencyNodeWithName(APackage.Name);
while DepNode<>nil do begin
Dependency:=TPkgDependency(DepNode.Data);
if (Dependency.LoadPackageResult<>lprSuccess)
and Dependency.IsCompatible(APackage) then begin
Dependency.RequiredPackage:=APackage;
Dependency.LoadPackageResult:=lprSuccess;
end;
DepNode:=FindNextPkgDependecyNodeWithSameName(DepNode);
end;
if Assigned(OnAddPackage) then OnAddPackage(APackage);
end;
@ -704,6 +729,99 @@ begin
AddPackage(FLCLPackage);
end;
procedure TLazPackageGraph.ClosePackage(APackage: TLazPackage);
begin
if (lpfDestroying in APackage.Flags) or PackageIsNeeded(APackage) then exit;
CloseUnneededPackages;
end;
procedure TLazPackageGraph.MarkNeededPackages;
var
i: Integer;
Pkg: TLazPackage;
PkgStack: PLazPackage;
StackPtr: Integer;
RequiredPackage: TLazPackage;
Dependency: TPkgDependency;
begin
if Count=0 then exit;
// mark all packages as unneeded and not visited
for i:=0 to FItems.Count-1 do begin
Pkg:=TLazPackage(FItems[i]);
Pkg.Flags:=Pkg.Flags-[lpfNeeded];
end;
// create stack
GetMem(PkgStack,SizeOf(Pointer)*Count);
StackPtr:=0;
// put all needed packages on stack
for i:=0 to FItems.Count-1 do begin
Pkg:=TLazPackage(FItems[i]);
if PackageIsNeeded(Pkg)
and (not (lpfNeeded in Pkg.Flags)) then begin
Pkg.Flags:=Pkg.Flags+[lpfNeeded];
PkgStack[StackPtr]:=Pkg;
inc(StackPtr);
end;
end;
// mark all needed packages
while StackPtr>0 do begin
// get needed package from stack
dec(StackPtr);
Pkg:=PkgStack[StackPtr];
// mark package as needed
Pkg.Flags:=Pkg.Flags+[lpfNeeded,lpfVisited];
// put all required packages on stack
Dependency:=Pkg.FirstRequiredDependency;
while Dependency<>nil do begin
if Dependency.LoadPackageResult=lprSuccess then begin
RequiredPackage:=Dependency.RequiredPackage;
if (not (lpfNeeded in RequiredPackage.Flags)) then begin
RequiredPackage.Flags:=RequiredPackage.Flags+[lpfNeeded];
PkgStack[StackPtr]:=RequiredPackage;
inc(StackPtr);
end;
end;
Dependency:=Dependency.NextRequiresDependency;
end;
end;
// clean up
FreeMem(PkgStack);
end;
procedure TLazPackageGraph.CloseUnneededPackages;
var
i: Integer;
begin
MarkNeededPackages;
for i:=FItems.Count-1 downto 0 do
if not (lpfNeeded in Packages[i].Flags) then Delete(i);
end;
function TLazPackageGraph.CheckIfPackageCanBeClosed(APackage: TLazPackage
): boolean;
begin
MarkNeededPackages;
Result:=lpfNeeded in APackage.FLags;
end;
function TLazPackageGraph.PackageIsNeeded(APackage: TLazPackage): boolean;
begin
Result:=true;
// check if package is open, installed or will be installed
if (APackage.Installed<>pitNope) or (APackage.AutoInstall<>pitNope)
or ((APackage.Editor<>nil) and (APackage.Editor.Visible)) then
begin
Result:=true;
exit;
end;
// check if package is used
if (APackage.FirstUsedByDependency=nil) then begin
Result:=false;
exit;
end;
Result:=false;
end;
procedure TLazPackageGraph.RegisterStaticPackages;
begin
// FCL

View File

@ -44,11 +44,11 @@ uses
{$IFDEF IDE_MEM_CHECK}
MemCheck,
{$ENDIF}
Classes, SysUtils, LCLProc, Forms, Controls, FileCtrl, Dialogs, Menus,
CodeToolManager, CodeCache, Laz_XMLCfg, AVL_Tree, LazarusIDEStrConsts,
KeyMapping, EnvironmentOpts, IDEProcs, ProjectDefs, InputHistory,
IDEDefs, UComponentManMain, PackageEditor, AddToPackageDlg, PackageDefs,
PackageLinks, PackageSystem, ComponentReg, OpenInstalledPkgDlg,
Classes, SysUtils, LCLProc, Forms, Controls, FileCtrl,
Dialogs, Menus, CodeToolManager, CodeCache, Laz_XMLCfg, AVL_Tree,
LazarusIDEStrConsts, KeyMapping, EnvironmentOpts, IDEProcs, ProjectDefs,
InputHistory, IDEDefs, UComponentManMain, PackageEditor, AddToPackageDlg,
PackageDefs, PackageLinks, PackageSystem, ComponentReg, OpenInstalledPkgDlg,
PkgGraphExporer,
BasePkgManager, MainBar;
@ -57,21 +57,25 @@ type
procedure MainIDEitmPkgOpenPackageFileClick(Sender: TObject);
procedure MainIDEitmPkgPkgGraphClick(Sender: TObject);
function OnPackageEditorCreateFile(Sender: TObject;
const Params: TAddToPkgResult): TModalResult;
const Params: TAddToPkgResult): TModalResult;
procedure OnPackageEditorFreeEditor(APackage: TLazPackage);
procedure OnPackageEditorGetUnitRegisterInfo(Sender: TObject;
const AFilename: string; var TheUnitName: string;
var HasRegisterProc: boolean);
const AFilename: string; var TheUnitName: string;
var HasRegisterProc: boolean);
function OnPackageEditorOpenPackage(Sender: TObject; APackage: TLazPackage
): TModalResult;
procedure OnPackageEditorSavePackage(Sender: TObject);
procedure PackageGraphChangePackageName(Pkg: TLazPackage;
const OldName: string);
): TModalResult;
function OnPackageEditorSavePackage(Sender: TObject;
APackage: TLazPackage): TModalResult;
procedure PackageGraphChangePackageName(APackage: TLazPackage;
const OldName: string);
procedure PackageGraphDeletePackage(APackage: TLazPackage);
function PackageGraphExplorerOpenPackage(Sender: TObject;
APackage: TLazPackage): TModalResult;
APackage: TLazPackage): TModalResult;
procedure PkgManagerAddPackage(Pkg: TLazPackage);
procedure mnuConfigCustomCompsClicked(Sender: TObject);
procedure mnuPkgOpenPackageClicked(Sender: TObject);
procedure mnuOpenRecentPackageClicked(Sender: TObject);
procedure OnApplicationIdle(Sender: TObject);
private
function DoShowSavePackageAsDialog(APackage: TLazPackage): TModalResult;
public
@ -185,6 +189,12 @@ begin
[nfOpenInEditor,nfIsNotPartOfProject,nfSave,nfAddToRecent]);
end;
procedure TPkgManager.OnPackageEditorFreeEditor(APackage: TLazPackage);
begin
APackage.Editor:=nil;
PackageGraph.ClosePackage(APackage);
end;
procedure TPkgManager.OnPackageEditorGetUnitRegisterInfo(Sender: TObject;
const AFilename: string; var TheUnitName: string; var HasRegisterProc: boolean
);
@ -212,17 +222,25 @@ begin
Result:=DoOpenPackage(APackage);
end;
procedure TPkgManager.OnPackageEditorSavePackage(Sender: TObject);
function TPkgManager.OnPackageEditorSavePackage(Sender: TObject;
APackage: TLazPackage): TModalResult;
begin
if Sender is TLazPackage then
DoSavePackage(TLazPackage(Sender),[]);
Result:=DoSavePackage(APackage,[]);
end;
procedure TPkgManager.PackageGraphChangePackageName(Pkg: TLazPackage;
procedure TPkgManager.PackageGraphChangePackageName(APackage: TLazPackage;
const OldName: string);
begin
if PackageGraphExplorer<>nil then
PackageGraphExplorer.UpdatePackageName(Pkg,OldName);
PackageGraphExplorer.UpdatePackageName(APackage,OldName);
end;
procedure TPkgManager.PackageGraphDeletePackage(APackage: TLazPackage);
begin
if APackage.Editor<>nil then begin
APackage.Editor.Hide;
APackage.Editor.Free;
end;
end;
function TPkgManager.PackageGraphExplorerOpenPackage(Sender: TObject;
@ -271,6 +289,11 @@ begin
end;
end;
procedure TPkgManager.OnApplicationIdle(Sender: TObject);
begin
PackageGraph.CloseUnneededPackages;
end;
function TPkgManager.DoShowSavePackageAsDialog(
APackage: TLazPackage): TModalResult;
var
@ -438,11 +461,10 @@ begin
PkgLinks:=TPackageLinks.Create;
PackageDependencies:=TAVLTree.Create(@CompareLazPackageID);
PackageGraph:=TLazPackageGraph.Create;
PackageGraph.OnChangePackageName:=@PackageGraphChangePackageName;
PackageGraph.OnAddPackage:=@PkgManagerAddPackage;
PackageGraph.OnDeletePackage:=@PackageGraphDeletePackage;
PackageEditors:=TPackageEditors.Create;
PackageEditors.OnOpenFile:=@MainIDE.DoOpenMacroFile;
@ -450,7 +472,10 @@ begin
PackageEditors.OnCreateNewFile:=@OnPackageEditorCreateFile;
PackageEditors.OnGetIDEFileInfo:=@MainIDE.GetIDEFileState;
PackageEditors.OnGetUnitRegisterInfo:=@OnPackageEditorGetUnitRegisterInfo;
PackageEditors.OnFreeEditor:=@OnPackageEditorFreeEditor;
PackageEditors.OnSavePackage:=@OnPackageEditorSavePackage;
Application.AddOnIdleHandler(@OnApplicationIdle);
end;
destructor TPkgManager.Destroy;
@ -576,8 +601,7 @@ var
begin
// open a package editor
CurEditor:=PackageEditors.OpenEditor(APackage);
CurEditor.Show;
CurEditor.BringToFront;
CurEditor.ShowOnTop;
Result:=mrOk;
end;
@ -707,8 +731,7 @@ begin
PackageGraphExplorer:=TPkgGraphExplorer.Create(Application);
PackageGraphExplorer.OnOpenPackage:=@PackageGraphExplorerOpenPackage;
end;
PackageGraphExplorer.Show;
PackageGraphExplorer.BringToFront;
PackageGraphExplorer.ShowOnTop;
Result:=mrOk;
end;