1#
2#  tkextlib/tcllib/tooltip.rb
3#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4#
5#   * Part of tcllib extension
6#   * Provides tooltips, a small text message that is displayed when the
7#     mouse hovers over a widget.
8#
9
10require 'tk'
11require 'tkextlib/tcllib.rb'
12
13# TkPackage.require('tooltip', '1.1')
14TkPackage.require('tooltip')
15
16module Tk::Tcllib
17  module Tooltip
18    PACKAGE_NAME = 'tooltip'.freeze
19    def self.package_name
20      PACKAGE_NAME
21    end
22
23    def self.package_version
24      begin
25        TkPackage.require('tooltip')
26      rescue
27        ''
28      end
29    end
30  end
31end
32
33module Tk::Tcllib::Tooltip
34  extend TkCore
35
36  WidgetClassName = 'Tooltip'.freeze
37  WidgetClassNames[WidgetClassName] ||= self
38
39  def self.database_classname
40    self::WidgetClassName
41  end
42  def self.database_class
43    WidgetClassNames[self::WidgetClassName]
44  end
45
46  def self.clear(glob_path_pat = None)
47    self.clear_glob(glob_path_pat)
48  end
49
50  def self.clear_glob(glob_path_pat)
51    tk_call_without_enc('::tooltip::tooltip', 'clear', glob_path_pat)
52  end
53
54  def self.clear_widgets(*args)
55    self.clear_glob("{#{args.collect{|w| _get_eval_string(w)}.join(',')}}")
56  end
57
58  def self.clear_children(*args)
59    self.clear_glob("{#{args.collect{|w| s = _get_eval_string(w); "#{s},#{s}.*"}.join(',')}}")
60  end
61
62  def self.delay(millisecs=None)
63    number(tk_call_without_enc('::tooltip::tooltip', 'delay', millisecs))
64  end
65  def self.delay=(millisecs)
66    self.delay(millisecs)
67  end
68
69  def self.fade?
70    bool(tk_call_without_enc('::tooltip::tooltip', 'fade'))
71  end
72  def self.fade(mode)
73    tk_call_without_enc('::tooltip::tooltip', 'fade', mode)
74  end
75
76  def self.disable
77    tk_call_without_enc('::tooltip::tooltip', 'disable')
78    false
79  end
80  def self.off
81    self.disable
82  end
83
84  def self.enable
85    tk_call_without_enc('::tooltip::tooltip', 'enable')
86    true
87  end
88  def self.on
89    self.enable
90  end
91
92  def self.register(widget, msg, keys=nil)
93    if keys.kind_of?(Hash)
94      args = hash_kv(keys) << msg
95    else
96      args = msg
97    end
98    tk_call('::tooltip::tooltip', widget.path, *args)
99  end
100
101  def self.erase(widget)
102    tk_call_without_enc('::tooltip::tooltip', widget.path, '')
103  end
104end
105