          return self._control_vars["brush"]["CursorColor"].get()
  
      def _add_actions(self):
          """ Add the optional action buttons to the viewer. Current actions are Draw, Erase
          and Zoom. """
          self._add_action("magnify", "zoom", _("Magnify/Demagnify the View"),
                           group=None, hotkey="M")
 
</s> remove 
 </s> add         self._add_control(ControlPanelOption("Cursor Shape",
                                             str,
                                             group="Display",
                                             choices=["Circle", "Rectangle"],
                                             default="Circle",
                                             is_radio=True,
                                             helptext=_("Select a shape for masking cursor."))) </s> remove             self._canvas.create_oval(0, 0, 0, 0, outline="black", state="hidden"), False]
 </s> add             self._get_cursor_shape(), False]
    @property
    def _cursor_shape_name(self):
        """ str: The selected cursor shape """
        return self._control_vars["display"]["CursorShape"].get()

          return self._control_vars["brush"]["CursorColor"].get()
  
    @property
    def _cursor_shape_name(self):
        """ str: The selected cursor shape """
        return self._control_vars["display"]["CursorShape"].get()

      def _add_actions(self):
          """ Add the optional action buttons to the viewer. Current actions are Draw, Erase
          and Zoom. """
          self._add_action("magnify", "zoom", _("Magnify/Demagnify the View"),
                           group=None, hotkey="M")
keep add keep keep keep keep keep
 feat: add support for rectangle cursor shape for masking (#1189)

* feat: add support for rectangle cursor shape for masking
* formatting update
* fix bug with initial rectangular point

Co-authored-by: markus <markus@helmes.com> 
tools/manual/frameviewer/editor/mask.py