TkMenubar (Class)

In: tk/lib/tk/menubar.rb
Parent: TkFrame

Methods

[]   add_menu   new  

Included Modules

TkComposite

Public Class methods

[Source]

# File tk/lib/tk/menubar.rb, line 69
  def initialize(parent = nil, spec = nil, options = nil)
    if parent.kind_of? Hash
      options = _symbolkey2str(parent)
      spec = options.delete('spec')
      super(options)
    else
      super(parent, options)
    end

    @menus = []
    
    if spec
      for menu_info in spec
        add_menu(menu_info)
      end
    end
    
    if options
      for key, value in options
        configure(key, value)
      end
    end
  end

Public Instance methods

[Source]

# File tk/lib/tk/menubar.rb, line 141
  def [](index)
    return @menus[index]
  end

[Source]

# File tk/lib/tk/menubar.rb, line 93
  def add_menu(menu_info)
    btn_info = menu_info.shift
    mbtn = TkMenubutton.new(@frame)
    
    if btn_info.kind_of?(Hash)
      for key, value in btn_info
        mbtn.configure(key, value)
      end
    elsif btn_info.kind_of?(Array)
      mbtn.configure('text', btn_info[0]) if btn_info[0]
      mbtn.configure('underline', btn_info[1]) if btn_info[1]
      mbtn.configure('accelerator', btn_info[2]) if btn_info[2]
    else
      mbtn.configure('text', btn_info)
    end
    
    menu = TkMenu.new(mbtn)
    
    for item_info in menu_info
      if item_info.kind_of?(Hash)
        menu.add('command', item_info)
      elsif item_info.kind_of?(Array)
        options = {}
        options['label'] = item_info[0] if item_info[0]
        options['command'] = item_info[1] if item_info[1]
        options['underline'] = item_info[2] if item_info[2]
        options['accelerator'] = item_info[3] if item_info[3]
        menu.add('command', options)
      elsif /^-+$/ =~ item_info
        menu.add('sep')
      else
        menu.add('command', 'label' => item_info)
      end
    end
    
    mbtn.menu(menu)
    @menus.push([mbtn, menu])
    delegate('tearoff', menu)
    delegate('foreground', mbtn, menu)
    delegate('background', mbtn, menu)
    delegate('disabledforeground', mbtn, menu)
    delegate('activeforeground', mbtn, menu)
    delegate('activebackground', mbtn, menu)
    delegate('font', mbtn, menu)
    delegate('kanjifont', mbtn, menu)
    mbtn.pack('side' => 'left')
  end

[Validate]