mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-27 03:33:41 +02:00
407 lines
14 KiB
ObjectPascal
407 lines
14 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
|
* *
|
|
***************************************************************************
|
|
}
|
|
unit files_options;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, LCLProc, FileUtil, Forms, StdCtrls, Dialogs, Controls,
|
|
EnvironmentOpts, MacroIntf, LazarusIDEStrConsts, InputHistory, LazConf,
|
|
IDEProcs, IDEOptionsIntf;
|
|
|
|
type
|
|
|
|
{ TFilesOptionsFrame }
|
|
|
|
TFilesOptionsFrame = class(TAbstractIDEOptionsEditor)
|
|
AutoCloseCompileDialogCheckBox: TCheckBox;
|
|
CompilerMessagesButton:TButton;
|
|
CompilerPathButton:TButton;
|
|
CompilerPathComboBox:TComboBox;
|
|
FPCSourceDirButton:TButton;
|
|
FPCSourceDirComboBox:TComboBox;
|
|
CompilerPathLabel:TLabel;
|
|
FPCSourceDirLabel:TLabel;
|
|
CompilerMessagesLabel:TLabel;
|
|
MakePathButton:TButton;
|
|
MakePathComboBox:TComboBox;
|
|
TestBuildDirButton:TButton;
|
|
TestBuildDirComboBox:TComboBox;
|
|
CompilerMessagesComboBox:TComboBox;
|
|
TestBuildDirLabel:TLabel;
|
|
MakePathLabel:TLabel;
|
|
LazarusDirButton:TButton;
|
|
LazarusDirComboBox:TComboBox;
|
|
LazarusDirLabel:TLabel;
|
|
MaxRecentOpenFilesComboBox: TComboBox;
|
|
MaxRecentOpenFilesLabel: TLabel;
|
|
MaxRecentProjectFilesComboBox: TComboBox;
|
|
MaxRecentProjectFilesLabel: TLabel;
|
|
OpenLastProjectAtStartCheckBox: TCheckBox;
|
|
ShowCompileDialogCheckBox: TCheckBox;
|
|
procedure CompilerMessagesButtonClick(Sender:TObject);
|
|
procedure FilesButtonClick(Sender: TObject);
|
|
procedure DirectoriesButtonClick(Sender: TObject);
|
|
procedure ShowCompileDialogCheckBoxChange(Sender: TObject);
|
|
private
|
|
FOldLazarusDir: string;
|
|
FOldCompilerFilename: string;
|
|
FOldFPCSourceDir: string;
|
|
FOldMakeFilename: string;
|
|
FOldTestDir: string;
|
|
function CheckLazarusDir: boolean;
|
|
function IsFPCSourceDir: boolean;
|
|
function CheckTestDir: boolean;
|
|
public
|
|
function Check: Boolean; override;
|
|
function GetTitle: String; override;
|
|
procedure Setup(ADialog: TAbstractOptionsEditorDialog); override;
|
|
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
|
|
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
|
|
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
{ TFilesOptionsFrame }
|
|
|
|
procedure TFilesOptionsFrame.FilesButtonClick(Sender: TObject);
|
|
var
|
|
OpenDialog: TOpenDialog;
|
|
AFilename: string;
|
|
begin
|
|
OpenDialog:=TOpenDialog.Create(nil);
|
|
try
|
|
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
|
OpenDialog.Options:=OpenDialog.Options+[ofPathMustExist];
|
|
// set title
|
|
if Sender=CompilerPathButton then
|
|
OpenDialog.Title:=
|
|
Format(lisChooseCompilerPath,[GetDefaultCompilerFilename])
|
|
else if Sender=MakePathButton then
|
|
OpenDialog.Title:=lisChooseMakePath
|
|
else
|
|
exit;
|
|
|
|
if OpenDialog.Execute then begin
|
|
AFilename:=CleanAndExpandFilename(OpenDialog.Filename);
|
|
|
|
if Sender=CompilerPathButton then begin
|
|
// check compiler filename
|
|
SetComboBoxText(CompilerPathComboBox,AFilename,cstFilename);
|
|
CheckExecutable(FOldCompilerFilename,CompilerPathComboBox.Text,
|
|
lisEnvOptDlgInvalidCompilerFilename,
|
|
lisEnvOptDlgInvalidCompilerFilenameMsg);
|
|
end else if Sender=MakePathButton then begin
|
|
// check make filename
|
|
SetComboBoxText(MakePathComboBox,AFilename,cstFilename);
|
|
CheckExecutable(FOldMakeFilename,MakePathComboBox.Text,
|
|
lisEnvOptDlgInvalidMakeFilename,
|
|
lisEnvOptDlgInvalidMakeFilenameMsg);
|
|
end;
|
|
end;
|
|
InputHistories.StoreFileDialogSettings(OpenDialog);
|
|
finally
|
|
OpenDialog.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.CompilerMessagesButtonClick(Sender:TObject);
|
|
var
|
|
OpenDialog: TOpenDialog;
|
|
AFilename: string;
|
|
begin
|
|
OpenDialog:=TOpenDialog.Create(nil);
|
|
try
|
|
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
|
OpenDialog.Options:=OpenDialog.Options+[ofPathMustExist];
|
|
OpenDialog.Title:=lisChooseCompilerMessages;
|
|
OpenDialog.Filter:='FPC message file (*.msg)|*.msg|Any file|'+AllFilesMask;
|
|
if OpenDialog.Execute then begin
|
|
AFilename:=CleanAndExpandFilename(OpenDialog.Filename);
|
|
SetComboBoxText(CompilerMessagesComboBox,AFilename,cstFilename);
|
|
end;
|
|
InputHistories.StoreFileDialogSettings(OpenDialog);
|
|
finally
|
|
OpenDialog.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.DirectoriesButtonClick(Sender: TObject);
|
|
var
|
|
OpenDialog: TSelectDirectoryDialog;
|
|
ADirectoryName: string;
|
|
begin
|
|
OpenDialog:=TSelectDirectoryDialog.Create(nil);
|
|
try
|
|
InputHistories.ApplyFileDialogSettings(OpenDialog);
|
|
OpenDialog.Options:=OpenDialog.Options+[ofPathMustExist];
|
|
// set title
|
|
if Sender=LazarusDirButton then
|
|
OpenDialog.Title:=lisChooseLazarusSourceDirectory
|
|
else if Sender=FPCSourceDirButton then
|
|
OpenDialog.Title:=lisChooseFPCSourceDir
|
|
else if Sender=TestBuildDirButton then
|
|
OpenDialog.Title:=lisChooseTestBuildDir
|
|
else
|
|
exit;
|
|
|
|
if OpenDialog.Execute then begin
|
|
ADirectoryName:=CleanAndExpandDirectory(OpenDialog.Filename);
|
|
|
|
if Sender=LazarusDirButton then begin
|
|
// check lazarus directory
|
|
SetComboBoxText(LazarusDirComboBox,ADirectoryName,cstFilename);
|
|
CheckLazarusDir;
|
|
end else if Sender=FPCSourceDirButton then begin
|
|
// check fpc source directory
|
|
SetComboBoxText(FPCSourceDirComboBox,ADirectoryName,cstFilename);
|
|
IsFPCSourceDir;
|
|
end else if Sender=TestBuildDirButton then begin
|
|
// check test directory
|
|
SetComboBoxText(TestBuildDirComboBox,ADirectoryName,cstFilename);
|
|
CheckTestDir;
|
|
end;
|
|
|
|
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;
|
|
MaxRecentProjectFilesLabel.Caption:=dlgMaxRecentProjs;
|
|
OpenLastProjectAtStartCheckBox.Caption:=dlgQOpenLastPrj;
|
|
ShowCompileDialogCheckBox.Caption:=dlgQShowCompileDialog;
|
|
AutoCloseCompileDialogCheckBox.Caption:=dlgQAutoCloseCompileDialog;
|
|
LazarusDirLabel.Caption:=dlgLazarusDir;
|
|
|
|
with LazarusDirComboBox.Items do
|
|
begin
|
|
BeginUpdate;
|
|
Add(ProgramDirectory(true));
|
|
EndUpdate;
|
|
end;
|
|
|
|
CompilerPathLabel.Caption:=Format(dlgFpcPath,[GetDefaultCompilerFilename]);
|
|
FPCSourceDirLabel.Caption:=dlgFpcSrcPath;
|
|
MakePathLabel.Caption:=dlgMakePath;
|
|
|
|
with MakePathComboBox.Items do
|
|
begin
|
|
BeginUpdate;
|
|
Add('make');
|
|
Add('gmake');
|
|
EndUpdate;
|
|
end;
|
|
|
|
TestBuildDirLabel.Caption:=dlgTestPrjDir;
|
|
|
|
with TestBuildDirComboBox.Items do
|
|
begin
|
|
BeginUpdate;
|
|
Add('/tmp');
|
|
Add('/var/tmp');
|
|
Add('c:/tmp');
|
|
Add('c:/windows/temp');
|
|
EndUpdate;
|
|
end;
|
|
CompilerMessagesLabel.Caption:=dlgCompilerMessages;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.GetTitle: String;
|
|
begin
|
|
Result := dlgEnvFiles;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.Check: Boolean;
|
|
begin
|
|
Result := False;
|
|
// check lazarus directory
|
|
if not CheckLazarusDir then
|
|
Exit;
|
|
// check compiler filename
|
|
if not CheckExecutable(FOldCompilerFilename,CompilerPathComboBox.Text,
|
|
lisEnvOptDlgInvalidCompilerFilename,lisEnvOptDlgInvalidCompilerFilenameMsg) then
|
|
Exit;
|
|
// check fpc source directory
|
|
if not IsFPCSourceDir then
|
|
Exit;
|
|
// check make filename
|
|
if not CheckExecutable(FOldMakeFilename,MakePathComboBox.Text,
|
|
lisEnvOptDlgInvalidMakeFilename,lisEnvOptDlgInvalidMakeFilenameMsg,true)
|
|
then
|
|
Exit;
|
|
// check test directory
|
|
if not CheckTestDir then
|
|
Exit;
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TFilesOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
with AOptions as TEnvironmentOptions do
|
|
begin
|
|
LazarusDirComboBox.Items.Assign(LazarusDirHistory);
|
|
FOldLazarusDir:=LazarusDirectory;
|
|
SetComboBoxText(LazarusDirComboBox,LazarusDirectory,cstFilename,MaxComboBoxCount);
|
|
with CompilerPathComboBox do
|
|
begin
|
|
Items.BeginUpdate;
|
|
Items.Assign(CompilerFileHistory);
|
|
AddFilenameToList(Items,FindDefaultCompilerPath);
|
|
AddFilenameToList(Items,FindDefaultExecutablePath('fpc'+GetExecutableExt));
|
|
Items.EndUpdate;
|
|
end;
|
|
|
|
FOldCompilerFilename:=CompilerFilename;
|
|
SetComboBoxText(CompilerPathComboBox,CompilerFilename,cstFilename,MaxComboBoxCount);
|
|
FPCSourceDirComboBox.Items.Assign(FPCSourceDirHistory);
|
|
FOldFPCSourceDir:=FPCSourceDirectory;
|
|
SetComboBoxText(FPCSourceDirComboBox,FPCSourceDirectory,cstFilename,MaxComboBoxCount);
|
|
MakePathComboBox.Items.Assign(MakeFileHistory);
|
|
FOldMakeFilename:=MakeFilename;
|
|
SetComboBoxText(MakePathComboBox,MakeFilename,cstFilename,MaxComboBoxCount);
|
|
TestBuildDirComboBox.Items.Assign(TestBuildDirHistory);
|
|
FOldTestDir:=TestBuildDirectory;
|
|
SetComboBoxText(TestBuildDirComboBox,TestBuildDirectory,cstFilename,MaxComboBoxCount);
|
|
CompilerMessagesComboBox.Items.Assign(CompilerMessagesFileHistory);
|
|
SetComboBoxText(CompilerMessagesComboBox,CompilerMessagesFilename,cstFilename,MaxComboBoxCount);
|
|
|
|
// recent files and directories
|
|
SetComboBoxText(MaxRecentOpenFilesComboBox,IntToStr(MaxRecentOpenFiles),cstCaseInsensitive);
|
|
SetComboBoxText(MaxRecentProjectFilesComboBox,IntToStr(MaxRecentProjectFiles),cstCaseInsensitive);
|
|
OpenLastProjectAtStartCheckBox.Checked:=OpenLastProjectAtStart;
|
|
ShowCompileDialogCheckBox.Checked:=ShowCompileDialog;
|
|
AutoCloseCompileDialogCheckBox.Checked:=AutoCloseCompileDialog;
|
|
AutoCloseCompileDialogCheckBox.Enabled:=ShowCompileDialogCheckBox.Checked;
|
|
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(CompilerMessagesComboBox.Items);
|
|
CompilerMessagesFilename:=CompilerMessagesComboBox.Text;
|
|
|
|
// recent files and directories
|
|
MaxRecentOpenFiles:=StrToIntDef(
|
|
MaxRecentOpenFilesComboBox.Text,MaxRecentOpenFiles);
|
|
MaxRecentProjectFiles:=StrToIntDef(
|
|
MaxRecentProjectFilesComboBox.Text,MaxRecentProjectFiles);
|
|
OpenLastProjectAtStart:=OpenLastProjectAtStartCheckBox.Checked;
|
|
ShowCompileDialog := ShowCompileDialogCheckBox.Checked;
|
|
AutoCloseCompileDialog := AutoCloseCompileDialogCheckBox.Checked;
|
|
end;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.CheckLazarusDir: boolean;
|
|
var
|
|
NewLazarusDir: string;
|
|
StopChecking: boolean;
|
|
begin
|
|
Result := False;
|
|
NewLazarusDir := LazarusDirComboBox.Text;
|
|
Result := SimpleDirectoryCheck(FOldLazarusDir,NewLazarusDir,
|
|
lisEnvOptDlgLazarusDirNotFoundMsg,StopChecking);
|
|
if (not Result) or StopChecking then
|
|
Exit;
|
|
|
|
// lazarus directory specific tests
|
|
NewLazarusDir := AppendPathDelim(NewLazarusDir);
|
|
if not CheckLazarusDirectory(NewLazarusDir) then
|
|
begin
|
|
Result:=(MessageDlg(Format(lisEnvOptDlgInvalidLazarusDir,[NewLazarusDir]),
|
|
mtWarning,[mbIgnore,mbCancel],0)=mrIgnore);
|
|
exit;
|
|
end;
|
|
Result := true;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.IsFPCSourceDir: boolean;
|
|
var
|
|
NewFPCSrcDir: string;
|
|
StopChecking: boolean;
|
|
begin
|
|
NewFPCSrcDir:=FPCSourceDirComboBox.Text;
|
|
Result:=IDEMacros.SubstituteMacros(NewFPCSrcDir);
|
|
if not Result then begin
|
|
Result:=(MessageDlg(Format(lisEnvOptDlgInvalidFPCSrcDir,[NewFPCSrcDir]),
|
|
mtWarning,[mbIgnore,mbCancel],0)=mrIgnore);
|
|
exit;
|
|
end;
|
|
Result:=SimpleDirectoryCheck(FOldFPCSourceDir,NewFPCSrcDir,
|
|
lisEnvOptDlgFPCSrcDirNotFoundMsg,StopChecking);
|
|
if (not Result) or StopChecking then exit;
|
|
|
|
// FPC source directory specific tests
|
|
if not CheckFPCSourceDir(NewFPCSrcDir) then begin
|
|
Result:=(MessageDlg(Format(lisEnvOptDlgInvalidFPCSrcDir,[NewFPCSrcDir]),
|
|
mtWarning,[mbIgnore,mbCancel],0)=mrIgnore);
|
|
exit;
|
|
end;
|
|
Result:=true;
|
|
end;
|
|
|
|
function TFilesOptionsFrame.CheckTestDir: boolean;
|
|
var
|
|
NewTestDir: string;
|
|
StopChecking: boolean;
|
|
begin
|
|
NewTestDir:=TestBuildDirComboBox.Text;
|
|
Result:=SimpleDirectoryCheck(FOldTestDir,NewTestDir,
|
|
lisEnvOptDlgTestDirNotFoundMsg,StopChecking);
|
|
if (not Result) or StopChecking then exit;
|
|
end;
|
|
|
|
class function TFilesOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result := TEnvironmentOptions;
|
|
end;
|
|
|
|
initialization
|
|
RegisterIDEOptionsEditor(GroupEnvironment, TFilesOptionsFrame, EnvOptionsFiles);
|
|
end.
|
|
|