lazarus/ide/frames/compiler_messages_options.pas
mattias fa186c4933 IDE: small optimization
git-svn-id: trunk@29588 -
2011-02-17 10:06:00 +00:00

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.