In Files

  • tk/lib/tk/composite.rb

Class/Module Index [+]

Quicksearch

TkComposite

Public Class Methods

new(*args) click to toggle source

def initialize(parent=nil, *args)

 
               # File tk/lib/tk/composite.rb, line 90
def initialize(*args)
  @delegates = {}
  @option_methods = {}
  @option_setting = {}

  if args[-1].kind_of?(Hash)
    keys = _symbolkey2str(args.pop)
  else
    keys = {}
  end
  parent = args.shift
  parent = keys.delete('parent') if keys.has_key?('parent')

  if keys.key?('classname')
    keys['class'] = keys.delete('classname')
  end
  if (base_class_name = (keys.delete('class')).to_s).empty?
    base_class_name = _choice_classname_of_baseframe
  end

  if base_class_name
    @frame = TkFrame.new(parent, :class=>base_class_name)
  else
    @frame = TkFrame.new(parent)
  end
  @path = @epath = @frame.path

  args.push(keys) unless keys.empty?
  initialize_composite(*args)
end
            

Public Instance Methods

cget(slot) click to toggle source
 
               # File tk/lib/tk/composite.rb, line 172
def cget(slot)
  slot = slot.to_s

  if @option_methods.include?(slot)
    if @option_methods[slot][:cget]
      return self.__send__(@option_methods[slot][:cget])
    else
      if @option_setting[slot]
        return @option_setting[slot]
      else
        return ''
      end
    end
  end

  tbl = @delegates[slot]
  tbl = @delegates['DEFAULT'] unless tbl

  begin
    if tbl
      opt, wins = tbl[-1]
      opt = slot if opt == 'DEFAULT'
      if wins && wins[-1]
        return wins[-1].cget(opt)
      end
    end
  rescue
  end

  super(slot)
end
            
configinfo(slot = nil) click to toggle source
 
               # File tk/lib/tk/composite.rb, line 241
def configinfo(slot = nil)
  if TkComm::GET_CONFIGINFO_AS_ARRAY
    if slot
      slot = slot.to_s
      if @option_methods.include?(slot)
        if @option_methods[slot][:info]
          return self.__send__(@option_methods[slot][:info])
        else
          return [slot, '', '', '', self.cget(slot)]
        end
      end

      tbl = @delegates[slot]
      tbl = @delegates['DEFAULT'] unless tbl

      begin
        if tbl
          if tbl.length == 1
            opt, wins = tbl[0]
            if slot == opt || opt == 'DEFAULT'
              return wins[-1].configinfo(slot)
            else
              info = wins[-1].configinfo(opt)
              info[0] = slot
              return info
            end
          else
            opt, wins = tbl[-1]
            return [slot, '', '', '', wins[-1].cget(opt)]
          end
        end
      rescue
      end

      super(slot)

    else # slot == nil
      info_list = super(slot)

      tbl = @delegates['DEFAULT']
      if tbl
        wins = tbl[0][1]
        if wins && wins[-1]
          wins[-1].configinfo.each{|info|
            slot = info[0]
            info_list.delete_if{|i| i[0] == slot} << info
          }
        end
      end

      @delegates.each{|slot, tbl|
        next if slot == 'DEFAULT'
        if tbl.length == 1
          opt, wins = tbl[0]
          next unless wins && wins[-1]
          if slot == opt
            info_list.delete_if{|i| i[0] == slot} << 
              wins[-1].configinfo(slot)
          else
            info = wins[-1].configinfo(opt)
            info[0] = slot
            info_list.delete_if{|i| i[0] == slot} << info
          end
        else
          opt, wins = tbl[-1]
          info_list.delete_if{|i| i[0] == slot} << 
            [slot, '', '', '', wins[-1].cget(opt)]
        end
      }

      @option_methods.each{|slot, m|
        if m[:info]
          info = self.__send__(m[:info])
        else
          info = [slot, '', '', '', self.cget(slot)]
        end
        info_list.delete_if{|i| i[0] == slot} << info
      }

      info_list
    end

  else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
    if slot
      slot = slot.to_s
      if @option_methods.include?(slot)
        if @option_methods[slot][:info]
          return self.__send__(@option_methods[slot][:info])
        else
          return {slot => ['', '', '', self.cget(slot)]}
        end
      end

      tbl = @delegates[slot]
      tbl = @delegates['DEFAULT'] unless tbl

      begin
        if tbl
          if tbl.length == 1
            opt, wins = tbl[0]
            if slot == opt || opt == 'DEFAULT'
              return wins[-1].configinfo(slot)
            else
              return {slot => wins[-1].configinfo(opt)[opt]}
            end
          else
            opt, wins = tbl[-1]
            return {slot => ['', '', '', wins[-1].cget(opt)]}
          end
        end
      rescue
      end

      super(slot)

    else # slot == nil
      info_list = super(slot)

      tbl = @delegates['DEFAULT']
      if tbl
        wins = tbl[0][1]
        info_list.update(wins[-1].configinfo) if wins && wins[-1]
      end

      @delegates.each{|slot, tbl|
        next if slot == 'DEFAULT'
        if tbl.length == 1
          opt, wins = tbl[0]
          next unless wins && wins[-1]
          if slot == opt
            info_list.update(wins[-1].configinfo(slot))
          else
            info_list.update({slot => wins[-1].configinfo(opt)[opt]})
          end
        else
          opt, wins = tbl[-1]
          info_list.update({slot => ['', '', '', wins[-1].cget(opt)]})
        end
      }

      @option_methods.each{|slot, m|
        if m[:info]
          info = self.__send__(m[:info])
        else
          info = {slot => ['', '', '', self.cget(slot)]}
        end
        info_list.update(info)
      }

      info_list
    end
  end
end
            
configure(slot, value=None) click to toggle source
 
               # File tk/lib/tk/composite.rb, line 204
def configure(slot, value=None)
  if slot.kind_of? Hash
    slot.each{|slot,value| configure slot, value}
    return self
  end

  slot = slot.to_s

  if @option_methods.include?(slot)
    unless @option_methods[slot][:cget]
      if value.kind_of?(Symbol)
        @option_setting[slot] = value.to_s
      else
        @option_setting[slot] = value
      end
    end
    return self.__send__(@option_methods[slot][:set], value)
  end

  tbl = @delegates[slot]
  tbl = @delegates['DEFAULT'] unless tbl

  begin
    if tbl
      last = nil
      tbl.each{|opt, wins|
        opt = slot if opt == 'DEFAULT'
        wins.each{|w| last = w.configure(opt, value)}
      }
      return last
    end
  rescue
  end

  super(slot, value)
end
            
database_class() click to toggle source
 
               # File tk/lib/tk/composite.rb, line 125
def database_class
  @frame.database_class
end
            
database_classname() click to toggle source
 
               # File tk/lib/tk/composite.rb, line 121
def database_classname
  @frame.database_classname
end
            
delegate(option, *wins) click to toggle source
 
               # File tk/lib/tk/composite.rb, line 168
def delegate(option, *wins)
  delegate_alias(option, option, *wins)
end
            
delegate_alias(alias_opt, option, *wins) click to toggle source
 
               # File tk/lib/tk/composite.rb, line 148
def delegate_alias(alias_opt, option, *wins)
  if wins.length == 0
    fail ArgumentError, "target widgets are not given"
  end
  if alias_opt != option && (alias_opt == 'DEFAULT' || option == 'DEFAULT')
    fail ArgumentError, "cannot alias 'DEFAULT' option"
  end
  alias_opt = alias_opt.to_s
  option = option.to_s
  if @delegates[alias_opt].kind_of?(Array)
    if (elem = @delegates[alias_opt].assoc(option))
      wins.each{|w| elem[1].push(w)}
    else
      @delegates[alias_opt] << [option, wins]
    end
  else
    @delegates[alias_opt] = [ [option, wins] ]
  end
end
            
epath() click to toggle source
 
               # File tk/lib/tk/composite.rb, line 129
def epath
  @epath
end
            
option_methods(*opts) click to toggle source
 
               # File tk/lib/tk/composite.rb, line 136
def option_methods(*opts)
  opts.each{|m_set, m_cget, m_info|
    m_set  = m_set.to_s
    m_cget = m_set if !m_cget && self.method(m_set).arity == -1
    m_cget = m_cget.to_s if m_cget
    m_info = m_info.to_s if m_info
    @option_methods[m_set] = {
      :set  => m_set, :cget => m_cget, :info => m_info
    }
  }
end