@@ -894,11 +894,13 @@ def on_insert(self, event):
894894 # been added and the body part names are different from the existing ones,
895895 # then we update store's metadata and menus.
896896 if layer .metadata .get ("project" , "" ) and self ._stores :
897+ new_metadata = layer .metadata .copy ()
898+
897899 keypoints_menu = self ._menus [0 ].menus ["label" ]
898900 current_keypoint_set = set (
899901 keypoints_menu .itemText (i ) for i in range (keypoints_menu .count ())
900902 )
901- new_keypoint_set = set (layer . metadata ["header" ].bodyparts )
903+ new_keypoint_set = set (new_metadata ["header" ].bodyparts )
902904 diff = new_keypoint_set .difference (current_keypoint_set )
903905 if diff :
904906 answer = QMessageBox .question (
@@ -909,28 +911,29 @@ def on_insert(self, event):
909911
910912 self .viewer .status = f"New keypoint{ 's' if len (diff ) > 1 else '' } { ', ' .join (diff )} found."
911913 for _layer , store in self ._stores .items ():
912- _layer .metadata ["header" ] = layer . metadata ["header" ]
914+ _layer .metadata ["header" ] = new_metadata ["header" ]
913915 store .layer = _layer
914916
915917 for menu in self ._menus :
916918 menu ._map_individuals_to_bodyparts ()
917919 menu ._update_items ()
918920
921+ # Remove the unnecessary layer newly added
922+ QTimer .singleShot (10 , self .viewer .layers .pop )
923+
919924 # Always update the colormap to reflect the one in the config.yaml file
920925 for _layer , store in self ._stores .items ():
921- _layer .metadata ["face_color_cycles" ] = layer . metadata [
926+ _layer .metadata ["face_color_cycles" ] = new_metadata [
922927 "face_color_cycles"
923928 ]
924929 _layer .face_color = "label"
925- _layer .face_color_cycle = layer . metadata ["face_color_cycles" ][
930+ _layer .face_color_cycle = new_metadata ["face_color_cycles" ][
926931 "label"
927932 ]
928933 _layer .events .face_color ()
929934 store .layer = _layer
930935 self ._update_color_scheme ()
931936
932- # Remove the unnecessary layer newly added
933- QTimer .singleShot (10 , self .viewer .layers .pop )
934937 return
935938
936939 store = keypoints .KeypointStore (self .viewer , layer )
@@ -1108,6 +1111,7 @@ def __init__(
11081111 self .setLayout (layout1 )
11091112
11101113 def _map_individuals_to_bodyparts (self ):
1114+ self .id2label .clear () # Empty dict so entries are ordered as in the config
11111115 for keypoint in self .store ._keypoints :
11121116 label = keypoint .label
11131117 id_ = keypoint .id
@@ -1412,4 +1416,5 @@ def reset(self):
14121416 self .scheme_dict = {}
14131417 for i in reversed (range (self ._layout .count ())):
14141418 w = self ._layout .itemAt (i ).widget ()
1419+ w .setParent (None )
14151420 self ._layout .removeWidget (w )
0 commit comments