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/packageeditor.pas svneol=native#text/pascal
packager/packagelinks.pas svneol=native#text/pascal packager/packagelinks.pas svneol=native#text/pascal
packager/packagesystem.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/pkgmanager.pas svneol=native#text/pascal
packager/pkgoptionsdlg.pas svneol=native#text/pascal packager/pkgoptionsdlg.pas svneol=native#text/pascal
packager/registerfcl.pas svneol=native#text/pascal packager/registerfcl.pas svneol=native#text/pascal

View File

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

View File

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

View File

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

View File

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

View File

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