@@ -428,9 +428,20 @@ def on_insert(self, event):
428
428
10 , partial (self ._move_image_layer_to_bottom , event .index )
429
429
)
430
430
elif isinstance (layer , Points ):
431
- # If the Points layer comes from a config file and some Points layers
432
- # were already added, then we only update existing store's metadata.
431
+ # If the current Points layer comes from a config file, some have already
432
+ # been added and the body part names are different from the existing ones,
433
+ # then we update store's metadata and menus.
433
434
if layer .metadata .get ("project" , "" ) and self ._stores :
435
+ keypoints_menu = self ._menus [0 ].menus ["label" ]
436
+ current_keypoint_set = set (
437
+ keypoints_menu .itemText (i ) for i in range (keypoints_menu .count ())
438
+ )
439
+ new_keypoint_set = set (layer .metadata ["header" ].bodyparts )
440
+ diff = new_keypoint_set .difference (current_keypoint_set )
441
+ if not diff :
442
+ return
443
+
444
+ self .viewer .status = f"New keypoint{ 's' if len (diff ) > 1 else '' } { ', ' .join (diff )} found."
434
445
for _layer , store in self ._stores .items ():
435
446
_layer .metadata ["header" ] = layer .metadata ["header" ]
436
447
_layer .metadata ["face_color_cycles" ] = layer .metadata ["face_color_cycles" ]
@@ -442,6 +453,9 @@ def on_insert(self, event):
442
453
menu ._update_items ()
443
454
444
455
self ._update_color_scheme ()
456
+
457
+ # Remove the unnecessary layer newly added
458
+ QTimer .singleShot (10 , self .viewer .layers .pop )
445
459
return
446
460
447
461
store = keypoints .KeypointStore (self .viewer , layer )
@@ -487,7 +501,7 @@ def on_remove(self, event):
487
501
while self ._menus :
488
502
menu = self ._menus .pop ()
489
503
self ._layout .removeWidget (menu )
490
- menu .setParent ( None )
504
+ menu .deleteLater ( )
491
505
menu .destroy ()
492
506
self ._trail_cb .setEnabled (False )
493
507
self .last_saved_label .hide ()
0 commit comments