1#
2# tk/panedwindow.rb : treat panedwindow
3#
4require 'tk'
5
6class Tk::PanedWindow<TkWindow
7  TkCommandNames = ['panedwindow'.freeze].freeze
8  WidgetClassName = 'Panedwindow'.freeze
9  WidgetClassNames[WidgetClassName] ||= self
10  #def create_self(keys)
11  #  if keys and keys != None
12  #    tk_call_without_enc('panedwindow', @path, *hash_kv(keys, true))
13  #  else
14  #    tk_call_without_enc('panedwindow', @path)
15  #  end
16  #end
17  #private :create_self
18
19  def add(*args)
20    keys = args.pop
21    fail ArgumentError, "no window in arguments" unless keys
22    if keys && keys.kind_of?(Hash)
23      fail ArgumentError, "no window in arguments" if args == []
24      # args = args.collect{|w| (w.kind_of?(TkObject))? w.epath: w }
25      args = args.collect{|w| _epath(w) }
26      #args.push(hash_kv(keys))
27      args.concat(hash_kv(keys))
28    else
29      args.push(keys) if keys
30      # args = args.collect{|w| (w.kind_of?(TkObject))? w.epath: w }
31      args = args.collect{|w| _epath(w) }
32    end
33    tk_send_without_enc('add', *args)
34    self
35  end
36
37  def forget(win, *wins)
38    wins.unshift(win)
39    # tk_send_without_enc('forget', *((w.kind_of?(TkObject))? w.epath: w))
40    tk_send_without_enc('forget', *(wins.collect{|w| _epath(w)}))
41    self
42  end
43  alias del forget
44  alias delete forget
45  alias remove forget
46
47  def identify(x, y)
48    list(tk_send_without_enc('identify', x, y))
49  end
50
51  def proxy_coord
52    list(tk_send_without_enc('proxy', 'coord'))
53  end
54  def proxy_forget
55    tk_send_without_enc('proxy', 'forget')
56    self
57  end
58  def proxy_place(x, y)
59    tk_send_without_enc('proxy', 'place', x, y)
60    self
61  end
62
63  def sash_coord(index)
64    list(tk_send('sash', 'coord', index))
65  end
66  def sash_dragto(index, x, y)
67    tk_send('sash', 'dragto', index, x, y)
68    self
69  end
70  def sash_mark(index, x, y)
71    tk_send('sash', 'mark', index, x, y)
72    self
73  end
74  def sash_place(index, x, y)
75    tk_send('sash', 'place', index, x, y)
76    self
77  end
78
79  def panecget_strict(win, key)
80    # win = win.epath if win.kind_of?(TkObject)
81    win = _epath(win)
82    tk_tcl2ruby(tk_send_without_enc('panecget', win, "-#{key}"))
83  end
84  def panecget(win, key)
85    unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
86      panecget_strict(win, key)
87    else
88      begin
89        panecget_strict(win, key)
90      rescue => e
91        begin
92          if current_paneconfiginfo(win).has_key?(option.to_s)
93            # not tag error & option is known -> error on known option
94            fail e
95          else
96            # not tag error & option is unknown
97            nil
98          end
99        rescue
100          fail e  # tag error
101        end
102      end
103    end
104  end
105
106  def paneconfigure(win, key, value=nil)
107    # win = win.epath if win.kind_of?(TkObject)
108    win = _epath(win)
109    if key.kind_of? Hash
110      params = []
111      key.each{|k, v|
112        params.push("-#{k}")
113        # params.push((v.kind_of?(TkObject))? v.epath: v)
114        params.push(_epath(v))
115      }
116      tk_send_without_enc('paneconfigure', win, *params)
117    else
118      # value = value.epath if value.kind_of?(TkObject)
119      value = _epath(value)
120      tk_send_without_enc('paneconfigure', win, "-#{key}", value)
121    end
122    self
123  end
124  alias pane_config paneconfigure
125
126  def paneconfiginfo(win, key=nil)
127    if TkComm::GET_CONFIGINFO_AS_ARRAY
128      # win = win.epath if win.kind_of?(TkObject)
129      win = _epath(win)
130      if key
131        #conf = tk_split_list(tk_send_without_enc('paneconfigure',
132        #                                         win, "-#{key}"))
133        conf = tk_split_list(tk_send_without_enc('paneconfigure',
134                                                 win, "-#{key}"),
135                             false, true)
136        conf[0] = conf[0][1..-1]
137        if conf[0] == 'hide'
138          conf[3] = bool(conf[3]) unless conf[3].empty?
139          conf[4] = bool(conf[4]) unless conf[4].empty?
140        end
141        conf
142      else
143        #tk_split_simplelist(tk_send_without_enc('paneconfigure',
144        #                                        win)).collect{|conflist|
145        #  conf = tk_split_simplelist(conflist)
146        tk_split_simplelist(tk_send_without_enc('paneconfigure', win),
147                            false, false).collect{|conflist|
148          conf = tk_split_simplelist(conflist, false, true)
149          conf[0] = conf[0][1..-1]
150          if conf[3]
151            if conf[0] == 'hide'
152              conf[3] = bool(conf[3]) unless conf[3].empty?
153            elsif conf[3].index('{')
154              conf[3] = tk_split_list(conf[3])
155            else
156              conf[3] = tk_tcl2ruby(conf[3])
157            end
158          end
159          if conf[4]
160            if conf[0] == 'hide'
161              conf[4] = bool(conf[4]) unless conf[4].empty?
162            elsif conf[4].index('{')
163              conf[4] = tk_split_list(conf[4])
164            else
165              conf[4] = tk_tcl2ruby(conf[4])
166            end
167          end
168          conf[1] = conf[1][1..-1] if conf.size == 2 # alias info
169          conf
170        }
171      end
172    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
173      # win = win.epath if win.kind_of?(TkObject)
174      win = _epath(win)
175      if key
176        #conf = tk_split_list(tk_send_without_enc('paneconfigure',
177        #                                         win, "-#{key}"))
178        conf = tk_split_list(tk_send_without_enc('paneconfigure',
179                                                 win, "-#{key}"),
180                             false, true)
181        key = conf.shift[1..-1]
182        if key == 'hide'
183          conf[2] = bool(conf[2]) unless conf[2].empty?
184          conf[3] = bool(conf[3]) unless conf[3].empty?
185        end
186        { key => conf }
187      else
188        ret = {}
189        #tk_split_simplelist(tk_send_without_enc('paneconfigure',
190        #                                        win)).each{|conflist|
191        #  conf = tk_split_simplelist(conflist)
192        tk_split_simplelist(tk_send_without_enc('paneconfigure', win),
193                            false, false).each{|conflist|
194          conf = tk_split_simplelist(conflist, false, true)
195          key = conf.shift[1..-1]
196          if key
197            if key == 'hide'
198              conf[2] = bool(conf[2]) unless conf[2].empty?
199            elsif conf[2].index('{')
200              conf[2] = tk_split_list(conf[2])
201            else
202              conf[2] = tk_tcl2ruby(conf[2])
203            end
204          end
205          if conf[3]
206            if key == 'hide'
207              conf[3] = bool(conf[3]) unless conf[3].empty?
208            elsif conf[3].index('{')
209              conf[3] = tk_split_list(conf[3])
210            else
211              conf[3] = tk_tcl2ruby(conf[3])
212            end
213          end
214          if conf.size == 1
215            ret[key] = conf[0][1..-1]  # alias info
216          else
217            ret[key] = conf
218          end
219        }
220        ret
221      end
222    end
223  end
224  alias pane_configinfo paneconfiginfo
225
226  def current_paneconfiginfo(win, key=nil)
227    if TkComm::GET_CONFIGINFO_AS_ARRAY
228      if key
229        conf = paneconfiginfo(win, key)
230        {conf[0] => conf[4]}
231      else
232        ret = {}
233        paneconfiginfo(win).each{|conf|
234          ret[conf[0]] = conf[4] if conf.size > 2
235        }
236        ret
237      end
238    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
239      ret = {}
240      paneconfiginfo(win, key).each{|k, conf|
241        ret[k] = conf[-1] if conf.kind_of?(Array)
242      }
243      ret
244    end
245  end
246
247  alias current_pane_configinfo current_paneconfiginfo
248
249  def panes
250    list(tk_send_without_enc('panes'))
251  end
252end
253
254Tk::Panedwindow = Tk::PanedWindow
255#TkPanedWindow = Tk::PanedWindow unless Object.const_defined? :TkPanedWindow
256#TkPanedwindow = Tk::Panedwindow unless Object.const_defined? :TkPanedwindow
257#Tk.__set_toplevel_aliases__(:Tk, Tk::PanedWindow,
258#                            :TkPanedWindow, :TkPanedwindow)
259Tk.__set_loaded_toplevel_aliases__('tk/panedwindow.rb', :Tk, Tk::PanedWindow,
260                                   :TkPanedWindow, :TkPanedwindow)
261