55using Serilog . Events ;
66using System . Windows . Forms . Integration ;
77using Autodesk . Revit . UI . Events ;
8- using RevitDevTool . Models . Trace ;
8+ using RevitDevTool . Models . Trace ;
99using RevitDevTool . Theme ;
10- using RevitDevTool . View . Settings ;
11- using ricaun . Revit . UI ;
10+ using RevitDevTool . View . Settings ;
11+ using ricaun . Revit . UI ;
1212using Serilog . Sinks . RichTextBoxForms ;
1313using Wpf . Ui . Appearance ;
14- using FontStyle = System . Drawing . FontStyle ;
14+ using FontStyle = System . Drawing . FontStyle ;
1515
1616namespace RevitDevTool . ViewModel ;
1717
@@ -27,21 +27,22 @@ internal partial class TraceLogViewModel : ObservableObject, IDisposable
2727 private SerilogTraceListener ? _traceListener ;
2828 private TraceGeometry . TraceGeometryListener ? _geometryListener ;
2929 private ConsoleRedirector ? _consoleRedirector ;
30-
30+
3131 private ApplicationTheme _currentTheme ;
32-
32+
3333 public WindowsFormsHost LogTextBox { get ; }
3434
35- [ ObservableProperty ]
36- [ NotifyCanExecuteChangedFor ( nameof ( OpenSettingsCommand ) ) ]
35+ [ ObservableProperty ]
36+ [ NotifyCanExecuteChangedFor ( nameof ( OpenSettingsCommand ) ) ]
3737 private bool _isSettingOpened ;
38-
39- [ ObservableProperty ]
38+
39+ [ ObservableProperty ]
4040 private bool _isStarted = true ;
41-
41+
4242 private bool _isSubcribe ;
43-
44- [ ObservableProperty ]
43+ private bool _isClearing ;
44+
45+ [ ObservableProperty ]
4546 private LogEventLevel _logLevel = LogEventLevel . Debug ;
4647
4748 partial void OnLogLevelChanged ( LogEventLevel value )
@@ -51,10 +52,8 @@ partial void OnLogLevelChanged(LogEventLevel value)
5152
5253 partial void OnIsStartedChanged ( bool value )
5354 {
54- if ( value )
55- StartTracing ( ) ;
56- else
57- StopTracing ( ) ;
55+ if ( value ) StartTracing ( ) ;
56+ else StopTracing ( ) ;
5857 }
5958
6059 private void StartTracing ( )
@@ -74,17 +73,9 @@ private void StopTracing()
7473
7574 private void InitializeLogger ( )
7675 {
77- var textTheme = _currentTheme == ApplicationTheme . Dark
78- ? AdaptiveThemePresets . EnhancedDark
79- : AdaptiveThemePresets . EnhancedLight ;
80-
81- var loggerConfig = new LoggerConfiguration ( )
82- . MinimumLevel . ControlledBy ( _levelSwitch )
83- . WriteTo . RichTextBox ( _winFormsTextBox , out _sink ,
84- maxLogLines : int . MaxValue ,
85- formatProvider : CultureInfo . InvariantCulture ,
86- theme : textTheme ,
87- autoScroll : true ) ;
76+ var textTheme = _currentTheme == ApplicationTheme . Dark ? AdaptiveThemePresets . EnhancedDark : AdaptiveThemePresets . EnhancedLight ;
77+
78+ var loggerConfig = new LoggerConfiguration ( ) . MinimumLevel . ControlledBy ( _levelSwitch ) . WriteTo . RichTextBox ( _winFormsTextBox , out _sink , maxLogLines : int . MaxValue , formatProvider : CultureInfo . InvariantCulture , theme : textTheme , autoScroll : true ) ;
8879
8980 _logger ??= loggerConfig . CreateLogger ( ) ;
9081 _traceListener ??= new SerilogTraceListener ( _logger ) ;
@@ -93,6 +84,7 @@ private void InitializeLogger()
9384
9485 private void DisposeLogger ( )
9586 {
87+ _winFormsTextBox . Clear ( ) ;
9688 _sink ? . Dispose ( ) ;
9789 _sink = null ;
9890 _logger ? . Dispose ( ) ;
@@ -107,7 +99,7 @@ private void RegisterTraceListeners()
10799 {
108100 if ( _traceListener != null && ! Trace . Listeners . Contains ( _traceListener ) )
109101 Trace . Listeners . Add ( _traceListener ) ;
110-
102+
111103 if ( _geometryListener != null && ! Trace . Listeners . Contains ( _geometryListener ) )
112104 Trace . Listeners . Add ( _geometryListener ) ;
113105 }
@@ -116,18 +108,16 @@ private void UnregisterTraceListeners()
116108 {
117109 if ( _traceListener != null )
118110 Trace . Listeners . Remove ( _traceListener ) ;
119-
111+
120112 if ( _geometryListener != null )
121113 Trace . Listeners . Remove ( _geometryListener ) ;
122114 }
123115
124116 private void ApplyTextBoxTheme ( )
125117 {
126118 var isDark = _currentTheme == ApplicationTheme . Dark ;
127- _winFormsTextBox . BackColor = isDark
128- ? System . Drawing . Color . FromArgb ( 30 , 30 , 30 )
129- : System . Drawing . Color . FromArgb ( 250 , 250 , 250 ) ;
130-
119+ _winFormsTextBox . BackColor = isDark ? System . Drawing . Color . FromArgb ( 30 , 30 , 30 ) : System . Drawing . Color . FromArgb ( 250 , 250 , 250 ) ;
120+
131121 Win32DarkMode . SetImmersiveDarkMode ( _winFormsTextBox . Handle , isDark ) ;
132122 }
133123
@@ -161,18 +151,18 @@ private void RestartLogging()
161151 public void Subcribe ( )
162152 {
163153 if ( _isSubcribe ) return ;
164-
154+
165155 _consoleRedirector ??= new ConsoleRedirector ( ) ;
166-
156+
167157 UpdateTheme ( ThemeWatcher . GetRequiredTheme ( ) , true ) ;
168158 IsStarted = true ;
169159
170160 Context . UiApplication . Idling += _onIdlingHandler ;
171161 ApplicationThemeManager . Changed += _onThemeChangedHandler ;
172-
162+
173163 _isSubcribe = true ;
174164 }
175-
165+
176166 private void Unsubscribe ( )
177167 {
178168 if ( ! _isSubcribe ) return ;
@@ -185,7 +175,7 @@ private void Unsubscribe()
185175
186176 private void OnIdling ( object ? sender , IdlingEventArgs e )
187177 {
188- if ( IsStarted )
178+ if ( IsStarted && ! _isClearing )
189179 {
190180 RegisterTraceListeners ( ) ;
191181 }
@@ -207,7 +197,7 @@ public TraceLogViewModel()
207197 {
208198 Child = _winFormsTextBox
209199 } ;
210-
200+
211201 LogTextBox . Loaded += ( _ , _ ) =>
212202 {
213203 ApplyTextBoxTheme ( ) ;
@@ -226,8 +216,15 @@ public TraceLogViewModel()
226216 [ RelayCommand ]
227217 private void Clear ( )
228218 {
229- _winFormsTextBox . Clear ( ) ;
230- _sink ? . Clear ( ) ;
219+ _isClearing = true ;
220+ if ( IsStarted )
221+ {
222+ UnregisterTraceListeners ( ) ;
223+ DisposeLogger ( ) ;
224+ InitializeLogger ( ) ;
225+ RegisterTraceListeners ( ) ;
226+ }
227+ _isClearing = false ;
231228 }
232229
233230 [ RelayCommand ]
@@ -251,8 +248,6 @@ private void OpenSettings()
251248
252249 public void Dispose ( )
253250 {
254- Debug . WriteLine ( "TraceLogViewModel Dispose" ) ;
255-
256251 IsStarted = false ;
257252 StopTracing ( ) ;
258253 Unsubscribe ( ) ;
0 commit comments