IDE: when creating a new unit: when compiler options of main source and project options differ: warn and allow to cancel, request 20067

git-svn-id: trunk@32082 -
This commit is contained in:
mattias 2011-08-28 11:17:02 +00:00
parent f9b4fae300
commit 88ad6a57f6
3 changed files with 75 additions and 49 deletions

View File

@ -60,12 +60,12 @@ type
property MainAnsistring: char read FMainAnsistring write FMainAnsistring; property MainAnsistring: char read FMainAnsistring write FMainAnsistring;
end; end;
procedure CheckCompOptsAndMainSrcForNewUnit(CompOpts: TLazCompilerOptions); function CheckCompOptsAndMainSrcForNewUnit(CompOpts: TLazCompilerOptions): TModalResult;
function GetIgnorePathForCompOptsAndMainSrcDiffer(CompOpts: TLazCompilerOptions): string; function GetIgnorePathForCompOptsAndMainSrcDiffer(CompOpts: TLazCompilerOptions): string;
implementation implementation
procedure CheckCompOptsAndMainSrcForNewUnit(CompOpts: TLazCompilerOptions); function CheckCompOptsAndMainSrcForNewUnit(CompOpts: TLazCompilerOptions): TModalResult;
var var
ProjCompOpts: TProjectCompilerOptions; ProjCompOpts: TProjectCompilerOptions;
MainUnit: TUnitInfo; MainUnit: TUnitInfo;
@ -78,6 +78,7 @@ var
Dlg: TCheckCompOptsForNewUnitDialog; Dlg: TCheckCompOptsForNewUnitDialog;
IgnoreIdentifier: String; IgnoreIdentifier: String;
begin begin
Result:=mrOK;
if CompOpts is TProjectCompilerOptions then if CompOpts is TProjectCompilerOptions then
begin begin
ProjCompOpts:=TProjectCompilerOptions(CompOpts); ProjCompOpts:=TProjectCompilerOptions(CompOpts);
@ -126,7 +127,8 @@ begin
Dlg.MainMode:=Mode; Dlg.MainMode:=Mode;
Dlg.MainAnsistring:=AnsistringMode; Dlg.MainAnsistring:=AnsistringMode;
Dlg.UpdateOptions; Dlg.UpdateOptions;
Dlg.ShowModal; if Dlg.ShowModal<>mrOk then
Result:=mrCancel;
finally finally
Dlg.Free; Dlg.Free;
end; end;

View File

@ -559,7 +559,8 @@ type
// compiler options dialog events // compiler options dialog events
procedure OnCompilerOptionsDialogTest(Sender: TObject); procedure OnCompilerOptionsDialogTest(Sender: TObject);
procedure OnCheckCompOptsAndMainSrcForNewUnit(CompOpts: TLazCompilerOptions); function OnCheckCompOptsAndMainSrcForNewUnit(CompOpts: TLazCompilerOptions
): TModalResult;
// unit dependencies events // unit dependencies events
procedure UnitDependenciesViewAccessingSources(Sender: TObject); procedure UnitDependenciesViewAccessingSources(Sender: TObject);
@ -3037,12 +3038,12 @@ begin
ShowCleanDirectoryDialog(Project1.ProjectDirectory,GlobalMacroList); ShowCleanDirectoryDialog(Project1.ProjectDirectory,GlobalMacroList);
end; end;
Procedure TMainIDE.OnSrcNotebookFileNew(Sender: TObject); procedure TMainIDE.OnSrcNotebookFileNew(Sender: TObject);
begin begin
mnuNewFormClicked(Sender); mnuNewFormClicked(Sender);
end; end;
Procedure TMainIDE.OnSrcNotebookFileClose(Sender: TObject; procedure TMainIDE.OnSrcNotebookFileClose(Sender: TObject;
InvertedClose: boolean); InvertedClose: boolean);
var var
PageIndex: LongInt; PageIndex: LongInt;
@ -3126,27 +3127,27 @@ begin
mnuCloseClicked(Sender); mnuCloseClicked(Sender);
end; end;
Procedure TMainIDE.OnSrcNotebookFileOpen(Sender: TObject); procedure TMainIDE.OnSrcNotebookFileOpen(Sender: TObject);
begin begin
mnuOpenClicked(Sender); mnuOpenClicked(Sender);
end; end;
Procedure TMainIDE.OnSrcNoteBookFileOpenAtCursor(Sender: TObject); procedure TMainIDE.OnSrcNotebookFileOpenAtCursor(Sender: TObject);
begin begin
mnuOpenFileAtCursorClicked(Sender); mnuOpenFileAtCursorClicked(Sender);
end; end;
Procedure TMainIDE.OnSrcNotebookFileSave(Sender: TObject); procedure TMainIDE.OnSrcNotebookFileSave(Sender: TObject);
begin begin
mnuSaveClicked(Sender); mnuSaveClicked(Sender);
end; end;
Procedure TMainIDE.OnSrcNotebookFileSaveAs(Sender: TObject); procedure TMainIDE.OnSrcNotebookFileSaveAs(Sender: TObject);
begin begin
mnuSaveAsClicked(Sender); mnuSaveAsClicked(Sender);
end; end;
Procedure TMainIDE.OnSrcNoteBookFindDeclaration(Sender: TObject); procedure TMainIDE.OnSrcNotebookFindDeclaration(Sender: TObject);
begin begin
mnuFindDeclarationClicked(Sender); mnuFindDeclarationClicked(Sender);
end; end;
@ -3164,7 +3165,7 @@ begin
Abort:=not DoShowCodeContext(JumpToError); Abort:=not DoShowCodeContext(JumpToError);
end; end;
Procedure TMainIDE.OnSrcNotebookSaveAll(Sender: TObject); procedure TMainIDE.OnSrcNotebookSaveAll(Sender: TObject);
begin begin
mnuSaveAllClicked(Sender); mnuSaveAllClicked(Sender);
end; end;
@ -3969,17 +3970,17 @@ end;
{------------------------------------------------------------------------------} {------------------------------------------------------------------------------}
Procedure TMainIDE.mnuViewUnitsClicked(Sender: TObject); procedure TMainIDE.mnuViewUnitsClicked(Sender: TObject);
begin begin
DoViewUnitsAndForms(false); DoViewUnitsAndForms(false);
end; end;
Procedure TMainIDE.mnuViewFormsClicked(Sender: TObject); procedure TMainIDE.mnuViewFormsClicked(Sender: TObject);
Begin Begin
DoViewUnitsAndForms(true); DoViewUnitsAndForms(true);
end; end;
Procedure TMainIDE.mnuViewUnitDependenciesClicked(Sender: TObject); procedure TMainIDE.mnuViewUnitDependenciesClicked(Sender: TObject);
begin begin
DoViewUnitDependencies(true); DoViewUnitDependencies(true);
end; end;
@ -3989,17 +3990,17 @@ begin
DoViewUnitInfo; DoViewUnitInfo;
end; end;
Procedure TMainIDE.mnuViewCodeExplorerClick(Sender: TObject); procedure TMainIDE.mnuViewCodeExplorerClick(Sender: TObject);
begin begin
DoShowCodeExplorer(true); DoShowCodeExplorer(true);
end; end;
Procedure TMainIDE.mnuViewCodeBrowserClick(Sender: TObject); procedure TMainIDE.mnuViewCodeBrowserClick(Sender: TObject);
begin begin
DoShowCodeBrowser(true); DoShowCodeBrowser(true);
end; end;
Procedure TMainIDE.mnuViewComponentsClick(Sender: TObject); procedure TMainIDE.mnuViewComponentsClick(Sender: TObject);
begin begin
DoShowComponentList(true); DoShowComponentList(true);
end; end;
@ -4009,18 +4010,18 @@ begin
DoShowRestrictionBrowser(true); DoShowRestrictionBrowser(true);
end; end;
Procedure TMainIDE.mnuViewMessagesClick(Sender: TObject); procedure TMainIDE.mnuViewMessagesClick(Sender: TObject);
begin begin
// it was already visible, but user does not see it, try to move in view // it was already visible, but user does not see it, try to move in view
DoShowMessagesView; DoShowMessagesView;
end; end;
Procedure TMainIDE.mnuViewSearchResultsClick(Sender: TObject); procedure TMainIDE.mnuViewSearchResultsClick(Sender: TObject);
Begin Begin
ShowSearchResultView(true); ShowSearchResultView(true);
End; End;
Procedure TMainIDE.mnuNewProjectClicked(Sender: TObject); procedure TMainIDE.mnuNewProjectClicked(Sender: TObject);
var var
NewProjectDesc: TProjectDescriptor; NewProjectDesc: TProjectDescriptor;
Begin Begin
@ -4068,7 +4069,7 @@ Begin
end; end;
end; end;
Procedure TMainIDE.mnuOpenProjectClicked(Sender: TObject); procedure TMainIDE.mnuOpenProjectClicked(Sender: TObject);
var var
OpenDialog:TOpenDialog; OpenDialog:TOpenDialog;
AFileName: string; AFileName: string;
@ -4203,7 +4204,7 @@ begin
end; end;
end; end;
Procedure TMainIDE.mnuSaveProjectClicked(Sender: TObject); procedure TMainIDE.mnuSaveProjectClicked(Sender: TObject);
Begin Begin
DoSaveProject([]); DoSaveProject([]);
end; end;
@ -4336,7 +4337,7 @@ begin
end; end;
end; end;
Procedure TMainIDE.mnuCompileProjectClicked(Sender: TObject); procedure TMainIDE.mnuCompileProjectClicked(Sender: TObject);
var var
ASrcEdit: TSourceEditor; ASrcEdit: TSourceEditor;
AnUnitInfo: TUnitInfo; AnUnitInfo: TUnitInfo;
@ -4349,7 +4350,7 @@ Begin
DoBuildProject(crCompile,[]); DoBuildProject(crCompile,[]);
end; end;
Procedure TMainIDE.mnuBuildProjectClicked(Sender: TObject); procedure TMainIDE.mnuBuildProjectClicked(Sender: TObject);
Begin Begin
DoBuildProject(crBuild,[pbfCleanCompile,pbfCompileDependenciesClean]); DoBuildProject(crBuild,[pbfCleanCompile,pbfCompileDependenciesClean]);
end; end;
@ -4375,12 +4376,12 @@ begin
DoBuildProject(crBuild,[]); DoBuildProject(crBuild,[]);
end; end;
Procedure TMainIDE.mnuAbortBuildProjectClicked(Sender: TObject); procedure TMainIDE.mnuAbortBuildProjectClicked(Sender: TObject);
Begin Begin
DoAbortBuild; DoAbortBuild;
end; end;
Procedure TMainIDE.mnuRunProjectClicked(Sender: TObject); procedure TMainIDE.mnuRunProjectClicked(Sender: TObject);
var var
SrcEdit: TSourceEditor; SrcEdit: TSourceEditor;
AnUnitInfo: TUnitInfo; AnUnitInfo: TUnitInfo;
@ -4392,22 +4393,22 @@ begin
DoRunProject; DoRunProject;
end; end;
Procedure TMainIDE.mnuPauseProjectClicked(Sender: TObject); procedure TMainIDE.mnuPauseProjectClicked(Sender: TObject);
begin begin
DebugBoss.DoPauseProject; DebugBoss.DoPauseProject;
end; end;
Procedure TMainIDE.mnuShowExecutionPointClicked(Sender: TObject); procedure TMainIDE.mnuShowExecutionPointClicked(Sender: TObject);
begin begin
DebugBoss.DoShowExecutionPoint; DebugBoss.DoShowExecutionPoint;
end; end;
Procedure TMainIDE.mnuStepIntoProjectClicked(Sender: TObject); procedure TMainIDE.mnuStepIntoProjectClicked(Sender: TObject);
begin begin
DebugBoss.DoStepIntoProject; DebugBoss.DoStepIntoProject;
end; end;
Procedure TMainIDE.mnuStepOverProjectClicked(Sender: TObject); procedure TMainIDE.mnuStepOverProjectClicked(Sender: TObject);
begin begin
DebugBoss.DoStepOverProject; DebugBoss.DoStepOverProject;
end; end;
@ -4427,12 +4428,12 @@ begin
DebugBoss.DoStepOutProject; DebugBoss.DoStepOutProject;
end; end;
Procedure TMainIDE.mnuRunToCursorProjectClicked(Sender: TObject); procedure TMainIDE.mnuRunToCursorProjectClicked(Sender: TObject);
begin begin
DebugBoss.DoRunToCursor; DebugBoss.DoRunToCursor;
end; end;
Procedure TMainIDE.mnuStopProjectClicked(Sender: TObject); procedure TMainIDE.mnuStopProjectClicked(Sender: TObject);
begin begin
DebugBoss.DoStopProject; DebugBoss.DoStopProject;
end; end;
@ -5151,6 +5152,7 @@ var
begin begin
//debugln('TMainIDE.CreateNewCodeBuffer START NewFilename=',NewFilename,' ',Descriptor.DefaultFilename,' ',Descriptor.ClassName); //debugln('TMainIDE.CreateNewCodeBuffer START NewFilename=',NewFilename,' ',Descriptor.DefaultFilename,' ',Descriptor.ClassName);
NewUnitName:=''; NewUnitName:='';
NewCodeBuffer:=nil;
if NewFilename='' then begin if NewFilename='' then begin
// create a new unique filename // create a new unique filename
SearchFlags:=[siffCheckAllProjects]; SearchFlags:=[siffCheckAllProjects];
@ -8514,6 +8516,10 @@ begin
else else
AProject:=Project1; AProject:=Project1;
// check if the new file fits into the project
Result:=NewFileDescriptor.CheckOwner(nfQuiet in NewFlags);
if Result<>mrOk then exit;
// create new codebuffer and apply naming conventions // create new codebuffer and apply naming conventions
Result:=CreateNewCodeBuffer(NewFileDescriptor,NewOwner,NewFilename,NewBuffer, Result:=CreateNewCodeBuffer(NewFileDescriptor,NewOwner,NewFilename,NewBuffer,
NewUnitName); NewUnitName);
@ -14944,10 +14950,10 @@ begin
Result:=DoJumpToCodePos(nil,nil,CodeBuffer,NewX,NewY,NewTopLine,AddJumpPoint, True, MarkLine); Result:=DoJumpToCodePos(nil,nil,CodeBuffer,NewX,NewY,NewTopLine,AddJumpPoint, True, MarkLine);
end; end;
function TMainIDE.DoJumpToCodePos( function TMainIDE.DoJumpToCodePos(ActiveSrcEdit: TSourceEditor;
ActiveSrcEdit: TSourceEditor; ActiveUnitInfo: TUnitInfo; ActiveUnitInfo: TUnitInfo; NewSource: TCodeBuffer; NewX, NewY,
NewSource: TCodeBuffer; NewX, NewY, NewTopLine: integer; NewTopLine: integer; AddJumpPoint: boolean; FocusEditor: Boolean;
AddJumpPoint: boolean; FocusEditor: boolean; MarkLine: Boolean): TModalResult; MarkLine: Boolean): TModalResult;
var var
NewSrcEdit: TSourceEditor; NewSrcEdit: TSourceEditor;
AnEditorInfo: TUnitEditorInfo; AnEditorInfo: TUnitEditorInfo;
@ -15892,7 +15898,7 @@ begin
SourceEditorManager.ShowActiveWindowOnTop(True); SourceEditorManager.ShowActiveWindowOnTop(True);
end; end;
Procedure TMainIDE.OnSrcNotebookEditorActived(Sender: TObject); procedure TMainIDE.OnSrcNotebookEditorActived(Sender: TObject);
var var
ActiveUnitInfo: TUnitInfo; ActiveUnitInfo: TUnitInfo;
ASrcEdit: TSourceEditor; ASrcEdit: TSourceEditor;
@ -16709,7 +16715,7 @@ begin
DoViewTabOrderEditor(True); DoViewTabOrderEditor(True);
end; end;
Procedure TMainIDE.OnSrcNoteBookAddJumpPoint(ACaretXY: TPoint; procedure TMainIDE.OnSrcNoteBookAddJumpPoint(ACaretXY: TPoint;
ATopLine: integer; AEditor: TSourceEditor; DeleteForwardHistory: boolean); ATopLine: integer; AEditor: TSourceEditor; DeleteForwardHistory: boolean);
{off $DEFINE VerboseJumpHistory} {off $DEFINE VerboseJumpHistory}
var var
@ -16740,13 +16746,14 @@ begin
{$ENDIF} {$ENDIF}
end; end;
Procedure TMainIDE.OnSrcNotebookDeleteLastJumPoint(Sender: TObject); procedure TMainIDE.OnSrcNotebookDeleteLastJumPoint(Sender: TObject);
begin begin
Project1.JumpHistory.DeleteLast; Project1.JumpHistory.DeleteLast;
end; end;
Procedure TMainIDE.OnSrcNotebookJumpToHistoryPoint(var NewCaretXY: TPoint; procedure TMainIDE.OnSrcNotebookJumpToHistoryPoint(var NewCaretXY: TPoint;
var NewTopLine: integer; var DestEditor: TSourceEditor; JumpAction: TJumpHistoryAction); var NewTopLine: integer; var DestEditor: TSourceEditor;
JumpAction: TJumpHistoryAction);
{ How the HistoryIndex works: { How the HistoryIndex works:
When the user jumps around each time an item is added to the history list When the user jumps around each time an item is added to the history list
@ -16887,7 +16894,7 @@ begin
ActiveUnitInfo.UserReadOnly:=ActiveSourceEditor.ReadOnly; ActiveUnitInfo.UserReadOnly:=ActiveSourceEditor.ReadOnly;
end; end;
Procedure TMainIDE.OnSrcNotebookViewJumpHistory(Sender: TObject); procedure TMainIDE.OnSrcNotebookViewJumpHistory(Sender: TObject);
begin begin
DoViewJumpHistory(true); DoViewJumpHistory(true);
end; end;
@ -17358,10 +17365,10 @@ begin
DoTestCompilerSettings(Sender as TCompilerOptions); DoTestCompilerSettings(Sender as TCompilerOptions);
end; end;
procedure TMainIDE.OnCheckCompOptsAndMainSrcForNewUnit( function TMainIDE.OnCheckCompOptsAndMainSrcForNewUnit(
CompOpts: TLazCompilerOptions); CompOpts: TLazCompilerOptions): TModalResult;
begin begin
CheckCompOptsAndMainSrcForNewUnit(CompOpts); Result:=CheckCompOptsAndMainSrcForNewUnit(CompOpts);
end; end;
procedure TMainIDE.ProjInspectorOpen(Sender: TObject); procedure TMainIDE.ProjInspectorOpen(Sender: TObject);

View File

@ -124,6 +124,7 @@ type
function GetResourceSource(const ResourceName: string): string; virtual; function GetResourceSource(const ResourceName: string): string; virtual;
procedure Release; procedure Release;
procedure Reference; procedure Reference;
function CheckOwner(Quiet: boolean): TModalResult; virtual;
function CreateSource(const Filename, SourceName, function CreateSource(const Filename, SourceName,
ResourceName: string): string; virtual; ResourceName: string): string; virtual;
procedure UpdateDefaultPascalFileExtension(const DefPasExt: string); virtual; procedure UpdateDefaultPascalFileExtension(const DefPasExt: string); virtual;
@ -177,6 +178,7 @@ type
ResourceName: string): string; virtual; ResourceName: string): string; virtual;
function GetImplementationSource(const Filename, SourceName, function GetImplementationSource(const Filename, SourceName,
ResourceName: string): string; virtual; ResourceName: string): string; virtual;
function CheckOwner(Quiet: boolean): TModalResult; override;
class function CompilerOptionsToUnitDirectives(CompOpts: TLazCompilerOptions): string; class function CompilerOptionsToUnitDirectives(CompOpts: TLazCompilerOptions): string;
end; end;
@ -229,7 +231,7 @@ function FileDescriptorText: TProjectFileDescriptor;
type type
TCheckCompOptsAndMainSrcForNewUnitEvent = TCheckCompOptsAndMainSrcForNewUnitEvent =
procedure(CompOpts: TLazCompilerOptions) of object; function(CompOpts: TLazCompilerOptions): TModalResult of object;
var var
CheckCompOptsAndMainSrcForNewUnitEvent: TCheckCompOptsAndMainSrcForNewUnitEvent; // set by the IDE CheckCompOptsAndMainSrcForNewUnitEvent: TCheckCompOptsAndMainSrcForNewUnitEvent; // set by the IDE
type type
@ -717,6 +719,11 @@ begin
inc(FReferenceCount); inc(FReferenceCount);
end; end;
function TProjectFileDescriptor.CheckOwner(Quiet: boolean): TModalResult;
begin
Result:=mrOk;
end;
function TProjectFileDescriptor.CreateSource(const Filename, SourceName, function TProjectFileDescriptor.CreateSource(const Filename, SourceName,
ResourceName: string): string; ResourceName: string): string;
begin begin
@ -802,6 +809,18 @@ begin
Result:=''; Result:='';
end; end;
function TFileDescPascalUnit.CheckOwner(Quiet: boolean): TModalResult;
begin
Result:=inherited CheckOwner(Quiet);
if Result<>mrOK then exit;
if Owner=nil then exit;
if Assigned(CheckCompOptsAndMainSrcForNewUnitEvent) then begin
if Owner is TLazProject then
Result:=CheckCompOptsAndMainSrcForNewUnitEvent(
TLazProject(Owner).LazCompilerOptions);
end;
end;
class function TFileDescPascalUnit.CompilerOptionsToUnitDirectives( class function TFileDescPascalUnit.CompilerOptionsToUnitDirectives(
CompOpts: TLazCompilerOptions): string; CompOpts: TLazCompilerOptions): string;
var var
@ -809,8 +828,6 @@ var
begin begin
Result:='{$mode objfpc}{$H+}'; Result:='{$mode objfpc}{$H+}';
if CompOpts=nil then exit; if CompOpts=nil then exit;
if Assigned(CheckCompOptsAndMainSrcForNewUnitEvent) then
CheckCompOptsAndMainSrcForNewUnitEvent(CompOpts);
SyntaxMode:=CompOpts.SyntaxMode; SyntaxMode:=CompOpts.SyntaxMode;
if SyntaxMode<>'' then begin if SyntaxMode<>'' then begin
Result:='{$mode '+lowercase(SyntaxMode)+'}'; Result:='{$mode '+lowercase(SyntaxMode)+'}';