8
Classes, SysUtils, FileUtil, Forms, StdCtrls, CheckLst, LCLProc,
10
IDEOptionsIntf, Project,
12
EnvironmentOpts, CompilerOptions, IDEMsgIntf;
8
Classes, SysUtils, FileUtil, ListFilterEdit, StdCtrls, CheckLst, Dialogs,
9
IDEOptionsIntf, LazarusIDEStrConsts, EnvironmentOpts, CompilerOptions,
10
IDEMsgIntf, IDEDialogs;
18
16
TCompilerMessagesOptionsFrame = class(TAbstractIDEOptionsEditor)
19
17
chklistCompMsg: TCheckListBox;
18
editMsgFilter: TListFilterEdit;
21
19
grpCompilerMessages: TGroupBox;
23
procedure btnBrowseMsgClick(Sender: TObject);
21
MsgFileBrowseButton: TButton;
23
UseMsgFileCheckBox: TCheckBox;
24
24
procedure chklistCompMsgItemClick(Sender: TObject; Index: integer);
25
procedure chkUseMsgFileChange(Sender: TObject);
26
procedure editMsgFilterChange(Sender: TObject);
25
function CheckItem(Item: TObject): Boolean;
26
procedure MsgFileBrowseButtonClick(Sender: TObject);
27
procedure UseMsgFileCheckBoxChange(Sender: TObject);
28
{ private declarations }
29
29
TempMessages: TCompilerMessagesList;
30
procedure UpdateMessages;
31
procedure UpdateFilter;
33
{ public declarations }
34
31
constructor Create(TheOwner: TComponent); override;
35
32
destructor Destroy; override;
48
45
{ TCompilerMessagesOptionsFrame }
50
procedure TCompilerMessagesOptionsFrame.chkUseMsgFileChange(Sender: TObject);
55
procedure TCompilerMessagesOptionsFrame.editMsgFilterChange(Sender: TObject);
60
procedure TCompilerMessagesOptionsFrame.chklistCompMsgItemClick(
61
Sender: TObject; Index: integer);
63
if (Index >= 0) and (Index < chklistCompMsg.Items.Count) then
64
TCompilerMessageConfig(chklistCompMsg.Items.Objects[Index]).Ignored :=
65
not chklistCompMsg.Checked[Index];
68
procedure TCompilerMessagesOptionsFrame.btnBrowseMsgClick(Sender: TObject);
72
dlg := TOpenDialog.Create(Self);
74
dlg.Filter := dlgBrowseMsgFilter;
75
if not dlg.Execute then Exit;
76
editMsgFilter.Caption := dlg.FileName;
83
procedure TCompilerMessagesOptionsFrame.UpdateMessages;
89
topidx := chklistCompMsg.TopIndex;
90
chklistCompMsg.Items.BeginUpdate;
92
//debugln(['TCompilerMessagesOptionsFrame.UpdateMessages ',EnvironmentOptions.CompilerMessagesFilename]);
93
if FileExistsUTF8(EnvironmentOptions.CompilerMessagesFilename) then begin
95
// FPC messages file is expected to be UTF8 encoded, no matter for the current code page is
96
TempMessages.LoadMsgFile(EnvironmentOptions.CompilerMessagesFilename);
98
TempMessages.SetDefault;
101
TempMessages.SetDefault;
103
chklistCompMsg.Clear;
104
chklistCompMsg.Items.Clear;
109
chklistCompMsg.Items.EndUpdate;
110
chkListCompMsg.TopIndex := topidx;
114
procedure TCompilerMessagesOptionsFrame.UpdateFilter;
118
m : TCompilerMessageConfig;
122
//todo: should be translated
123
MsgTypeStr : array [TFPCErrorType] of String = ('-','H','N','W','E','F','P');
125
chklistCompMsg.Items.BeginUpdate;
127
chklistCompMsg.Clear;
128
srch:=UTF8UpperCase(editMsgFilter.Text);
129
for i := 0 to TempMessages.Count - 1 do
131
m := TempMessages.Msg[i];
132
add:=m.MsgType in [etNote, etHint, etWarning];
134
if add and (srch<>'') then
135
add:=UTF8Pos(srch, UTF8UpperCase(m.GetUserText))>0;
139
j := chklistCompMsg.Items.AddObject( Format('(%s) %s', [MsgTypeStr[m.MsgType], m.GetUserText([])]), m);
140
chklistCompMsg.Checked[j] := not m.Ignored;
144
chklistCompMsg.Items.EndUpdate;
47
procedure TCompilerMessagesOptionsFrame.chklistCompMsgItemClick(Sender: TObject; Index: integer);
49
BoolToMessageState: array[Boolean] of TCompilerMessageState = (msOff, msOn);
51
m: TCompilerMessageConfig;
53
if (Index >= 0) and (Index < chklistCompMsg.Items.Count) then begin
54
m := TCompilerMessageConfig(chklistCompMsg.Items.Objects[Index]);
55
if (m.DefIgnored <> chklistCompMsg.Checked[Index]) then
58
m.State := BoolToMessageState[chklistCompMsg.Checked[Index]];
62
function TCompilerMessagesOptionsFrame.CheckItem(Item: TObject): Boolean;
64
m: TCompilerMessageConfig;
66
m := Item as TCompilerMessageConfig;
67
if m.State = msDefault then
68
Result := not m.DefIgnored
70
Result := m.State = msOn;
73
procedure TCompilerMessagesOptionsFrame.MsgFileBrowseButtonClick(Sender: TObject
76
OpenDialog: TOpenDialog;
78
OpenDialog:=TOpenDialog.Create(nil);
80
InitIDEFileDialog(OpenDialog);
81
OpenDialog.Title:=lisChooseAnFPCMessageFile;
82
OpenDialog.Options:=OpenDialog.Options+[ofFileMustExist];
83
OpenDialog.Filter:=lisFPCMessageFile+' (*.msg)|*.msg|'+dlgAllFiles+'|'+
85
if OpenDialog.Execute then
86
MsgFileEdit.Text:=OpenDialog.FileName;
92
procedure TCompilerMessagesOptionsFrame.UseMsgFileCheckBoxChange(Sender: TObject
95
MsgFileEdit.Enabled:=UseMsgFileCheckBox.Checked;
96
MsgFileBrowseButton.Enabled:=UseMsgFileCheckBox.Checked;
148
99
constructor TCompilerMessagesOptionsFrame.Create(TheOwner: TComponent);
165
119
procedure TCompilerMessagesOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
167
editMsgFilter.Caption := '';
168
121
grpCompilerMessages.Caption:=dlgCompilerMessage;
169
122
lblFilter.Caption:=lisFilter;
123
UseMsgFileCheckBox.Caption:=lisUseMessageFile;
124
MsgFileBrowseButton.Caption:=lisPathEditBrowse;
172
127
procedure TCompilerMessagesOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
128
const // todo: should be translated
129
MsgTypeStr: array [TFPCErrorType] of String = ('-','H','N','W','E','F','P');
132
m: TCompilerMessageConfig;
134
CompOpts: TBaseCompilerOptions;
174
with AOptions as TBaseCompilerOptions do
136
CompOpts:=AOptions as TBaseCompilerOptions;
137
TempMessages.Assign(CompOpts.CompilerMessages);
138
topidx := chklistCompMsg.TopIndex;
139
UseMsgFileCheckBox.Checked:=CompOpts.UseMsgFile;
140
MsgFileEdit.Text:=CompOpts.MsgFileName;
141
MsgFileEdit.Enabled:=UseMsgFileCheckBox.Checked;
142
MsgFileBrowseButton.Enabled:=UseMsgFileCheckBox.Checked;
144
// Copy data to filter component
145
editMsgFilter.Data.Clear;
146
for i := 0 to TempMessages.Count - 1 do
176
TempMessages.Assign(CompilerMessages);
148
m := TempMessages.Msg[i];
149
if m.MsgType in [etNote, etHint, etWarning] then
151
s := Format('(%s) %s', [MsgTypeStr[m.MsgType], m.GetUserText([])]);
152
editMsgFilter.Data.AddObject(s, m);
155
editMsgFilter.InvalidateFilter;
156
chkListCompMsg.TopIndex := topidx;
181
159
procedure TCompilerMessagesOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
183
161
with AOptions as TBaseCompilerOptions do
186
MsgFileName:=EnvironmentOptions.CompilerMessagesFilename;
163
UseMsgFile:=UseMsgFileCheckBox.Checked;
164
MsgFileName:=MsgFileEdit.Text;
187
165
CompilerMessages.Assign(TempMessages);
191
169
class function TCompilerMessagesOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
193
Result := TBaseCompilerOptions;
171
Result:=TBaseCompilerOptions;
197
175
RegisterIDEOptionsEditor(GroupCompiler, TCompilerMessagesOptionsFrame, CompilerOptionsMessages);
176
RegisterIDEOptionsEditor(GroupPkgCompiler, TCompilerMessagesOptionsFrame, CompilerOptionsMessages);