Make TProject own an instance of IDEOptions instead of inheriting from it.

git-svn-id: trunk@45802 -
This commit is contained in:
juha 2014-07-06 22:37:43 +00:00
parent 11731e7aa8
commit 2fc0b188b7
13 changed files with 89 additions and 55 deletions

View File

@ -104,7 +104,6 @@ type
TAbstractIDEEnvironmentOptions = class(TAbstractIDEOptions);
TAbstractIDEHelpOptions = class(TAbstractIDEEnvironmentOptions);
TAbstractIDEProjectOptions = class(TAbstractIDEOptions);
TAbstractIDEPackageOptions = class(TAbstractIDEOptions);
TAbstractIDECompilerOptions = class(TAbstractIDEOptions);

View File

@ -368,7 +368,7 @@ type
petUnit
);
TLazProject = class(TAbstractIDEProjectOptions)
TLazProject = class(TPersistent)
private
FCleanOutputFileMask: string;
FCleanSourcesFileMask: string;
@ -388,6 +388,7 @@ type
procedure SetFPDocPaths(const AValue: string);
procedure SetUseAppBundle(AValue: Boolean);
protected
FIDEOptions: TAbstractIDEOptions; //actually TProjectIDEOptions;
FLazCompilerOptions: TLazCompilerOptions;
FFlags: TProjectFlags;
FResources: TObject;

View File

@ -2661,7 +2661,7 @@ procedure TBuildManager.SetBuildTargetProject1(Quiet: boolean;
begin
FBuildTarget:=Project1;
if FBuildTarget<>nil then
TProject(FBuildTarget).AddHandlerDestroy(@OnProjectDestroy);
TProject(FBuildTarget).IDEOptions.AddHandlerDestroy(@OnProjectDestroy);
SetBuildTarget('','','',ScanFPCSrc,Quiet);
end;

View File

@ -246,7 +246,7 @@ procedure TProjectApplicationOptionsFrame.ReadSettings(AOptions: TAbstractIDEOpt
var
AStream: TStream;
begin
FProject := AOptions as TProject;
FProject := (AOptions as TProjectIDEOptions).Project;
with FProject do
begin
TitleEdit.Text := Title;
@ -273,7 +273,7 @@ procedure TProjectApplicationOptionsFrame.WriteSettings(AOptions: TAbstractIDEOp
var
AStream: TStream;
begin
with AOptions as TProject do
with (AOptions as TProjectIDEOptions).Project {AOptions as TProject} do
begin
Title := TitleEdit.Text;
if fIconChanged then
@ -298,7 +298,7 @@ end;
class function TProjectApplicationOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TProject;
Result := TProjectIDEOptions;
end;
initialization

View File

@ -192,7 +192,7 @@ end;
procedure TProjectFormsOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
var
Project: TProject absolute AOptions;
Project: TProject;
procedure FillAutoCreateFormsListbox;
var
@ -257,23 +257,24 @@ var
end;
begin
Project := (AOptions as TProjectIDEOptions).Project;
FillAutoCreateFormsListbox;
FillAvailFormsListBox;
FormsAutoCreateNewFormsCheckBox.Checked := Project.AutoCreateForms;
end;
procedure TProjectFormsOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
Project: TProject absolute AOptions;
Project: TProject;
begin
Project := (AOptions as TProjectIDEOptions).Project;
Project.AutoCreateForms := FormsAutoCreateNewFormsCheckBox.Checked;
Project.TmpAutoCreatedForms := FormsAutoCreatedListBox.Items;
end;
class function TProjectFormsOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TProject;
Result := TProjectIDEOptions;
end;
initialization

View File

@ -85,7 +85,7 @@ end;
procedure TProjectI18NOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
begin
FProject := AOptions as TProject;
FProject := (AOptions as TProjectIDEOptions).Project;
with FProject do
begin
POOutDirEdit.Text := POOutputDirectory;
@ -97,7 +97,7 @@ end;
procedure TProjectI18NOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
begin
with AOptions as TProject do
with (AOptions as TProjectIDEOptions).Project do
begin
POOutputDirectory := POOutDirEdit.Text;
EnableI18N := EnableI18NCheckBox.Checked;
@ -107,7 +107,7 @@ end;
class function TProjectI18NOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TProject;
Result := TProjectIDEOptions;
end;
initialization

View File

@ -120,7 +120,7 @@ end;
procedure TProjectFPDocOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
begin
with AOptions as TProject do begin
with (AOptions as TProjectIDEOptions).Project do begin
SplitString(FPDocPaths, ';', PathsListBox.Items, True);
if FPDocPackageName='' then
FPDocPackageNameEdit.Text:=lisDefaultPlaceholder
@ -131,7 +131,7 @@ end;
procedure TProjectFPDocOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
begin
with AOptions as TProject do begin
with (AOptions as TProjectIDEOptions).Project do begin
FPDocPaths := StringListToText(PathsListBox.Items, ';', True);
FPDocPackageName:=GetFPDocPkgNameEditValue;
end;
@ -139,7 +139,7 @@ end;
class function TProjectFPDocOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TProject;
Result := TProjectIDEOptions;
end;
initialization

View File

@ -74,7 +74,7 @@ end;
procedure TProjectMiscOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
begin
with AOptions as TProject do
with (AOptions as TProjectIDEOptions).Project do
begin
MainUnitIsPascalSourceCheckBox.Checked := (pfMainUnitIsPascalSource in Flags);
MainUnitHasUsesSectionForAllUnitsCheckBox.Checked := (pfMainUnitHasUsesSectionForAllUnits in Flags);
@ -100,7 +100,7 @@ end;
procedure TProjectMiscOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
Project: TProject absolute AOptions;
Project: TProject;
NewFlags: TProjectFlags;
procedure SetProjectFlag(AFlag: TProjectFlag; AValue: Boolean);
@ -112,6 +112,7 @@ var
end;
begin
Project := (AOptions as TProjectIDEOptions).Project;
NewFlags := Project.Flags;
SetProjectFlag(pfMainUnitIsPascalSource,
MainUnitIsPascalSourceCheckBox.Checked);
@ -139,7 +140,7 @@ end;
class function TProjectMiscOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TProject;
Result := TProjectIDEOptions;
end;
initialization

View File

@ -185,13 +185,12 @@ end;
procedure TResourcesOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
var
Project: TProject absolute AOptions;
List: TResourceList;
I: Integer;
begin
FProject := Project;
FProject := (AOptions as TProjectIDEOptions).Project;
lbResources.Items.Clear;
List := Project.ProjResources.UserResources.List;
List := FProject.ProjResources.UserResources.List;
lbResources.Items.BeginUpdate;
try
for I := 0 to List.Count - 1 do
@ -204,9 +203,10 @@ end;
procedure TResourcesOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
Project: TProject absolute AOptions;
Project: TProject;
I: Integer;
begin
Project := (AOptions as TProjectIDEOptions).Project;
Project.ProjResources.UserResources.List.Clear;
for I := 0 to lbResources.Items.Count - 1 do
Project.ProjResources.UserResources.List.AddResource(lbResources.Items[I].Caption,
@ -215,7 +215,7 @@ end;
class function TResourcesOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TProject;
Result := TProjectIDEOptions;
end;
initialization

View File

@ -88,9 +88,9 @@ end;
procedure TProjectSaveOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
begin
if not (AOptions is TProject) then exit;
fProject:=TProject(AOptions);
with AOptions as TProject do
if not (AOptions is TProjectIDEOptions) then exit;
fProject:=(AOptions as TProjectIDEOptions).Project;
with fProject do
begin
SaveClosedUnitInfoCheckBox.Checked := (pfSaveClosedUnits in Flags);
SaveOnlyProjectUnitInfoCheckBox.Checked := (pfSaveOnlyProjectUnits in Flags);
@ -104,8 +104,8 @@ procedure TProjectSaveOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
AFlags: TProjectFlags;
begin
if not (AOptions is TProject) then exit;
with AOptions as TProject do
if not (AOptions is TProjectIDEOptions) then exit;
with (AOptions as TProjectIDEOptions).Project do
begin
AFlags := Flags;
if SaveClosedUnitInfoCheckBox.Checked then
@ -132,7 +132,7 @@ end;
class function TProjectSaveOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TProject;
Result := TProjectIDEOptions;
end;
initialization

View File

@ -170,7 +170,7 @@ var
i: integer;
Attr: TProjectVersionAttribute;
begin
FVersionInfo := (AOptions as TProject).ProjResources.VersionInfo;
FVersionInfo := (AOptions as TProjectIDEOptions).Project.ProjResources.VersionInfo;
UseVersionInfoCheckBox.Checked := FVersionInfo.UseVersionInfo;
MajorVersionSpinEdit.Value := FVersionInfo.MajorVersionNr;
@ -212,7 +212,7 @@ var
t: TProjectVersionStringTable;
attrs: TProjectVersionAttributes;
begin
VersionInfo := (AOptions as TProject).ProjResources.VersionInfo;
VersionInfo := (AOptions as TProjectIDEOptions).Project.ProjResources.VersionInfo;
VersionInfo.UseVersionInfo := UseVersionInfoCheckBox.Checked;
VersionInfo.AutoIncrementBuild := AutomaticallyIncreaseBuildCheckBox.Checked;
VersionInfo.MajorVersionNr := MajorVersionSpinEdit.Value;
@ -240,7 +240,7 @@ end;
class function TProjectVersionInfoOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TProject;
Result := TProjectIDEOptions;
end;
initialization

View File

@ -425,8 +425,7 @@ type
procedure OnLoadIDEOptions(Sender: TObject; AOptions: TAbstractIDEOptions);
procedure OnSaveIDEOptions(Sender: TObject; AOptions: TAbstractIDEOptions);
procedure DoOpenIDEOptions(AEditor: TAbstractIDEOptionsEditorClass;
ACaption: String;
AOptionsFilter: array of TAbstractIDEOptionsClass;
ACaption: String; AOptionsFilter: array of TAbstractIDEOptionsClass;
ASettings: TIDEOptionsEditorSettings); override;
procedure DoEnvironmentOptionsBeforeRead(Sender: TObject);
@ -4238,7 +4237,7 @@ procedure TMainIDE.mnuProjectOptionsClicked(Sender: TObject);
begin
if Project1=nil then exit;
DoOpenIDEOptions(nil, Format(dlgProjectOptionsFor, [Project1.GetTitleOrName]),
[TAbstractIDEProjectOptions, TProjectCompilerOptions], []);
[TProjectIDEOptions, TProjectCompilerOptions], []);
end;
function TMainIDE.UpdateProjectPOFile(AProject: TProject): TModalResult;
@ -5004,7 +5003,7 @@ begin
//debugln(['TMainIDE.DoProjectOptionsBeforeRead ',DbgSName(Sender)]);
ActiveSrcEdit:=nil;
BeginCodeTool(ActiveSrcEdit, ActiveUnitInfo, []);
AProject:=TProject(Sender);
AProject:=(Sender as TProjectIDEOptions).Project;
AProject.BackupSession;
AProject.BackupBuildModes;
AProject.UpdateExecutableType;
@ -5013,7 +5012,7 @@ end;
procedure TMainIDE.DoProjectOptionsAfterWrite(Sender: TObject; Restore: boolean);
var
AProject: TProject absolute Sender;
AProject: TProject;
aFilename: String;
function GetTitle: String;
@ -5099,6 +5098,7 @@ var
begin
//debugln(['TMainIDE.DoProjectOptionsAfterWrite ',DbgSName(Sender),' Restore=',Restore]);
AProject:=(Sender as TProjectIDEOptions).Project;
if not Restore then
begin
SetTitle;
@ -6189,8 +6189,8 @@ begin
Result.OnSaveUnitSessionInfo:=@OnSaveProjectUnitSessionInfo;
Result.OnGetTestDirectory:=@OnProjectGetTestDirectory;
Result.OnChangeProjectInfoFile:=@OnProjectChangeInfoFile;
Result.OnBeforeRead:=@DoProjectOptionsBeforeRead;
Result.OnAfterWrite:=@DoProjectOptionsAfterWrite;
Result.IDEOptions.OnBeforeRead:=@DoProjectOptionsBeforeRead;
Result.IDEOptions.OnAfterWrite:=@DoProjectOptionsAfterWrite;
end;
function TMainIDE.DoNewProject(ProjectDesc: TProjectDescriptor): TModalResult;
@ -9279,8 +9279,7 @@ begin
Owners.Free;
end;
end;
if FilenameIsAbsolute(CodeToolsOpts.IndentationFileName)
then
if FilenameIsAbsolute(CodeToolsOpts.IndentationFileName) then
AddFile(CodeToolsOpts.IndentationFileName);
end;

View File

@ -725,6 +725,19 @@ type
property SessionMatrixOptions: TBuildMatrixOptions read FSessionMatrixOptions;
end;
{ TProjectIDEOptions }
TProjectIDEOptions = class(TAbstractIDEOptions)
private
FProject: TProject;
public
constructor Create(AProject: TProject);
destructor Destroy; override;
class function GetInstance: TAbstractIDEOptions; override;
class function GetGroupCaption: string; override;
property Project: TProject read FProject;
end;
{ TProject }
TEndUpdateProjectEvent =
@ -819,6 +832,7 @@ type
function GetFirstPartOfProject: TUnitInfo;
function GetFirstUnitWithComponent: TUnitInfo;
function GetFirstUnitWithEditorIndex: TUnitInfo;
function GetIDEOptions: TProjectIDEOptions;
function GetMainFilename: String;
function GetMainUnitInfo: TUnitInfo;
function GetProjResources: TProjectResources;
@ -904,8 +918,6 @@ type
public
constructor Create(ProjectDescription: TProjectDescriptor); override;
destructor Destroy; override;
class function GetInstance: TAbstractIDEOptions; override;
class function GetGroupCaption: string; override;
procedure Clear; override;
procedure BeginUpdate(Change: boolean);
procedure EndUpdate;
@ -1098,6 +1110,7 @@ type
property FirstRequiredDependency: TPkgDependency read FFirstRequiredDependency;
property FirstUnitWithComponent: TUnitInfo read GetFirstUnitWithComponent;
property FirstUnitWithEditorIndex: TUnitInfo read GetFirstUnitWithEditorIndex;
property IDEOptions: TProjectIDEOptions read GetIDEOptions;
property JumpHistory: TProjectJumpHistory read FJumpHistory write FJumpHistory;
property LastCompilerFileDate: integer read FLastCompilerFileDate
write FLastCompilerFileDate;
@ -2623,6 +2636,29 @@ begin
end;
{ TProjectIDEOptions }
constructor TProjectIDEOptions.Create(AProject: TProject);
begin
inherited Create;
FProject := AProject;
end;
destructor TProjectIDEOptions.Destroy;
begin
inherited Destroy;
end;
class function TProjectIDEOptions.GetInstance: TAbstractIDEOptions;
begin
Result := Project1.IDEOptions;
end;
class function TProjectIDEOptions.GetGroupCaption: string;
begin
Result := dlgProjectOptions;
end;
{------------------------------------------------------------------------------
TProject Class
@ -2661,6 +2697,7 @@ begin
FSourceDirectories:=TFileReferenceList.Create;
FSourceDirectories.OnChanged:=@SourceDirectoriesChanged;
UpdateProjectDirectory;
FIDEOptions:=TProjectIDEOptions.Create(Self);
FPublishOptions:=TPublishProjectOptions.Create(Self);
FRunParameters:=TRunParamsOptions.Create;
Title := '';
@ -2692,6 +2729,7 @@ begin
FreeThenNil(FJumpHistory);
FreeThenNil(FSourceDirectories);
FreeThenNil(FPublishOptions);
FreeThenNil(FIDEOptions);
FreeThenNil(FRunParameters);
FreeThenNil(FDefineTemplates);
@ -3775,16 +3813,6 @@ begin
TProjectXPManifest(ProjResources[TProjectXPManifest]).UseManifest:=AValue;
end;
class function TProject.GetInstance: TAbstractIDEOptions;
begin
Result := Project1;
end;
class function TProject.GetGroupCaption: string;
begin
Result := dlgProjectOptions;
end;
function TProject.UnitCount:integer;
begin
Result:=FUnitList.Count;
@ -4134,6 +4162,11 @@ begin
Result:=fFirst[uilWithEditorIndex];
end;
function TProject.GetIDEOptions: TProjectIDEOptions;
begin
Result := TProjectIDEOptions(FIDEOptions);
end;
function TProject.GetMainUnitInfo: TUnitInfo;
begin
if (MainUnitID>=0) and (MainUnitID<UnitCount) then
@ -7316,7 +7349,7 @@ begin
end;
initialization
RegisterIDEOptionsGroup(GroupProject, TProject);
RegisterIDEOptionsGroup(GroupProject, TProjectIDEOptions);
RegisterIDEOptionsGroup(GroupCompiler, TProjectCompilerOptions);
end.