1 #
2 # tk/frame.rb : treat frame widget
3 #
4 require 'tk'
5
6 class Tk::Frame<TkWindow
7 TkCommandNames = ['frame'.freeze].freeze
8 WidgetClassName = 'Frame'.freeze
9 WidgetClassNames[WidgetClassName] = self
10
11 ################# old version
12 # def initialize(parent=nil, keys=nil)
13 # if keys.kind_of? Hash
14 # keys = keys.dup
15 # @classname = keys.delete('classname') if keys.key?('classname')
16 # @colormap = keys.delete('colormap') if keys.key?('colormap')
17 # @container = keys.delete('container') if keys.key?('container')
18 # @visual = keys.delete('visual') if keys.key?('visual')
19 # end
20 # super(parent, keys)
21 # end
22 #
23 # def create_self
24 # s = []
25 # s << "-class" << @classname if @classname
26 # s << "-colormap" << @colormap if @colormap
27 # s << "-container" << @container if @container
28 # s << "-visual" << @visual if @visual
29 # tk_call 'frame', @path, *s
30 # end
31 #################
32
33 def __boolval_optkeys
34 super() << 'container'
35 end
36 private :__boolval_optkeys
37
38 def initialize(parent=nil, keys=nil)
39 my_class_name = nil
40 if self.class < WidgetClassNames[self.class::WidgetClassName]
41 my_class_name = self.class.name
42 my_class_name = nil if my_class_name == ''
43 end
44 if parent.kind_of? Hash
45 keys = _symbolkey2str(parent)
46 else
47 if keys
48 keys = _symbolkey2str(keys)
49 keys['parent'] = parent
50 else
51 keys = {'parent'=>parent}
52 end
53 end
54 if keys.key?('classname')
55 keys['class'] = keys.delete('classname')
56 end
57 @classname = keys['class']
58 @colormap = keys['colormap']
59 @container = keys['container']
60 @visual = keys['visual']
61 if !@classname && my_class_name
62 keys['class'] = @classname = my_class_name
63 end
64 if @classname.kind_of? TkBindTag
65 @db_class = @classname
66 @classname = @classname.id
67 elsif @classname
68 @db_class = TkDatabaseClass.new(@classname)
69 else
70 @db_class = self.class
71 @classname = @db_class::WidgetClassName
72 end
73 super(keys)
74 end
75
76 #def create_self(keys)
77 # if keys and keys != None
78 # tk_call_without_enc('frame', @path, *hash_kv(keys))
79 # else
80 # tk_call_without_enc( 'frame', @path)
81 # end
82 #end
83 #private :create_self
84
85 def database_classname
86 @classname
87 end
88
89 def self.database_class
90 if self == WidgetClassNames[WidgetClassName] || self.name == ''
91 self
92 else
93 TkDatabaseClass.new(self.name)
94 end
95 end
96 def self.database_classname
97 self.database_class.name
98 end
99
100 def self.bind(*args, &b)
101 if self == WidgetClassNames[WidgetClassName] || self.name == ''
102 super(*args, &b)
103 else
104 TkDatabaseClass.new(self.name).bind(*args, &b)
105 end
106 end
107 def self.bind_append(*args, &b)
108 if self == WidgetClassNames[WidgetClassName] || self.name == ''
109 super(*args, &b)
110 else
111 TkDatabaseClass.new(self.name).bind_append(*args, &b)
112 end
113 end
114 def self.bind_remove(*args)
115 if self == WidgetClassNames[WidgetClassName] || self.name == ''
116 super(*args)
117 else
118 TkDatabaseClass.new(self.name).bind_remove(*args)
119 end
120 end
121 def self.bindinfo(*args)
122 if self == WidgetClassNames[WidgetClassName] || self.name == ''
123 super(*args)
124 else
125 TkDatabaseClass.new(self.name).bindinfo(*args)
126 end
127 end
128 end
129
130 #TkFrame = Tk::Frame unless Object.const_defined? :TkFrame
131 Tk.__set_toplevel_aliases__(:Tk, Tk::Frame, :TkFrame)