@@ -199,6 +199,17 @@ impl CurveFitApp {
199199 }
200200 }
201201
202+ fn finish_valid_points_change ( & mut self ) {
203+ self . clear_fit_outputs ( ) ;
204+ self . refresh_status_after_points_edit ( ) ;
205+ if !matches ! (
206+ self . status. as_ref( ) ,
207+ Some ( StatusMessage :: Error ( message) ) if message. starts_with( POINTS_PARSE_ERROR_PREFIX )
208+ ) {
209+ self . status = Some ( self . idle_status_after_points_edit ( ) ) ;
210+ }
211+ }
212+
202213 fn first_visible_points_parse_error ( & mut self ) -> Option < String > {
203214 for layer in & mut self . point_layers . layers {
204215 if !layer. visible {
@@ -248,7 +259,7 @@ impl CurveFitApp {
248259 edit : F ,
249260 ) -> Result < ( ) , String >
250261 where
251- F : FnOnce ( & mut Vec < Point > ) ,
262+ F : FnOnce ( & mut Vec < Point > ) -> bool ,
252263 {
253264 let parse_error = match & self . points_cache_with_policy ( true ) . parsed_points {
254265 Ok ( _) => None ,
@@ -273,7 +284,9 @@ impl CurveFitApp {
273284 Ok ( points) => points,
274285 Err ( error) => return Err ( error. clone ( ) ) ,
275286 } ;
276- edit ( points) ;
287+ if !edit ( points) {
288+ return Ok ( ( ) ) ;
289+ }
277290 cache. parse_error_line = None ;
278291 cache. plot_points = points
279292 . iter ( )
@@ -291,7 +304,7 @@ impl CurveFitApp {
291304 self . selected_points_editor_mut ( ) . text_sync_pending = true ;
292305 }
293306
294- self . refresh_status_after_points_edit ( ) ;
307+ self . finish_valid_points_change ( ) ;
295308
296309 Ok ( ( ) )
297310 }
@@ -302,6 +315,7 @@ impl CurveFitApp {
302315 }
303316 self . selected_points_editor_mut ( ) . text = new_text;
304317 self . invalidate_points_cache ( ) ;
318+ self . clear_fit_outputs ( ) ;
305319 if !keep_redo {
306320 self . selected_points_editor_mut ( ) . redo_stack . clear ( ) ;
307321 }
@@ -355,16 +369,20 @@ impl CurveFitApp {
355369 }
356370
357371 pub ( super ) fn create_point_layer_from_points ( & mut self , points : & [ Point ] ) -> PointLayerId {
358- self . point_layers . create_layer_from_points ( points)
372+ let id = self . point_layers . create_layer_from_points ( points) ;
373+ self . finish_valid_points_change ( ) ;
374+ id
359375 }
360376
361377 pub ( super ) fn duplicate_selected_point_layer ( & mut self ) -> PointLayerId {
362- self . point_layers . duplicate_selected_layer ( )
378+ let id = self . point_layers . duplicate_selected_layer ( ) ;
379+ self . finish_valid_points_change ( ) ;
380+ id
363381 }
364382
365383 pub ( super ) fn delete_selected_point_layer ( & mut self ) {
366384 self . point_layers . delete_selected_layer ( ) ;
367- self . refresh_status_after_points_edit ( ) ;
385+ self . finish_valid_points_change ( ) ;
368386 }
369387
370388 pub ( super ) fn visible_point_layer_plot_data ( & mut self ) -> Vec < VisiblePointLayerPlotData > {
@@ -403,7 +421,7 @@ impl CurveFitApp {
403421 }
404422 self . selected_points_editor_mut ( ) . redo_stack . clear ( ) ;
405423 self . set_points_cache_from_valid_points ( & [ ] ) ;
406- self . refresh_status_after_points_edit ( ) ;
424+ self . finish_valid_points_change ( ) ;
407425 }
408426
409427 pub ( super ) fn write_points_text ( & mut self , points : & [ Point ] , record_undo : bool ) {
@@ -419,7 +437,7 @@ impl CurveFitApp {
419437 points_state. text = new_text;
420438 points_state. redo_stack . clear ( ) ;
421439 self . set_points_cache_from_valid_points ( points) ;
422- self . refresh_status_after_points_edit ( ) ;
440+ self . finish_valid_points_change ( ) ;
423441 }
424442
425443 pub ( super ) fn can_move_points_to_positive_xy ( & mut self ) -> bool {
0 commit comments