summaryrefslogtreecommitdiff
path: root/ext/tk/lib/tkextlib/iwidgets/calendar.rb
blob: a5478c7cc60ee5114b55fc618fa769f56ef11369 (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
119
120
121
122
123
124
125
#
#  tkextlib/iwidgets/calendar.rb
#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#

require 'tk'
require 'tkextlib/iwidgets.rb'

module Tk
  module Iwidgets
    class Calendar < Tk::Itk::Widget
    end
  end
end

class Tk::Iwidgets::Calendar
  TkCommandNames = ['::iwidgets::calendar'.freeze].freeze
  WidgetClassName = 'Calendar'.freeze
  WidgetClassNames[WidgetClassName] ||= self

  def __strval_optkeys
    super() + [
      'buttonforeground', 'outline', 'selectcolor',
      'weekdaybackground', 'weekendbackground'
    ]
  end
  private :__strval_optkeys

  def __listval_optkeys
    super() << 'days'
  end
  private :__listval_optkeys

  def __font_optkeys
    super() + ['currentdatefont', 'datefont', 'dayfont', 'titlefont']
  end
  private :__font_optkeys

  ####################################

  include Tk::ValidateConfigure

  class CalendarCommand < TkValidateCommand
    #class CalCmdArgs < TkUtil::CallbackSubst
    class ValidateArgs < TkUtil::CallbackSubst
      KEY_TBL  = [ [?d, ?s, :date], nil ]
      PROC_TBL = [ [?s, TkComm.method(:string) ], nil ]

=begin
      # for Ruby m17n :: ?x --> String --> char-code ( getbyte(0) )
      KEY_TBL.map!{|inf|
        if inf.kind_of?(Array)
          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)
          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)
        end
        inf
      }

      PROC_TBL.map!{|inf|
        if inf.kind_of?(Array)
          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)
        end
        inf
      }
=end

      _setup_subst_table(KEY_TBL, PROC_TBL);

      def self.ret_val(val)
        val
      end
    end

    def self._config_keys
      # array of config-option key (string or symbol)
      ['command']
    end

    #def initialize(cmd = Proc.new, *args)
    #  _initialize_for_cb_class(CalCmdArgs, cmd, *args)
    #end
  end

  def __validation_class_list
    super() << CalendarCommand
  end

  Tk::ValidateConfigure.__def_validcmd(binding, CalendarCommand)
=begin
  def command(cmd = Proc.new, args = nil)
    if cmd.kind_of?(CalendarCommand)
      configure('command', cmd)
    elsif args
      configure('command', [cmd, args])
    else
      configure('command', cmd)
    end
  end
=end

  ####################################

  def get_string
    tk_call(@path, 'get', '-string')
  end
  alias get get_string

  def get_clicks
    number(tk_call(@path, 'get', '-clicks'))
  end

  def select(date)
    tk_call(@path, 'select', date)
    self
  end

  def show(date)
    tk_call(@path, 'show', date)
    self
  end
  def show_now
    tk_call(@path, 'show', 'now')
    self
  end
end