mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 00:09:15 +02:00
IDE: Don't close package editors before layout is saved. Just test if package editors can be closed.
git-svn-id: trunk@60092 -
This commit is contained in:
parent
fcf8d854dc
commit
f060e4ae45
@ -2055,6 +2055,7 @@ begin
|
||||
CloseAllForms;
|
||||
SaveIncludeLinks;
|
||||
InputHistories.Save;
|
||||
PkgBoss.DoCloseAllPackageEditors;
|
||||
PkgBoss.SaveSettings;
|
||||
if TheControlSelection<>nil then
|
||||
TheControlSelection.Clear;
|
||||
@ -2079,7 +2080,7 @@ begin
|
||||
if not CloseQueryIDEWindows then exit;
|
||||
|
||||
// save packages
|
||||
if PkgBoss.DoCloseAllPackageEditors<>mrOk then exit;
|
||||
if PkgBoss.CanCloseAllPackageEditors<>mrOk then exit;
|
||||
|
||||
// save project
|
||||
if AskSaveProject(lisDoYouStillWantToQuit,lisDiscardChangesAndQuit)<>mrOk then
|
||||
@ -2493,6 +2494,7 @@ begin
|
||||
if AForm=MainIDEBar then continue;
|
||||
if IsFormDesign(AForm) then continue;
|
||||
if AForm.Parent<>nil then continue;
|
||||
if PkgBoss.IsPackageEditorForm(AForm) then continue;
|
||||
if not AForm.CloseQuery then exit(false);
|
||||
end;
|
||||
Result:=true;
|
||||
|
@ -106,6 +106,8 @@ type
|
||||
procedure OnProjectInspectorCopyMoveFiles(Sender: TObject); virtual; abstract;
|
||||
|
||||
// package editors
|
||||
function CanClosePackageEditor(APackage: TLazPackage): TModalResult; virtual; abstract;
|
||||
function CanCloseAllPackageEditors: TModalResult; virtual; abstract;
|
||||
function DoNewPackage: TModalResult; virtual; abstract;
|
||||
function DoOpenPackage(APackage: TLazPackage; Flags: TPkgOpenFlags;
|
||||
ShowAbort: boolean): TModalResult; virtual; abstract;
|
||||
@ -116,6 +118,7 @@ type
|
||||
function DoCloseAllPackageEditors: TModalResult; virtual; abstract;
|
||||
function AddPackageDependency(APackage: TLazPackage; const ReqPackage: string;
|
||||
OnlyTestIfPossible: boolean = false): TModalResult; virtual; abstract;
|
||||
function IsPackageEditorForm(AForm: TCustomForm): boolean; virtual; abstract;
|
||||
procedure OpenHiddenModifiedPackages; virtual; abstract;
|
||||
|
||||
// package graph
|
||||
|
@ -785,6 +785,7 @@ type
|
||||
function GetLazPackage: TLazPackage; virtual;
|
||||
procedure SetLazPackage(const AValue: TLazPackage); virtual; abstract;
|
||||
public
|
||||
function CanCloseEditor: TModalResult; virtual; abstract;
|
||||
procedure UpdateAll(Immediately: boolean = false); virtual; abstract;
|
||||
property LazPackage: TLazPackage read GetLazPackage write SetLazPackage;
|
||||
end;
|
||||
|
@ -374,6 +374,7 @@ type
|
||||
public
|
||||
constructor Create(TheOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
function CanCloseEditor: TModalResult; override;
|
||||
procedure DoCompile(CompileClean, CompileRequired: boolean);
|
||||
procedure DoFindInFiles;
|
||||
procedure DoFixFilesCase;
|
||||
@ -1235,33 +1236,8 @@ end;
|
||||
|
||||
procedure TPackageEditorForm.PackageEditorFormCloseQuery(Sender: TObject;
|
||||
var CanClose: boolean);
|
||||
var
|
||||
MsgResult: Integer;
|
||||
begin
|
||||
//debugln(['TPackageEditorForm.PackageEditorFormCloseQuery ',Caption]);
|
||||
if (LazPackage<>nil) and (not (lpfDestroying in LazPackage.Flags)) then
|
||||
begin
|
||||
if (not LazPackage.ReadOnly) and LazPackage.Modified then
|
||||
begin
|
||||
MsgResult:=MessageDlg(lisPkgMangSavePackage,
|
||||
Format(lisPckEditPackageHasChangedSavePackage, [LazPackage.IDAsString, LineEnding]),
|
||||
mtConfirmation,[mbYes,mbNo,mbAbort],0);
|
||||
case MsgResult of
|
||||
mrYes:
|
||||
MsgResult:=PackageEditors.SavePackage(LazPackage,false);
|
||||
mrNo:
|
||||
LazPackage.UserIgnoreChangeStamp:=LazPackage.ChangeStamp;
|
||||
end;
|
||||
if MsgResult=mrAbort then CanClose:=false;
|
||||
LazPackage.Modified:=false; // clear modified flag, so that it will be closed
|
||||
end;
|
||||
if CanClose and not MainIDE.IDEIsClosing then
|
||||
begin
|
||||
EnvironmentOptions.LastOpenPackages.Remove(LazPackage.Filename);
|
||||
MainIDE.SaveEnvironment;
|
||||
end;
|
||||
end;
|
||||
//debugln(['TPackageEditorForm.PackageEditorFormCloseQuery CanClose=',CanClose,' ',Caption]);
|
||||
CanClose:=CanCloseEditor=mrOK;
|
||||
if CanClose then
|
||||
Application.ReleaseComponent(Self);
|
||||
end;
|
||||
@ -3328,6 +3304,39 @@ begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TPackageEditorForm.CanCloseEditor: TModalResult;
|
||||
var
|
||||
MsgResult: Integer;
|
||||
begin
|
||||
Result:=mrOK;
|
||||
//debugln(['TPackageEditorForm.CanCloseEditor ',Caption]);
|
||||
if (LazPackage<>nil) and (not (lpfDestroying in LazPackage.Flags)) then
|
||||
begin
|
||||
if (not LazPackage.ReadOnly) and LazPackage.Modified then
|
||||
begin
|
||||
MsgResult:=MessageDlg(lisPkgMangSavePackage,
|
||||
Format(lisPckEditPackageHasChangedSavePackage, [LazPackage.IDAsString, LineEnding]),
|
||||
mtConfirmation,[mbYes,mbNo,mbAbort],0);
|
||||
case MsgResult of
|
||||
mrYes:
|
||||
MsgResult:=PackageEditors.SavePackage(LazPackage,false);
|
||||
mrNo:
|
||||
LazPackage.UserIgnoreChangeStamp:=LazPackage.ChangeStamp;
|
||||
end;
|
||||
if MsgResult=mrAbort then
|
||||
Result:=mrAbort
|
||||
else
|
||||
LazPackage.Modified:=false; // clear modified flag, so that it will be closed
|
||||
end;
|
||||
if (Result=mrOK) and not MainIDE.IDEIsClosing then
|
||||
begin
|
||||
EnvironmentOptions.LastOpenPackages.Remove(LazPackage.Filename);
|
||||
MainIDE.SaveEnvironment;
|
||||
end;
|
||||
end;
|
||||
//debugln(['TPackageEditorForm.CanCloseEditor Result=',dbgs(Result),' ',Caption]);
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.TraverseSettings(AOptions: TAbstractPackageFileIDEOptions;
|
||||
anAction: TIDEPackageOptsDlgAction);
|
||||
|
||||
|
@ -299,6 +299,8 @@ type
|
||||
procedure OnProjectInspectorCopyMoveFiles(Sender: TObject); override;
|
||||
|
||||
// package editors
|
||||
function CanClosePackageEditor(APackage: TLazPackage): TModalResult; override;
|
||||
function CanCloseAllPackageEditors: TModalResult; override;
|
||||
function DoOpenPkgFile(PkgFile: TPkgFile): TModalResult;
|
||||
function DoNewPackage: TModalResult; override;
|
||||
function DoShowLoadedPkgDlg: TModalResult; override;
|
||||
@ -309,6 +311,7 @@ type
|
||||
function DoOpenPackageFile(AFilename: string;
|
||||
Flags: TPkgOpenFlags;
|
||||
ShowAbort: boolean): TModalResult; override;
|
||||
function IsPackageEditorForm(AForm: TCustomForm): boolean; override;
|
||||
procedure OpenHiddenModifiedPackages; override;
|
||||
function DoSavePackage(APackage: TLazPackage;
|
||||
Flags: TPkgSaveFlags): TModalResult; override;
|
||||
@ -3717,6 +3720,11 @@ begin
|
||||
MainIDEInterface.UpdateHighlighters;
|
||||
end;
|
||||
|
||||
function TPkgManager.IsPackageEditorForm(AForm: TCustomForm): boolean;
|
||||
begin
|
||||
Result:=AForm is TPackageEditorForm;
|
||||
end;
|
||||
|
||||
procedure TPkgManager.OpenHiddenModifiedPackages;
|
||||
var
|
||||
i: Integer;
|
||||
@ -6427,6 +6435,24 @@ begin
|
||||
CopyMoveFiles(Sender);
|
||||
end;
|
||||
|
||||
function TPkgManager.CanClosePackageEditor(APackage: TLazPackage): TModalResult;
|
||||
begin
|
||||
Result:=APackage.Editor.CanCloseEditor;
|
||||
end;
|
||||
|
||||
function TPkgManager.CanCloseAllPackageEditors: TModalResult;
|
||||
var
|
||||
APackage: TLazPackage;
|
||||
i: Integer;
|
||||
begin
|
||||
for i:=0 to PackageEditors.Count-1 do begin
|
||||
APackage:=PackageEditors.Editors[i].LazPackage;
|
||||
Result:=CanClosePackageEditor(APackage);
|
||||
if Result<>mrOk then exit;
|
||||
end;
|
||||
Result:=mrOk;
|
||||
end;
|
||||
|
||||
function TPkgManager.CanOpenDesignerForm(AnUnitInfo: TUnitInfo;
|
||||
Interactive: boolean): TModalResult;
|
||||
var
|
||||
|
Loading…
Reference in New Issue
Block a user