1#
2#  tkextlib/bwidget/notebook.rb
3#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4#
5
6require 'tk'
7require 'tk/frame'
8require 'tkextlib/bwidget.rb'
9
10module Tk
11  module BWidget
12    class NoteBook < TkWindow
13    end
14  end
15end
16
17class Tk::BWidget::NoteBook
18  include TkItemConfigMethod
19
20  TkCommandNames = ['NoteBook'.freeze].freeze
21  WidgetClassName = 'NoteBook'.freeze
22  WidgetClassNames[WidgetClassName] ||= self
23
24  class Event_for_Tabs < TkEvent::Event
25    def self._get_extra_args_tbl
26      [
27        TkComm.method(:string)   # page idenfier
28      ]
29    end
30  end
31
32  def __boolval_optkeys
33    super() << 'homogeneous'
34  end
35  private :__boolval_optkeys
36
37  def tagid(id)
38    if id.kind_of?(TkWindow)
39      #id.path
40      id.epath
41    elsif id.kind_of?(TkObject)
42      id.to_eval
43    else
44      # id.to_s
45      _get_eval_string(id)
46    end
47  end
48
49  #def tabbind(*args)
50  #  _bind_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args)
51  #  self
52  #end
53  def tabbind(context, *args)
54    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
55    if TkComm._callback_entry?(args[0]) || !block_given?
56      cmd = args.shift
57    else
58      cmd = Proc.new
59    end
60    _bind_for_event_class(Event_for_Tabs, [path, 'bindtabs'],
61                          context, cmd, *args)
62    self
63  end
64
65  #def tabbind_append(*args)
66  #  _bind_append_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args)
67  #  self
68  #end
69  def tabbind_append(context, *args)
70    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
71    if TkComm._callback_entry?(args[0]) || !block_given?
72      cmd = args.shift
73    else
74      cmd = Proc.new
75    end
76    _bind_append_for_event_class(Event_for_Tabs, [path, 'bindtabs'],
77                                 context, cmd, *args)
78    self
79  end
80
81  def tabbind_remove(*args)
82    _bind_remove_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args)
83    self
84  end
85
86  def tabbindinfo(*args)
87    _bindinfo_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args)
88  end
89
90  def add(page, &b)
91    win = window(tk_send('add', tagid(page)))
92    if b
93      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!
94        win.instance_exec(self, &b)
95      else
96        win.instance_eval(&b)
97      end
98    end
99    win
100  end
101
102  def compute_size
103    tk_send('compute_size')
104    self
105  end
106
107  def delete(page, destroyframe=None)
108    tk_send('delete', tagid(page), destroyframe)
109    self
110  end
111
112  def get_frame(page, &b)
113    win = window(tk_send('getframe', tagid(page)))
114    if b
115      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!
116        win.instance_exec(self, &b)
117      else
118        win.instance_eval(&b)
119      end
120    end
121    win
122  end
123
124  def index(page)
125    num_or_str(tk_send('index', tagid(page)))
126  end
127
128  def insert(index, page, keys={}, &b)
129    win = window(tk_send('insert', index, tagid(page), *hash_kv(keys)))
130    if b
131      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!
132        win.instance_exec(self, &b)
133      else
134        win.instance_eval(&b)
135      end
136    end
137    win
138  end
139
140  def move(page, index)
141    tk_send('move', tagid(page), index)
142    self
143  end
144
145  def get_page(page)
146    tk_send('pages', page)
147  end
148
149  def pages(first=None, last=None)
150    list(tk_send('pages', first, last))
151  end
152
153  def raise(page=nil)
154    if page
155      tk_send('raise', page)
156      self
157    else
158      tk_send('raise')
159    end
160  end
161
162  def see(page)
163    tk_send('see', page)
164    self
165  end
166end
167