summaryrefslogtreecommitdiff
path: root/ext/tk/lib/tk/busy.rb
blob: 7f4f89f524088751fd8017f362670cdde578b51c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#
# tk/busy.rb: support 'tk busy' command (Tcl/Tk8.6 or later)
#
require 'tk'

module Tk::Busy
  include TkCore
  extend TkCore
  extend TkItemConfigMethod
end

class << Tk::Busy
  def __item_cget_cmd(win)
    # maybe need to override
    ['tk', 'busy', 'cget', win.path]
  end
  private :__item_cget_cmd

  def __item_config_cmd(win)
    # maybe need to override
    ['tk', 'busy', 'configure', win.path]
  end
  private :__item_config_cmd

  def __item_confinfo_cmd(win)
    # maybe need to override
    __item_config_cmd(win)
  end
  private :__item_confinfo_cmd

  alias cget_tkstring itemcget_tkstring
  alias cget itemcget
  alias cget_strict itemcget_strict
  alias configure itemconfigure
  alias configinfo itemconfiginfo
  alias current_configinfo current_itemconfiginfo

  private :itemcget_tkstring, :itemcget, :itemcget_strict
  private :itemconfigure, :itemconfiginfo, :current_itemconfiginfo

  def method_missing(id, *args)
    name = id.id2name
    case args.length
    when 1
      if name[-1] == ?=
        configure name[0..-2], args[0]
        args[0]
      else
        configure name, args[0]
        self
      end
    when 0
      begin
        cget(name)
      rescue
        super(id, *args)
      end
    else
      super(id, *args)
    end
  end

  def hold(win, keys={})
    tk_call_without_enc('tk', 'busy', 'hold', win, *hash_kv(keys))
    win
  end

  def forget(*wins)
    tk_call_without_enc('tk', 'busy', 'forget', *wins)
    self
  end

  def current(pat=None)
    list(tk_call('tk', 'busy', 'current', pat))
  end

  def status(win)
    bool(tk_call_without_enc('tk', 'busy', 'status', win))
  end
end

module Tk::Busy
  def busy_configinfo(option=nil)
    Tk::Busy.configinfo(self, option)
  end

  def busy_current_configinfo(option=nil)
    Tk::Busy.current_configinfo(self, option)
  end

  def busy_configure(option, value=None)
    Tk::Busy.configure(self, option, value)
    self
  end

  def busy_cget(option)
    Tk::Busy.configure(self, option)
  end

  def busy(keys={})
    Tk::Busy.hold(self, keys)
    self
  end
  alias busy_hold busy

  def busy_forget
    Tk::Busy.forget(self)
    self
  end

  def busy_current?
    ! Tk::Busy.current(self.path).empty?
  end

  def busy_status
    Tk::Busy.status(self)
  end
end