mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-21 06:02:39 +02:00
180 lines
5.2 KiB
ObjectPascal
180 lines
5.2 KiB
ObjectPascal
unit compiler_messages_options;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileUtil, ListFilterEdit, StdCtrls, CheckLst, Dialogs,
|
|
IDEOptionsIntf, LazarusIDEStrConsts, EnvironmentOpts, CompilerOptions,
|
|
IDEMsgIntf, IDEDialogs;
|
|
|
|
type
|
|
|
|
{ TCompilerMessagesOptionsFrame }
|
|
|
|
TCompilerMessagesOptionsFrame = class(TAbstractIDEOptionsEditor)
|
|
chklistCompMsg: TCheckListBox;
|
|
editMsgFilter: TListFilterEdit;
|
|
grpCompilerMessages: TGroupBox;
|
|
lblFilter: TLabel;
|
|
MsgFileBrowseButton: TButton;
|
|
MsgFileEdit: TEdit;
|
|
UseMsgFileCheckBox: TCheckBox;
|
|
procedure chklistCompMsgItemClick(Sender: TObject; Index: integer);
|
|
function CheckItem(Item: TObject): Boolean;
|
|
procedure MsgFileBrowseButtonClick(Sender: TObject);
|
|
procedure UseMsgFileCheckBoxChange(Sender: TObject);
|
|
private
|
|
TempMessages: TCompilerMessagesList;
|
|
public
|
|
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.chklistCompMsgItemClick(Sender: TObject; Index: integer);
|
|
const
|
|
BoolToMessageState: array[Boolean] of TCompilerMessageState = (msOff, msOn);
|
|
var
|
|
m: TCompilerMessageConfig;
|
|
begin
|
|
if (Index >= 0) and (Index < chklistCompMsg.Items.Count) then begin
|
|
m := TCompilerMessageConfig(chklistCompMsg.Items.Objects[Index]);
|
|
if (m.DefIgnored <> chklistCompMsg.Checked[Index]) then
|
|
m.State := msDefault
|
|
else
|
|
m.State := BoolToMessageState[chklistCompMsg.Checked[Index]];
|
|
end;
|
|
end;
|
|
|
|
function TCompilerMessagesOptionsFrame.CheckItem(Item: TObject): Boolean;
|
|
var
|
|
m: TCompilerMessageConfig;
|
|
begin
|
|
m := Item as TCompilerMessageConfig;
|
|
if m.State = msDefault then
|
|
Result := not m.DefIgnored
|
|
else
|
|
Result := m.State = msOn;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.MsgFileBrowseButtonClick(Sender: TObject
|
|
);
|
|
var
|
|
OpenDialog: TOpenDialog;
|
|
begin
|
|
OpenDialog:=TOpenDialog.Create(nil);
|
|
try
|
|
InitIDEFileDialog(OpenDialog);
|
|
OpenDialog.Title:=lisChooseAnFPCMessageFile;
|
|
OpenDialog.Options:=OpenDialog.Options+[ofFileMustExist];
|
|
OpenDialog.Filter:=lisFPCMessageFile+' (*.msg)|*.msg|'+dlgAllFiles+'|'+
|
|
GetAllFilesMask;
|
|
if OpenDialog.Execute then
|
|
MsgFileEdit.Text:=OpenDialog.FileName;
|
|
finally
|
|
OpenDialog.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.UseMsgFileCheckBoxChange(Sender: TObject
|
|
);
|
|
begin
|
|
MsgFileEdit.Enabled:=UseMsgFileCheckBox.Checked;
|
|
MsgFileBrowseButton.Enabled:=UseMsgFileCheckBox.Checked;
|
|
end;
|
|
|
|
constructor TCompilerMessagesOptionsFrame.Create(TheOwner: TComponent);
|
|
begin
|
|
inherited Create(TheOwner);
|
|
TempMessages:=TCompilerMessagesList.Create;
|
|
end;
|
|
|
|
destructor TCompilerMessagesOptionsFrame.Destroy;
|
|
begin
|
|
editMsgFilter.Items.Clear;
|
|
chklistCompMsg.Clear;
|
|
chklistCompMsg.Items.Clear;
|
|
TempMessages.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TCompilerMessagesOptionsFrame.GetTitle: String;
|
|
begin
|
|
Result:=dlgCOCfgCmpMessages;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
begin
|
|
grpCompilerMessages.Caption:=dlgCompilerMessage;
|
|
lblFilter.Caption:=lisFilter;
|
|
UseMsgFileCheckBox.Caption:=lisUseMessageFile;
|
|
MsgFileBrowseButton.Caption:=lisPathEditBrowse;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
const // todo: should be translated
|
|
MsgTypeStr: array [TFPCErrorType] of String = ('-','H','N','W','E','F','P');
|
|
var
|
|
topidx, i: Integer;
|
|
m: TCompilerMessageConfig;
|
|
s: String;
|
|
CompOpts: TBaseCompilerOptions;
|
|
begin
|
|
CompOpts:=AOptions as TBaseCompilerOptions;
|
|
TempMessages.Assign(CompOpts.CompilerMessages);
|
|
topidx := chklistCompMsg.TopIndex;
|
|
UseMsgFileCheckBox.Checked:=CompOpts.UseMsgFile;
|
|
MsgFileEdit.Text:=CompOpts.MsgFileName;
|
|
MsgFileEdit.Enabled:=UseMsgFileCheckBox.Checked;
|
|
MsgFileBrowseButton.Enabled:=UseMsgFileCheckBox.Checked;
|
|
|
|
// Copy data to filter component
|
|
editMsgFilter.Items.Clear;
|
|
for i := 0 to TempMessages.Count - 1 do
|
|
begin
|
|
m := TempMessages.Msg[i];
|
|
if m.MsgType in [etNote, etHint, etWarning] then
|
|
begin
|
|
s := Format('(%s) %s', [MsgTypeStr[m.MsgType], m.MsgText]);
|
|
editMsgFilter.Items.AddObject(s, m);
|
|
end;
|
|
end;
|
|
editMsgFilter.InvalidateFilter;
|
|
chkListCompMsg.TopIndex := topidx;
|
|
end;
|
|
|
|
procedure TCompilerMessagesOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
begin
|
|
with AOptions as TBaseCompilerOptions do
|
|
begin
|
|
UseMsgFile:=UseMsgFileCheckBox.Checked;
|
|
MsgFileName:=MsgFileEdit.Text;
|
|
CompilerMessages.Assign(TempMessages);
|
|
end;
|
|
end;
|
|
|
|
class function TCompilerMessagesOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result:=TBaseCompilerOptions;
|
|
end;
|
|
|
|
initialization
|
|
RegisterIDEOptionsEditor(GroupCompiler, TCompilerMessagesOptionsFrame, CompilerOptionsMessages);
|
|
RegisterIDEOptionsEditor(GroupPkgCompiler, TCompilerMessagesOptionsFrame, CompilerOptionsMessages);
|
|
|
|
end.
|
|
|