def fire_handler event, object
        $log.debug "inside def fire_handler evt:#{event}, o: #{object.class}"
        if !@handler.nil?
          if @_events
            raise ArgumentError, "fire_handler: #{self.class} does not support this event: #{event}. #{@_events} " if !event? event
          else
            $log.debug "bIND #{self.class}  XXXXX TEMPO no events defined in @_events "
          end
          ablk = @handler[event]
          if !ablk.nil?
            aeve = @event_args[event]
            ablk.each_with_index do |blk, ix|
              #$log.debug "#{self} called EventHandler firehander #{@name}, #{event}, obj: #{object},args: #{aeve[ix]}"
              $log.debug "#{self} called EventHandler firehander #{@name}, #{event}"
              begin
                blk.call object,  *aeve[ix]
              rescue FieldValidationException => fve
                # added 2011-09-26 1.3.0 so a user raised exception on LEAVE
                # keeps cursor in same field.
                raise fve
              rescue PropertyVetoException => pve
                # added 2011-09-26 1.3.0 so a user raised exception on LEAVE
                # keeps cursor in same field.
                raise pve
              rescue => ex
                ## some don't have name
                #$log.error "======= Error ERROR in block event #{self}: #{name}, #{event}"
                $log.error "======= Error ERROR in block event #{self}:  #{event}"
                $log.error ex
                $log.error(ex.backtrace.join("\n")) 
                #$error_message = "#{ex}" # changed 2010  
                $error_message.value = "#{ex.to_s}"
                Ncurses.beep
              end
            end
          else
            # there is no block for this key/event
            # we must behave exactly as processkey
            # NOTE this is too risky since then buttons and radio buttons
            # that don't have any command don;t update,so removing 2011-12-2 
            #return :UNHANDLED
            return :NO_BLOCK
          end # if
        else
          # there is no handler
          # I've done this since list traps ENTER but rarely uses it.
          # For buttons default, we'd like to trap ENTER even when focus is elsewhere
          # we must behave exactly as processkey
          # NOTE this is too risky since then buttons and radio buttons
          # that don't have any command don;t update,so removing 2011-12-2 
          #return :UNHANDLED
          # If caller wants, can return UNHANDLED such as list and ENTER.
          return :NO_BLOCK
        end # if
      end
def fire_handler event, object
        $log.debug "inside def fire_handler evt:#{event}, o: #{object.class}"
        if !@handler.nil?
          if @_events
            raise ArgumentError, "fire_handler: #{self.class} does not support this event: #{event}. #{@_events} " if !event? event
          else
            $log.debug "bIND #{self.class}  XXXXX TEMPO no events defined in @_events "
          end
          ablk = @handler[event]
          if !ablk.nil?
            aeve = @event_args[event]
            ablk.each_with_index do |blk, ix|
              #$log.debug "#{self} called EventHandler firehander #{@name}, #{event}, obj: #{object},args: #{aeve[ix]}"
              $log.debug "#{self} called EventHandler firehander #{@name}, #{event}"
              begin
                blk.call object,  *aeve[ix]
              rescue FieldValidationException => fve
                # added 2011-09-26 1.3.0 so a user raised exception on LEAVE
                # keeps cursor in same field.
                raise fve
              rescue PropertyVetoException => pve
                # added 2011-09-26 1.3.0 so a user raised exception on LEAVE
                # keeps cursor in same field.
                raise pve
              rescue => ex
                ## some don't have name
                #$log.error "======= Error ERROR in block event #{self}: #{name}, #{event}"
                $log.error "======= Error ERROR in block event #{self}:  #{event}"
                $log.error ex
                $log.error(ex.backtrace.join("\n")) 
                #$error_message = "#{ex}" # changed 2010  
                $error_message.value = "#{ex.to_s}"
                Ncurses.beep
              end
            end
          else
            # there is no block for this key/event
            # we must behave exactly as processkey
            # NOTE this is too risky since then buttons and radio buttons
            # that don't have any command don;t update,so removing 2011-12-2 
            #return :UNHANDLED
            return :NO_BLOCK
          end # if
        else
          # there is no handler
          # I've done this since list traps ENTER but rarely uses it.
          # For buttons default, we'd like to trap ENTER even when focus is elsewhere
          # we must behave exactly as processkey
          # NOTE this is too risky since then buttons and radio buttons
          # that don't have any command don;t update,so removing 2011-12-2 
          #return :UNHANDLED
          # If caller wants, can return UNHANDLED such as list and ENTER.
          return :NO_BLOCK
        end # if
      end
temporary, needs a proper name to point out that we are adding
 NOTE: Do we have a way of removing bindings
 # TODO check if event is valid. Classes need to define what valid event names are

 Fire all bindings for given event
 e.g. fire_handler :ENTER, self
 The first parameter passed to the calling block is either self, or some action event
 The second and beyond are any objects you passed when using `bind` or `command`.
 Exceptions are caught here itself, or else they prevent objects from updating, usually the error is
 in the block sent in by application, not our error.
 TODO: if an object throws a subclass of VetoException we should not catch it and throw it back for
 caller to catch and take care of, such as prevent LEAVE or update etc.