@@ -99,6 +99,9 @@ public class TextAreaDialog : EditorWindow
99
99
/// </summary>
100
100
private const long REPAINT_PERIOD_IN_MILLISECONDS = 33 ; // ~30Hz
101
101
102
+ // Backing store for the Redirector property.
103
+ internal LogRedirector logRedirector ;
104
+
102
105
/// <summary>
103
106
/// Get the existing text area window or create a new one.
104
107
/// </summary>
@@ -124,6 +127,7 @@ public virtual void Initialize()
124
127
minSize = new Vector2 ( 300 , 200 ) ;
125
128
position = new Rect ( UnityEngine . Screen . width / 3 , UnityEngine . Screen . height / 3 ,
126
129
minSize . x * 2 , minSize . y * 2 ) ;
130
+ logRedirector = new LogRedirector ( this ) ;
127
131
}
128
132
129
133
// Add to body text.
@@ -222,6 +226,76 @@ protected virtual void OnDestroy() {
222
226
if ( buttonClicked != null ) buttonClicked ( this ) ;
223
227
}
224
228
}
229
+
230
+ /// <summary>
231
+ /// Redirects logs to a TextAreaDialog window.
232
+ /// </summary>
233
+ internal class LogRedirector {
234
+
235
+ /// <summary>
236
+ /// Window to redirect logs to.
237
+ /// </summary>
238
+ private TextAreaDialog window ;
239
+
240
+ /// <summary>
241
+ /// Create a log redirector associated with this window.
242
+ /// </summary>
243
+ public LogRedirector ( TextAreaDialog window ) {
244
+ this . window = window ;
245
+ LogToWindow = ( string message , LogLevel level ) => LogMessage ( message , level ) ;
246
+ ErrorLogged = false ;
247
+ WarningLogged = false ;
248
+ ShouldLogDelegate = ( ) => { return true ; } ;
249
+ }
250
+
251
+ /// <summary>
252
+ /// Delegate that logs to the window associated with this object.
253
+ /// </summary>
254
+ public Google . Logger . LogMessageDelegate LogToWindow { get ; private set ; }
255
+
256
+ /// <summary>
257
+ /// Whether an error was logged.
258
+ /// </summary>
259
+ public bool ErrorLogged { get ; private set ; }
260
+
261
+
262
+ /// <summary>
263
+ /// Whether a warning was logged.
264
+ /// </summary>
265
+ public bool WarningLogged { get ; private set ; }
266
+
267
+ /// <summary>
268
+ /// Delegate that determines whether a message should be logged.
269
+ /// </summary>
270
+ public Func < bool > ShouldLogDelegate { get ; set ; }
271
+
272
+ /// <summary>
273
+ /// Log a message to the window associated with this object.
274
+ /// </summary>
275
+ private void LogMessage ( string message , LogLevel level ) {
276
+ string messagePrefix ;
277
+ switch ( level ) {
278
+ case LogLevel . Error :
279
+ messagePrefix = "ERROR: " ;
280
+ ErrorLogged = true ;
281
+ break ;
282
+ case LogLevel . Warning :
283
+ messagePrefix = "WARNING: " ;
284
+ WarningLogged = true ;
285
+ break ;
286
+ default :
287
+ messagePrefix = "" ;
288
+ break ;
289
+ }
290
+ if ( ShouldLogDelegate ( ) ) window . AddBodyText ( messagePrefix + message + "\n " ) ;
291
+
292
+ }
293
+ }
294
+
295
+ /// <summary>
296
+ /// Get an object that can redirect log messages to this window.
297
+ /// </summary>
298
+ internal LogRedirector Redirector { get { return logRedirector ; } }
225
299
}
226
300
227
301
}
0 commit comments