mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-06 22:18:15 +02:00
246 lines
7.8 KiB
ObjectPascal
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.
|
|
|