mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-27 23:03:44 +02:00
681 lines
24 KiB
ObjectPascal
681 lines
24 KiB
ObjectPascal
{
|
|
***************************************************************************
|
|
* *
|
|
* This source is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This code is distributed in the hope that it will be useful, but *
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
|
* General Public License for more details. *
|
|
* *
|
|
* A copy of the GNU General Public License is available on the World *
|
|
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
|
|
* obtain it by writing to the Free Software Foundation, *
|
|
* Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. *
|
|
* *
|
|
***************************************************************************
|
|
|
|
Abstract:
|
|
Frame for environment options for main paths, like
|
|
Lazarus directory, compiler path.
|
|
}
|
|
unit Files_Options;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils,
|
|
// LCL
|
|
StdCtrls, Dialogs, Controls, Spin,
|
|
// LazUtils
|
|
FileUtil, LazFileUtils,
|
|
// CodeTools
|
|
CodeToolManager, DefineTemplates,
|
|
// BuildIntf
|
|
IDEOptionsIntf,
|
|
// IdeIntf
|
|
IDEOptEditorIntf, IDEDialogs, IDEUtils, InputHistory,
|
|
// IdeUtils
|
|
IdeUtilsPkgStrConsts,
|
|
// IdeConfig
|
|
EnvironmentOpts, LazConf,
|
|
// IDE
|
|
LazarusIDEStrConsts, DialogProcs, InitialSetupProc, EnvGuiOptions;
|
|
|
|
type
|
|
|
|
{ TFilesOptionsFrame }
|
|
|
|
TFilesOptionsFrame = class(TAbstractIDEOptionsEditor)
|
|
AutoCloseCompileDialogCheckBox: TCheckBox;
|
|
CompilerTranslationFileButton:TButton;
|
|
CompilerTranslationFileComboBox:TComboBox;
|
|
CompilerTranslationFileLabel:TLabel;
|
|
CompilerPathButton:TButton;
|
|
CompilerPathComboBox:TComboBox;
|
|
CompilerPathLabel:TLabel;
|
|
FPCSourceDirButton:TButton;
|
|
FPCSourceDirComboBox:TComboBox;
|
|
FPCSourceDirLabel:TLabel;
|
|
lblCenter: TLabel;
|
|
LazarusDirButton:TButton;
|
|
LazarusDirComboBox:TComboBox;
|
|
LazarusDirLabel:TLabel;
|
|
MakePathButton:TButton;
|
|
MakePathComboBox:TComboBox;
|
|
MakePathLabel:TLabel;
|
|
MaxRecentOpenFilesSpin: TSpinEdit;
|
|
MaxRecentOpenFilesLabel: TLabel;
|
|
MaxRecentProjectFilesSpin: TSpinEdit;
|
|
MaxRecentProjectFilesLabel: TLabel;
|
|
ShowCompileDialogCheckBox: TCheckBox;
|
|
TestBuildDirButton:TButton;
|
|
TestBuildDirComboBox:TComboBox;
|
|
TestBuildDirLabel:TLabel;
|
|
FppkgConfigurationFileLabel: TLabel;
|
|
FppkgConfigurationFileComboBox: TComboBox;
|
|
FppkgConfigurationFileButton: TButton;
|
|
procedure CompilerTranslationFileButtonClick(Sender:TObject);
|
|
procedure FilesButtonClick(Sender: TObject);
|
|
procedure DirectoriesButtonClick(Sender: TObject);
|
|
procedure FppkgConfigurationFileButtonClick(Sender: TObject);
|
|
procedure ShowCompileDialogCheckBoxChange(Sender: TObject);
|
|
private
|
|
FOldLazarusDir: string;
|
|
FOldRealLazarusDir: string;
|
|
FOldCompilerFilename: string;
|
|
FOldRealCompilerFilename: string;
|
|
FOldFPCSourceDir: string;
|
|
FOldRealFPCSourceDir: string;
|
|
FOldMakeFilename: string;
|
|
FOldRealMakeFilename: string;
|
|
FOldTestDir: string;
|
|
FOldRealTestDir: string;
|
|
fOldCompilerMessagesFilename: string;
|
|
fOldRealCompilerMessagesFilename: string;
|
|
fOldFppkgConfigurationFilename: string;
|
|
FOldMaxRecentOpenFiles: integer;
|
|
FOldMaxRecentProjectFiles: integer;
|
|
function CheckLazarusDir(Buttons: TMsgDlgButtons): boolean;
|
|
function CheckCompiler(Buttons: TMsgDlgButtons): boolean;
|
|
function CheckFPCSourceDir(Buttons: TMsgDlgButtons): boolean;
|
|
function CheckTestDir: boolean;
|
|
function CheckMake: boolean;
|
|
function CheckCompilerTranslationFile: boolean;
|
|
function CheckFppkgConfigurationFile: boolean;
|
|
public
|
|
function Check: Boolean; override;
|
|
function GetTitle: String; override;
|
|
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
|
|
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
|
|
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
|
|
procedure RestoreSettings(AOptions: TAbstractIDEOptions); override;
|
|
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
{ TFilesOptionsFrame }
|
|
|
|
procedure TFilesOptionsFrame.FilesButtonClick(Sender: TObject);
|
|
var
|
|
OpenDialog: TOpenDialog;
|
|
lDirText : string;
|
|
lExpandedName: string; // Expanded name before Dialog
|
|
lDirName, lDirNameF : string;
|
|
begin
|
|
OpenDialog := IDEOpenDialogClass.Create(nil);
|
|
try
|
|
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
|
OpenDialog.Options := OpenDialog.Options+[ofFileMustExist, ofReadOnly]; // allow select read only files
|
|
OpenDialog.Filter:=
|
|
Format('%s (*%s)|*%s|', [dlgFilterExecutable, GetExecutableExt, GetExecutableExt]) +
|
|
Format('%s (%s)|%s', [dlgFilterAll, GetAllFilesMask, GetAllFilesMask]);
|
|
// set title
|
|
if Sender = CompilerPathButton then begin
|
|
OpenDialog.Title := Format(lisChooseCompilerExecutable,[GetDefaultCompilerFilename]);
|
|
lDirText := CompilerPathComboBox.Text;
|
|
lDirName := EnvironmentOptions.GetParsedValue(eopCompilerFilename, lDirText);
|
|
end
|
|
else if Sender=MakePathButton then begin
|
|
OpenDialog.Title := lisChooseMakeExecutable;
|
|
lDirText := MakePathComboBox.Text;
|
|
lDirName := EnvironmentOptions.GetParsedValue(eopMakeFilename, lDirText);
|
|
end
|
|
else
|
|
exit;
|
|
|
|
lExpandedName := CleanAndExpandFilename(lDirName);
|
|
lDirName := GetValidDirectoryAndFilename(lDirName, {out} lDirNameF);
|
|
OpenDialog.InitialDir := lDirName;
|
|
OpenDialog.FileName := lDirNameF;
|
|
|
|
if OpenDialog.Execute then begin
|
|
lDirNameF := CleanAndExpandFilename(OpenDialog.Filename);
|
|
if CompareText(lExpandedName, lDirNameF) <> 0 then begin
|
|
lDirText := lDirNameF;
|
|
if Sender=CompilerPathButton then begin
|
|
// check compiler filename
|
|
SetComboBoxText(CompilerPathComboBox,lDirText,cstFilename);
|
|
EnvironmentOptions.CompilerFilename:=CompilerPathComboBox.Text;
|
|
CheckCompiler([mbOk]);
|
|
end
|
|
else if Sender = MakePathButton then begin
|
|
// check make filename
|
|
SetComboBoxText(MakePathComboBox,lDirText,cstFilename);
|
|
EnvironmentOptions.MakeFilename:=MakePathComboBox.Text;
|
|
CheckMake;
|
|
end;
|
|
end;
|
|
end;
|
|
InputHistories.StoreFileDialogSettings(OpenDialog);
|
|
finally
|
|
OpenDialog.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.DirectoriesButtonClick(Sender: TObject);
|
|
var
|
|
OpenDialog: TSelectDirectoryDialog;
|
|
lDirText, lDirName, loDirNameF, lExpandedName: string;
|
|
begin
|
|
OpenDialog := TSelectDirectoryDialog.Create(nil);
|
|
try
|
|
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
|
// set title
|
|
if Sender = LazarusDirButton then begin
|
|
OpenDialog.Title := lisChooseLazarusSourceDirectory;
|
|
OpenDialog.Options := OpenDialog.Options
|
|
+ [ofPathMustExist,ofReadOnly]; // allow select read only folder
|
|
lDirText := LazarusDirComboBox.Text;
|
|
lDirName := EnvironmentOptions.GetParsedValue(eopLazarusDirectory, lDirText);
|
|
end
|
|
else if Sender = FPCSourceDirButton then begin
|
|
OpenDialog.Title := lisChooseFPCSourceDir;
|
|
OpenDialog.Options := OpenDialog.Options
|
|
+ [ofPathMustExist,ofReadOnly]; // allow select read only folder
|
|
lDirText := FPCSourceDirComboBox.Text;
|
|
lDirName := EnvironmentOptions.GetParsedValue(eopFPCSourceDirectory, lDirText);
|
|
end
|
|
else if Sender=TestBuildDirButton then begin
|
|
OpenDialog.Title := lisChooseTestBuildDir;
|
|
OpenDialog.Options := OpenDialog.Options
|
|
- [ofPathMustExist] // allow to choose a non-existent path
|
|
+ [ofNoReadOnlyReturn]; // the folder must be writable
|
|
lDirText := TestBuildDirComboBox.Text;
|
|
lDirName := EnvironmentOptions.GetParsedValue(eopTestBuildDirectory, lDirText);
|
|
end
|
|
else
|
|
exit;
|
|
|
|
lExpandedName := CleanAndExpandDirectory(lDirName);
|
|
lDirName := GetValidDirectoryAndFilename(lDirName, loDirNameF);
|
|
|
|
OpenDialog.InitialDir := IncludeTrailingBackslash(lDirName);
|
|
OpenDialog.FileName := loDirNameF;
|
|
|
|
if OpenDialog.Execute then begin
|
|
lDirName := CleanAndExpandDirectory(OpenDialog.Filename);
|
|
if CompareText(lDirName, lExpandedName) <> 0 then begin
|
|
lDirText := lDirName;
|
|
if Sender = LazarusDirButton then begin
|
|
// check lazarus directory
|
|
SetComboBoxText(LazarusDirComboBox,lDirText,cstFilename);
|
|
EnvironmentOptions.LazarusDirectory:=LazarusDirComboBox.Text;
|
|
CheckLazarusDir([mbOk]);
|
|
end
|
|
else if Sender = FPCSourceDirButton then begin
|
|
// check fpc source directory
|
|
SetComboBoxText(FPCSourceDirComboBox,lDirText,cstFilename);
|
|
EnvironmentOptions.FPCSourceDirectory:=FPCSourceDirComboBox.Text;
|
|
CheckFPCSourceDir([mbOK]);
|
|
end
|
|
else if Sender = TestBuildDirButton then begin
|
|
// check test directory
|
|
SetComboBoxText(TestBuildDirComboBox,lDirText,cstFilename);
|
|
EnvironmentOptions.TestBuildDirectory:=TestBuildDirComboBox.Text;
|
|
CheckTestDir;
|
|
end;
|
|
end;
|
|
end;
|
|
InputHistories.StoreFileDialogSettings(OpenDialog);
|
|
finally
|
|
OpenDialog.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.CompilerTranslationFileButtonClick(Sender:TObject);
|
|
var
|
|
OpenDialog: TOpenDialog;
|
|
AFilename: string;
|
|
begin
|
|
OpenDialog:=IDEOpenDialogClass.Create(nil);
|
|
try
|
|
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
|
OpenDialog.Options:=OpenDialog.Options+[ofPathMustExist];
|
|
OpenDialog.Title:=lisChooseCompilerMessages;
|
|
OpenDialog.Filter:=
|
|
Format('%s (%s)|%s|', [dlgFilterFPCMessageFile, '*.msg', '*.msg']) +
|
|
Format('%s (%s)|%s', [dlgFilterAll, GetAllFilesMask, GetAllFilesMask]);
|
|
if OpenDialog.Execute then begin
|
|
AFilename:=CleanAndExpandFilename(OpenDialog.Filename);
|
|
SetComboBoxText(CompilerTranslationFileComboBox,AFilename,cstFilename);
|
|
EnvironmentOptions.CompilerMessagesFilename:=CompilerTranslationFileComboBox.Text;
|
|
CheckCompilerTranslationFile;
|
|
end;
|
|
InputHistories.StoreFileDialogSettings(OpenDialog);
|
|
finally
|
|
OpenDialog.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.FppkgConfigurationFileButtonClick(Sender: TObject);
|
|
var
|
|
OpenDialog: TOpenDialog;
|
|
AFilename: string;
|
|
begin
|
|
OpenDialog:=IDEOpenDialogClass.Create(nil);
|
|
try
|
|
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
|
OpenDialog.Options:=OpenDialog.Options+[ofPathMustExist];
|
|
OpenDialog.Title:=lisChooseFppkgConfigurationFile;
|
|
OpenDialog.Filter:=
|
|
Format('%s (%s)|%s|', [dlgFilterFppkgConfigurationFile, '*.cfg', '*.cfg']) +
|
|
Format('%s (%s)|%s', [dlgFilterAll, GetAllFilesMask, GetAllFilesMask]);
|
|
if OpenDialog.Execute then begin
|
|
AFilename:=CleanAndExpandFilename(OpenDialog.Filename);
|
|
SetComboBoxText(FppkgConfigurationFileComboBox,AFilename,cstFilename);
|
|
EnvironmentOptions.FppkgConfigFile:=FppkgConfigurationFileComboBox.Text;
|
|
CheckFppkgConfigurationFile;
|
|
end;
|
|
InputHistories.StoreFileDialogSettings(OpenDialog);
|
|
finally
|
|
OpenDialog.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.ShowCompileDialogCheckBoxChange(Sender: TObject);
|
|
begin
|
|
AutoCloseCompileDialogCheckBox.Enabled := ShowCompileDialogCheckBox.Checked;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
begin
|
|
MaxRecentOpenFilesLabel.Caption:=dlgMaxRecentFiles;
|
|
MaxRecentOpenFilesLabel.Hint:=dlgMaxRecentHint;
|
|
MaxRecentProjectFilesLabel.Caption:=dlgMaxRecentProjs;
|
|
MaxRecentProjectFilesLabel.Hint:=dlgMaxRecentHint;
|
|
ShowCompileDialogCheckBox.Visible:=false;
|
|
AutoCloseCompileDialogCheckBox.Visible:=false;
|
|
LazarusDirLabel.Caption:=dlgLazarusDir;
|
|
LazarusDirLabel.Hint:=Format(lisLazarusDirHint,[GetPrimaryConfigPath]);
|
|
LazarusDirComboBox.Hint:=LazarusDirLabel.Hint;
|
|
LazarusDirButton.Hint:=LazarusDirLabel.Hint;
|
|
with LazarusDirComboBox.Items do
|
|
begin
|
|
BeginUpdate;
|
|
Add(ProgramDirectoryWithBundle);
|
|
EndUpdate;
|
|
end;
|
|
|
|
CompilerPathLabel.Caption:=Format(dlgFpcExecutable,[GetDefaultCompilerFilename]);
|
|
FPCSourceDirLabel.Caption:=dlgFpcSrcPath;
|
|
FppkgConfigurationFileLabel.Caption:=dlgFppkgConfigurationFile;
|
|
MakePathLabel.Caption:=dlgMakeExecutable;
|
|
with MakePathComboBox.Items do
|
|
begin
|
|
BeginUpdate;
|
|
Add('make');
|
|
Add('gmake');
|
|
EndUpdate;
|
|
end;
|
|
|
|
TestBuildDirLabel.Caption:=dlgTestPrjDir;
|
|
with TestBuildDirComboBox.Items do
|
|
begin
|
|
BeginUpdate;
|
|
{$IFDEF Unix}
|
|
Add('~/tmp');
|
|
Add('/tmp');
|
|
Add('/var/tmp');
|
|
{$ELSE}
|
|
Add('c:\tmp');
|
|
Add('c:\windows\temp');
|
|
{$ENDIF}
|
|
EndUpdate;
|
|
end;
|
|
|
|
CompilerTranslationFileLabel.Caption:=dlgCompilerMessages;
|
|
CompilerTranslationFileLabel.Hint:=
|
|
lisSetThisToTranslateTheCompilerMessagesToAnotherLang;
|
|
CompilerTranslationFileButton.Hint:=CompilerTranslationFileLabel.Hint;
|
|
CompilerTranslationFileComboBox.Hint:=CompilerTranslationFileLabel.Hint;
|
|
with CompilerTranslationFileComboBox.Items do
|
|
begin
|
|
Add(GetForcedPathDelims('$(FPCSrcDir)/compiler/msg/errordu.msg'));
|
|
end;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.GetTitle: String;
|
|
begin
|
|
Result := dlgEnvFiles;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.Check: Boolean;
|
|
begin
|
|
Result := False;
|
|
with EnvironmentOptions do
|
|
begin
|
|
LazarusDirectory:=LazarusDirComboBox.Text;
|
|
CompilerFilename:=CompilerPathComboBox.Text;
|
|
FPCSourceDirectory:=FPCSourceDirComboBox.Text;
|
|
MakeFilename:=MakePathComboBox.Text;
|
|
TestBuildDirectory:=TestBuildDirComboBox.Text;
|
|
CompilerMessagesFilename:=CompilerTranslationFileComboBox.Text;
|
|
FppkgConfigFile:=FppkgConfigurationFileComboBox.Text;
|
|
end;
|
|
// check lazarus directory
|
|
if not CheckLazarusDir([mbIgnore,mbCancel]) then exit;
|
|
// check compiler filename
|
|
if not CheckCompiler([mbIgnore,mbCancel]) then exit;
|
|
// check fpc source directory
|
|
if not CheckFPCSourceDir([mbIgnore,mbCancel]) then exit;
|
|
// check make filename
|
|
if not CheckMake then exit;
|
|
// check test directory
|
|
if not CheckTestDir then exit;
|
|
// check fpc messages file
|
|
if not CheckCompilerTranslationFile then exit;
|
|
// check fppkg configuration file
|
|
if not CheckFppkgConfigurationFile then exit;
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
var
|
|
CompFiles: TStringList;
|
|
begin
|
|
with AOptions as TEnvironmentOptions do
|
|
begin
|
|
// Lazarus dir
|
|
FOldLazarusDir:=LazarusDirectory;
|
|
FOldRealLazarusDir:=GetParsedLazarusDirectory;
|
|
if LazarusDirHistory.Count>0 then
|
|
LazarusDirComboBox.Items.Assign(LazarusDirHistory);
|
|
SetComboBoxText(LazarusDirComboBox,LazarusDirectory,cstFilename,MaxComboBoxCount);
|
|
|
|
// compiler filename
|
|
FOldCompilerFilename:=CompilerFilename;
|
|
FOldRealCompilerFilename:=GetParsedCompilerFilename;
|
|
|
|
CompFiles:=TStringList.Create;
|
|
try
|
|
CompFiles.Assign(CompilerFileHistory);
|
|
if CompFiles.Count=0 then
|
|
GetDefaultCompilerFilenames(CompFiles);
|
|
|
|
with CompilerPathComboBox do
|
|
begin
|
|
Items.BeginUpdate;
|
|
Items.Assign(CompFiles);
|
|
AddFilenameToList(Items,FindDefaultCompilerPath);
|
|
AddFilenameToList(Items,FindDefaultExecutablePath('fpc'+GetExecutableExt));
|
|
Items.EndUpdate;
|
|
end;
|
|
SetComboBoxText(CompilerPathComboBox,CompilerFilename,cstFilename,MaxComboBoxCount);
|
|
finally
|
|
CompFiles.Free;
|
|
end;
|
|
|
|
// FPC src dir
|
|
FOldFPCSourceDir:=FPCSourceDirectory;
|
|
FOldRealFPCSourceDir:=GetParsedFPCSourceDirectory;
|
|
if FPCSourceDirHistory.Count>0 then
|
|
FPCSourceDirComboBox.Items.Assign(FPCSourceDirHistory);
|
|
SetComboBoxText(FPCSourceDirComboBox,FPCSourceDirectory,cstFilename,MaxComboBoxCount);
|
|
|
|
// "make"
|
|
FOldMakeFilename:=MakeFilename;
|
|
FOldRealMakeFilename:=GetParsedMakeFilename;
|
|
if MakeFileHistory.Count>0 then
|
|
MakePathComboBox.Items.Assign(MakeFileHistory);
|
|
SetComboBoxText(MakePathComboBox,MakeFilename,cstFilename,MaxComboBoxCount);
|
|
|
|
// test build dir
|
|
FOldTestDir:=TestBuildDirectory;
|
|
FOldRealTestDir:=GetParsedTestBuildDirectory;
|
|
if TestBuildDirHistory.Count>0 then
|
|
TestBuildDirComboBox.Items.Assign(TestBuildDirHistory);
|
|
SetComboBoxText(TestBuildDirComboBox,TestBuildDirectory,cstFilename,MaxComboBoxCount);
|
|
|
|
// compiler messages file
|
|
fOldCompilerMessagesFilename:=CompilerMessagesFilename;
|
|
fOldRealCompilerMessagesFilename:=GetParsedCompilerMessagesFilename;
|
|
if CompilerMessagesFileHistory.Count>0 then
|
|
CompilerTranslationFileComboBox.Items.Assign(CompilerMessagesFileHistory);
|
|
SetComboBoxText(CompilerTranslationFileComboBox,CompilerMessagesFilename,cstFilename,MaxComboBoxCount);
|
|
|
|
// fppkg configuration file
|
|
fOldFppkgConfigurationFilename:=FppkgConfigFile;
|
|
fOldRealCompilerMessagesFilename:=GetParsedFppkgConfig;
|
|
if FppkgConfigFileHistory.Count>0 then
|
|
FppkgConfigurationFileComboBox.Items.Assign(FppkgConfigFileHistory);
|
|
SetComboBoxText(FppkgConfigurationFileComboBox,FppkgConfigFile,cstFilename,MaxComboBoxCount);
|
|
|
|
// recent files and directories
|
|
FOldMaxRecentOpenFiles := MaxRecentOpenFiles;
|
|
MaxRecentOpenFilesSpin.Value := MaxRecentOpenFiles;
|
|
FOldMaxRecentProjectFiles := MaxRecentProjectFiles;
|
|
MaxRecentProjectFilesSpin.Value := MaxRecentProjectFiles;
|
|
end;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
with AOptions as TEnvironmentOptions do
|
|
begin
|
|
LazarusDirectory:=LazarusDirComboBox.Text;
|
|
LazarusDirHistory.Assign(LazarusDirComboBox.Items);
|
|
CompilerFilename:=CompilerPathComboBox.Text;
|
|
CompilerFileHistory.Assign(CompilerPathComboBox.Items);
|
|
FPCSourceDirectory:=FPCSourceDirComboBox.Text;
|
|
FPCSourceDirHistory.Assign(FPCSourceDirComboBox.Items);
|
|
MakeFilename:=MakePathComboBox.Text;
|
|
MakeFileHistory.Assign(MakePathComboBox.Items);
|
|
TestBuildDirHistory.Assign(TestBuildDirComboBox.Items);
|
|
TestBuildDirectory:=TestBuildDirComboBox.Text;
|
|
CompilerMessagesFileHistory.Assign(CompilerTranslationFileComboBox.Items);
|
|
CompilerMessagesFilename:=CompilerTranslationFileComboBox.Text;
|
|
FppkgConfigFileHistory.Assign(FppkgConfigurationFileComboBox.Items);
|
|
FppkgConfigFile:=FppkgConfigurationFileComboBox.Text;
|
|
|
|
// recent files and directories
|
|
MaxRecentOpenFiles := MaxRecentOpenFilesSpin.Value;
|
|
MaxRecentProjectFiles := MaxRecentProjectFilesSpin.Value;
|
|
end;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.RestoreSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
inherited RestoreSettings(AOptions);
|
|
with AOptions as TEnvironmentOptions do
|
|
begin
|
|
LazarusDirectory:=FOldLazarusDir;
|
|
CompilerFilename:=FOldCompilerFilename;
|
|
FPCSourceDirectory:=FOldFPCSourceDir;
|
|
MakeFilename:=FOldMakeFilename;
|
|
TestBuildDirectory:=FOldTestDir;
|
|
CompilerMessagesFilename:=fOldCompilerMessagesFilename;
|
|
FppkgConfigFile:=fOldFppkgConfigurationFilename;
|
|
|
|
// recent files and directories
|
|
MaxRecentOpenFiles := FOldMaxRecentOpenFiles;
|
|
MaxRecentProjectFiles := FOldMaxRecentProjectFiles;
|
|
end;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.CheckLazarusDir(Buttons: TMsgDlgButtons): boolean;
|
|
var
|
|
NewLazarusDir: string;
|
|
Quality: TSDFilenameQuality;
|
|
Note: string;
|
|
begin
|
|
if EnvironmentOptions.LazarusDirectory=FOldLazarusDir then exit(true);
|
|
Result := False;
|
|
EnvironmentOptions.LazarusDirectory:=LazarusDirComboBox.Text;
|
|
NewLazarusDir := EnvironmentOptions.GetParsedLazarusDirectory;
|
|
Quality:=CheckLazarusDirectoryQuality(NewLazarusDir,Note);
|
|
if Quality<>sddqCompatible then
|
|
begin
|
|
if IDEMessageDialog(lisCCOWarningCaption,
|
|
Format(lisTheLazarusDirectoryDoesNotLookCorrect,
|
|
[NewLazarusDir, LineEnding, Note]),
|
|
mtWarning, Buttons)<>mrIgnore
|
|
then
|
|
exit;
|
|
end;
|
|
Result := true;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.CheckFPCSourceDir(Buttons: TMsgDlgButtons): boolean;
|
|
var
|
|
NewFPCSrcDir: string;
|
|
Note: string;
|
|
Quality: TSDFilenameQuality;
|
|
CfgCache: TPCTargetConfigCache;
|
|
FPCVer: String;
|
|
begin
|
|
if EnvironmentOptions.FPCSourceDirectory=FOldFPCSourceDir then exit(true);
|
|
Result:=false;
|
|
CfgCache:=CodeToolBoss.CompilerDefinesCache.ConfigCaches.Find(
|
|
EnvironmentOptions.GetParsedCompilerFilename,'','','',true);
|
|
FPCVer:=CfgCache.GetFPCVer;
|
|
EnvironmentOptions.FPCSourceDirectory:=FPCSourceDirComboBox.Text;
|
|
NewFPCSrcDir:=EnvironmentOptions.GetParsedFPCSourceDirectory;
|
|
Quality:=CheckFPCSrcDirQuality(NewFPCSrcDir,Note,FPCVer);
|
|
if Quality<>sddqCompatible then
|
|
begin
|
|
if IDEMessageDialog(lisCCOWarningCaption,
|
|
Format(lisTheFPCSourceDirectoryDoesNotLookCorrect,
|
|
[NewFPCSrcDir, LineEnding, Note]),
|
|
mtWarning, Buttons)<>mrIgnore
|
|
then
|
|
exit;
|
|
end;
|
|
Result:=true;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.CheckCompiler(Buttons: TMsgDlgButtons): boolean;
|
|
var
|
|
NewCompilerFilename: String;
|
|
Note: string;
|
|
Quality: TSDFilenameQuality;
|
|
begin
|
|
if EnvironmentOptions.CompilerFilename=FOldCompilerFilename then exit(true);
|
|
Result:=false;
|
|
EnvironmentOptions.CompilerFilename:=CompilerPathComboBox.Text;
|
|
NewCompilerFilename:=EnvironmentOptions.GetParsedCompilerFilename;
|
|
Quality:=CheckFPCExeQuality(NewCompilerFilename,Note,
|
|
CodeToolBoss.CompilerDefinesCache.TestFilename);
|
|
if Quality<>sddqCompatible then
|
|
begin
|
|
if IDEMessageDialog(lisCCOWarningCaption,
|
|
Format(lisTheCompilerFileDoesNotLookCorrect,
|
|
[NewCompilerFilename, LineEnding, Note]),
|
|
mtWarning, Buttons)<>mrIgnore
|
|
then
|
|
exit;
|
|
end;
|
|
Result:=true;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.CheckTestDir: boolean;
|
|
var
|
|
NewTestDir: string;
|
|
StopChecking: boolean;
|
|
begin
|
|
if EnvironmentOptions.TestBuildDirectory=FOldTestDir then exit(true);
|
|
EnvironmentOptions.TestBuildDirectory:=TestBuildDirComboBox.Text;
|
|
NewTestDir:=EnvironmentOptions.GetParsedTestBuildDirectory;
|
|
Result:=SimpleDirectoryCheck(FOldRealTestDir,NewTestDir,
|
|
lisEnvOptDlgTestDirNotFoundMsg,StopChecking);
|
|
end;
|
|
|
|
function TFilesOptionsFrame.CheckMake: boolean;
|
|
var
|
|
NewMakeFilename: String;
|
|
begin
|
|
if EnvironmentOptions.MakeFilename=FOldMakeFilename then exit(true);
|
|
EnvironmentOptions.MakeFilename:=MakePathComboBox.Text;
|
|
NewMakeFilename:=EnvironmentOptions.GetParsedMakeFilename;
|
|
Result:=CheckExecutable(FOldRealMakeFilename,NewMakeFilename,
|
|
lisCCOWarningCaption, Format(lisThePathOfMakeIsNotCorrect, [NewMakeFilename]));
|
|
end;
|
|
|
|
function TFilesOptionsFrame.CheckCompilerTranslationFile: boolean;
|
|
var
|
|
NewMsgFile: String;
|
|
begin
|
|
if EnvironmentOptions.CompilerMessagesFilename=FOldCompilerFilename then exit(true);
|
|
EnvironmentOptions.CompilerMessagesFilename:=CompilerTranslationFileComboBox.Text;
|
|
if EnvironmentOptions.CompilerMessagesFilename<>'' then begin
|
|
NewMsgFile:=EnvironmentOptions.GetParsedCompilerMessagesFilename;
|
|
if not FileExistsUTF8(NewMsgFile) then begin
|
|
if IDEMessageDialog(lisCCOErrorCaption,
|
|
Format(lisCompilerMessagesFileNotFound, [LineEnding, NewMsgFile]),
|
|
mtError, [mbCancel,mbIgnore]) <> mrIgnore
|
|
then
|
|
exit(false);
|
|
end;
|
|
end;
|
|
Result:=true;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.CheckFppkgConfigurationFile: boolean;
|
|
var
|
|
NewFppkgCfgFile, Note: String;
|
|
begin
|
|
if EnvironmentOptions.FppkgConfigFile=fOldFppkgConfigurationFilename then exit(true);
|
|
EnvironmentOptions.FppkgConfigFile:=FppkgConfigurationFileComboBox.Text;
|
|
|
|
if EnvironmentOptions.FppkgConfigFile<>'' then begin
|
|
NewFppkgCfgFile:=EnvironmentOptions.GetParsedFppkgConfig;
|
|
|
|
if not FileExistsUTF8(NewFppkgCfgFile) then
|
|
begin
|
|
if IDEMessageDialog(lisCCOErrorCaption,
|
|
Format(lisFppkgConfigurationFileNotFound, [LineEnding, NewFppkgCfgFile]),
|
|
mtError, [mbCancel,mbIgnore]) <> mrIgnore
|
|
then
|
|
exit(false);
|
|
end else begin
|
|
if (CheckFppkgConfigFile (NewFppkgCfgFile, Note) <> sddqCompatible) or
|
|
(CheckFppkgConfiguration(NewFppkgCfgFile, Note) <> sddqCompatible) then
|
|
if IDEMessageDialog(lisCCOWarningCaption,
|
|
Format(lisTheFppkgConfigurationFileDoesNotLookCorrect, [NewFppkgCfgFile, LineEnding, Note]),
|
|
mtError, [mbCancel,mbIgnore]) <> mrIgnore
|
|
then
|
|
exit(false);
|
|
end;
|
|
end;
|
|
|
|
Result:=true;
|
|
end;
|
|
|
|
class function TFilesOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result := TEnvironmentOptions;
|
|
end;
|
|
|
|
initialization
|
|
RegisterIDEOptionsEditor(GroupEnvironment, TFilesOptionsFrame, EnvOptionsFiles);
|
|
end.
|
|
|