mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-08 23:32:50 +02:00
202 lines
5.3 KiB
ObjectPascal
202 lines
5.3 KiB
ObjectPascal
unit compiler_messages_options;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileUtil, Forms, StdCtrls, CheckLst, LCLProc,
|
|
Dialogs,
|
|
IDEOptionsIntf, Project,
|
|
LazarusIDEStrConsts,
|
|
EnvironmentOpts, CompilerOptions, IDEMsgIntf;
|
|
|
|
type
|
|
|
|
{ TCompilerMessagesOptionsFrame }
|
|
|
|
TCompilerMessagesOptionsFrame = class(TAbstractIDEOptionsEditor)
|
|
chklistCompMsg: TCheckListBox;
|
|
editMsgFilter: TEdit;
|
|
grpCompilerMessages: TGroupBox;
|
|
lblFilter: TLabel;
|
|
procedure btnBrowseMsgClick(Sender: TObject);
|
|
procedure chklistCompMsgItemClick(Sender: TObject; Index: integer);
|
|
procedure chkUseMsgFileChange(Sender: TObject);
|
|
procedure editMsgFilterChange(Sender: TObject);
|
|
private
|
|
{ private declarations }
|
|
TempMessages: TCompilerMessagesList;
|
|
procedure UpdateMessages;
|
|
procedure UpdateFilter;
|
|
public
|
|
{ public declarations }
|
|
constructor Create(TheOwner: TComponent); override;
|
|
destructor Destroy; 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}
|
|
|
|
{ TCompilerMessagesOptionsFrame }
|
|
|
|
procedure TCompilerMessagesOptionsFrame.chkUseMsgFileChange(Sender: TObject);
|
|
begin
|
|
UpdateMessages;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.editMsgFilterChange(Sender: TObject);
|
|
begin
|
|
UpdateFilter;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.chklistCompMsgItemClick(
|
|
Sender: TObject; Index: integer);
|
|
begin
|
|
if (Index >= 0) and (Index < chklistCompMsg.Items.Count) then
|
|
TCompilerMessageConfig(chklistCompMsg.Items.Objects[Index]).Ignored :=
|
|
not chklistCompMsg.Checked[Index];
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.btnBrowseMsgClick(Sender: TObject);
|
|
var
|
|
dlg : TOpenDialog;
|
|
begin
|
|
dlg := TOpenDialog.Create(Self);
|
|
try
|
|
dlg.Filter := dlgBrowseMsgFilter;
|
|
if not dlg.Execute then Exit;
|
|
editMsgFilter.Caption := dlg.FileName;
|
|
UpdateMessages;
|
|
finally
|
|
dlg.Free
|
|
end;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.UpdateMessages;
|
|
const
|
|
MaxIndexLen = 5;
|
|
var
|
|
topidx : Integer;
|
|
begin
|
|
topidx := chklistCompMsg.TopIndex;
|
|
chklistCompMsg.Items.BeginUpdate;
|
|
try
|
|
//debugln(['TCompilerMessagesOptionsFrame.UpdateMessages ',EnvironmentOptions.CompilerMessagesFilename]);
|
|
if FileExistsUTF8(EnvironmentOptions.CompilerMessagesFilename) then begin
|
|
try
|
|
// FPC messages file is expected to be UTF8 encoded, no matter for the current code page is
|
|
TempMessages.LoadMsgFile(EnvironmentOptions.CompilerMessagesFilename);
|
|
except
|
|
TempMessages.SetDefault;
|
|
end;
|
|
end else
|
|
TempMessages.SetDefault;
|
|
|
|
chklistCompMsg.Clear;
|
|
chklistCompMsg.Items.Clear;
|
|
|
|
UpdateFilter;
|
|
|
|
finally
|
|
chklistCompMsg.Items.EndUpdate;
|
|
chkListCompMsg.TopIndex := topidx;
|
|
end;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.UpdateFilter;
|
|
var
|
|
i : Integer;
|
|
j : Integer;
|
|
m : TCompilerMessageConfig;
|
|
add : Boolean;
|
|
srch : AnsiString;
|
|
const
|
|
//todo: should be translated
|
|
MsgTypeStr : array [TFPCErrorType] of String = ('-','H','N','W','E','F','P');
|
|
begin
|
|
chklistCompMsg.Items.BeginUpdate;
|
|
try
|
|
chklistCompMsg.Clear;
|
|
srch:=UTF8UpperCase(editMsgFilter.Text);
|
|
for i := 0 to TempMessages.Count - 1 do
|
|
begin
|
|
m := TempMessages.Msg[i];
|
|
add:=m.MsgType in [etNote, etHint, etWarning];
|
|
|
|
if add and (srch<>'') then
|
|
add:=System.Pos(srch, UTF8UpperCase(m.GetUserText))>0;
|
|
|
|
if add then
|
|
begin
|
|
j := chklistCompMsg.Items.AddObject( Format('(%s) %s', [MsgTypeStr[m.MsgType], m.GetUserText([])]), m);
|
|
chklistCompMsg.Checked[j] := not m.Ignored;
|
|
end;
|
|
end;
|
|
finally
|
|
chklistCompMsg.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
constructor TCompilerMessagesOptionsFrame.Create(TheOwner: TComponent);
|
|
begin
|
|
inherited Create(TheOwner);
|
|
TempMessages:=TCompilerMessagesList.Create;
|
|
end;
|
|
|
|
destructor TCompilerMessagesOptionsFrame.Destroy;
|
|
begin
|
|
TempMessages.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TCompilerMessagesOptionsFrame.GetTitle: String;
|
|
begin
|
|
Result:=dlgCOCfgCmpMessages;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
begin
|
|
editMsgFilter.Caption := '';
|
|
grpCompilerMessages.Caption:=dlgCompilerMessage;
|
|
lblFilter.Caption:=lisFilter;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
with AOptions as TBaseCompilerOptions do
|
|
begin
|
|
TempMessages.Assign(CompilerMessages);
|
|
UpdateMessages;
|
|
end;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
with AOptions as TBaseCompilerOptions do
|
|
begin
|
|
UseMsgFile:=True;
|
|
MsgFileName:=EnvironmentOptions.CompilerMessagesFilename;
|
|
CompilerMessages.Assign(TempMessages);
|
|
end;
|
|
end;
|
|
|
|
class function TCompilerMessagesOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result := TBaseCompilerOptions;
|
|
end;
|
|
|
|
initialization
|
|
RegisterIDEOptionsEditor(GroupCompiler, TCompilerMessagesOptionsFrame, CompilerOptionsMessages);
|
|
RegisterIDEOptionsEditor(GroupPkgCompiler, TCompilerMessagesOptionsFrame, CompilerOptionsMessages);
|
|
|
|
end.
|
|
|