MG: fixed open non existing file and unitname in save project as

git-svn-id: trunk@422 -
This commit is contained in:
lazarus 2001-11-15 13:49:50 +00:00
parent dfdd318f27
commit e7a4c972d5
2 changed files with 97 additions and 36 deletions

View File

@ -258,7 +258,8 @@ type
Function SearchPaths : String; Function SearchPaths : String;
// files/units // files/units
function DoNewEditorUnit(NewUnitType:TNewUnitType):TModalResult; function DoNewEditorUnit(NewUnitType:TNewUnitType;
const NewFilename: string):TModalResult;
function DoSaveEditorUnit(PageIndex:integer; function DoSaveEditorUnit(PageIndex:integer;
SaveAs, SaveToTestDir:boolean):TModalResult; SaveAs, SaveToTestDir:boolean):TModalResult;
function DoCloseEditorUnit(PageIndex:integer; function DoCloseEditorUnit(PageIndex:integer;
@ -1388,12 +1389,12 @@ end;
{------------------------------------------------------------------------------} {------------------------------------------------------------------------------}
procedure TMainIDE.mnuNewUnitClicked(Sender : TObject); procedure TMainIDE.mnuNewUnitClicked(Sender : TObject);
begin begin
DoNewEditorUnit(nuUnit); DoNewEditorUnit(nuUnit,'');
end; end;
procedure TMainIDE.mnuNewFormClicked(Sender : TObject); procedure TMainIDE.mnuNewFormClicked(Sender : TObject);
begin begin
DoNewEditorUnit(nuForm); DoNewEditorUnit(nuForm,'');
end; end;
procedure TMainIDE.mnuOpenClicked(Sender : TObject); procedure TMainIDE.mnuOpenClicked(Sender : TObject);
@ -1993,7 +1994,8 @@ end;
//============================================================================== //==============================================================================
function TMainIDE.DoNewEditorUnit(NewUnitType:TNewUnitType):TModalResult; function TMainIDE.DoNewEditorUnit(NewUnitType:TNewUnitType;
const NewFilename: string):TModalResult;
var NewUnitInfo:TUnitInfo; var NewUnitInfo:TUnitInfo;
TempForm : TCustomForm; TempForm : TCustomForm;
CInterface : TComponentInterface; CInterface : TComponentInterface;
@ -2001,11 +2003,16 @@ var NewUnitInfo:TUnitInfo;
NewUnitName: string; NewUnitName: string;
NewBuffer, ResourceCode: TCodeBuffer; NewBuffer, ResourceCode: TCodeBuffer;
begin begin
writeln('TMainIDE.DoNewEditorUnit A'); writeln('TMainIDE.DoNewEditorUnit A NewFilename=',NewFilename);
Result:=mrCancel; Result:=mrCancel;
NewUnitName:=Project.NewUniqueUnitName(NewUnitType); if NewFilename='' then begin
NewBuffer:=CodeToolBoss.CreateFile( NewUnitName:=Project.NewUniqueUnitName(NewUnitType);
NewBuffer:=CodeToolBoss.CreateFile(
NewUnitName+UnitTypeDefaultExt[NewUnitType]); NewUnitName+UnitTypeDefaultExt[NewUnitType]);
end else begin
NewUnitName:=ExtractFileNameOnly(NewFilename);
NewBuffer:=CodeToolBoss.CreateFile(NewFilename);
end;
if NewBuffer=nil then exit; if NewBuffer=nil then exit;
NewUnitInfo:=TUnitInfo.Create(NewBuffer); NewUnitInfo:=TUnitInfo.Create(NewBuffer);
@ -2073,7 +2080,6 @@ CheckHeap('TMainIDE.DoNewEditorUnit L '+IntToStr(GetMem_Cnt));
{$ENDIF} {$ENDIF}
NewSrcEdit:=SourceNotebook.GetActiveSE; NewSrcEdit:=SourceNotebook.GetActiveSE;
NewSrcEdit.SyntaxHighlighterType:=NewUnitInfo.SyntaxHighlighter; NewSrcEdit.SyntaxHighlighterType:=NewUnitInfo.SyntaxHighlighter;
NewUnitInfo.Form := CInterface.Control; //added sxm 2001-11-12
Project.InsertEditorIndex(SourceNotebook.NoteBook.PageIndex); Project.InsertEditorIndex(SourceNotebook.NoteBook.PageIndex);
NewUnitInfo.EditorIndex:=SourceNotebook.NoteBook.PageIndex; NewUnitInfo.EditorIndex:=SourceNotebook.NoteBook.PageIndex;
@ -2458,13 +2464,30 @@ writeln('*** TMainIDE.DoOpenEditorFile START "',AFilename,'"');
CheckHeap(IntToStr(GetMem_Cnt)); CheckHeap(IntToStr(GetMem_Cnt));
{$ENDIF} {$ENDIF}
Result:=mrCancel; Result:=mrCancel;
if (Project.IsVirtual) and (Project.Units[Project.MainUnit].Filename=AFilename) if ExtractFilenameOnly(AFilename)='' then exit;
then begin if (Project.IsVirtual)
and (Project.Units[Project.MainUnit].Filename=AFilename) then begin
Result:=DoOpenMainUnit(ProjectLoading); Result:=DoOpenMainUnit(ProjectLoading);
exit; exit;
end; end;
if (AFileName='') or (not FileExists(AFilename)) or (DirectoryExists(AFilename)) if (not FileExists(AFilename)) then begin
then exit; if MessageDlg('File not found',
'File "'+AFilename+'" not found.'#13
+'Do you want to create it?'#13
,mtInformation,[mbYes,mbNo],0)=mrYes then
begin
// create new file
Ext:=lowercase(ExtractFileExt(AFilename));
if (Ext='.pas') or (Ext='.pp') or (Ext='.lpr') or (Ext='.dpr') then
Result:=DoNewEditorUnit(nuUnit,AFilename)
else
Result:=DoNewEditorUnit(nuEmpty,AFilename);
exit;
end else begin
// cancel loading file
exit;
end;
end;
Ext:=lowercase(ExtractFileExt(AFilename)); Ext:=lowercase(ExtractFileExt(AFilename));
// check if the project knows this file // check if the project knows this file
i:=Project.UnitCount-1; i:=Project.UnitCount-1;
@ -2833,7 +2856,7 @@ writeln('TMainIDE.DoNewProject A');
'$(LazarusDir)'+OSDirSeparator+'lcl'+OSDirSeparator+'units' '$(LazarusDir)'+OSDirSeparator+'lcl'+OSDirSeparator+'units'
+OSDirSeparator +OSDirSeparator
+CodeToolBoss.GlobalValues.Variables[ExternalMacroStart+'LCLWidgetType']; +CodeToolBoss.GlobalValues.Variables[ExternalMacroStart+'LCLWidgetType'];
DoNewEditorUnit(nuForm); DoNewEditorUnit(nuForm,'');
end; end;
ptProgram,ptCustomProgram: ptProgram,ptCustomProgram:
begin begin
@ -2900,6 +2923,7 @@ writeln('TMainIDE.DoSaveProject A SaveAs=',SaveAs,' SaveToTestDir=',SaveToTestDi
for i:=0 to Project.UnitCount-1 do begin for i:=0 to Project.UnitCount-1 do begin
AnUnitInfo:=Project.Units[i]; AnUnitInfo:=Project.Units[i];
if AnUnitInfo.Loaded then begin if AnUnitInfo.Loaded then begin
writeln('AnUnitInfo.Filename=',AnUnitInfo.Filename);
ASrcEdit:=SourceNoteBook.FindSourceEditorWithPageIndex( ASrcEdit:=SourceNoteBook.FindSourceEditorWithPageIndex(
AnUnitInfo.EditorIndex); AnUnitInfo.EditorIndex);
AnUnitInfo.TopLine:=ASrcEdit.EditorComponent.TopLine; AnUnitInfo.TopLine:=ASrcEdit.EditorComponent.TopLine;
@ -2921,29 +2945,41 @@ writeln('TMainIDE.DoSaveProject A SaveAs=',SaveAs,' SaveToTestDir=',SaveToTestDi
SaveDialog:=TSaveDialog.Create(Application); SaveDialog:=TSaveDialog.Create(Application);
try try
SaveDialog.Title:='Save Project '+Project.Title+' (*.lpi)'; SaveDialog.Title:='Save Project '+Project.Title+' (*.lpi)';
if ExtractFileName(Project.ProjectFile)<>'' then if ExtractFileName(Project.ProjectInfoFile)<>'' then
SaveDialog.FileName:=ExtractFileName(Project.ProjectInfoFile)
else if Project.ProjectFile<>'' then
SaveDialog.FileName:=ExtractFileName(Project.ProjectFile) SaveDialog.FileName:=ExtractFileName(Project.ProjectFile)
else if Project.Title<>'' then else if Project.Title<>'' then
SaveDialog.Filename:=ChangeFileExt(Project.Title,'.lpi') SaveDialog.Filename:=ChangeFileExt(Project.Title,'.lpi')
else if SaveDialog.Filename='' then else if SaveDialog.Filename='' then
SaveDialog.Filename:='project1.lpi'; SaveDialog.Filename:='project1.lpi';
repeat repeat
Result:=mrCancel;
SaveDialog.InitialDir:=EnvironmentOptions.LastOpenDialogDir; SaveDialog.InitialDir:=EnvironmentOptions.LastOpenDialogDir;
if SaveDialog.Execute then begin if SaveDialog.Execute then begin
NewFilename:=ExpandFilename(SaveDialog.Filename); if ExtractFileNameonly(SaveDialog.Filename)='' then begin
EnvironmentOptions.LastOpenDialogDir:=ExtractFilePath(NewFilename); Result:=MessageDlg('Invalid project filename',
if ExtractFileExt(NewFilename)='' then '"'+SaveDialog.Filename+'" is an invalid filename.'#13
NewFilename:=NewFilename+'.lpi'; +'Please choose another (e.g. project1.lpi)',
NewProgramFilename:=ChangeFileExt( mtInformation,[mbRetry,mbAbort],0);
NewFilename,ProjectDefaultExt[Project.ProjectType]);
if NewFilename=NewProgramFilename then begin
ACaption:='Choose a different name';
AText:='The project info file "'+NewFilename+'"'#13'is equal '
+'to the project source file!';
Result:=MessageDlg(ACaption, AText, mtconfirmation, [mbabort, mbretry], 0);
if Result=mrAbort then exit; if Result=mrAbort then exit;
end else end else begin
Result:=mrOk; NewFilename:=ExpandFilename(SaveDialog.Filename);
EnvironmentOptions.LastOpenDialogDir:=ExtractFilePath(NewFilename);
if ExtractFileExt(NewFilename)='' then
NewFilename:=NewFilename+'.lpi';
NewProgramFilename:=ChangeFileExt(
NewFilename,ProjectDefaultExt[Project.ProjectType]);
if NewFilename=NewProgramFilename then begin
ACaption:='Choose a different name';
AText:='The project info file "'+NewFilename+'"'#13
+'is equal to the project source file!';
Result:=MessageDlg(ACaption, AText, mtError, [mbAbort,mbRetry],0);
if Result=mrAbort then exit;
end else begin
Result:=mrOk;
end;
end;
end else begin end else begin
// user cancels // user cancels
Result:=mrCancel; Result:=mrCancel;
@ -2967,8 +3003,8 @@ writeln('TMainIDE.DoSaveProject A SaveAs=',SaveAs,' SaveToTestDir=',SaveToTestDi
end; end;
Project.ProjectFile:=NewFilename; Project.ProjectFile:=NewFilename;
EnvironmentOptions.AddToRecentProjectFiles(NewFilename); EnvironmentOptions.AddToRecentProjectFiles(NewFilename);
if (MainUnitInfo<>nil) and (MainUnitInfo.Loaded) then begin if (MainUnitInfo<>nil) then begin
// sitch MainUnitInfo to new code // switch MainUnitInfo to new code
NewBuf:=CodeToolBoss.CreateFile(NewProgramFilename); NewBuf:=CodeToolBoss.CreateFile(NewProgramFilename);
if NewBuf=nil then begin if NewBuf=nil then begin
Result:=MessageDlg('Error creating file','Unable to create file'#13 Result:=MessageDlg('Error creating file','Unable to create file'#13
@ -2977,10 +3013,14 @@ writeln('TMainIDE.DoSaveProject A SaveAs=',SaveAs,' SaveToTestDir=',SaveToTestDi
end; end;
NewBuf.Source:=MainUnitInfo.Source.Source; NewBuf.Source:=MainUnitInfo.Source.Source;
MainUnitInfo.Source:=NewBuf; MainUnitInfo.Source:=NewBuf;
MainUnitSrcEdit.CodeBuffer:=NewBuf; if MainUnitSrcEdit<>nil then
MainUnitSrcEdit.CodeBuffer:=NewBuf;
// change program name // change program name
NewProgramName:=ExtractFileNameOnly(NewProgramFilename); NewProgramName:=ExtractFileNameOnly(NewProgramFilename);
CodeToolBoss.RenameSource(MainUnitInfo.Source,NewProgramName); MainUnitInfo.UnitName:=NewProgramName;
// TODO: rename resource file
// update source editor of main unit // update source editor of main unit
MainUnitInfo.Modified:=true; MainUnitInfo.Modified:=true;
NewPageName:=ExtractFileName(MainUnitInfo.Filename); NewPageName:=ExtractFileName(MainUnitInfo.Filename);
@ -3075,7 +3115,7 @@ writeln('TMainIDE.DoOpenProjectFile A "'+AFileName+'"');
CheckHeap(IntToStr(GetMem_Cnt)); CheckHeap(IntToStr(GetMem_Cnt));
{$ENDIF} {$ENDIF}
Result:=mrCancel; Result:=mrCancel;
if AFileName='' then exit; if ExtractFileNameOnly(AFileName)='' then exit;
AFilename:=ExpandFileName(AFilename); AFilename:=ExpandFileName(AFilename);
Ext:=lowercase(ExtractFileExt(AFilename)); Ext:=lowercase(ExtractFileExt(AFilename));
if (Ext='.lpr') and (FileExists(ChangeFileExt(AFileName,'.lpi'))) then begin if (Ext='.lpr') and (FileExists(ChangeFileExt(AFileName,'.lpi'))) then begin
@ -3087,7 +3127,7 @@ CheckHeap(IntToStr(GetMem_Cnt));
if not FileExists(AFilename) then begin if not FileExists(AFilename) then begin
ACaption:='File not found'; ACaption:='File not found';
AText:='File "'+AFilename+'" not found.'; AText:='File "'+AFilename+'" not found.';
Result:=MessageDlg(ACaption, AText, mterror, [mbabort, mbretry], 0); Result:=MessageDlg(ACaption, AText, mtError, [mbAbort, mbRetry], 0);
if Result=mrAbort then exit; if Result=mrAbort then exit;
end; end;
until Result<>mrRetry; until Result<>mrRetry;
@ -3128,6 +3168,8 @@ CheckHeap(IntToStr(GetMem_Cnt));
// restore files // restore files
LastEditorIndex:=-1; LastEditorIndex:=-1;
repeat repeat
// find the unit which was loaded last time and has the lowest editor index
// of all not opened units
LowestUnitIndex:=-1; LowestUnitIndex:=-1;
LowestEditorIndex:=-1; LowestEditorIndex:=-1;
for i:=0 to Project.UnitCount-1 do begin for i:=0 to Project.UnitCount-1 do begin
@ -3145,11 +3187,21 @@ CheckHeap(IntToStr(GetMem_Cnt));
// reopen file // reopen file
Result:=DoOpenEditorFile(Project.Units[LowestUnitIndex].Filename,true); Result:=DoOpenEditorFile(Project.Units[LowestUnitIndex].Filename,true);
if Result=mrAbort then exit; if Result=mrAbort then exit;
if Project.ActiveEditorIndexAtStart=LowestEditorIndex then if Result=mrOk then begin
Project.ActiveEditorIndexAtStart:=SourceNoteBook.NoteBook.PageIndex; // open successful
LastEditorIndex:=LowestEditorIndex; if Project.ActiveEditorIndexAtStart=LowestEditorIndex then
Project.ActiveEditorIndexAtStart:=SourceNoteBook.NoteBook.PageIndex;
LastEditorIndex:=LowestEditorIndex;
end else begin
// open failed -> ignore this unit
Project.Units[LowestUnitIndex].EditorIndex:=-1;
Project.Units[LowestUnitIndex].Loaded:=false;
if Project.ActiveEditorIndexAtStart=LowestEditorIndex then
Project.ActiveEditorIndexAtStart:=-1;
end;
end; end;
until LowestEditorIndex<0; until LowestEditorIndex<0;
Result:=mrCancel;
writeln('TMainIDE.DoOpenProjectFile D'); writeln('TMainIDE.DoOpenProjectFile D');
// set active editor source editor // set active editor source editor
if (SourceNoteBook.NoteBook<>nil) and (Project.ActiveEditorIndexAtStart>=0) if (SourceNoteBook.NoteBook<>nil) and (Project.ActiveEditorIndexAtStart>=0)
@ -4592,6 +4644,9 @@ end.
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.145 2001/11/15 13:49:49 lazarus
MG: fixed open non existing file and unitname in save project as
Revision 1.144 2001/11/14 19:10:00 lazarus Revision 1.144 2001/11/14 19:10:00 lazarus
MG: fixes for parser and linkscanner and small cleanups MG: fixes for parser and linkscanner and small cleanups

View File

@ -1601,7 +1601,10 @@ end;
procedure TProject.SetProjectFile(const NewProjectFilename: string); procedure TProject.SetProjectFile(const NewProjectFilename: string);
begin begin
if AnsiCompareText(fTitle,ExtractFileNameOnly(fProjectFile))=0 then
fTitle:=ExtractFileNameOnly(NewProjectFilename);
fProjectFile:=NewProjectFilename; fProjectFile:=NewProjectFilename;
Modified:=true; Modified:=true;
end; end;
@ -1692,6 +1695,9 @@ end.
{ {
$Log$ $Log$
Revision 1.41 2001/11/15 13:49:50 lazarus
MG: fixed open non existing file and unitname in save project as
Revision 1.40 2001/11/14 17:46:57 lazarus Revision 1.40 2001/11/14 17:46:57 lazarus
Changes to make toggling between form and unit work. Changes to make toggling between form and unit work.
Added BringWindowToTop Added BringWindowToTop