fixed save package on close IDE

git-svn-id: trunk@4053 -
This commit is contained in:
mattias 2003-04-13 14:57:45 +00:00
parent 51365b3a35
commit e44259df00
6 changed files with 66 additions and 25 deletions

2
.gitattributes vendored
View File

@ -826,7 +826,7 @@ packager/packagedefs.pas svneol=native#text/pascal
packager/packageeditor.pas svneol=native#text/pascal
packager/packagelinks.pas svneol=native#text/pascal
packager/packagesystem.pas svneol=native#text/pascal
packager/pkggraphexporer.pas svneol=native#text/pascal
packager/pkggraphexplorer.pas svneol=native#text/pascal
packager/pkgmanager.pas svneol=native#text/pascal
packager/pkgoptionsdlg.pas svneol=native#text/pascal
packager/registerfcl.pas svneol=native#text/pascal

View File

@ -404,6 +404,7 @@ type
procedure AddUsedByDependency(Dependency: TPkgDependency);
procedure RemoveUsedByDependency(Dependency: TPkgDependency);
procedure ChangeID(const NewName: string; NewVersion: TPkgVersion);
procedure UpdateEditorRect;
public
property AddDependCompilerOptions: TAdditionalCompilerOptions
read FAddDependCompilerOptions;
@ -1502,6 +1503,7 @@ begin
FUsageOptions.LoadFromXMLConfig(XMLConfig,Path+'UsageOptions/');
FAddDependCompilerOptions.LoadFromXMLConfig(
XMLConfig,Path+'AddDependCompilerOptions/');
LoadRect(XMLConfig,Path+'EditorRect/',fEditorRect);
UnlockModified;
end;
@ -1544,6 +1546,7 @@ procedure TLazPackage.SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string
end;
begin
UpdateEditorRect;
XMLConfig.SetDeleteValue(Path+'Name/Value',FName,'');
XMLConfig.SetDeleteValue(Path+'Author/Value',FAuthor,'');
FCompilerOptions.SaveToXMLConfig(XMLConfig,Path+'CompilerOptions/');
@ -1560,6 +1563,7 @@ begin
FUsageOptions.SaveToXMLConfig(XMLConfig,Path+'UsageOptions/');
FAddDependCompilerOptions.SaveToXMLConfig(
XMLConfig,Path+'AddDependCompilerOptions/');
SaveRect(XMLConfig,Path+'EditorRect/',fEditorRect);
Modified:=false;
end;
@ -1848,6 +1852,13 @@ begin
Name:=NewName;
end;
procedure TLazPackage.UpdateEditorRect;
begin
if Editor=nil then exit;
EditorRect:=Rect(Editor.Left,Editor.Top,
Editor.Left+Editor.Width,Editor.Top+Editor.Height);
end;
{ TPkgComponent }
procedure TPkgComponent.SetPkgFile(const AValue: TPkgFile);

View File

@ -655,10 +655,8 @@ begin
CurDependency:=GetCurrentDependency(Removed);
if (CurDependency=nil) or Removed then exit;
// ToDo: consistency check
CurDependency.Assign(NewDependency);
PackageGraph.ChangeDependency(CurDependency,NewDependency);
NewDependency.Free;
end;
@ -720,6 +718,7 @@ begin
FLazPackage.Editor:=Self;
// find a nice position for the editor
ARect:=FLazPackage.EditorRect;
writeln('');
if (ARect.Bottom<ARect.Top+50) or (ARect.Right<ARect.Left+50) then
ARect:=CreateNiceWindowPosition(500,400);
SetBounds(ARect.Left,ARect.Top,

View File

@ -68,10 +68,12 @@ type
TPkgAddedEvent = procedure(APackage: TLazPackage) of object;
TPkgDeleteEvent = procedure(APackage: TLazPackage) of object;
TDependencyModifiedEvent = procedure(ADependency: TPkgDependency) of object;
TEndUpdateEvent = procedure(Sender: TObject; Changed: boolean) of object;
TLazPackageGraph = class
private
FAbortRegistration: boolean;
fChanged: boolean;
FErrorMsg: string;
FFCLPackage: TLazPackage;
FItems: TList; // unsorted list of TLazPackage
@ -81,25 +83,25 @@ type
FOnChangePackageName: TPkgChangeNameEvent;
FOnDeletePackage: TPkgDeleteEvent;
FOnDependencyModified: TDependencyModifiedEvent;
FOnEndUpdate: TNotifyEvent;
FOnEndUpdate: TEndUpdateEvent;
FRegistrationFile: TPkgFile;
FRegistrationPackage: TLazPackage;
FRegistrationUnitName: string;
FTree: TAVLTree; // sorted tree of TLazPackage
FUpdateLock: integer;
function GetPackages(Index: integer): TLazPackage;
procedure SetAbortRegistration(const AValue: boolean);
procedure SetRegistrationPackage(const AValue: TLazPackage);
function CreateFCLPackage: TLazPackage;
function CreateLCLPackage: TLazPackage;
procedure PackageChangedName(Pkg: TLazPackage; const OldName: string);
function GetPackages(Index: integer): TLazPackage;
procedure DoDependencyChanged(Dependency: TPkgDependency);
procedure SetAbortRegistration(const AValue: boolean);
procedure SetRegistrationPackage(const AValue: TLazPackage);
public
constructor Create;
destructor Destroy; override;
procedure Clear;
procedure Delete(Index: integer);
function Count: integer;
procedure BeginUpdate;
procedure BeginUpdate(Change: boolean);
procedure EndUpdate;
function Updating: boolean;
function FindLowestPkgNodeByName(const PkgName: string): TAVLTreeNode;
@ -144,6 +146,7 @@ type
function CheckIfPackageCanBeClosed(APackage: TLazPackage): boolean;
function PackageIsNeeded(APackage: TLazPackage): boolean;
procedure RegisterStaticPackages;
procedure ChangeDependency(Dependency, NewDependency: TPkgDependency);
function OpenDependency(Dependency: TPkgDependency;
var APackage: TLazPackage): TLoadPackageResult;
procedure IterateComponentClasses(APackage: TLazPackage;
@ -168,7 +171,7 @@ type
read FOnDependencyModified write FOnDependencyModified;
property OnDeletePackage: TPkgDeleteEvent read FOnDeletePackage
write FOnDeletePackage;
property OnEndUpdate: TNotifyEvent read FOnEndUpdate write FOnEndUpdate;
property OnEndUpdate: TEndUpdateEvent read FOnEndUpdate write FOnEndUpdate;
property Packages[Index: integer]: TLazPackage read GetPackages; default;
property RegistrationFile: TPkgFile read FRegistrationFile;
property RegistrationPackage: TLazPackage read FRegistrationPackage
@ -195,10 +198,10 @@ end;
{ TLazPackageGraph }
procedure TLazPackageGraph.PackageChangedName(Pkg: TLazPackage;
const OldName: string);
procedure TLazPackageGraph.DoDependencyChanged(Dependency: TPkgDependency);
begin
if Assigned(OnChangePackageName) then OnChangePackageName(Pkg,OldName);
fChanged:=true;
if Assigned(OnDependencyModified) then OnDependencyModified(Dependency);
end;
function TLazPackageGraph.GetPackages(Index: integer): TLazPackage;
@ -253,12 +256,14 @@ procedure TLazPackageGraph.Delete(Index: integer);
var
CurPkg: TLazPackage;
begin
BeginUpdate(true);
CurPkg:=Packages[Index];
CurPkg.Flags:=CurPkg.Flags+[lpfDestroying];
if Assigned(OnDeletePackage) then OnDeletePackage(CurPkg);
FItems.Delete(Index);
FTree.Remove(CurPkg);
CurPkg.Free;
EndUpdate;
end;
function TLazPackageGraph.Count: integer;
@ -266,9 +271,10 @@ begin
Result:=FItems.Count;
end;
procedure TLazPackageGraph.BeginUpdate;
procedure TLazPackageGraph.BeginUpdate(Change: boolean);
begin
inc(FUpdateLock);
fChanged:=Change;
if FUpdateLock=1 then begin
if Assigned(OnBeginUpdate) then OnBeginUpdate(Self);
end;
@ -279,7 +285,7 @@ begin
if FUpdateLock<=0 then RaiseException('TLazPackageGraph.EndUpdate');
dec(FUpdateLock);
if FUpdateLock=0 then begin
if Assigned(OnEndUpdate) then OnEndUpdate(Self);
if Assigned(OnEndUpdate) then OnEndUpdate(Self,fChanged);
end;
end;
@ -512,10 +518,12 @@ end;
function TLazPackageGraph.NewPackage(const Prefix: string): TLazPackage;
begin
BeginUpdate(true);
Result:=TLazPackage.Create;
Result.Name:=CreateUniquePkgName('NewPackage',nil);
FItems.Add(Result);
FTree.Add(Result);
EndUpdate;
end;
procedure TLazPackageGraph.ConsistencyCheck;
@ -731,7 +739,7 @@ var
Dependency: TPkgDependency;
DepNode: TAVLTreeNode;
begin
BeginUpdate;
BeginUpdate(true);
FTree.Add(APackage);
FItems.Add(APackage);
@ -831,7 +839,7 @@ procedure TLazPackageGraph.CloseUnneededPackages;
var
i: Integer;
begin
BeginUpdate;
BeginUpdate(false);
MarkNeededPackages;
for i:=FItems.Count-1 downto 0 do
if not (lpfNeeded in Packages[i].Flags) then Delete(i);
@ -853,11 +861,14 @@ begin
// ID does not change
// -> just rename
APackage.Name:=NewName;
fChanged:=true;
exit;
end;
// ID changed
BeginUpdate(true);
// break or change all dependencies, that became incompatible
Dependency:=APackage.FirstUsedByDependency;
FirstUpdateDependency:=nil;
@ -897,6 +908,7 @@ begin
if Assigned(OnChangePackageName) then
OnChangePackageName(APackage,OldPkgName);
EndUpdate;
end;
function TLazPackageGraph.GetBrokenDependenciesWhenChangingPkgID(
@ -956,6 +968,19 @@ begin
RegistrationPackage:=nil;
end;
procedure TLazPackageGraph.ChangeDependency(Dependency,
NewDependency: TPkgDependency);
var
RequiredPackage: TLazPackage;
begin
if Dependency.Compare(NewDependency)=0 then exit;
BeginUpdate(true);
Dependency.Assign(NewDependency);
OpenDependency(Dependency,RequiredPackage);
DoDependencyChanged(Dependency);
EndUpdate;
end;
function TLazPackageGraph.OpenDependency(Dependency: TPkgDependency;
var APackage: TLazPackage): TLoadPackageResult;
var
@ -963,6 +988,7 @@ var
PkgLink: TPackageLink;
begin
if Dependency.LoadPackageResult=lprUndefined then begin
BeginUpdate(false);
// search in opened packages
ANode:=FindNodeOfDependency(Dependency,fpfSearchPackageEverywhere);
if (APackage=nil) then begin
@ -983,6 +1009,7 @@ begin
Dependency.RequiredPackage:=nil;
Dependency.LoadPackageResult:=lprNotFound;
end;
EndUpdate;
end;
APackage:=Dependency.RequiredPackage;
Result:=Dependency.LoadPackageResult;

View File

@ -31,7 +31,7 @@
Abstract:
TPkgGraphExplorer is the IDE window showing the whole package graph.
}
unit PkgGraphExporer;
unit PkgGraphExplorer;
{$mode objfpc}{$H+}
@ -52,7 +52,7 @@ type
PkgListBox: TListBox;
InfoMemo: TMemo;
procedure PackageGraphBeginUpdate(Sender: TObject);
procedure PkgGraphExplorerEndUpdate(Sender: TObject);
procedure PkgGraphExplorerEndUpdate(Sender: TObject; GraphChanged: boolean);
procedure PkgGraphExplorerResize(Sender: TObject);
procedure PkgGraphExplorerShow(Sender: TObject);
procedure PkgListBoxClick(Sender: TObject);
@ -144,8 +144,10 @@ begin
BeginUpdate;
end;
procedure TPkgGraphExplorer.PkgGraphExplorerEndUpdate(Sender: TObject);
procedure TPkgGraphExplorer.PkgGraphExplorerEndUpdate(Sender: TObject;
GraphChanged: boolean);
begin
if GraphChanged then UpdateAll;
EndUpdate;
end;
@ -436,6 +438,7 @@ begin
exit;
end;
FChangedDuringLock:=false;
if not Visible then exit;
UpdateTree;
UpdateList;
UpdateInfo;

View File

@ -49,7 +49,7 @@ uses
LazarusIDEStrConsts, KeyMapping, EnvironmentOpts, IDEProcs, ProjectDefs,
InputHistory, IDEDefs, UComponentManMain, Project, ComponentReg,
PackageEditor, AddToPackageDlg, PackageDefs, PackageLinks, PackageSystem,
OpenInstalledPkgDlg, PkgGraphExporer, BrokenDependenciesDlg,
OpenInstalledPkgDlg, PkgGraphExplorer, BrokenDependenciesDlg,
BasePkgManager, MainBar;
type
@ -721,7 +721,7 @@ begin
'Package "'+APackage.IDAsString+'" changed. Save?',
mtConfirmation,[mbYes,mbNo,mbAbort],0);
if (Result=mrNo) then Result:=mrIgnore;
if Result<>mrOk then exit;
if Result<>mrYes then exit;
end;
// save editor files to codetools
@ -817,6 +817,7 @@ begin
if CurPackage.Modified and (not CurPackage.ReadOnly)
and (not (lpfSkipSaving in CurPackage.Flags)) then begin
Result:=DoSavePackage(CurPackage,Flags);
writeln('TPkgManager.DoSaveAllPackages A ',CurPackage.IDAsString,' ',Result=mrOk);
if Result=mrIgnore then
CurPackage.Flags:=CurPackage.Flags+[lpfSkipSaving];
if Result<>mrOk then exit;