mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 23:59:27 +02:00
fixed save package on close IDE
git-svn-id: trunk@4053 -
This commit is contained in:
parent
51365b3a35
commit
e44259df00
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user