bookmarks are now saved also for closed files and merged when possible

git-svn-id: trunk@2880 -
This commit is contained in:
mattias 2002-08-18 08:55:26 +00:00
parent ad8d3ebf53
commit 4ff03d4682

View File

@ -386,6 +386,7 @@ type
// methods for 'save project' // methods for 'save project'
procedure GetMainUnit(var MainUnitInfo: TUnitInfo; procedure GetMainUnit(var MainUnitInfo: TUnitInfo;
var MainUnitSrcEdit: TSourceEditor; UpdateModified: boolean); var MainUnitSrcEdit: TSourceEditor; UpdateModified: boolean);
procedure SaveSrcEditorProjectSpecificSettings(AnUnitInfo: TUnitInfo);
procedure SaveSourceEditorProjectSpecificSettings; procedure SaveSourceEditorProjectSpecificSettings;
function DoShowSaveProjectAsDialog: TModalResult; function DoShowSaveProjectAsDialog: TModalResult;
@ -3215,18 +3216,16 @@ end;
procedure TMainIDE.DoRestoreBookMarks(AnUnitInfo: TUnitInfo; procedure TMainIDE.DoRestoreBookMarks(AnUnitInfo: TUnitInfo;
ASrcEdit: TSourceEditor); ASrcEdit: TSourceEditor);
var BookmarkID, i: integer; var
BookmarkID, i: integer;
begin begin
Project1.MergeBookmarks(AnUnitInfo);
for BookmarkID:=0 to 9 do begin for BookmarkID:=0 to 9 do begin
i:=Project1.Bookmarks.IndexOfID(BookmarkID); i:=Project1.Bookmarks.IndexOfID(BookmarkID);
if (i>=0) and (Project1.Bookmarks[i].EditorIndex=AnUnitInfo.EditorIndex) if i<0 then continue;
then begin if (Project1.Bookmarks[i].EditorIndex=AnUnitInfo.EditorIndex) then begin
ASrcEdit.EditorComponent.SetBookmark(BookmarkID, ASrcEdit.EditorComponent.SetBookmark(BookmarkID,
Project1.Bookmarks[i].CursorPos.X,Project1.Bookmarks[i].CursorPos.Y); Project1.Bookmarks[i].CursorPos.X,Project1.Bookmarks[i].CursorPos.Y);
while i>=0 do begin
Project1.Bookmarks.Delete(i);
i:=Project1.Bookmarks.IndexOfID(BookmarkID);
end;
end; end;
end; end;
end; end;
@ -3379,34 +3378,40 @@ begin
MainUnitInfo:=nil; MainUnitInfo:=nil;
end; end;
procedure TMainIDE.SaveSourceEditorProjectSpecificSettings; procedure TMainIDE.SaveSrcEditorProjectSpecificSettings(AnUnitInfo: TUnitInfo);
var i, BookmarkID, BookmarkX, BookmarkY: integer; var
AnUnitInfo: TUnitInfo; BookmarkID, BookmarkX, BookmarkY: integer;
ASrcEdit: TSourceEditor; ASrcEdit: TSourceEditor;
begin begin
Project1.Bookmarks.Clear; Project1.Bookmarks.DeleteAllWithEditorIndex(AnUnitInfo.EditorIndex);
for i:=0 to Project1.UnitCount-1 do begin ASrcEdit:=
AnUnitInfo:=Project1.Units[i]; SourceNoteBook.FindSourceEditorWithPageIndex(AnUnitInfo.EditorIndex);
if (not AnUnitInfo.Loaded) or (AnUnitInfo.EditorIndex<0) then continue; if ASrcEdit=nil then exit;
{$IFDEF IDE_DEBUG} AnUnitInfo.TopLine:=ASrcEdit.EditorComponent.TopLine;
writeln('TMainIDE.SaveSourceEditorProjectSpecificSettings AnUnitInfo.Filename=',AnUnitInfo.Filename); AnUnitInfo.CursorPos:=ASrcEdit.EditorComponent.CaretXY;
{$ENDIF} // bookmarks
ASrcEdit:=SourceNoteBook.FindSourceEditorWithPageIndex( AnUnitInfo.Bookmarks.Clear;
AnUnitInfo.EditorIndex); for BookmarkID:=0 to 9 do begin
if ASrcEdit=nil then continue; if (ASrcEdit.EditorComponent.GetBookMark(BookmarkID,BookmarkX,BookmarkY))
AnUnitInfo.TopLine:=ASrcEdit.EditorComponent.TopLine; then begin
AnUnitInfo.CursorPos:=ASrcEdit.EditorComponent.CaretXY; Project1.SetBookmark(AnUnitInfo,BookmarkX,BookmarkY,BookmarkID);
for BookmarkID:=0 to 9 do begin
if (ASrcEdit.EditorComponent.GetBookMark(
BookmarkID,BookmarkX,BookmarkY))
and (Project1.Bookmarks.IndexOfID(BookmarkID)<0) then begin
Project1.Bookmarks.Add(TProjectBookmark.Create(BookmarkX,BookmarkY,
AnUnitInfo.EditorIndex,BookmarkID));
end;
end; end;
end; end;
end; end;
procedure TMainIDE.SaveSourceEditorProjectSpecificSettings;
var
AnUnitInfo: TUnitInfo;
begin
Project1.Bookmarks.Clear;
AnUnitInfo:=Project1.FirstUnitWithEditorIndex;
while AnUnitInfo<>nil do begin
if (not AnUnitInfo.Loaded) then continue;
SaveSrcEditorProjectSpecificSettings(AnUnitInfo);
AnUnitInfo:=AnUnitInfo.NextUnitWithEditorIndex;
end;
end;
function TMainIDE.DoShowSaveProjectAsDialog: TModalResult; function TMainIDE.DoShowSaveProjectAsDialog: TModalResult;
var var
MainUnitSrcEdit: TSourceEditor; MainUnitSrcEdit: TSourceEditor;
@ -3639,6 +3644,10 @@ begin
if (not (ofRevert in Flags)) or (PageIndex<0) then begin if (not (ofRevert in Flags)) or (PageIndex<0) then begin
// create a new source editor // create a new source editor
// update marks and cursor positions in Project1, so that merging the old
// settings during restoration will work
SaveSourceEditorProjectSpecificSettings;
SourceNotebook.NewFile(CreateSrcEditPageName(AnUnitInfo.UnitName, SourceNotebook.NewFile(CreateSrcEditPageName(AnUnitInfo.UnitName,
AFilename,-1),AnUnitInfo.Source); AFilename,-1),AnUnitInfo.Source);
NewSrcEdit:=SourceNotebook.GetActiveSE; NewSrcEdit:=SourceNotebook.GetActiveSE;
@ -3654,17 +3663,13 @@ begin
NewSrcEditorCreated:=false; NewSrcEditorCreated:=false;
end; end;
if ofProjectLoading in Flags then begin
// reloading the project -> restore marks
DoRestoreBookMarks(AnUnitInfo,NewSrcEdit);
end;
// update editor indices in project // update editor indices in project
if (not (ofProjectLoading in Flags)) and NewSrcEditorCreated then if (not (ofProjectLoading in Flags)) and NewSrcEditorCreated then
Project1.InsertEditorIndex(SourceNotebook.NoteBook.PageIndex); Project1.InsertEditorIndex(SourceNotebook.NoteBook.PageIndex);
AnUnitInfo.EditorIndex:=SourceNotebook.FindPageWithEditor(NewSrcEdit); AnUnitInfo.EditorIndex:=SourceNotebook.FindPageWithEditor(NewSrcEdit);
// restore source editor settings // restore source editor settings
DoRestoreBookMarks(AnUnitInfo,NewSrcEdit);
NewSrcEdit.SyntaxHighlighterType:=AnUnitInfo.SyntaxHighlighter; NewSrcEdit.SyntaxHighlighterType:=AnUnitInfo.SyntaxHighlighter;
NewSrcEdit.EditorComponent.CaretXY:=AnUnitInfo.CursorPos; NewSrcEdit.EditorComponent.CaretXY:=AnUnitInfo.CursorPos;
NewSrcEdit.EditorComponent.TopLine:=AnUnitInfo.TopLine; NewSrcEdit.EditorComponent.TopLine:=AnUnitInfo.TopLine;
@ -3893,9 +3898,8 @@ begin
FLastFormActivated:=nil; FLastFormActivated:=nil;
// save some meta data of the source // save some meta data of the source
ActiveUnitInfo.TopLine:=ActiveSrcEdit.EditorComponent.TopLine; SaveSrcEditorProjectSpecificSettings(ActiveUnitInfo);
ActiveUnitInfo.CursorPos:=ActiveSrcEdit.EditorComponent.CaretXY;
// if SaveFirst then save the source // if SaveFirst then save the source
if (cfSaveFirst in Flags) and (not ActiveUnitInfo.ReadOnly) if (cfSaveFirst in Flags) and (not ActiveUnitInfo.ReadOnly)
and ((ActiveSrcEdit.Modified) or (ActiveUnitInfo.Modified)) then begin and ((ActiveSrcEdit.Modified) or (ActiveUnitInfo.Modified)) then begin
@ -4452,7 +4456,7 @@ begin
exit; exit;
end; end;
SaveSourceEditorChangesToCodeCache(-1); SaveSourceEditorChangesToCodeCache(-1);
writeln('TMainIDE.DoSaveProject A SaveAs=',sfSaveAs in Flags,' SaveToTestDir=',sfSaveToTestDir in Flags); writeln('TMainIDE.DoSaveProject A SaveAs=',sfSaveAs in Flags,' SaveToTestDir=',sfSaveToTestDir in Flags);
// check that all new units are saved first to get valid filenames // check that all new units are saved first to get valid filenames
// (this can alter the mainunit: e.g. used unit names) // (this can alter the mainunit: e.g. used unit names)
@ -4624,8 +4628,8 @@ begin
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TMainIDE.DoOpenProjectFile B');{$ENDIF} {$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TMainIDE.DoOpenProjectFile B');{$ENDIF}
Project1:=TProject.Create(ptProgram); Project1:=TProject.Create(ptProgram);
Project1.OnFileBackup:=@DoBackupFile; Project1.OnFileBackup:=@DoBackupFile;
// read project info file // read project info file
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TMainIDE.DoOpenProjectFile B3');{$ENDIF} {$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TMainIDE.DoOpenProjectFile B3');{$ENDIF}
Project1.ReadProject(AFilename); Project1.ReadProject(AFilename);
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TMainIDE.DoOpenProjectFile B4');{$ENDIF} {$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TMainIDE.DoOpenProjectFile B4');{$ENDIF}
@ -4669,7 +4673,7 @@ begin
Result:=DoOpenEditorFile(Project1.Units[LowestUnitIndex].Filename,-1, Result:=DoOpenEditorFile(Project1.Units[LowestUnitIndex].Filename,-1,
[ofProjectLoading,ofOnlyIfExists]); [ofProjectLoading,ofOnlyIfExists]);
if Result=mrAbort then begin if Result=mrAbort then begin
// mark all files, that are left to load as unloaded: // mark all files, that are left to open as unloaded:
for i:=0 to Project1.UnitCount-1 do begin for i:=0 to Project1.UnitCount-1 do begin
if Project1.Units[i].Loaded if Project1.Units[i].Loaded
and (Project1.Units[i].EditorIndex>LastEditorIndex) then begin and (Project1.Units[i].EditorIndex>LastEditorIndex) then begin
@ -7783,6 +7787,9 @@ end.
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.471 2003/02/28 15:38:00 mattias
bookmarks are now saved also for closed files and merged when possible
Revision 1.470 2003/02/28 10:14:28 mattias Revision 1.470 2003/02/28 10:14:28 mattias
started package system (packager) started package system (packager)