From a7173f4a7a6787ca3d948dd87961bcdd6ccfd6ff Mon Sep 17 00:00:00 2001 From: mattias Date: Tue, 31 Jan 2006 16:40:59 +0000 Subject: [PATCH] extended Load/Save events for project sessions git-svn-id: trunk@8680 - --- ide/basedebugmanager.pas | 8 +++++--- ide/debugmanager.pas | 37 ++++++++++++++++++++++++------------- ide/main.pp | 9 +++++---- ide/project.pp | 31 ++++++++++++++++++++++++------- ide/projectdefs.pas | 1 + 5 files changed, 59 insertions(+), 27 deletions(-) diff --git a/ide/basedebugmanager.pas b/ide/basedebugmanager.pas index 0e63d98c17..b0c8db651f 100644 --- a/ide/basedebugmanager.pas +++ b/ide/basedebugmanager.pas @@ -40,7 +40,7 @@ uses {$IFDEF IDE_MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, Forms, Project, SourceMarks, Debugger, + Classes, SysUtils, Forms, Project, SourceMarks, Debugger, ProjectDefs, Laz_XMLCfg; type @@ -74,8 +74,10 @@ type procedure SetupMainBarShortCuts; virtual; abstract; procedure UpdateButtonsAndMenuItems; virtual; abstract; - procedure LoadProjectSpecificInfo(XMLConfig: TXMLConfig); virtual; abstract; - procedure SaveProjectSpecificInfo(XMLConfig: TXMLConfig); virtual; abstract; + procedure LoadProjectSpecificInfo(XMLConfig: TXMLConfig; + Merge: boolean); virtual; abstract; + procedure SaveProjectSpecificInfo(XMLConfig: TXMLConfig; + Flags: TProjectWriteFlags); virtual; abstract; function DebuggerCount: Integer; diff --git a/ide/debugmanager.pas b/ide/debugmanager.pas index c212f6e1e3..79bac1cd6f 100644 --- a/ide/debugmanager.pas +++ b/ide/debugmanager.pas @@ -47,7 +47,7 @@ uses MenuIntf, IDECommands, LazIDEIntf, LazConf, DebugOptionsFrm, CompilerOptions, EditorOptions, EnvironmentOpts, KeyMapping, UnitEditor, - Project, IDEProcs, InputHistory, Debugger, + ProjectDefs, Project, IDEProcs, InputHistory, Debugger, IDEOptionDefs, LazarusIDEStrConsts, MainBar, MainIntf, MainBase, BaseDebugManager, SourceMarks, @@ -132,8 +132,10 @@ type procedure SetupMainBarShortCuts; override; procedure UpdateButtonsAndMenuItems; override; - procedure LoadProjectSpecificInfo(XMLConfig: TXMLConfig); override; - procedure SaveProjectSpecificInfo(XMLConfig: TXMLConfig); override; + procedure LoadProjectSpecificInfo(XMLConfig: TXMLConfig; + Merge: boolean); override; + procedure SaveProjectSpecificInfo(XMLConfig: TXMLConfig; + Flags: TProjectWriteFlags); override; procedure DoRestoreDebuggerMarks(AnUnitInfo: TUnitInfo); override; procedure ClearDebugOutputLog; @@ -1506,12 +1508,17 @@ begin end; {------------------------------------------------------------------------------ - procedure TDebugManager.LoadProjectSpecificInfo(XMLConfig: TXMLConfig); + procedure TDebugManager.LoadProjectSpecificInfo(XMLConfig: TXMLConfig; + Merge: boolean); Called when the main project is loaded from the XMLConfig. ------------------------------------------------------------------------------} -procedure TDebugManager.LoadProjectSpecificInfo(XMLConfig: TXMLConfig); +procedure TDebugManager.LoadProjectSpecificInfo(XMLConfig: TXMLConfig; + Merge: boolean); begin + if Merge then begin + // keep it simple: just load from the session and don't merge + end; FBreakPointGroups.LoadFromXMLConfig(XMLConfig, 'Debugging/'+XMLBreakPointGroupsNode+'/'); FBreakPoints.LoadFromXMLConfig(XMLConfig,'Debugging/'+XMLBreakPointsNode+'/', @@ -1522,18 +1529,22 @@ begin end; {------------------------------------------------------------------------------ - procedure TDebugManager.SaveProjectSpecificInfo(XMLConfig: TXMLConfig); + procedure TDebugManager.SaveProjectSpecificInfo(XMLConfig: TXMLConfig; + Flags: TProjectWriteFlags); Called when the main project is saved to an XMLConfig. ------------------------------------------------------------------------------} -procedure TDebugManager.SaveProjectSpecificInfo(XMLConfig: TXMLConfig); +procedure TDebugManager.SaveProjectSpecificInfo(XMLConfig: TXMLConfig; + Flags: TProjectWriteFlags); begin - FBreakPointGroups.SaveToXMLConfig(XMLConfig, - 'Debugging/'+XMLBreakPointGroupsNode+'/'); - FBreakPoints.SaveToXMLConfig(XMLConfig,'Debugging/'+XMLBreakPointsNode+'/', - @Project1.ShortenFilename); - FWatches.SaveToXMLConfig(XMLConfig,'Debugging/'+XMLWatchesNode+'/'); - FExceptions.SaveToXMLConfig(XMLConfig,'Debugging/'+XMLExceptionsNode+'/'); + if not (pwfDoNotSaveSessionInfo in Flags) then begin + FBreakPointGroups.SaveToXMLConfig(XMLConfig, + 'Debugging/'+XMLBreakPointGroupsNode+'/'); + FBreakPoints.SaveToXMLConfig(XMLConfig,'Debugging/'+XMLBreakPointsNode+'/', + @Project1.ShortenFilename); + FWatches.SaveToXMLConfig(XMLConfig,'Debugging/'+XMLWatchesNode+'/'); + FExceptions.SaveToXMLConfig(XMLConfig,'Debugging/'+XMLExceptionsNode+'/'); + end; end; procedure TDebugManager.DoRestoreDebuggerMarks(AnUnitInfo: TUnitInfo); diff --git a/ide/main.pp b/ide/main.pp index 1b48af7feb..894feaf050 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -552,7 +552,8 @@ type function CreateProjectObject(ProjectDesc, FallbackProjectDesc: TProjectDescriptor): TProject; procedure OnLoadProjectInfoFromXMLConfig(TheProject: TProject; - XMLConfig: TXMLConfig); + XMLConfig: TXMLConfig; + Merge: boolean); procedure OnSaveProjectInfoToXMLConfig(TheProject: TProject; XMLConfig: TXMLConfig; WriteFlags: TProjectWriteFlags); procedure OnProjectGetTestDirectory(TheProject: TProject; @@ -4813,10 +4814,10 @@ begin end; procedure TMainIDE.OnLoadProjectInfoFromXMLConfig(TheProject: TProject; - XMLConfig: TXMLConfig); + XMLConfig: TXMLConfig; Merge: boolean); begin if TheProject=Project1 then - DebugBoss.LoadProjectSpecificInfo(XMLConfig); + DebugBoss.LoadProjectSpecificInfo(XMLConfig,Merge); end; procedure TMainIDE.OnSaveProjectInfoToXMLConfig(TheProject: TProject; @@ -4824,7 +4825,7 @@ procedure TMainIDE.OnSaveProjectInfoToXMLConfig(TheProject: TProject; begin if (TheProject=Project1) and (not (pwfSkipDebuggerSettings in WriteFlags)) then - DebugBoss.SaveProjectSpecificInfo(XMLConfig); + DebugBoss.SaveProjectSpecificInfo(XMLConfig,WriteFlags); end; procedure TMainIDE.OnProjectGetTestDirectory(TheProject: TProject; diff --git a/ide/project.pp b/ide/project.pp index e7a84e1c87..b9adb135b4 100644 --- a/ide/project.pp +++ b/ide/project.pp @@ -63,8 +63,8 @@ type const OldUnitName, NewUnitName: string; CheckIfAllowed: boolean; var Allowed: boolean) of object; - TOnLoadProjectInfo = procedure(TheProject: TProject; - XMLConfig: TXMLConfig) of object; + TOnLoadProjectInfo = procedure(TheProject: TProject; XMLConfig: TXMLConfig; + Merge: boolean) of object; TOnSaveProjectInfo = procedure(TheProject: TProject; XMLConfig: TXMLConfig; WriteFlags: TProjectWriteFlags) of object; TOnProjectGetTestDirectory = procedure(TheProject: TProject; @@ -1525,6 +1525,7 @@ var xmlconfig: TXMLConfig; SaveSessionInfoInLPI: Boolean; CurSessionFilename: String; + CurFlags: TProjectWriteFlags; begin Result := mrCancel; @@ -1603,8 +1604,12 @@ begin SaveSessionInfo(XMLConfig,Path); end; - if Assigned(OnSaveProjectInfo) then - OnSaveProjectInfo(Self,XMLConfig,ProjectWriteFlags); + if Assigned(OnSaveProjectInfo) then begin + CurFlags:=ProjectWriteFlags; + if not SaveSessionInfoInLPI then + CurFlags:=CurFlags+[pwfDoNotSaveSessionInfo]; + OnSaveProjectInfo(Self,XMLConfig,CurFlags); + end; InvalidateFileStateCache; xmlconfig.Flush; @@ -1675,6 +1680,11 @@ begin // save session SaveSessionInfo(XMLConfig,Path); + if Assigned(OnSaveProjectInfo) then begin + CurFlags:=ProjectWriteFlags+[pwfDoNotSaveProjectInfo]; + OnSaveProjectInfo(Self,XMLConfig,CurFlags); + end; + Result:=mrOk; except on E: Exception do begin @@ -1887,8 +1897,9 @@ begin Path+'General/ActiveEditorIndexAtStart/Value', -1); FJumpHistory.LoadFromXMLConfig(xmlconfig,Path+''); - if Assigned(OnLoadProjectInfo) then OnLoadProjectInfo(Self,XMLConfig); - + if Assigned(OnLoadProjectInfo) then begin + OnLoadProjectInfo(Self,XMLConfig,false); + end; finally {$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TProject.ReadProject freeing xml');{$ENDIF} fPathDelimChanged:=false; @@ -1899,19 +1910,24 @@ begin xmlconfig:=nil; end; + // load session file (if available) if (SessionStorage in [pssInProjectDir,pssInIDEConfig]) and (CompareFilenames(ProjectInfoFile,ProjectSessionFile)<>0) and FileExists(ProjectSessionFile) then begin try xmlconfig := TXMLConfig.Create(ProjectSessionFile); + + Path:='ProjectOptions/'; fPathDelimChanged:= XMLConfig.GetValue(Path+'PathDelim/Value', PathDelim)<>PathDelim; FJumpHistory.LoadFromXMLConfig(xmlconfig,Path+''); - + if Assigned(OnLoadProjectInfo) then begin + OnLoadProjectInfo(Self,XMLConfig,true); + end; except MessageDlg('Unable to read the project info file'#13'"'+ProjectInfoFile+'".' ,mtError,[mbOk],0); @@ -1933,6 +1949,7 @@ begin end; end; + finally EndUpdate; end; diff --git a/ide/projectdefs.pas b/ide/projectdefs.pas index a89affac30..af40b45a57 100644 --- a/ide/projectdefs.pas +++ b/ide/projectdefs.pas @@ -50,6 +50,7 @@ type pwfSaveOnlyProjectUnits, pwfSkipDebuggerSettings, pwfSkipJumpPoints, + pwfDoNotSaveProjectInfo, pwfDoNotSaveSessionInfo ); TProjectWriteFlags = set of TProjectWriteFlag;