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

git-svn-id: trunk@45803 -
This commit is contained in:
juha 2014-07-06 22:37:50 +00:00
parent 2fc0b188b7
commit e8889c7f72
10 changed files with 92 additions and 78 deletions

View File

@ -103,8 +103,6 @@ type
TAbstractIDEEnvironmentOptions = class(TAbstractIDEOptions);
TAbstractIDEHelpOptions = class(TAbstractIDEEnvironmentOptions);
TAbstractIDEPackageOptions = class(TAbstractIDEOptions);
TAbstractIDECompilerOptions = class(TAbstractIDEOptions);
TOnLoadIDEOptions = procedure(Sender: TObject; AOptions: TAbstractIDEOptions) of object;

View File

@ -112,10 +112,11 @@ type
{ TLazPackageID }
TLazPackageID = class(TAbstractIDEPackageOptions)
TLazPackageID = class(TPersistent)
private
FIDAsWord: string;
protected
FIDEOptions: TAbstractIDEOptions; //actually TPackageIDEOptions;
FName: string;
FVersion: TPkgVersion;
FIDAsString: string;
@ -130,9 +131,6 @@ type
function Compare(PackageID2: TLazPackageID): integer;
function CompareMask(ExactPackageID: TLazPackageID): integer;
procedure AssignID(Source: TLazPackageID); virtual;
// IDE options
class function GetGroupCaption: string; override;
class function GetInstance: TAbstractIDEOptions; override;
public
property Name: string read FName write SetName;
property Version: TPkgVersion read FVersion;
@ -690,16 +688,6 @@ begin
Version.Assign(Source.Version);
end;
class function TLazPackageID.GetGroupCaption: string;
begin
Result := '';
end;
class function TLazPackageID.GetInstance: TAbstractIDEOptions;
begin
Result := nil;
end;
{ TIDEPackage }
procedure TIDEPackage.AssignOptions(Source: TPersistent);

View File

@ -63,8 +63,9 @@ end;
procedure TPackageDescriptionOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage absolute AOptions;
LazPackage: TLazPackage;
begin
LazPackage := (AOptions as TPackageIDEOptions).Package;
DescriptionMemo.Text := LazPackage.Description;
AuthorEdit.Text := LazPackage.Author;
LicenseMemo.Text := LazPackage.License;
@ -76,12 +77,13 @@ end;
procedure TPackageDescriptionOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage absolute AOptions;
LazPackage: TLazPackage;
NewVersion: TPkgVersion;
BrokenDependencies: TFPList;
RenameDependencies: boolean;
MsgResult: TModalResult;
begin
LazPackage := (AOptions as TPackageIDEOptions).Package;
LazPackage.Description := DescriptionMemo.Text;
LazPackage.Author := AuthorEdit.Text;
LazPackage.License := LicenseMemo.Text;
@ -118,7 +120,7 @@ end;
class function TPackageDescriptionOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TLazPackage;
Result := TPackageIDEOptions;
end;
initialization

View File

@ -64,26 +64,24 @@ begin
EnableI18NCheckBox.Caption := rsEnableI18n;
I18NGroupBox.Caption := rsI18nOptions;
PoOutDirlabel.Caption := rsPOOutputDirectory;
PoForFormsCheckBox.Caption:=lisCreateUpdatePoFileWhenSavingALfmFile;
PoForFormsCheckBox.Hint:=
lisYouCanDisableThisForIndividualFormsViaThePackageEd;
PoForFormsCheckBox.Caption := lisCreateUpdatePoFileWhenSavingALfmFile;
PoForFormsCheckBox.Hint := lisYouCanDisableThisForIndividualFormsViaThePackageEd;
end;
procedure TPackageI18NOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage absolute AOptions;
begin
FLazPackage := LazPackage;
EnableI18NCheckBox.Checked := LazPackage.EnableI18N;
I18NGroupBox.Enabled := LazPackage.EnableI18N;
POOutDirEdit.Text := LazPackage.POOutputDirectory;
PoForFormsCheckBox.Checked:=LazPackage.EnableI18NForLFM;
FLazPackage := (AOptions as TPackageIDEOptions).Package;
EnableI18NCheckBox.Checked := FLazPackage.EnableI18N;
I18NGroupBox.Enabled := FLazPackage.EnableI18N;
POOutDirEdit.Text := FLazPackage.POOutputDirectory;
PoForFormsCheckBox.Checked:=FLazPackage.EnableI18NForLFM;
end;
procedure TPackageI18NOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage absolute AOptions;
LazPackage: TLazPackage;
begin
LazPackage := (AOptions as TPackageIDEOptions).Package;
LazPackage.EnableI18N := EnableI18NCheckBox.Checked;
LazPackage.POOutputDirectory := POOutDirEdit.Text;
LazPackage.EnableI18NForLFM := PoForFormsCheckBox.Checked;
@ -91,7 +89,7 @@ end;
class function TPackageI18NOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TLazPackage;
Result := TPackageIDEOptions;
end;
initialization

View File

@ -218,23 +218,21 @@ begin
end;
procedure TPackageIntegrationOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage absolute AOptions;
begin
FLazPackage := LazPackage;
FStoredPkgType := LazPackage.PackageType;
FLazPackage := (AOptions as TPackageIDEOptions).Package;
FStoredPkgType := FLazPackage.PackageType;
SetSelectedPkgType(FStoredPkgType);
case LazPackage.AutoUpdate of
case FLazPackage.AutoUpdate of
pupAsNeeded: UpdateRadioGroup.ItemIndex := 0;
pupOnRebuildingAll: UpdateRadioGroup.ItemIndex := 1;
else
UpdateRadioGroup.ItemIndex := 2;
end;
FPDocSearchPathsEdit.Text:=LazPackage.FPDocPaths;
if LazPackage.FPDocPackageName='' then
FPDocSearchPathsEdit.Text:=FLazPackage.FPDocPaths;
if FLazPackage.FPDocPackageName='' then
FPDocPackageNameEdit.Text:=lisDefaultPlaceholder
else
FPDocPackageNameEdit.Text:=LazPackage.FPDocPackageName;
FPDocPackageNameEdit.Text:=FLazPackage.FPDocPackageName;
end;
function TPackageIntegrationOptionsFrame.ShowMsgPackageTypeMustBeDesign: boolean;
@ -278,8 +276,9 @@ end;
procedure TPackageIntegrationOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage absolute AOptions;
LazPackage: TLazPackage;
begin
LazPackage := (AOptions as TPackageIDEOptions).Package;
LazPackage.PackageType := GetSelectedPkgType;
case UpdateRadioGroup.ItemIndex of
2: LazPackage.AutoUpdate := pupManually;
@ -293,7 +292,7 @@ end;
class function TPackageIntegrationOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TLazPackage;
Result := TPackageIDEOptions;
end;
function TPackageIntegrationOptionsFrame.PkgTypeToCaption(t: TLazPackageType

View File

@ -41,21 +41,23 @@ end;
procedure TPackageProvidesOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage absolute AOptions;
LazPackage: TLazPackage;
begin
LazPackage := (AOptions as TPackageIDEOptions).Package;
ProvidesMemo.Lines.Assign(LazPackage.Provides);
end;
procedure TPackageProvidesOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage absolute AOptions;
LazPackage: TLazPackage;
begin
LazPackage := (AOptions as TPackageIDEOptions).Package;
LazPackage.Provides := ProvidesMemo.Lines;
end;
class function TPackageProvidesOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TLazPackage;
Result := TPackageIDEOptions;
end;
initialization

View File

@ -248,11 +248,9 @@ begin
end;
procedure TPackageUsageOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage absolute AOptions;
begin
FLazPackage := LazPackage;
with LazPackage.UsageOptions do
FLazPackage := (AOptions as TPackageIDEOptions).Package;
with FLazPackage.UsageOptions do
begin
UnitPathEdit.Text := UnitPath;
IncludePathEdit.Text := IncludePath;
@ -261,13 +259,14 @@ begin
LinkerOptionsMemo.Text := LinkerOptions;
CustomOptionsMemo.Text := CustomOptions;
end;
AddPackageUnitToProjectCheckBox.Checked := LazPackage.AddToProjectUsesSection;
AddPackageUnitToProjectCheckBox.Checked := FLazPackage.AddToProjectUsesSection;
end;
procedure TPackageUsageOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage absolute AOptions;
LazPackage: TLazPackage;
begin
LazPackage := (AOptions as TPackageIDEOptions).Package;
with LazPackage.UsageOptions do
begin
UnitPath := TrimSearchPath(UnitPathEdit.Text, '');
@ -282,7 +281,7 @@ end;
class function TPackageUsageOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TLazPackage;
Result := TPackageIDEOptions;
end;
initialization

View File

@ -531,10 +531,22 @@ type
podFallback // used when podDefault is not writable
);
TIterateComponentClassesEvent =
procedure(PkgComponent: TPkgComponent) of object;
TPkgChangeNameEvent = procedure(Pkg: TLazPackage;
const OldName: string) of object;
TIterateComponentClassesEvent = procedure(PkgComponent: TPkgComponent) of object;
TPkgChangeNameEvent = procedure(Pkg: TLazPackage; const OldName: string) of object;
{ TPackageIDEOptions }
TPackageIDEOptions = class(TAbstractIDEOptions)
private
FPackage: TLazPackage;
public
constructor Create(APackage: TLazPackage);
destructor Destroy; override;
class function GetInstance: TAbstractIDEOptions; override;
class function GetGroupCaption: string; override;
property Package: TLazPackage read FPackage;
end;
{ TLazPackage }
@ -594,6 +606,7 @@ type
function GetComponents(Index: integer): TPkgComponent;
function GetRemovedFiles(Index: integer): TPkgFile;
function GetFiles(Index: integer): TPkgFile;
function GetIDEOptions: TPackageIDEOptions;
procedure SetAddToProjectUsesSection(const AValue: boolean);
procedure SetAuthor(const AValue: string);
procedure SetAutoIncrementVersionOnBuild(const AValue: boolean);
@ -636,12 +649,10 @@ type
function GetRemovedPkgFiles(Index: integer): TLazPackageFile; override;
procedure SetAutoInstall(AValue: TPackageInstallType); override;
public
procedure AssignOptions(Source: TPersistent); override;
constructor Create;
destructor Destroy; override;
procedure AssignOptions(Source: TPersistent); override;
// IDE options
class function GetGroupCaption: string; override;
class function GetInstance: TAbstractIDEOptions; override;
procedure BackupOptions;
procedure RestoreOptions;
// modified
@ -785,6 +796,7 @@ type
property Flags: TLazPackageFlags read FFlags write SetFlags;
property HoldPackageCount: integer read FHoldPackageCount;
property IconFile: string read FIconFile write SetIconFile;
property IDEOptions: TPackageIDEOptions read GetIDEOptions;
property Installed: TPackageInstallType read FInstalled write SetInstalled;
property FPDocPaths: string read FFPDocPaths write SetFPDocPaths;
property FPDocPackageName: string read FFPDocPackageName write SetFPDocPackageName;
@ -2174,6 +2186,29 @@ begin
Result:=AFilename;
end;
{ TPackageIDEOptions }
constructor TPackageIDEOptions.Create(APackage: TLazPackage);
begin
inherited Create;
FPackage := APackage;
end;
destructor TPackageIDEOptions.Destroy;
begin
inherited Destroy;
end;
class function TPackageIDEOptions.GetInstance: TAbstractIDEOptions;
begin
Result := Package1.IDEOptions;
end;
class function TPackageIDEOptions.GetGroupCaption: string;
begin
Result := lisPckOptsPackageOptions;
end;
{ TLazPackage }
procedure TLazPackage.OnMacroListSubstitution(TheMacro: TTransferMacro;
@ -2364,6 +2399,11 @@ begin
Result:=TPkgFile(FFiles[Index]);
end;
function TLazPackage.GetIDEOptions: TPackageIDEOptions;
begin
Result := TPackageIDEOptions(FIDEOptions);
end;
function TLazPackage.GetModified: boolean;
begin
Result:=(lpfModified in FFlags) or CompilerOptions.Modified;
@ -2611,6 +2651,7 @@ begin
FRemovedFiles:=TFPList.Create;
FMacros:=TTransferMacroList.Create;
FMacros.OnSubstitution:=@OnMacroListSubstitution;
FIDEOptions:=TPackageIDEOptions.Create(Self);
FCompilerOptions:=TPkgCompilerOptions.Create(Self);
FLazCompilerOptions:=FCompilerOptions;
FCompilerOptions.ParsedOpts.InvalidateParseOnChange:=true;
@ -2637,22 +2678,13 @@ begin
FreeAndNil(FFiles);
FreeAndNil(FComponents);
FreeAndNil(FCompilerOptions);
FreeAndNil(FIDEOptions);
FreeAndNil(FUsageOptions);
FreeAndNil(FMacros);
FreeAndNil(FSourceDirectories);
inherited Destroy;
end;
class function TLazPackage.GetGroupCaption: string;
begin
Result := lisPckOptsPackageOptions;
end;
class function TLazPackage.GetInstance: TAbstractIDEOptions;
begin
Result := Package1;
end;
procedure TLazPackage.BackupOptions;
begin
if FOptionsBackup=nil then
@ -4719,7 +4751,7 @@ begin
end;
initialization
RegisterIDEOptionsGroup(GroupPackage, TLazPackage);
RegisterIDEOptionsGroup(GroupPackage, TPackageIDEOptions);
RegisterIDEOptionsGroup(GroupPkgCompiler, TPkgCompilerOptions);
PackageDependencies:=TAVLTree.Create(@ComparePkgDependencyNames);

View File

@ -1111,11 +1111,11 @@ const
);
begin
Package1 := LazPackage;
Package1.OnBeforeRead:=PackageEditors.OnBeforeReadPackage;
Package1.OnAfterWrite:=PackageEditors.OnAfterWritePackage;
Package1.IDEOptions.OnBeforeRead:=PackageEditors.OnBeforeReadPackage;
Package1.IDEOptions.OnAfterWrite:=PackageEditors.OnAfterWritePackage;
LazarusIDE.DoOpenIDEOptions(nil,
Format(lisPckEditCompilerOptionsForPackage, [LazPackage.IDAsString]),
[TLazPackage, TPkgCompilerOptions], Settings[LazPackage.ReadOnly]);
[TPackageIDEOptions, TPkgCompilerOptions], Settings[LazPackage.ReadOnly]);
UpdateTitle;
UpdateButtons;
UpdateStatusBar;

View File

@ -681,20 +681,16 @@ begin
end;
procedure TPkgManager.OnAfterWritePackage(Sender: TObject; Restore: boolean);
var
APackage: TLazPackage absolute Sender;
begin
//debugln(['TPkgManager.OnAfterWritePackage ',DbgSName(APackage),' Restore=',Restore]);
if Restore then
APackage.RestoreOptions;
(Sender as TPackageIDEOptions).Package.RestoreOptions;
end;
procedure TPkgManager.OnBeforeReadPackage(Sender: TObject);
var
APackage: TLazPackage absolute Sender;
begin
//debugln(['TPkgManager.OnBeforeReadPackage ',DbgSName(APackage)]);
APackage.BackupOptions;
(Sender as TPackageIDEOptions).Package.BackupOptions;
end;
function TPkgManager.OnPackageEditorCompilePackage(Sender: TObject;