lazarus/packager/frames/package_usage_options.pas

246 lines
7.8 KiB
ObjectPascal

unit Package_Usage_Options;
{$mode objfpc}{$H+}
interface
uses
SysUtils,
// LazUtils
LazFileUtils,
// LCL
Forms, Controls, StdCtrls, Dialogs,
// IdeIntf
IDEOptionsIntf, IDEOptEditorIntf, MacroIntf,
// IdeConfic
IDEProcs,
// IdeUtils
IdeUtilsPkgStrConsts,
// IdePackager
IdePackagerStrConsts,
// IDE
PathEditorDlg, LazarusIDEStrConsts, SearchPathProcs, PackageDefs;
type
{ TPackageUsageOptionsFrame }
TPackageUsageOptionsFrame = class(TAbstractIDEOptionsEditor)
AddOptionsGroupBox: TGroupBox;
AddPackageUnitToProjectCheckBox: TCheckBox;
CompatibilityModeCheckBox: TCheckBox;
AddPathsGroupBox: TGroupBox;
CustomOptionsLabel: TLabel;
CustomOptionsMemo: TMemo;
IncludePathEdit: TEdit;
IncludePathLabel: TLabel;
LibraryPathEdit: TEdit;
LibraryPathLabel: TLabel;
LinkerOptionsLabel: TLabel;
LinkerOptionsMemo: TMemo;
ObjectPathEdit: TEdit;
ObjectPathLabel: TLabel;
ProjectGroupBox: TGroupBox;
PackageGroupBox: TGroupBox;
UnitPathEdit: TEdit;
UnitPathLabel: TLabel;
private
UnitPathButton: TPathEditorButton;
IncludePathButton: TPathEditorButton;
ObjectPathButton: TPathEditorButton;
LibraryPathButton: TPathEditorButton;
FLazPackage: TLazPackage;
function PathEditBtnExecuted({%H-}Context: String; var NewPath: String): Boolean;
public
function GetTitle: string; override;
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
end;
implementation
{$R *.lfm}
{ TPackageUsageOptionsFrame }
function TPackageUsageOptionsFrame.PathEditBtnExecuted(Context: String; var NewPath: String): Boolean;
var
CurDir: string;
StartPos, OldStartPos: integer;
DlgResult: TModalResult;
begin
// check NewPath
StartPos := 1;
repeat
OldStartPos := StartPos;
CurDir := GetNextDirectoryInSearchPath(NewPath, StartPos);
if CurDir <> '' then
begin
IDEMacros.SubstituteMacros(CurDir);
FLazPackage.LongenFilename(CurDir);
if not DirPathExists(CurDir) then
begin
DlgResult := QuestionDlg(lisEnvOptDlgDirectoryNotFound,
Format(lisDirectoryNotFound, [CurDir]),
mtError, [mrIgnore, mrYes, lisRemoveFromSearchPath, mrCancel], 0);
case DlgResult of
mrIgnore: ;
mrYes:
begin // remove directory from search path
NewPath := copy(NewPath,1,OldStartPos-1) + copy(NewPath,StartPos,length(NewPath));
StartPos := OldStartPos;
end;
else // undo
Exit(False);
end;
end;
end;
until StartPos > length(NewPath);
Result := True;
end;
function TPackageUsageOptionsFrame.GetTitle: string;
begin
Result := lisPckOptsUsage;
end;
procedure TPackageUsageOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
begin
AddPathsGroupBox.Caption := lisPckOptsAddPathsToDependentPackagesProjects;
UnitPathLabel.Caption := lisUnit;
IncludePathLabel.Caption := lisPckOptsInclude;
ObjectPathLabel.Caption := lisPckOptsObject;
LibraryPathLabel.Caption := lisPckOptsLibrary;
AddOptionsGroupBox.Caption := lisPckOptsAddOptionsToDependentPackagesAndProjects;
LinkerOptionsLabel.Caption := lisPckOptsLinker;
CustomOptionsLabel.Caption := lisPckOptsCustom;
UnitPathButton := TPathEditorButton.Create(Self);
with UnitPathButton do
begin
Name := 'UnitPathButton';
Parent := AddPathsGroupBox;
Caption := '...';
AutoSize := False;
Width := Height;
Anchors := [akRight];
AnchorParallel(akRight, 6, AddPathsGroupBox);
AnchorParallel(akTop, 0, UnitPathEdit);
AnchorParallel(akBottom, 0, UnitPathEdit);
AssociatedEdit := UnitPathEdit;
Templates := '$(PkgOutDir)' +
'$(LazarusDir)/lcl/units/$(TargetCPU)-$(TargetOS)' +
';$(LazarusDir)/lcl/units/$(TargetCPU)-$(TargetOS)/$(LCLWidgetType)' +
';$(LazarusDir)/components/codetools/units/$(TargetCPU)-$(TargetOS)' +
';$(LazarusDir)/components/custom' +
';$(LazarusDir)/packager/units/$(TargetCPU)-$(TargetOS)';
OnExecuted := @PathEditBtnExecuted;
end;
UnitPathEdit.AnchorToNeighbour(akRight,0,UnitPathButton);
IncludePathButton := TPathEditorButton.Create(Self);
with IncludePathButton do
begin
Name := 'IncludePathButton';
Parent := AddPathsGroupBox;
Caption := '...';
AutoSize := False;
Width := Height;
Anchors := [akRight];
AnchorParallel(akRight, 6, AddPathsGroupBox);
AnchorParallel(akTop, 0, IncludePathEdit);
AnchorParallel(akBottom, 0, IncludePathEdit);
AssociatedEdit := IncludePathEdit;
Templates := 'include';
OnExecuted := @PathEditBtnExecuted;
end;
IncludePathEdit.AnchorToNeighbour(akRight,0,IncludePathButton);
ObjectPathButton := TPathEditorButton.Create(Self);
with ObjectPathButton do
begin
Name := 'ObjectPathButton';
Parent := AddPathsGroupBox;
Caption := '...';
AutoSize := False;
Width := Height;
Anchors := [akRight];
AnchorParallel(akRight, 6, AddPathsGroupBox);
AnchorParallel(akTop, 0, ObjectPathEdit);
AnchorParallel(akBottom, 0, ObjectPathEdit);
AssociatedEdit := ObjectPathEdit;
Templates := 'objects';
OnExecuted := @PathEditBtnExecuted;
end;
ObjectPathEdit.AnchorToNeighbour(akRight,0,ObjectPathButton);
LibraryPathButton := TPathEditorButton.Create(Self);
with LibraryPathButton do
begin
Name := 'LibraryPathButton';
Parent := AddPathsGroupBox;
Caption := '...';
AutoSize := False;
Width := Height;
Anchors := [akRight];
AnchorParallel(akRight, 6, AddPathsGroupBox);
AnchorParallel(akTop, 0, LibraryPathEdit);
AnchorParallel(akBottom, 0, LibraryPathEdit);
AssociatedEdit := LibraryPathEdit;
OnExecuted := @PathEditBtnExecuted;
end;
LibraryPathEdit.AnchorToNeighbour(akRight,0,LibraryPathButton);
ProjectGroupBox.Caption := dlgProject;
AddPackageUnitToProjectCheckBox.Caption := podAddPackageUnitToUsesSection;
PackageGroupBox.Caption := lisPackage;
CompatibilityModeCheckBox.Caption := lisLPKCompatibilityModeCheckBox;
CompatibilityModeCheckBox.Hint := lisLPKCompatibilityModeCheckBoxHint;
end;
procedure TPackageUsageOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
begin
FLazPackage := (AOptions as TPackageIDEOptions).Package;
with FLazPackage.UsageOptions do
begin
SetPathTextAndHint(UnitPath, UnitPathEdit);
SetPathTextAndHint(IncludePath, IncludePathEdit);
SetPathTextAndHint(ObjectPath, ObjectPathEdit);
SetPathTextAndHint(LibraryPath, LibraryPathEdit);
LinkerOptionsMemo.Text := LinkerOptions;
CustomOptionsMemo.Text := CustomOptions;
end;
AddPackageUnitToProjectCheckBox.Checked := FLazPackage.AddToProjectUsesSection;
CompatibilityModeCheckBox.Checked := FLazPackage.UseLegacyLists;
end;
procedure TPackageUsageOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
var
LazPackage: TLazPackage;
begin
LazPackage := (AOptions as TPackageIDEOptions).Package;
with LazPackage.UsageOptions do
begin
UnitPath := TrimSearchPath(UnitPathEdit.Text, '');
IncludePath := TrimSearchPath(IncludePathEdit.Text, '');
ObjectPath := TrimSearchPath(ObjectPathEdit.Text, '');
LibraryPath := TrimSearchPath(LibraryPathEdit.Text, '');
LinkerOptions := LinkerOptionsMemo.Text;
CustomOptions := CustomOptionsMemo.Text;
end;
LazPackage.AddToProjectUsesSection := AddPackageUnitToProjectCheckBox.Checked;
FLazPackage.UseLegacyLists := CompatibilityModeCheckBox.Checked;
end;
class function TPackageUsageOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result := TPackageIDEOptions;
end;
initialization
RegisterIDEOptionsEditor(GroupPackage, TPackageUsageOptionsFrame, PackageOptionsUsage);
end.