File: tk/root.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Tk
  class: Root#8
includes
  TkMenuSpec   
  Wm ( Tk )
inherits from
  TkWindow   
has properties
method: __methodcall_optkeys #12
class method: new / 2 #17
constant: WidgetClassName #54
class method: to_eval #57
method: create_self #62
method: path #67
method: add_menu / 3 #71
method: add_menubar / 3 #82
class method: destroy #90

Class Hierarchy

Object ( Builtin-Module )
TkKernel
TkObject
TkWindow
  Root ( Tk ) #8

Code

   1  #
   2  # tk/root.rb : treat root widget
   3  #
   4  require 'tk'
   5  require 'tk/wm'
   6  require 'tk/menuspec'
   7 
   8  class Tk::Root<TkWindow
   9    include Wm
  10    include TkMenuSpec
  11 
  12    def __methodcall_optkeys  # { key=>method, ... }
  13      TOPLEVEL_METHODCALL_OPTKEYS
  14    end
  15    private :__methodcall_optkeys
  16 
  17    def Root.new(keys=nil, &b)
  18      unless TkCore::INTERP.tk_windows['.']
  19        TkCore::INTERP.tk_windows['.'] = 
  20          super(:without_creating=>true, :widgetname=>'.'){}
  21      end
  22      root = TkCore::INTERP.tk_windows['.']
  23 
  24      keys = _symbolkey2str(keys)
  25 
  26      # wm commands
  27      root.instance_eval{
  28        __methodcall_optkeys.each{|key, method|
  29          value = keys.delete(key.to_s)
  30          self.__send__(method, value) if value
  31        }
  32      }
  33 
  34      if keys  # wm commands ( for backward comaptibility )
  35        keys.each{|k,v|
  36          if v.kind_of? Array
  37            root.__send__(k,*v)
  38          else
  39            root.__send__(k,v)
  40          end
  41        }
  42      end
  43 
  44      if block_given?
  45        if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!
  46          root.instance_exec(root, &b)
  47        else
  48          root.instance_eval(&b)
  49        end
  50      end
  51      root
  52    end
  53 
  54    WidgetClassName = 'Tk'.freeze
  55    WidgetClassNames[WidgetClassName] = self
  56 
  57    def self.to_eval
  58      # self::WidgetClassName
  59      '.'
  60    end
  61 
  62    def create_self
  63      @path = '.'
  64    end
  65    private :create_self
  66 
  67    def path
  68      "."
  69    end
  70 
  71    def add_menu(menu_info, tearoff=false, opts=nil)
  72      # See tk/menuspec.rb for menu_info.
  73      # opts is a hash of default configs for all of cascade menus. 
  74      # Configs of menu_info can override it. 
  75      if tearoff.kind_of?(Hash)
  76        opts = tearoff
  77        tearoff = false
  78      end
  79      _create_menubutton(self, menu_info, tearoff, opts)
  80    end
  81 
  82    def add_menubar(menu_spec, tearoff=false, opts=nil)
  83      # See tk/menuspec.rb for menu_spec.
  84      # opts is a hash of default configs for all of cascade menus.
  85      # Configs of menu_spec can override it. 
  86      menu_spec.each{|info| add_menu(info, tearoff, opts)}
  87      self.menu
  88    end
  89 
  90    def Root.destroy
  91      TkCore::INTERP._invoke('destroy', '.')
  92    end
  93  end
  94 
  95  TkRoot = Tk::Root unless Object.const_defined? :TkRoot