# class VirtualEvent

### Constants

TkCommandNames
TkVirtualEventID
TkVirtualEventTBL

### Public Class Methods

getobj(event) click to toggle source

    # File lib/tk/virtevent.rb, line 51
    def TkVirtualEvent.getobj(event)
      obj = nil
      TkVirtualEventTBL.mutex.synchronize{
        obj = TkVirtualEventTBL[event]
      }
      if obj
        obj
      else
        if tk_call_without_enc('event', 'info').index("<#{event}>")
          PreDefVirtEvent.new(event)
        else
          fail ArgumentError, "undefined virtual event '<#{event}>'"
        end
      end
    end

info() click to toggle source

    # File lib/tk/virtevent.rb, line 67
    def TkVirtualEvent.info
      tk_call_without_enc('event', 'info').split(/\s+/).collect!{|seq|
        TkVirtualEvent.getobj(seq[1..-2])
      }
    end

new(*sequences) click to toggle source

    # File lib/tk/virtevent.rb, line 73
    def initialize(*sequences)
      TkVirtualEventID.mutex.synchronize{
        # @path = @id = '<' + TkVirtualEventID.join('') + '>'
        @path = @id = '<' + TkVirtualEventID.join(TkCore::INTERP._ip_id_) + '>'
        TkVirtualEventID[1].succ!
      }
      _add_sequences(sequences)
    end

### Public Instance Methods

add(*sequences) click to toggle source

    # File lib/tk/virtevent.rb, line 93
    def add(*sequences)
      if sequences != []
        _add_sequences(sequences)
        TkVirtualEventTBL.mutex.synchronize{
          TkVirtualEventTBL[@id] = self
        }
      end
      self
    end

delete(*sequences) click to toggle source

    # File lib/tk/virtevent.rb, line 103
    def delete(*sequences)
      if sequences.empty?
        tk_call_without_enc('event', 'delete', "<#{@id}>")
        TkVirtualEventTBL.mutex.synchronize{
          TkVirtualEventTBL.delete(@id)
        }
      else
        tk_call_without_enc('event', 'delete', "<#{@id}>",
                            *(sequences.collect{|seq|
                                "<#{tk_event_sequence(seq)}>"
                              }) )
        if tk_call_without_enc('event','info',"<#{@id}>").empty?
          TkVirtualEventTBL.mutex.synchronize{
            TkVirtualEventTBL.delete(@id)
          }
        end
      end
      self
    end

info() click to toggle source

    # File lib/tk/virtevent.rb, line 123
    def info
      tk_call_without_enc('event','info',"<#{@id}>").split(/\s+/).collect!{|seq|
        lst = seq.scan(/<*[^<>]+>*/).collect!{|subseq|
          case (subseq)
          when /^<<[^<>]+>>$/
            TkVirtualEvent.getobj(subseq[1..-2])
          when /^<[^<>]+>$/
            subseq[1..-2]
          else
            subseq.split('')
          end
        }.flatten
        (lst.size == 1) ? lst[0] : lst
      }
    end

mutex() click to toggle source

    # File lib/tk/virtevent.rb, line 15
    def mutex; @mutex; end

### Private Instance Methods

_add_sequences(seq_ary) click to toggle source

    # File lib/tk/virtevent.rb, line 82
    def _add_sequences(seq_ary)
      unless seq_ary.empty?
        tk_call_without_enc('event', 'add', "<#{@id}>",
                            *(seq_ary.collect{|seq|
                                "<#{tk_event_sequence(seq)}>"
                              }) )
      end
      self
    end