def mnemonic char=nil
      return @mnemonic unless char  # added 2011-11-24 so caller can get mne

      unless @form
        # we have some processing for when a form is attached, registering a hotkey
        bind(:FORM_ATTACHED) { mnemonic char }
        return self # added 2014-03-23 - 22:59 so that we can chain methods
      end
      @mnemonic = char
      ch = char.downcase()[0].ord ##  1.9 
      # meta key 
      ch = ?\M-a.getbyte(0) + (ch - ?a.getbyte(0)) unless @hotkey
      $log.debug " #{self} setting MNEMO to #{char} #{ch}, #{@hotkey} "
      _t = self.text || self.name || "Unnamed #{self.class} "
      @form.bind_key(ch, "hotkey for button #{_t} ") { |_form, _butt| self.fire }
      return self # added 2015-03-23 - 22:59 so that we can chain methods
    end
def mnemonic char=nil
      return @mnemonic unless char  # added 2011-11-24 so caller can get mne

      unless @form
        # we have some processing for when a form is attached, registering a hotkey
        bind(:FORM_ATTACHED) { mnemonic char }
        return self # added 2014-03-23 - 22:59 so that we can chain methods
      end
      @mnemonic = char
      ch = char.downcase()[0].ord ##  1.9 
      # meta key 
      ch = ?\M-a.getbyte(0) + (ch - ?a.getbyte(0)) unless @hotkey
      $log.debug " #{self} setting MNEMO to #{char} #{ch}, #{@hotkey} "
      _t = self.text || self.name || "Unnamed #{self.class} "
      @form.bind_key(ch, "hotkey for button #{_t} ") { |_form, _butt| self.fire }
      return self # added 2015-03-23 - 22:59 so that we can chain methods
    end
FIXME this will not work in messageboxes since no form available
 if already set mnemonic, then unbind_key, ??
 NOTE: Some buttons like checkbox directly call mnemonic, so if they have no form
 then this processing does not happen
 set mnemonic for button, this is a hotkey that triggers +fire+ upon pressing Alt+char