IDEIntf: added 12x12 images, IDE: messages: icons for message types

git-svn-id: trunk@19452 -
This commit is contained in:
mattias 2009-04-16 08:12:16 +00:00
parent 93be4dfe99
commit 0a66890198
16 changed files with 396 additions and 128 deletions

7
.gitattributes vendored
View File

@ -3351,12 +3351,19 @@ images/splash_logo.png -text svneol=unset#image/png
images/splash_logo.xpm -text svneol=native#image/x-xpixmap
images/splash_source/cheetah.jpg -text svneol=unset#image/jpeg
images/splash_source/paw.png -text svneol=unset#image/png
images/states/quickfix12x12.png -text
images/states/small/state_small_error.png -text svneol=unset#image/png
images/states/small/state_small_fatal.png -text svneol=unset#image/png
images/states/small/state_small_hint.png -text svneol=unset#image/png
images/states/small/state_small_information.png -text svneol=unset#image/png
images/states/small/state_small_note.png -text svneol=unset#image/png
images/states/small/state_small_warning.png -text svneol=unset#image/png
images/states/state12x12_error.png -text
images/states/state12x12_fatal.png -text
images/states/state12x12_hint.png -text
images/states/state12x12_information.png -text
images/states/state12x12_note.png -text
images/states/state12x12_warning.png -text
images/states/state_circular_reference.png -text svneol=unset#image/png
images/states/state_error.png -text svneol=unset#image/png
images/states/state_fatal.png -text svneol=unset#image/png

View File

@ -228,7 +228,7 @@ var
+' Error: '
+ErrorMessage;
debugln('WriteLFMErrors ',Msg);
OnOutput(Msg,Dir,-1);
OnOutput(Msg,Dir,-1,nil);
end;
procedure WriteCodeToolsError;
@ -254,7 +254,7 @@ var
+' Error: '
+CurError.ErrorMessage;
debugln('WriteLFMErrors ',Msg);
OnOutput(Msg,Dir,-1);
OnOutput(Msg,Dir,-1,nil);
CurError:=CurError.NextError;
end;
end;

View File

@ -11076,7 +11076,7 @@ var MaxMessages: integer;
Filename, SearchedFilename: string;
LogCaretXY: TPoint;
TopLine: integer;
MsgType: TErrorType;
MsgType: TFPCErrorType;
SrcEdit: TSourceEditor;
OpenFlags: TOpenFlags;
CurMsg, CurDir: string;
@ -11091,8 +11091,7 @@ begin
Index:=0;
while (Index<MaxMessages) do begin
CurMsg:=MessagesView.VisibleItems[Index].Msg;
if (TheOutputFilter.GetSourcePosition(
CurMsg,Filename,LogCaretXY,MsgType)) then
if ParseFPCMessage(CurMsg,Filename,LogCaretXY,MsgType) then
begin
if MsgType in [etError,etFatal,etPanic] then break;
end;
@ -11107,7 +11106,7 @@ begin
// default: jump to source position
MessagesView.GetVisibleMessageAt(Index,CurMsg,CurDir);
if TheOutputFilter.GetSourcePosition(CurMsg,Filename,LogCaretXY,MsgType)
if ParseFPCMessage(CurMsg,Filename,LogCaretXY,MsgType)
then begin
if (not FilenameIsAbsolute(Filename)) and (CurDir<>'') then begin
// the directory was just hidden, re-append it
@ -11173,7 +11172,7 @@ var
CurMsg: String;
Filename: string;
LogCaretXY: TPoint;
MsgType: TErrorType;
MsgType: TFPCErrorType;
OldIndex: integer;
RoundCount: Integer;
begin
@ -11201,8 +11200,7 @@ begin
// check if it is an error
CurMsg:=MessagesView.VisibleItems[Index].Msg;
if (TheOutputFilter.GetSourcePosition(
CurMsg,Filename,LogCaretXY,MsgType)) then
if (ParseFPCMessage(CurMsg,Filename,LogCaretXY,MsgType)) then
begin
if MsgType in [etError,etFatal,etPanic] then break;
end;

View File

@ -118,6 +118,12 @@ type
FLastSelectedIndex: integer;
ImgIDNone: integer;
ImgIDHasQuickFix: integer;
ImgIDInformation: integer;
ImgIDHint: integer;
ImgIDNote: integer;
ImgIDWarning: integer;
ImgIDError: integer;
ImgIDFatal: integer;
function GetSelectedLineIndex: integer;
procedure SetSelectedLineIndex(const AValue: integer);
function FindNextItem(const Filename: string;
@ -125,6 +131,7 @@ type
procedure UpdateMsgSrcPos(Line: TLazMessageLine);
function GetLines(Index: integer): TIDEMessageLine; override;
procedure Changed;
procedure SetTVNodeImage(TVNode: TTreeNode; Msg: TLazMessageLine);
public
ControlDocker: TLazControlDocker;
constructor Create(TheOwner: TComponent); override;
@ -133,8 +140,10 @@ type
procedure EndUpdateNotification(Sender: TObject);
procedure DeleteLine(Index: integer);
procedure Add(const Msg, CurDir: string;
ProgressLine, VisibleLine: boolean; OriginalIndex: integer);
procedure AddMsg(const Msg, CurDir: string; OriginalIndex: integer); override;
ProgressLine, VisibleLine: boolean; OriginalIndex: integer;
Parts: TStrings);
procedure AddMsg(const Msg, CurDir: string; OriginalIndex: integer;
Parts: TStrings = nil); override;
procedure AddProgress(ScanLine: TIDEScanMessageLine);
procedure AddSeparator;
procedure CollectLineParts(Sender: TObject; SrcLines: TIDEMessageLineList);
@ -305,9 +314,15 @@ begin
FLastSelectedIndex := -1;
FQuickFixItems:=TFPList.Create;
ImgIDNone := IDEImages.LoadImage(16, 'state_error');
ImgIDHasQuickFix := IDEImages.LoadImage(16, 'ce_function');
MessageTreeView.Images:=IDEImages.Images_16;
ImgIDNone := -1;
ImgIDInformation := IDEImages.LoadImage(12, 'state12x12_information');
ImgIDHint := IDEImages.LoadImage(12, 'state12x12_hint');
ImgIDNote := IDEImages.LoadImage(12, 'state12x12_note');
ImgIDWarning := IDEImages.LoadImage(12, 'state12x12_warning');
ImgIDError := IDEImages.LoadImage(12, 'state12x12_error');
ImgIDFatal := IDEImages.LoadImage(12, 'state12x12_fatal');
ImgIDHasQuickFix := IDEImages.LoadImage(12, 'quickfix12x12');
MessageTreeView.Images:=IDEImages.Images_12;
Caption := lisMenuViewMessages;
MessageTreeView.OnAdvancedCustomDrawItem := @MessageViewDrawItem;
@ -400,7 +415,8 @@ end;
TMessagesView.Add
------------------------------------------------------------------------------}
procedure TMessagesView.Add(const Msg, CurDir: string;
ProgressLine, VisibleLine: boolean; OriginalIndex: integer);
ProgressLine, VisibleLine: boolean; OriginalIndex: integer;
Parts: TStrings);
var
NewMsg: TLazMessageLine;
i: integer;
@ -432,6 +448,12 @@ begin
NewMsg.Directory := CurDir;
NewMsg.Position := FItems.Count-1;
NewMsg.OriginalIndex := OriginalIndex;
if Parts<>nil then
begin
if NewMsg.Parts=nil then
NewMsg.Parts:=TStringList.Create;
NewMsg.Parts.Assign(Parts);
end;
//DebugLn('TMessagesView.Add FItems.Count=',dbgs(FItems.Count),' OriginalIndex=',dbgs(OriginalIndex));
if VisibleLine then
@ -449,11 +471,10 @@ begin
// add new line
TVNode:=MessageTreeView.Items.Add(nil,Msg);// add line
end;
TVNode.ImageIndex:=ImgIDNone;
TVNode.SelectedIndex:=ImgIDNone;
NewMsg.VisiblePosition := FVisibleItems.Count;
FVisibleItems.Add(NewMsg);
FLastLineIsProgress := ProgressLine;
SetTVNodeImage(TVNode,NewMsg);
if MessageTreeView.Items.Count>0 then
MessageTreeView.Items.TopLvlItems[MessageTreeView.Items.Count-1].MakeVisible;
//DebugLn(['TMessagesView.Add ',MessageTreeView.TopIndex]);
@ -462,19 +483,20 @@ begin
Changed;
end;
procedure TMessagesView.AddMsg(const Msg, CurDir: string; OriginalIndex: integer);
procedure TMessagesView.AddMsg(const Msg, CurDir: string; OriginalIndex: integer;
Parts: TStrings);
begin
Add(Msg, CurDir, False, True, OriginalIndex);
Add(Msg, CurDir, False, True, OriginalIndex, Parts);
end;
procedure TMessagesView.AddProgress(ScanLine: TIDEScanMessageLine);
begin
Add(ScanLine.Line, ScanLine.WorkingDirectory, True, True,ScanLine.LineNumber);
Add(ScanLine.Line, ScanLine.WorkingDirectory, True, True,ScanLine.LineNumber,nil);
end;
procedure TMessagesView.AddSeparator;
begin
Add(SeparatorLine, '', False, True, -1);
Add(SeparatorLine, '', False, True, -1, nil);
end;
procedure TMessagesView.CollectLineParts(Sender: TObject;
@ -646,8 +668,7 @@ begin
begin
TVNode:=MessageTreeView.Items.Add(nil,Line.Msg);
end;
TVNode.ImageIndex:=ImgIDNone;
TVNode.SelectedIndex:=ImgIDNone;
SetTVNodeImage(TVNode,Line);
end;
while MessageTreeView.Items.Count > FVisibleItems.Count do
MessageTreeView.Items.TopLvlItems[MessageTreeView.Items.Count - 1].Free;
@ -1206,6 +1227,37 @@ begin
IdleTimer1.AutoEnabled:=true;
end;
procedure TMessagesView.SetTVNodeImage(TVNode: TTreeNode; Msg: TLazMessageLine
);
var
Typ: string;
ImgID: LongInt;
begin
ImgID:=ImgIDNone;
if (lmlfHasQuickFixValid in Msg.Flags)
and (lmlfHasQuickFix in Msg.Flags) then
ImgID:=ImgIDHasQuickFix
else if Msg.Parts<>nil then begin
if Msg.Parts.Values['Stage']='FPC' then begin
Typ:=Msg.Parts.Values['Type'];
if Typ='Hint' then
ImgID:=ImgIDHint
else if Typ='Note' then
ImgID:=ImgIDNote
else if Typ='Warning' then
ImgID:=ImgIDWarning
else if Typ='Error' then
ImgID:=ImgIDError
else if Typ='Fatal' then
ImgID:=ImgIDFatal
else
ImgID:=ImgIDInformation;
end;
end;
TVNode.ImageIndex:=ImgID;
TVNode.SelectedIndex:=TVNode.ImageIndex;
end;
procedure TMessagesView.ConsistencyCheck;
var
i: Integer;

View File

@ -45,7 +45,7 @@ type
TOnOutputString = procedure(Line: TIDEScanMessageLine) of object;
TOnAddFilteredLine = procedure(const Msg, Directory: String;
OriginalIndex: integer) of object;
OriginalIndex: integer; Parts: TStrings) of object;
TOnGetIncludePath = function(const Directory: string;
UseCache: boolean): string of object;
@ -60,8 +60,6 @@ type
TOutputMessageType = (omtNone, omtFPC, omtLinker, omtMake);
TErrorType = (etNone, etHint, etNote, etWarning, etError, etFatal, etPanic);
{ TFilteredOutputLines
A TStringList maintaining an original index for each string.
TOutputFilter creates an instance of this class as a result of filtering
@ -116,7 +114,7 @@ type
FOnEndUpdate: TNotifyEvent;
fOnReadLine: TOnOutputString;
fOutput: TIDEMessageLineList;
fLastErrorType: TErrorType;
fLastErrorType: TFPCErrorType;
fLastMessageType: TOutputMessageType;
fCompilingHistory: TStringList;
fMakeDirHistory: TStringList;
@ -133,7 +131,6 @@ type
FAsyncOutput: TDynamicDataQueue;
FScanners: TFPList; // list of TIDEMsgScanner
FTool: TIDEExternalToolOptions;
DarwinLinkerMultiline: Boolean;
DarwinLinkerLine : String;
procedure DoAddFilteredLine(const s: string; OriginalIndex: integer = -1);
@ -154,8 +151,6 @@ type
Aborted: boolean;
function Execute(TheProcess: TProcessUTF8; aCaller: TObject = nil;
aTool: TIDEExternalToolOptions = nil): boolean;
function GetSourcePosition(const Line: string; var Filename:string;
var CaretXY: TPoint; var MsgType: TErrorType): boolean;
procedure Clear;
constructor Create;
destructor Destroy; override;
@ -178,7 +173,7 @@ type
property FilteredLines: TFilteredOutputLines read fFilteredOutput;
property StopExecute: boolean read FStopExecute write SetStopExecute;
property Lines: TIDEMessageLineList read fOutput;
property LastErrorType: TErrorType read fLastErrorType;
property LastErrorType: TFPCErrorType read fLastErrorType;
property LastMessageType: TOutputMessageType read fLastMessageType;
property OnGetIncludePath: TOnGetIncludePath
read fOnGetIncludePath write fOnGetIncludePath;
@ -210,24 +205,10 @@ var
TOutputFilterProcess: TProcessClass = nil;
MessageScanners: TMessageScanners = nil;
const
ErrorTypeNames : array[TErrorType] of string = (
'None','Hint','Note','Warning','Error','Fatal','Panic'
);
function ErrorTypeNameToType(const Name:string): TErrorType;
implementation
function ErrorTypeNameToType(const Name:string): TErrorType;
begin
for Result:=Succ(etNone) to High(TErrorType) do
if CompareText(ErrorTypeNames[Result],Name)=0 then exit;
Result:=etNone;
end;
{ TOutputFilter }
constructor TOutputFilter.Create;
@ -492,7 +473,7 @@ const
AsmError = 'Error while assembling';
var i, j, FilenameEndPos: integer;
MsgTypeName, Filename, Msg: string;
MsgType: TErrorType;
MsgType: TFPCErrorType;
SkipMessage: boolean;
CurCompHistory: string;
CurFilenameLen: Integer;
@ -576,7 +557,7 @@ var i, j, FilenameEndPos: integer;
CurrentMessageParts.Values['Stage']:='Linker'
else
CurrentMessageParts.Values['Stage']:='FPC';
CurrentMessageParts.Values['Type']:=ErrorTypeNames[fLastErrorType];
CurrentMessageParts.Values['Type']:=FPCErrorTypeNames[fLastErrorType];
NewLine:=copy(s,p,length(s));
if fLastErrorType in [etPanic,etFatal] then begin
@ -614,7 +595,7 @@ var i, j, FilenameEndPos: integer;
DoAddFilteredLine(copy(s,p,length(s)));
fLastErrorType:=etNote;
CurrentMessageParts.Values['Stage']:='FPC';
CurrentMessageParts.Values['Type']:=ErrorTypeNames[fLastErrorType];
CurrentMessageParts.Values['Type']:=FPCErrorTypeNames[fLastErrorType];
Result:=true;
exit;
end;
@ -871,14 +852,14 @@ begin
if (j+1>length(s)) or (s[j]<>':') or (s[j+1]<>' ') then exit;
MessageStartPos:=j+2;
MsgTypeName:=copy(s,i,j-i);
for MsgType:=Succ(etNone) to High(TErrorType) do begin
if ErrorTypeNames[MsgType]=MsgTypeName then begin
for MsgType:=Succ(etNone) to High(TFPCErrorType) do begin
if FPCErrorTypeNames[MsgType]=MsgTypeName then begin
// this is a freepascal compiler message
// -> filter message
fLastErrorType:=MsgType;
fLastMessageType:=omtFPC;
CurrentMessageParts.Values['Stage']:='FPC';
CurrentMessageParts.Values['Type']:=ErrorTypeNames[fLastErrorType];
CurrentMessageParts.Values['Type']:=FPCErrorTypeNames[fLastErrorType];
CurrentMessageParts.Values['Line']:=
copy(s,LineNumberStartPos,LineNumberEndPos-LineNumberStartPos);
CurrentMessageParts.Values['Column']:=
@ -1020,74 +1001,6 @@ begin
end;
end;
function TOutputFilter.GetSourcePosition(const Line: string; var Filename:string;
var CaretXY: TPoint; var MsgType: TErrorType): boolean;
{ This assumes the line has one of the following formats
<filename>(123,45) <ErrorType>: <some text>
<filename>(123) <ErrorType>: <some text>
<filename>(456) <ErrorType>: <some text> in line (123)
Fatal: <some text>
}
var StartPos, EndPos: integer;
begin
Result:=false;
if copy(Line,1,7)='Fatal: ' then begin
Result:=true;
Filename:='';
MsgType:=etFatal;
exit;
end;
StartPos:=1;
// find filename
EndPos:=StartPos;
while (EndPos<=length(Line)) and (Line[EndPos]<>'(') do inc(EndPos);
if EndPos>length(Line) then exit;
FileName:=copy(Line,StartPos,EndPos-StartPos);
// read linenumber
StartPos:=EndPos+1;
EndPos:=StartPos;
while (EndPos<=length(Line)) and (Line[EndPos] in ['0'..'9']) do inc(EndPos);
if EndPos>length(Line) then exit;
CaretXY.X:=1;
CaretXY.Y:=StrToIntDef(copy(Line,StartPos,EndPos-StartPos),-1);
if Line[EndPos]=',' then begin
// format: <filename>(123,45) <ErrorType>: <some text>
// read column
StartPos:=EndPos+1;
EndPos:=StartPos;
while (EndPos<=length(Line)) and (Line[EndPos] in ['0'..'9']) do inc(EndPos);
if EndPos>length(Line) then exit;
CaretXY.X:=StrToIntDef(copy(Line,StartPos,EndPos-StartPos),-1);
// read error type
StartPos:=EndPos+2;
while (EndPos<=length(Line)) and (Line[EndPos]<>':') do inc(EndPos);
if EndPos>length(Line) then exit;
MsgType:=ErrorTypeNameToType(copy(Line,StartPos,EndPos-StartPos));
Result:=true;
end else if Line[EndPos]=')' then begin
// <filename>(123) <ErrorType>: <some text>
// <filename>(456) <ErrorType>: <some text> in line (123)
// read error type
StartPos:=EndPos+2;
while (EndPos<=length(Line)) and (Line[EndPos]<>':') do inc(EndPos);
if EndPos>length(Line) then exit;
MsgType:=ErrorTypeNameToType(copy(Line,StartPos,EndPos-StartPos));
// read second linenumber (more useful)
while (EndPos<=length(Line)) and (Line[EndPos]<>'(') do inc(EndPos);
if EndPos>length(Line) then begin
// format: <filename>(123) <ErrorType>: <some text>
Result:=true;
exit;
end;
StartPos:=EndPos+1;
EndPos:=StartPos;
while (EndPos<=length(Line)) and (Line[EndPos] in ['0'..'9']) do inc(EndPos);
if EndPos>length(Line) then exit;
CaretXY.Y:=StrToIntDef(copy(Line,StartPos,EndPos-StartPos),-1);
Result:=true;
end;
end;
function TOutputFilter.IsHintForUnusedUnit(const OutputLine,
MainSrcFile: string): boolean;
{ recognizes hints of the form
@ -1126,7 +1039,7 @@ begin
fFilteredOutput.Add(s);
fFilteredOutput.OriginalIndices[fFilteredOutput.Count-1]:=OriginalIndex;
if Assigned(OnAddFilteredLine) then
OnAddFilteredLine(s,fCurrentDirectory,OriginalIndex);
OnAddFilteredLine(s,fCurrentDirectory,OriginalIndex,CurrentMessageParts);
end;
procedure TOutputFilter.DoAddLastLinkerMessages(SkipLastLine: boolean);

View File

@ -33,11 +33,14 @@ type
TIDEImages = class
private
FImages_12: TCustomImageList;
FImages_16: TCustomImageList;
FImages_24: TCustomImageList;
FImageNames_12: TStringList;
FImageNames_16: TStringList;
FImageNames_24: TStringList;
protected
function GetImages_12: TCustomImageList;
function GetImages_16: TCustomImageList;
function GetImages_24: TCustomImageList;
public
@ -47,6 +50,7 @@ type
function GetImageIndex(ImageSize: Integer; ImageName: String): Integer;
function LoadImage(ImageSize: Integer; ImageName: String): Integer;
property Images_12: TCustomImageList read GetImages_12;
property Images_16: TCustomImageList read GetImages_16;
property Images_24: TCustomImageList read GetImages_24;
end;
@ -60,6 +64,17 @@ var
{ TIDEImages }
function TIDEImages.GetImages_12: TCustomImageList;
begin
if FImages_12 = nil then
begin
FImages_12 := TImageList.Create(nil);
FImages_12.Width := 12;
FImages_12.Height := 12;
end;
Result := FImages_12;
end;
function TIDEImages.GetImages_16: TCustomImageList;
begin
if FImages_16 = nil then
@ -84,8 +99,9 @@ end;
constructor TIDEImages.Create;
begin
FImages_16 := nil;
FImages_24 := nil;
FImageNames_12 := TStringList.Create;
FImageNames_12.Sorted := True;
FImageNames_12.Duplicates := dupIgnore;
FImageNames_16 := TStringList.Create;
FImageNames_16.Sorted := True;
FImageNames_16.Duplicates := dupIgnore;
@ -96,10 +112,12 @@ end;
destructor TIDEImages.Destroy;
begin
FImages_16.Free;
FImages_24.Free;
FImageNames_16.Free;
FImageNames_24.Free;
FreeAndNil(FImages_12);
FreeAndNil(FImages_16);
FreeAndNil(FImages_24);
FreeAndNil(FImageNames_12);
FreeAndNil(FImageNames_16);
FreeAndNil(FImageNames_24);
inherited Destroy;
end;
@ -108,6 +126,7 @@ var
List: TStringList;
begin
case ImageSize of
12: List := FImageNames_12;
16: List := FImageNames_16;
24: List := FImageNames_24;
else
@ -132,6 +151,11 @@ begin
if Result <> -1 then Exit;
case ImageSize of
12:
begin
List := Images_12; // make sure we have a list
Names := FImageNames_12;
end;
16:
begin
List := Images_16; // make sure we have a list

View File

@ -239,7 +239,7 @@ type
function GetLines(Index: integer): TIDEMessageLine; virtual; abstract;
public
procedure Clear; virtual; abstract;
procedure AddMsg(const Msg, CurDir: string; OriginalIndex: integer); virtual; abstract;
procedure AddMsg(const Msg, CurDir: string; OriginalIndex: integer; Parts: TStrings = nil); virtual; abstract;
property Lines[Index: integer]: TIDEMessageLine read GetLines; default;
function LinesCount: integer; virtual; abstract;
procedure BeginBlock(ClearOldBlocks: Boolean = true); virtual; abstract;
@ -259,6 +259,18 @@ function RegisterIDEMsgQuickFix(const Name, Caption, RegExpr: string;
procedure RegisterIDEMsgScanner(Item: TIDEMsgScannerType);
type
TFPCErrorType = (etNone, etHint, etNote, etWarning, etError, etFatal, etPanic);
const
FPCErrorTypeNames : array[TFPCErrorType] of string = (
'None','Hint','Note','Warning','Error','Fatal','Panic'
);
function FPCErrorTypeNameToType(const Name:string): TFPCErrorType;
function ParseFPCMessage(const Line: string; out Filename:string;
out CaretXY: TPoint; out MsgType: TFPCErrorType): boolean;
implementation
procedure RegisterIDEMsgQuickFix(Item: TIDEMsgQuickFixItem);
@ -286,6 +298,87 @@ begin
IDEMsgScanners.RegisterType(Item);
end;
function FPCErrorTypeNameToType(const Name: string): TFPCErrorType;
begin
for Result:=Succ(etNone) to High(TFPCErrorType) do
if CompareText(FPCErrorTypeNames[Result],Name)=0 then exit;
Result:=etNone;
end;
function ParseFPCMessage(const Line: string; out Filename: string; out
CaretXY: TPoint; out MsgType: TFPCErrorType): boolean;
{ This assumes the line has one of the following formats
<filename>(123,45) <ErrorType>: <some text>
<filename>(123) <ErrorType>: <some text>
<filename>(456) <ErrorType>: <some text> in line (123)
Fatal: <some text>
}
var StartPos, EndPos: integer;
begin
Result:=false;
if copy(Line,1,7)='Fatal: ' then begin
Result:=true;
Filename:='';
MsgType:=etFatal;
exit;
end;
if copy(Line,1,7)='Panic: ' then begin
Result:=true;
Filename:='';
MsgType:=etPanic;
exit;
end;
StartPos:=1;
// find filename
EndPos:=StartPos;
while (EndPos<=length(Line)) and (Line[EndPos]<>'(') do inc(EndPos);
if EndPos>length(Line) then exit;
FileName:=copy(Line,StartPos,EndPos-StartPos);
// read linenumber
StartPos:=EndPos+1;
EndPos:=StartPos;
while (EndPos<=length(Line)) and (Line[EndPos] in ['0'..'9']) do inc(EndPos);
if EndPos>length(Line) then exit;
CaretXY.X:=1;
CaretXY.Y:=StrToIntDef(copy(Line,StartPos,EndPos-StartPos),-1);
if Line[EndPos]=',' then begin
// format: <filename>(123,45) <ErrorType>: <some text>
// read column
StartPos:=EndPos+1;
EndPos:=StartPos;
while (EndPos<=length(Line)) and (Line[EndPos] in ['0'..'9']) do inc(EndPos);
if EndPos>length(Line) then exit;
CaretXY.X:=StrToIntDef(copy(Line,StartPos,EndPos-StartPos),-1);
// read error type
StartPos:=EndPos+2;
while (EndPos<=length(Line)) and (Line[EndPos]<>':') do inc(EndPos);
if EndPos>length(Line) then exit;
MsgType:=FPCErrorTypeNameToType(copy(Line,StartPos,EndPos-StartPos));
Result:=true;
end else if Line[EndPos]=')' then begin
// <filename>(123) <ErrorType>: <some text>
// <filename>(456) <ErrorType>: <some text> in line (123)
// read error type
StartPos:=EndPos+2;
while (EndPos<=length(Line)) and (Line[EndPos]<>':') do inc(EndPos);
if EndPos>length(Line) then exit;
MsgType:=FPCErrorTypeNameToType(copy(Line,StartPos,EndPos-StartPos));
// read second linenumber (more useful)
while (EndPos<=length(Line)) and (Line[EndPos]<>'(') do inc(EndPos);
if EndPos>length(Line) then begin
// format: <filename>(123) <ErrorType>: <some text>
Result:=true;
exit;
end;
StartPos:=EndPos+1;
EndPos:=StartPos;
while (EndPos<=length(Line)) and (Line[EndPos] in ['0'..'9']) do inc(EndPos);
if EndPos>length(Line) then exit;
CaretXY.Y:=StrToIntDef(copy(Line,StartPos,EndPos-StartPos),-1);
Result:=true;
end;
end;
{ TIDEMsgQuickFixItem }
function TIDEMsgQuickFixItem.GetCaption: string;

View File

@ -8079,6 +8079,180 @@ LazarusResources.Add('menu_view_unit_info','PNG',[
+'l'#132'&'#233#207#21#200'q4'#245'U'#249#156'h'#172#228#15#159'8+'#215#137
+#209'Hq'#0#0#0#0'IEND'#174'B`'#130
]);
LazarusResources.Add('state12x12_error','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#12#0#0#0#12#8#6#0#0#0'Vu\'#231#0#0
+#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0
+#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#217#4#15#13
+#21'$Wh'#192'G'#0#0#1#220'IDAT('#207#141#142#205'KTQ'#0'G'#207#189#239#141
+#230#140#243#225#216#136#201#132'Q'#134#16#140#171#192'E'#155#2#7#13#135#178
+'E-'#146#22#213'&w'#173#250#7'l'#219#178'EK'#219#247'-'#132'('#18#20#129#139
+'"'#16#146'B'#195'2'#6'GgD'#223#188'7'#243'>'#238#187#183#133#217#186#223#242
+'p'#14#252#0#8#31#206#240#191#179#131#217'{'#248#174#251#15#248#15#166'+'#164
+'3SZ'#202#30#21#248#205#168'Q'#158''#252#234#141#0#179'}'#167','#196#145'h'
+'f'#239#246#5#17'O'#195#227#3#227'V'#190#7#217':@'''#179#248#219'5'#194#159
+#235'Kq'#216#154'.>y'#187'#'#143#130'v'#160#231#212#224#217#241#142'B'#222'H'
+#223#213#214#200#133'X'#182#155'qj'#160#223'$'#134'KcQd'#230'~'#205#140#217
+#18#160'y'#255'z%'#236'=1ag'#211'&ZY'#22#198'H'#153#24'-[q'#132#213#254#176
+','#146#249'^'#172#226#153#9'g'#219#153#148#0'*'#213'}'#205#238'+'#160'7'#191
+#27#141#133'1'#135'OulP'#177#196'_['#163#171#191#136#238'JM'#29#6#144#151#24
+#162'z'#221'hc'#163#154#222'a`,b%'#8'j'#187#136'X'#255#245#128#208#245#28#21
+#25'H'#230'P'#190'B'#237#237#225''#250'H'#180''#128'j'#5#136#238#28'*6'#4
+#174#235'H'#0#175'V}'#230'lnb'#157#28#146'Q'#179'El'''#233','#157'G'#181'C"?'
+#164'sh'#152#198#143'ox;'#181#23#2#224'2'#136'G7/.dFF'#203#233'\'#1'c'#131
+'8'#214#0#28';u'#154#198#238'o'#182#222'/,'#186#222'A'#197#2'X'#7'n'#15'f'#22
+#188#234#214'H'#168#197'Pb'#160#136'Hva'#178'Yj'#235'_'#169#174#188'['#242
+#156#250#173'+'#159#235#142#0'X'#173#148'Di~'#213',^*'#218#29#170'c'#210#206
+#244'\5'#9';'#23#181'Zn'#187#190#243#210#213#193#252#141'/'#251#225#235's)'
+#241#7'T2'#232'0'#206#184#226#152#0#0#0#0'IEND'#174'B`'#130
]);
LazarusResources.Add('state12x12_fatal','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#12#0#0#0#12#8#6#0#0#0'Vu\'#231#0#0
+#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0
+#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#217#4#15#13
+#29'&q'#191'+c'#0#0#1#229'IDAT('#207'u'#142';kSa'#0'@'#207'}'#228'K'#154#246
+'j5M'#155#18#197#197#193#201'A-'#190'@'#196#185#191#192'EG''A'#16#7#17#28#186
+'*XJAg'''#133#214#197'M'#165'E'#20'D)'#136'HQ'#164'M'#172'`r'#147#154#222#220
+#231#151#239'>>'''#187'y'#214#195#129'C'#186#189'h'#164#219#139'&'#255'!}'
+#205'i'#0#173#207#27#197';0'#254#9#181#245#232#138'e'#26#215#204#170#222#160
+'R'#188#252#180'z'#251#207#201#217#226#186'mr<O'#233'i'#205#243#202'<'#223
+#247#3#189#179#184#28#197#249#141#174'W2'#167#28#149#14#221#13'='#150#188#21
+#245#201'c'#168#254'6'#153#234#220'M'#210#137#165#253#149#223#187#244'l'#11
+#243#197'Z?{'#182'^'#148'j'#246#150#168#31#158#128'h'#182#16#161'CIq'#169'v5'
+#148#22#192#205';'#15#166'?~'#233'<<:S'#154#10#194#216'x'#186#242#158'Q'#229
+#148'q'#132#15'8'#217#166'1LL'#22'^'#213#157'['#247'j+6@'#179#150#205'GQ'#245
+#196#194#227#207'Z&'#177#145'*'#197#238#208'd'#245#235#28#7#141#29#250#193#1
+'~'#197#227'3'#29'o'#231#178#13'0'#24'xg'#167#235'S'#140'W'#171':'#137#19#227
+#226#133'9'#134'Q'#202#214#160'A!'#5#174'WP-'#27#140#153#225'9'#27'`8'#244#14
+#149#203#130'F'#163#161#155#205'&{{{'#132'aH'#18#133#4#225#136'B'#197'H]F'
+#142#212#164#13#224#251#254#166'm'#219'DQdH)'#201#243#28')%I'#146#144'$1y^'
+#160#165'B)'#245#205#4#232't:k'#221'n'#23#173#181#25#4#129#246'<'#15#223#247
+#9#130#128'8N'#176'm'#155'^'#175#135#239#251#235#22'@'#187#221#254'iY'#214','
+'pF'#8'aH)I'#211#148'<'#207#17'B'#208#239#247'i'#181'ZO'#180#214#203#150#227
+'8('#165#16'B'#188'q]7'#202#178'lFk-F'#163'QIJ'#25#187#174#251#163#221'n/'#21
+'Eq'#31'H'#255#2#135#19#14#185#202#182'('#10#0#0#0#0'IEND'#174'B`'#130
]);
LazarusResources.Add('state12x12_hint','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#12#0#0#0#12#8#6#0#0#0'Vu\'#231#0#0
+#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0
+#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#217#4#15#13
+#30#11#31'M$'#213#0#0#1#168'IDAT('#207#141#145'MHTa'#20#134#159#239#187'3"N9'
+'Ci'#228#228#24'-'#138#198'M'#224#174'@p'#21'4'#181#149#25'hUAD'#17#4#213'&,'
+'Rd'#238'J'#3#137'0'#17'Z'#212#133#8#138'~@'#7#250'QkQ'#137';'#133#156#130'Z'
+'h'#13#225#24'^'#154'Ig'#188#243#157#22#227#220#162'Z'#244#194#129#195#249'y'
+#207'9'#239'!igH'#217#25#197' '#149#206'@*'#253'W'#177#245#15#243#225#23#167
+#236'L"'#214#180'i8'#28#170#139#25#17'Om'#228#180'V'#214#247#213#245#149#15
+'_'#220#139#247'{'#18#163'>'#235#249#145'W_W'#10'%'#17#17#241'D'#196'3"'#229
+#138'H'#169'"'#226#254#240#164#207'ykv'#159#184#29#13#0#16#191#186'5'#214#28
+#218#22#14#213#241'q'#201'Ck'#197'z'#5'<'#3#133'5C{4'#200#222#214#136'j'#217
+#18#218'Um0'#2#128#0#229#10'hS'#245#181'R'#8#10#207#248''''#136#6' '#219#187
+#188#152'/.'#187#197'2{'#182#7#216#217'd'#17'n'#176'('#150#161'%'#18'@'#140
+#199#251#207'.K'#238#234'BM'#1'i;'#144#156#155#253#148#239'z'#243'.'#183'yf>'
+'W'#136#183'6'#6#227#209'z'#149#255#230'rwb'#158#169#185#220#233#215#215#186
+#159'W'#181#245#17#15#2#180#159't'#14#223#28#155#149'{S'#217'R2='#254#176#243
+#194#131'}'#0#189'w'#166'7T=8'#196#217#27#147#26#224'P'#207#163#200#153#235
+#147'3'#231#134'_:;'#142#222#218'_'#163#234's'#166'5m'#151'~'#251#162']'#157
+'t|'#240'Yc'#226#242#227#142'Z'#188#187',xl'#224#169#2'85'#244#226#143#215
+#219#191#214's&'#178#214#145'+O,'#128'dz'#220#207#253#4'lF'#169#217#3#210#216
+#10#0#0#0#0'IEND'#174'B`'#130
]);
LazarusResources.Add('state12x12_information','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#12#0#0#0#12#8#6#0#0#0'Vu\'#231#0#0
+#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0
+#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#217#4#15#13
+#30'4'#169'+'#9#232#0#0#1#236'IDAT('#207#141#144#205'K'#211'a'#0#199'?'#207
+#179#141'9'#157'NN'#231#11'Ct6'#195'(2;'#137#151#4'Kp'#161']'#234#16'A'#20
+#157#163''#161'C'#29#130#160'Ku."'#162'W'#168#139'$'#209#193#222#14'F'#164
+#205#212#202#176'Y'#206'm'#186'7]'#191#151#231#247'tr'#231'>'#199'/'#159#239
+#229#3#192#196#173'$'#255#139#247#248#205'yV'#230'S'#213'a'#232#218#167'D'
+#179'_L:'#202'i'#178']UZ/'#236'<'#153#191'<'#245#28#174'j'#227#228'C!'#170
+#226#245'dk'#16#235#206'@'#135#239'X<\'#139'r\'#16'0'#183#150#231#221'Rvz'
+#245'W'#254#244#198#189'S'#27#158#221'C'#223#209#243#143'Fbuc'#253#145'Z'#157
+'.'#152'Z'#185#218'-Tl'#189''''#18#20'F'#141#140'e6'#138#251#255#4#142'<'#144
+#0#135#175'|H'#28#140#248#198#186#141#26#253':'#153#21'J)yv'#164#203#131'P'
+#158#247'K'#25#17#235#12'1'#184#215#24#139'Gj'#198'%@c@'#158#136#183#212#241
+'5U'#208#218#181#177'l'#155#31#233'2'#21#211#196'U&'#11#171'9'#250'{'#194#180
+#248#153#148#0'N'#197'4'#132#212'lnW'#180'i'#153#128'b'#160#199' '#232#147'X'
+#166#195'Vq'#27'/'#26#143#182#12#9'`Zf'#209'V'#138#128'O'#226#216#10#180#6' '
+#224#149#152';'#21#252'h'#254'*'#7#165#236#162#4'H'#167#11#143#231'~f'#232'n'
+#171#151'B'#185#196#219#235'IeJ'#244#182#5#209#182'E'#180'=D'#242'K'#138#220
+'V'#241#233'nV1x'#238#254#212#232'P'#215'hg{'#3#179#201#20#217'\'#153'P'#192
+#203#190#190#14#210#217'<o^}|'#249'}f9Q'#205#170#245#240#212#250'f'#254#128
+#240#232#222#254#222#8#241'h#'#225'p'#3#11#139')f'#223'~'#158#206','#255'>'
+#179#190'r'#187'('#0#130#195'7Dy'#230#162'nn'#189#228'm>'#20#29'oi'#242'Ox'
+#177#26#29'W'#151's'#155#165'g'#165#197'o/'#214'V'#239'Z'#173'}'#23#196'?Q'
+#137#224#231'J'#17#25#202#0#0#0#0'IEND'#174'B`'#130
]);
LazarusResources.Add('state12x12_note','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#12#0#0#0#12#8#6#0#0#0'Vu\'#231#0#0
+#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0
+#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#217#4#15#13
+#31#28#133#133#144'S'#0#0#1'IDAT('#207#149#145#207'j'#19'Q'#28#133#191#219
+';I'''#197#16#26#164'"'#130#237#174' u'#217'G'#168#11'7'#197#226#202'M'#31
+#196#173'K'#241'!'#250#2'.'#180#130#212''''#16#193#10#182#130'('#193#218#210
+'h*'#25#147#204#204#157#251#231#247'sa*'#186#244#219#159#243#29'8'#164#193#11
+#195'`'#0'T'#149#176#183'i'#143'w'#223#208#0'S '#0'%P'#1#3'`'#247#14#172#190
+#212#244';P'#30'X'#249#30#171#148#164#173#201''''#141#1#141#30'M'#14'B'#141
+#164'`'#227#232#131'o'#142#158#246#0'8'#4#27#6#7#250'7'#162#255'2y'#245'P'
+#223'^!'#207#0#134#192'zY$S'#29#219'T~TP'#163#226'@'#26'$'#140#177#189#13#146
+'+'#146'$'#200#152'o'#213#212#160'L'#209'tn@'#208'0A'#194#12#241'C'#22#242'.'
+#26'JB='#15'('#16'&'#223#224#162'E,N@'#192#228'`'#22#5#21#15#8#26'+'#18#176#0
+#176#190#5'~tD'#250'9'#161#179'z'#15#147']%'#142#207'1:Cc'#1#226#16'_'#227
+#152#27':9'#24'k'#169'?='#199#216#11#178#229#27#248#241#8'q'#5#234'N'#145'P '
+#161'B/'#13'{'#207' '#235#174#216#165'['#219'L'#15#247'q_'#222#211#234'o'#210
+'Z'#217#162'u}'#155#172#191#129#198#169#141#151#199'}'#190#143#237#238#236'T'
+'fi'#185#29''#12'R'#152#156#209#238#175'a'#178'E'#180')Q)'#173'?}'#231'g'
+#175#235#222#159#167'O'#30#221#204#135'O'#190'r'#237#1#132#14#156'='#6'7ol'
+#128#181#187'p{_'#221'/'#245'W'#242#219'g_7='#0#0#0#0'IEND'#174'B`'#130
]);
LazarusResources.Add('state12x12_warning','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#12#0#0#0#12#8#6#0#0#0'Vu\'#231#0#0
+#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0
+#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#217#4#15#13
+#31'; '#143'%8'#0#0#1#208'IDAT('#207'u'#143'OH'#147'q'#24#199'?'#239'o'#203
+'?cm'#6#145#147'$'#163#197#234'0'#219#236#175#129#8']'#130' H'#202'X'#30#130
+#130'NQ'#208'%'#162'S'#135'N'#209#173'"'#179'K1Hd'#29#178#131#211#131't'#177
+'<'#20#154#132#29#150#209#218#212#218#180#173'e'#211#182#247#253#189#239#211
+#161'B;'#248#129#231#242'|'#159#239#247#203#3'kX'#28#237#160#240'*'#230'Z'
+#187#251'6vF'#177#30#243'C'#7#1'X'#24#137#180#228#147#145''''#249#225'H'#0' '
+'7'#20']'#223#244''''#245#228#200#210#135#7#146#31'='#30#7#16#17#3#224's'
+#235#234'Qn'#248#128#2#152#237'w'#29'-'#189#187')""'#133#215'W%'#253#200#223
+#9#144'M'#180#173#182#228#146#237#198#170#177#227#141#249#227#189#152#197#1
+#219#252#254'V2'#137#253'/'#255'i3}'#155#141#255'x'#22#186#188#252').'#229
+#249#164#158#234#221')'#229#236#128#148#166'{%'#213#215't'#17#224'c<'#236'fn'
+'p'#159#1#144#186'E`q'#236#194#172#216'E)L'#158#182''''#239#237#149#194'D'
+#183#163'WR'#146'y'#222'37~'#142#0#128'j'#238#154#16#0#239#174#182#219#158
+#237#221#205'NeZ+'#151#161#234#26'6b[eC*/l_'#232#212'V'#223#158#166'k'#0'.'
+#128#153#187'D'#189#161#158#251#190#221'g1'#191#220'Q`'#130'QO'#141#199#192
+#208'i'#229#217'v'#130#242#215'B{W'#205#212#160#2#240#236'8v'#195#27':'#143
+'U|'#234#136#206#160#171'?1'#151'r('#151#6#187#136#181#240#144#198'C1'#252
+#225#214#235#238#244#227#134#241#186'@'#231'a'#183'g'#11#246'rP)'#255'%'#234
+'7'#185#241#182'(lS#'#142#3'N'#149'Zo'#16'_'#240'H'#204#200'&'#194'W'#196#240
+'D'#29'm7'#138'Sk'#137#13#182#214#232'_'#22#186'b'#254#29#7'k'#165#180#193
+#169'V'#242#191#1#197'D'#213'Z'#128#171#150#191#0#0#0#0'IEND'#174'B`'#130
]);
LazarusResources.Add('quickfix12x12','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#12#0#0#0#12#8#6#0#0#0'Vu\'#231#0#0
+#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0
+#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#217#4#16#8#3
+#18#138#251'e+'#0#0#1#141'IDAT('#207#133#142#191'O'#19'a'#28#135#159#187'^R['
+#139#191'R'#175#134#19#6#23'cj'#226#1'n'#14#232'T7F;'#178#168#169#147#245'O0'
+'qpjb'#28#24#24'tf'#147#137'8i@c'#12#162'u0'#181#12#180'5m'#207#250'^'#129
+#203'!pw'#239#215#205#128#196#240#204#207''''#159#199#224#31#194#149')'#11'8'
+#7#209'&"%'#224#171'$'#219'J'#208#140'Lw'#2#139#163'X'#144#220'E'#199#158'a'
+#141#204' '#251#139':'#138'.'#128#188#2'>'#31#25#156#188#177#186#27'.'#23#3
+'3W|j'#164#243#25#189#231'M'#242#187#253#29#225#25#128'q(g'#249#234#4':zbd'
+#198'o'#249'2yb+Lci'#159#139#185#181'$'#222#250#240#26#137#239#155#7#7':'#25
+#214'E'#7#243'K'#31#141#161#175']'#156#137'G'#236'D9'#140#180#19#19#199'_HP'
+#135#147#146'}w'#225#253#216#131#149#245#252#249#155#167#18'~z/'#185'tv'#155
+#248#215#155#8#205'('#194#153#212'A'#191#17#220#190#179#161#236#202#143#174
+'g'#174#173#190#219#155#26#251#182'S'#204'j'#179#235#175#19'G'#247'N'#207
+#208#251#251'P.'#151'g'#179#217'l'#173#211#233#160#148#194#206#180#31'O'#143
+#15'/'#235#128#5#132'Q'#17#242'@'#223#2'('#149'J'#179#182'm'#215#26#141#6#158
+#231#161#148#170#190#157#27'>'#151#132#235#192#134#8'>'#144#2'0*'#149#202'C'
+#211'4k'#205'f'#147'~'#191#191#217#235#245#170#131#193#224#5#255#193't'#28
+#167#230#186'.a'#24'r'#156#12#144'*'#20#10#215#234#245#250#149'n'#183'[m'#181
+'Zs'#28#195#31'2B'#189#242#195'u'#215#179#0#0#0#0'IEND'#174'B`'#130
]);
LazarusResources.Add('state_circular_reference','PNG',[
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#4#0#0#0#181#250'7'
+#234#0#0#0#4'gAMA'#0#0#175#200'7'#5#138#233#0#0#0#25'tEXtSoftware'#0'Adobe I'

View File

@ -110,6 +110,13 @@ menu/menu_view_todo.png
menu/menu_view_toggle_form_unit.png
menu/menu_view_units.png
menu/menu_view_unit_info.png
states/state12x12_error.png
states/state12x12_fatal.png
states/state12x12_hint.png
states/state12x12_information.png
states/state12x12_note.png
states/state12x12_warning.png
states/quickfix12x12.png
states/state_circular_reference.png
states/state_error.png
states/state_fatal.png
@ -216,4 +223,4 @@ codetoolsdefines/da_ifdef.png
codetoolsdefines/da_ifndef.png
codetoolsdefines/da_undefine.png
codetoolsdefines/da_undefineall.png
codetoolsdefines/da_undefinerecurse.png
codetoolsdefines/da_undefinerecurse.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B