From d9162800f55c6677d0de64391a92e98bc539e44f Mon Sep 17 00:00:00 2001 From: martin Date: Wed, 7 Mar 2012 23:08:25 +0000 Subject: [PATCH] LazLogger: improved interaction with special widgetset needs git-svn-id: trunk@35813 - --- components/lazutils/lazlogger.pas | 30 ++++++++++++------- components/lazutils/lazloggerbase.pas | 17 +++++++++-- lcl/interfaces/customdrawn/customdrawnint.pas | 6 ++-- .../customdrawn/customdrawnobject.inc | 6 ++-- .../customdrawn/customdrawnobject_android.inc | 6 ++-- 5 files changed, 45 insertions(+), 20 deletions(-) diff --git a/components/lazutils/lazlogger.pas b/components/lazutils/lazlogger.pas index 8785964df8..f900d97666 100644 --- a/components/lazutils/lazlogger.pas +++ b/components/lazutils/lazlogger.pas @@ -8,15 +8,8 @@ uses type - //TLazLoggerLogGroupFlag = LazLoggerBase.TLazLoggerLogGroupFlag; - //TLazLoggerLogGroupFlags = LazLoggerBase.TLazLoggerLogGroupFlags; - //TLazLoggerLogGroup = LazLoggerBase.TLazLoggerLogGroup; PLazLoggerLogGroup = LazLoggerBase.PLazLoggerLogGroup; - //TLazLoggerWriteEvent = LazLoggerBase.LazLoggerBase.; - - //TLazLogger = LazLoggerBase.TLazLogger; - {$DEFINE USED_BY_LAZLOGGER} {$I LazLoggerIntf.inc} @@ -44,6 +37,7 @@ type FUseStdOut: Boolean; procedure DoOpenFile; procedure DoCloseFile; + function GetWriteTarget: TLazLoggerWriteTarget; procedure SetCloseLogFileBetweenWrites(AValue: Boolean); procedure SetLogName(AValue: String); public @@ -58,6 +52,8 @@ type property LogName: String read FLogName write SetLogName; property UseStdOut: Boolean read FUseStdOut write FUseStdOut; property CloseLogFileBetweenWrites: Boolean read FCloseLogFileBetweenWrites write SetCloseLogFileBetweenWrites; + property WriteTarget: TLazLoggerWriteTarget read GetWriteTarget; + property ActiveLogText: PText read FActiveLogText; end; { TLazLoggerFile } @@ -224,6 +220,16 @@ begin FActiveLogText := nil; end; +function TLazLoggerFileHandle.GetWriteTarget: TLazLoggerWriteTarget; +begin + Result := lwtNone; + if FActiveLogText = @Output then + Result := lwtStdOut + else + if FLogTextInUse then + Result := lwtTextFile; +end; + procedure TLazLoggerFileHandle.SetCloseLogFileBetweenWrites(AValue: Boolean); begin if FCloseLogFileBetweenWrites = AValue then Exit; @@ -465,9 +471,10 @@ begin begin Handled := False; if FDebugNestAtBOL and (s <> '') then - OnWidgetSetDbgOut(Self, FDebugIndent + s, Handled) + OnWidgetSetDbgOut(Self, FDebugIndent + s, Handled, + FileHandle.WriteTarget, FileHandle.ActiveLogText) else - OnWidgetSetDbgOut(Self, s, Handled); + OnWidgetSetDbgOut(Self, s, Handled, FileHandle.WriteTarget, FileHandle.ActiveLogText); if Handled then Exit; end; @@ -500,9 +507,10 @@ begin begin Handled := False; if FDebugNestAtBOL and (s <> '') then - OnWidgetSetDebugLn(Self, FDebugIndent + s, Handled) + OnWidgetSetDebugLn(Self, FDebugIndent + s, Handled, + FileHandle.WriteTarget, FileHandle.ActiveLogText) else - OnWidgetSetDebugLn(Self, s, Handled); + OnWidgetSetDebugLn(Self, s, Handled, FileHandle.WriteTarget, FileHandle.ActiveLogText); if Handled then Exit; end; diff --git a/components/lazutils/lazloggerbase.pas b/components/lazutils/lazloggerbase.pas index d77031e81c..552fbb8519 100644 --- a/components/lazutils/lazloggerbase.pas +++ b/components/lazutils/lazloggerbase.pas @@ -30,7 +30,18 @@ type end; PLazLoggerLogGroup = ^TLazLoggerLogGroup; - TLazLoggerWriteEvent = procedure (Sender: TObject; S: string; var Handled: Boolean) of object; + TLazLoggerWriteTarget = ( + lwtNone, + lwtStdOut, lwtStdErr, + lwtTextFile // Data will be ^Text + ); + + TLazLoggerWriteEvent = procedure(Sender: TObject; S: string; var Handled: Boolean) of object; + TLazLoggerWidgetSetWriteEvent = procedure(Sender: TObject; + S: string; + var Handled: Boolean; + Target: TLazLoggerWriteTarget; + Data: Pointer) of object; type @@ -252,8 +263,8 @@ type // Using base TRefCountedObject, so if none of the functions is used in the app, then even the class should be smart linked var LazDebugLoggerCreator: TLazDebugLoggerCreator = nil; - OnWidgetSetDebugLn: TLazLoggerWriteEvent; - OnWidgetSetDbgOut: TLazLoggerWriteEvent; + OnWidgetSetDebugLn: TLazLoggerWidgetSetWriteEvent; + OnWidgetSetDbgOut: TLazLoggerWidgetSetWriteEvent; implementation diff --git a/lcl/interfaces/customdrawn/customdrawnint.pas b/lcl/interfaces/customdrawn/customdrawnint.pas index eac15307c0..9bd12cf0a6 100644 --- a/lcl/interfaces/customdrawn/customdrawnint.pas +++ b/lcl/interfaces/customdrawn/customdrawnint.pas @@ -168,7 +168,8 @@ type {$ifdef CD_Android} CombiningAccent: Cardinal; {$IFnDEF WithOldDebugln} - procedure AndroidDebugLn(ASender: TObject; AStr: string; var AHandled: Boolean); + procedure AndroidDebugLn(ASender: TObject; AStr: string; var AHandled: Boolean; + Target: TLazLoggerWriteTarget; Data: Pointer); {$ELSE} procedure AndroidDebugLn(AStr: string); {$ENDIF} @@ -196,7 +197,8 @@ type MobileMainForm: TLCLIntfHandle; // For unusual implementations of DebugLn/DebugOut {$IFnDEF WithOldDebugln} - procedure AccumulatingDebugOut(ASender: TObject; AStr: string; var AHandled: Boolean); + procedure AccumulatingDebugOut(ASender: TObject; AStr: string; var AHandled: Boolean; + Target: TLazLoggerWriteTarget; Data: Pointer); {$ELSE} procedure AccumulatingDebugOut(AStr: string); {$ENDIF} diff --git a/lcl/interfaces/customdrawn/customdrawnobject.inc b/lcl/interfaces/customdrawn/customdrawnobject.inc index 1fdb281873..2b3de679fd 100644 --- a/lcl/interfaces/customdrawn/customdrawnobject.inc +++ b/lcl/interfaces/customdrawn/customdrawnobject.inc @@ -16,10 +16,12 @@ //--------------------------------------------------------------- {$IFnDEF WithOldDebugln} -procedure TCDWidgetSet.AccumulatingDebugOut(ASender: TObject; AStr: string; var AHandled: Boolean); +procedure TCDWidgetSet.AccumulatingDebugOut(ASender: TObject; AStr: string; var AHandled: Boolean; + Target: TLazLoggerWriteTarget; Data: Pointer); begin + AHandled := Target in [lwtStdOut, lwtStdErr]; + if not AHandled then exit; AccumulatedStr := AccumulatedStr + AStr; - AHandled := True; end; {$ELSE} procedure TCDWidgetSet.AccumulatingDebugOut(AStr: string); diff --git a/lcl/interfaces/customdrawn/customdrawnobject_android.inc b/lcl/interfaces/customdrawn/customdrawnobject_android.inc index 52218fae8e..297f54aeda 100644 --- a/lcl/interfaces/customdrawn/customdrawnobject_android.inc +++ b/lcl/interfaces/customdrawn/customdrawnobject_android.inc @@ -474,11 +474,13 @@ begin end; {$IFnDEF WithOldDebugln} -procedure TCDWidgetSet.AndroidDebugLn(ASender: TObject; AStr: string; var AHandled: Boolean); +procedure TCDWidgetSet.AndroidDebugLn(ASender: TObject; AStr: string; var AHandled: Boolean; + Target: TLazLoggerWriteTarget; Data: Pointer); begin + AHandled := Target in [lwtStdOut, lwtStdErr]; + if not AHandled then exit; __android_log_write(ANDROID_LOG_INFO, 'lclapp', PChar(AccumulatedStr+AStr)); AccumulatedStr := ''; - AHandled := True; end; {$ELSE} procedure TCDWidgetSet.AndroidDebugLn(AStr: string);