mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 09:49:22 +02:00
MG: fixed open non existing file and unitname in save project as
git-svn-id: trunk@422 -
This commit is contained in:
parent
dfdd318f27
commit
e7a4c972d5
127
ide/main.pp
127
ide/main.pp
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user