class interface MENU_ITEM
creation
   make (nm: STRING)
      --  Create the item & attach it to a popup menu.
      require
         valid_string: nm /= Void
      ensure
         not_attached: not is_valid
feature(s) from MENU_ITEM
   --  Attributes
   is_valid: BOOLEAN
      --  Is this item valid and attached to a parent menu?
   enabled: BOOLEAN
      --  Is this item enabled or disabled?
      require
         valid: is_valid
   is_checked: BOOLEAN
      --  Does this item have a visible check mark?
      require
         valid: is_valid
feature(s) from MENU_ITEM
   --  Update
   set_name (s: STRING)
      --  Set name. It will not be modified in the actual 
      --  after the parent MENU has been attached.
      require
         valid_string: s /= Void;
         valid_menu: is_valid
   set_help (hs: STRING)
      --  Set the optional help string associated with this item.
      require
         valid_string: hs /= Void
   set_command (gc: GUI_COMMAND)
      --  Optional selection command (if when_selected not redefined).
      require
         nothing:  --  Void means no callback command
      ensure
         keep_reference: command = gc
   set_prepare_command (gc: GUI_COMMAND)
      --  Optional preparation command (if when_prepared not redefined).
      require
         nothing:  --  Void means no callback command
      ensure
         keep_reference: pre_command = gc
   set_leader (lead: HEAD_MENU_ITEM)
      --  Set optional leading menu item for radio-type items.
      require
         valid_lead: lead /= Void;
         not_leader: lead /= Current
      ensure
         keep_reference: lead = leader
feature(s) from MENU_ITEM
   --  Setup
   enable
      --  Enable menu item.
      require
         valid: is_valid
      ensure
         done: enabled
   disable
      --  Grey out menu item.
      require
         valid: is_valid
      ensure
         done: not enabled
   check_mark
      --  Set check mark.
      require
         valid: is_valid
      ensure
         done: is_checked
   uncheck_mark
      --  Unset check mark.
      require
         valid: is_valid
      ensure
         done: not is_checked
   detach
      --  Remove this item from its menu.
      require
         attached: is_valid
      ensure
         detached: not is_valid
feature(s) from MENU_ITEM
   --  Accelerator
   has_accelerator: BOOLEAN
      --  Has this item got an associated keyboard accelerator?
   set_accelerator (newacc: ACCELERATOR)
      --  Set associated keyboard accelerator.
      require
         ok: newacc /= Void
      ensure
         keep_reference: accelerator = newacc;
         done: has_accelerator
feature(s) from MENU_ITEM
   --  Action
   execute
      --  Simulate selection of menu item.
end of MENU_ITEM