Module TkCore
In: tk/lib/tk.rb
tk/lib/multi-tk.rb

start Tk which depends on MultiTkIp

Methods

Included Modules

TkComm

Classes and Modules

Module TkCore::INTERP
Class TkCore::Tk_OBJECT_TABLE

Constants

INTERP = TclTkIp.new(name, opts)
WIDGET_DESTROY_HOOK = '<WIDGET_DESTROY_HOOK>'
EventFlag = TclTkLib::EventFlag
INTERP = MultiTkIp

Public Class methods

[Source]

# File tk/lib/tk.rb, line 1243
  def TkCore.callback(*arg)
    begin
      if TkCore::INTERP.tk_cmd_tbl.kind_of?(Hash)
        #TkCore::INTERP.tk_cmd_tbl[arg.shift].call(*arg)
        normal_ret = false
        ret = catch(:IRB_EXIT) do  # IRB hack
          retval = TkCore::INTERP.tk_cmd_tbl[arg.shift].call(*arg)
          normal_ret = true
          retval
        end
        unless normal_ret
          # catch IRB_EXIT
          exit(ret)
        end
        ret
      end
    rescue SystemExit=>e
      exit(e.status)
    rescue Interrupt=>e
      fail(e)
    rescue Exception => e
      begin
        msg = _toUTF8(e.class.inspect) + ': ' + 
              _toUTF8(e.message) + "\n" + 
              "\n---< backtrace of Ruby side >-----\n" + 
              _toUTF8(e.backtrace.join("\n")) + 
              "\n---< backtrace of Tk side >-------"
        msg.instance_variable_set(:@encoding, 'utf-8')
      rescue Exception
        msg = e.class.inspect + ': ' + e.message + "\n" + 
              "\n---< backtrace of Ruby side >-----\n" + 
              e.backtrace.join("\n") + 
              "\n---< backtrace of Tk side >-------"
      end
      # TkCore::INTERP._set_global_var('errorInfo', msg)
      # fail(e)
      fail(e, msg)
    end
  end

[Source]

# File tk/lib/tk.rb, line 1099
        def initialize(ip, cmd)
          @ip = ip
          @cmd = cmd
        end

Public Instance methods

[Source]

# File tk/lib/tk.rb, line 1690
  def _tk_call_to_list_core(depth, arg_enc, val_enc, *args)
    args = _conv_args([], arg_enc, *args)
    val = _tk_call_core(false, *args)
    if !depth.kind_of?(Integer) || depth == 0
      tk_split_simplelist(val, false, val_enc)
    else
      tk_split_list(val, depth, false, val_enc)
    end
  end

[Source]

# File tk/lib/tk.rb, line 1325
  def after(ms, cmd=Proc.new)
    crit_bup = Thread.critical
    Thread.critical = true

    myid = _curr_cmd_id
    cmdid = install_cmd(proc{ret = cmd.call;uninstall_cmd(myid); ret})

    Thread.critical = crit_bup

    tk_call_without_enc("after",ms,cmdid)  # return id
#    return
#    if false #defined? Thread
#      Thread.start do
#       ms = Float(ms)/1000
#       ms = 10 if ms == 0
#       sleep ms/1000
#       cmd.call
#      end
#    else
#      cmdid = install_cmd(cmd)
#      tk_call("after",ms,cmdid)
#    end
  end

[Source]

# File tk/lib/tk.rb, line 1361
  def after_cancel(afterId)
    tk_call_without_enc('after','cancel',afterId)
  end

[Source]

# File tk/lib/tk.rb, line 1349
  def after_idle(cmd=Proc.new)
    crit_bup = Thread.critical
    Thread.critical = true

    myid = _curr_cmd_id
    cmdid = install_cmd(proc{ret = cmd.call;uninstall_cmd(myid); ret})

    Thread.critical = crit_bup

    tk_call_without_enc('after','idle',cmdid)
  end

[Source]

# File tk/lib/tk.rb, line 1397
  def appname(name=None)
    tk_call('tk', 'appname', name)
  end

[Source]

# File tk/lib/tk.rb, line 1405
  def appsend(interp, async, *args)
    if $SAFE >= 4
      fail SecurityError, "cannot send Tk commands at level 4"
    elsif $SAFE >= 1 && args.find{|obj| obj.tainted?}
      fail SecurityError, "cannot send tainted Tk commands at level #{$SAFE}"
    end
    if async != true && async != false && async != nil
      args.unshift(async)
      async = false
    end
    if async
      tk_call('send', '-async', '--', interp, *args)
    else
      tk_call('send', '--', interp, *args)
    end
  end

[Source]

# File tk/lib/tk.rb, line 1401
  def appsend_deny
    tk_call('rename', 'send', '')
  end

[Source]

# File tk/lib/tk.rb, line 1440
  def appsend_displayof(interp, win, async, *args)
    if $SAFE >= 4
      fail SecurityError, "cannot send Tk commands at level 4"
    elsif $SAFE >= 1 && args.find{|obj| obj.tainted?}
      fail SecurityError, "cannot send tainted Tk commands at level #{$SAFE}"
    end
    win = '.' if win == nil
    if async != true && async != false && async != nil
      args.unshift(async)
      async = false
    end
    if async
      tk_call('send', '-async', '-displayof', win, '--', interp, *args)
    else
      tk_call('send', '-displayor', win, '--', interp, *args)
    end
  end

[Source]

# File tk/lib/tk.rb, line 1104
        def call(*args)
          @ip.cb_eval(@cmd, *args)
        end

[Source]

# File tk/lib/tk.rb, line 1235
  def callback_break
    fail TkCallbackBreak, "Tk callback returns 'break' status"
  end

[Source]

# File tk/lib/tk.rb, line 1239
  def callback_continue
    fail TkCallbackContinue, "Tk callback returns 'continue' status"
  end

[Source]

# File tk/lib/tk.rb, line 1580
  def chooseColor(keys = nil)
    tk_call('tk_chooseColor', *hash_kv(keys))
  end

[Source]

# File tk/lib/tk.rb, line 1584
  def chooseDirectory(keys = nil)
    tk_call('tk_chooseDirectory', *hash_kv(keys))
  end

[Source]

# File tk/lib/tk.rb, line 1506
  def do_one_event(flag = TclTkLib::EventFlag::ALL)
    TclTkLib.do_one_event(flag)
  end

[Source]

# File tk/lib/tk.rb, line 1547
  def event_generate(win, context, keys=nil)
    #win = win.path if win.kind_of?(TkObject)
    if context.kind_of?(TkEvent::Event)
      context.generate(win, ((keys)? keys: {}))
    elsif keys
      tk_call_without_enc('event', 'generate', win, 
                          "<#{tk_event_sequence(context)}>", 
                          *hash_kv(keys, true))
    else
      tk_call_without_enc('event', 'generate', win, 
                          "<#{tk_event_sequence(context)}>")
    end
    nil
  end

[Source]

# File tk/lib/tk.rb, line 1569
  def getMultipleOpenFile(keys = nil)
    simplelist(tk_call('tk_getOpenFile', '-multiple', '1', *hash_kv(keys)))
  end

[Source]

# File tk/lib/tk.rb, line 1576
  def getMultipleSaveFile(keys = nil)
    simplelist(tk_call('tk_getSaveFile', '-multiple', '1', *hash_kv(keys)))
  end

[Source]

# File tk/lib/tk.rb, line 1566
  def getOpenFile(keys = nil)
    tk_call('tk_getOpenFile', *hash_kv(keys))
  end

[Source]

# File tk/lib/tk.rb, line 1573
  def getSaveFile(keys = nil)
    tk_call('tk_getSaveFile', *hash_kv(keys))
  end

[Source]

# File tk/lib/tk.rb, line 1514
  def get_eventloop_tick()
    TclTkLib.get_eventloop_tick
  end

[Source]

# File tk/lib/tk.rb, line 1530
  def get_eventloop_weight()
    TclTkLib.get_eventloop_weight
  end

[Source]

# File tk/lib/tk.rb, line 1522
  def get_no_event_wait()
    TclTkLib.get_no_eventloop_wait
  end

[Source]

# File tk/lib/tk.rb, line 1384
  def inactive
    Integer(tk_call_without_enc('tk', 'inactive'))
  end

[Source]

# File tk/lib/tk.rb, line 1387
  def inactive_displayof(win)
    Integer(tk_call_without_enc('tk', 'inactive', '-displayof', win))
  end

[Source]

# File tk/lib/tk.rb, line 1477
  def info(*args)
    tk_call('info', *args)
  end

[Source]

# File tk/lib/tk.rb, line 1107
        def inspect
          sprintf("#<cb_entry:%0x>", self.__id__)
        end

[Source]

# File tk/lib/tk.rb, line 1604
  def ip_eval(cmd_string)
    _ip_eval_core(nil, cmd_string)
  end

[Source]

# File tk/lib/tk.rb, line 1612
  def ip_eval_with_enc(cmd_string)
    _ip_eval_core(true, cmd_string)
  end

[Source]

# File tk/lib/tk.rb, line 1608
  def ip_eval_without_enc(cmd_string)
    _ip_eval_core(false, cmd_string)
  end

[Source]

# File tk/lib/tk.rb, line 1632
  def ip_invoke(*args)
    _ip_invoke_core(nil, *args)
  end

[Source]

# File tk/lib/tk.rb, line 1640
  def ip_invoke_with_enc(*args)
    _ip_invoke_core(true, *args)
  end

[Source]

# File tk/lib/tk.rb, line 1636
  def ip_invoke_without_enc(*args)
    _ip_invoke_core(false, *args)
  end

[Source]

# File tk/lib/tk.rb, line 1497
  def is_mainloop?
    TclTkLib.mainloop_thread? == true
  end

[Source]

# File tk/lib/tk.rb, line 1321
  def load_cmd_on_ip(tk_cmd)
    bool(tk_call('auto_load', tk_cmd))
  end

[Source]

# File tk/lib/tk.rb, line 1481
  def mainloop(check_root = true)
    TclTkLib.mainloop(check_root)
  end

[Source]

# File tk/lib/tk.rb, line 1493
  def mainloop_exist?
    TclTkLib.mainloop_thread? != nil
  end

[Source]

# File tk/lib/tk.rb, line 1485
  def mainloop_thread?
    # true  : current thread is mainloop
    # nil   : there is no mainloop
    # false : mainloop is running on the other thread
    #         ( At then, it is dangerous to call Tk interpreter directly. )
    TclTkLib.mainloop_thread?
  end

[Source]

# File tk/lib/tk.rb, line 1501
  def mainloop_watchdog(check_root = true)
    # watchdog restarts mainloop when mainloop is dead
    TclTkLib.mainloop_watchdog(check_root)
  end

[Source]

# File tk/lib/tk.rb, line 1562
  def messageBox(keys)
    tk_call('tk_messageBox', *hash_kv(keys))
  end

[Source]

# File tk/lib/tk.rb, line 1422
  def rb_appsend(interp, async, *args)
    if $SAFE >= 4
      fail SecurityError, "cannot send Ruby commands at level 4"
    elsif $SAFE >= 1 && args.find{|obj| obj.tainted?}
      fail SecurityError, "cannot send tainted Ruby commands at level #{$SAFE}"
    end
    if async != true && async != false && async != nil
      args.unshift(async)
      async = false
    end
    #args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"]/, '\\\\\&')}
    args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"\\]/, '\\\\\&')}
    # args.push(').to_s"')
    # appsend(interp, async, 'ruby "(', *args)
    args.push('}.call)"')
    appsend(interp, async, 'ruby "TkComm._get_eval_string(proc{', *args)
  end

[Source]

# File tk/lib/tk.rb, line 1458
  def rb_appsend_displayof(interp, win, async, *args)
    if $SAFE >= 4
      fail SecurityError, "cannot send Ruby commands at level 4"
    elsif $SAFE >= 1 && args.find{|obj| obj.tainted?}
      fail SecurityError, "cannot send tainted Ruby commands at level #{$SAFE}"
    end
    win = '.' if win == nil
    if async != true && async != false && async != nil
      args.unshift(async)
      async = false
    end
    #args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"]/, '\\\\\&')}
    args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"\\]/, '\\\\\&')}
    # args.push(').to_s"')
    # appsend_displayof(interp, win, async, 'ruby "(', *args)
    args.push('}.call)"')
    appsend(interp, win, async, 'ruby "TkComm._get_eval_string(proc{', *args)
  end

[Source]

# File tk/lib/tk.rb, line 1390
  def reset_inactive
    tk_call_without_enc('tk', 'inactive', 'reset')
  end

[Source]

# File tk/lib/tk.rb, line 1393
  def reset_inactive_displayof(win)
    tk_call_without_enc('tk', 'inactive', '-displayof', win, 'reset')
  end

[Source]

# File tk/lib/tk.rb, line 1534
  def restart(app_name = nil, keys = {})
    TkCore::INTERP.init_ip_internal

    tk_call('set', 'argv0', app_name) if app_name
    if keys.kind_of?(Hash)
      # tk_call('set', 'argc', keys.size * 2)
      tk_call('set', 'argv', hash_kv(keys).join(' '))
    end

    INTERP.restart
    nil
  end

[Source]

# File tk/lib/tk.rb, line 1369
  def scaling(scale=nil)
    if scale
      tk_call_without_enc('tk', 'scaling', scale)
    else
      Float(number(tk_call_without_enc('tk', 'scaling')))
    end
  end

[Source]

# File tk/lib/tk.rb, line 1376
  def scaling_displayof(win, scale=nil)
    if scale
      tk_call_without_enc('tk', 'scaling', '-displayof', win, scale)
    else
      Float(number(tk_call_without_enc('tk', '-displayof', win, 'scaling')))
    end
  end

[Source]

# File tk/lib/tk.rb, line 1510
  def set_eventloop_tick(timer_tick)
    TclTkLib.set_eventloop_tick(timer_tick)
  end

[Source]

# File tk/lib/tk.rb, line 1526
  def set_eventloop_weight(loop_max, no_event_tick)
    TclTkLib.set_eventloop_weight(loop_max, no_event_tick)
  end

[Source]

# File tk/lib/tk.rb, line 1518
  def set_no_event_wait(wait)
    TclTkLib.set_no_even_wait(wait)
  end

[Source]

# File tk/lib/tk.rb, line 1678
  def tk_call(*args)
    _tk_call_core(nil, *args)
  end

private :_tk_call_to_list_core

[Source]

# File tk/lib/tk.rb, line 1701
  def tk_call_to_list(*args)
    _tk_call_to_list_core(-1, nil, true, *args)
  end

[Source]

# File tk/lib/tk.rb, line 1709
  def tk_call_to_list_with_enc(*args)
    _tk_call_to_list_core(-1, true, true, *args)
  end

[Source]

# File tk/lib/tk.rb, line 1705
  def tk_call_to_list_without_enc(*args)
    _tk_call_to_list_core(-1, false, false, *args)
  end

[Source]

# File tk/lib/tk.rb, line 1713
  def tk_call_to_simplelist(*args)
    _tk_call_to_list_core(0, nil, true, *args)
  end

[Source]

# File tk/lib/tk.rb, line 1721
  def tk_call_to_simplelist_with_enc(*args)
    _tk_call_to_list_core(0, true, true, *args)
  end

[Source]

# File tk/lib/tk.rb, line 1717
  def tk_call_to_simplelist_without_enc(*args)
    _tk_call_to_list_core(0, false, false, *args)
  end

[Source]

# File tk/lib/tk.rb, line 1686
  def tk_call_with_enc(*args)
    _tk_call_core(true, *args)
  end

[Source]

# File tk/lib/tk.rb, line 1682
  def tk_call_without_enc(*args)
    _tk_call_core(false, *args)
  end
to_s()

Alias for inspect

[Source]

# File tk/lib/tk.rb, line 1365
  def windowingsystem
    tk_call_without_enc('tk', 'windowingsystem')
  end

[Validate]