mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* new sample script
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5142 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1253665ec4
commit
7bc53bf0f6
2 changed files with 174 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
Tue Dec 9 02:53:55 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
||||||
|
|
||||||
|
* ext/tk/sample/tkalignbox.rb: new sample script
|
||||||
|
|
||||||
Tue Dec 9 00:45:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
|
Tue Dec 9 00:45:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
|
||||||
|
|
||||||
* lib/test/unit/assertions.rb: renamed #assert_raises to #assert_raise
|
* lib/test/unit/assertions.rb: renamed #assert_raises to #assert_raise
|
||||||
|
|
170
ext/tk/sample/tkalignbox.rb
Normal file
170
ext/tk/sample/tkalignbox.rb
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
#
|
||||||
|
# tkalignbox.rb : align widgets with same width/height
|
||||||
|
#
|
||||||
|
# by Hidetoshi NAGAI
|
||||||
|
#
|
||||||
|
# The box size depends on 'reqheight' and 'reqwidth' of contained widgets.
|
||||||
|
# If you want to give the box size when those requested sizes are 0,
|
||||||
|
# please set box.propagate = false (See the test routine at the tail of
|
||||||
|
# this file).
|
||||||
|
|
||||||
|
require 'tk'
|
||||||
|
|
||||||
|
class TkAlignBox < TkFrame
|
||||||
|
def initialize(*args)
|
||||||
|
super(*args)
|
||||||
|
@max_width = 0
|
||||||
|
@max_height = 0
|
||||||
|
@propagate = true
|
||||||
|
@widgets = []
|
||||||
|
end
|
||||||
|
|
||||||
|
def _set_framesize
|
||||||
|
fail RuntimeError, "TkAlignBox is an abstruct class"
|
||||||
|
end
|
||||||
|
private :_set_framesize
|
||||||
|
|
||||||
|
def _place_config(widget, idx, cnt)
|
||||||
|
fail RuntimeError, "TkAlignBox is an abstruct class"
|
||||||
|
end
|
||||||
|
private :_place_config
|
||||||
|
|
||||||
|
def align
|
||||||
|
widgets = []
|
||||||
|
@widgets.each{|w| widgets << w if w.winfo_exist?}
|
||||||
|
@widgets = widgets
|
||||||
|
cnt = @widgets.size.to_f
|
||||||
|
@widgets.each_with_index{|w, idx| _place_config(w, idx, cnt)}
|
||||||
|
@widgets = widgets
|
||||||
|
_set_framesize if @propagate
|
||||||
|
self
|
||||||
|
end
|
||||||
|
|
||||||
|
def add(*widgets)
|
||||||
|
widgets.each{|w|
|
||||||
|
unless w.kind_of? TkWindow
|
||||||
|
fail RuntimeError, "#{w.inspect} is not a widget instance."
|
||||||
|
end
|
||||||
|
@widgets.delete(w)
|
||||||
|
@widgets << w
|
||||||
|
sz = w.winfo_reqwidth
|
||||||
|
@max_width = sz if @max_width < sz
|
||||||
|
sz = w.winfo_reqheight
|
||||||
|
@max_height = sz if @max_height < sz
|
||||||
|
}
|
||||||
|
align
|
||||||
|
self
|
||||||
|
end
|
||||||
|
|
||||||
|
def <<(widget)
|
||||||
|
add(widget)
|
||||||
|
end
|
||||||
|
|
||||||
|
def insert(idx, widget)
|
||||||
|
unless widget.kind_of? TkWindow
|
||||||
|
fail RuntimeError, "#{widget.inspect} is not a widget instance."
|
||||||
|
end
|
||||||
|
@widgets.delete(widget)
|
||||||
|
@widgets[idx,0] = widget
|
||||||
|
sz = widget.winfo_reqwidth
|
||||||
|
@max_width = sz if @max_width < sz
|
||||||
|
sz = widget.winfo_reqheight
|
||||||
|
@max_height = sz if @max_height < sz
|
||||||
|
align
|
||||||
|
self
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete(idx)
|
||||||
|
ret = @widgets.delete_at(idx)
|
||||||
|
@req_size = 0
|
||||||
|
@widget.each{|w|
|
||||||
|
sz = w.winfo_reqwidth
|
||||||
|
@max_width = sz if @max_width < sz
|
||||||
|
sz = w.winfo_reqheight
|
||||||
|
@max_height = sz if @max_height < sz
|
||||||
|
}
|
||||||
|
align
|
||||||
|
ret
|
||||||
|
end
|
||||||
|
|
||||||
|
attr_accessor :propagate
|
||||||
|
end
|
||||||
|
|
||||||
|
class TkHBox < TkAlignBox
|
||||||
|
def _set_framesize
|
||||||
|
bd = self.borderwidth
|
||||||
|
self.width(@max_width * @widgets.size + 2 * bd)
|
||||||
|
self.height(@max_height + 2 * bd)
|
||||||
|
end
|
||||||
|
def _place_config(widget, idx, cnt)
|
||||||
|
widget.place_in(self, 'relx'=>idx/cnt, 'relwidth'=>1.0/cnt,
|
||||||
|
'relheight'=>1.0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
TkHLBox = TkHBox
|
||||||
|
|
||||||
|
class TkHRBox < TkHBox
|
||||||
|
def _place_config(widget, idx, cnt)
|
||||||
|
widget.place_in(self, 'relx'=>(cnt - idx - 1)/cnt, 'relwidth'=>1.0/cnt,
|
||||||
|
'relheight'=>1.0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class TkVBox < TkAlignBox
|
||||||
|
def _set_framesize
|
||||||
|
self.width(@max_width + 2 * bd)
|
||||||
|
self.height(@max_height * @widgets.size + 2 * bd)
|
||||||
|
end
|
||||||
|
def _place_config(widget, idx, cnt)
|
||||||
|
widget.place_in(self, 'rely'=>idx/cnt, 'relheight'=>1.0/cnt,
|
||||||
|
'relwidth'=>1.0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
TkVTBox = TkVBox
|
||||||
|
|
||||||
|
class TkVBBox < TkVBox
|
||||||
|
def _place_config(widget, idx, cnt)
|
||||||
|
widget.place_in(self, 'rely'=>(cnt - idx - 1)/cnt, 'relheight'=>1.0/cnt,
|
||||||
|
'relwidth'=>1.0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
################################################
|
||||||
|
# test
|
||||||
|
################################################
|
||||||
|
if __FILE__ == $0
|
||||||
|
f = TkHBox.new(:borderwidth=>3, :relief=>'ridge').pack
|
||||||
|
f.add(TkButton.new(f, :text=>'a'),
|
||||||
|
TkButton.new(f, :text=>'aa', :font=>'Helvetica 16'),
|
||||||
|
TkButton.new(f, :text=>'aaa'),
|
||||||
|
TkButton.new(f, :text=>'aaaa'))
|
||||||
|
|
||||||
|
f = TkVBox.new(:borderwidth=>5, :relief=>'groove').pack
|
||||||
|
f.add(TkButton.new(f, :text=>'a'),
|
||||||
|
TkButton.new(f, :text=>'aa', :font=>'Helvetica 30'),
|
||||||
|
TkButton.new(f, :text=>'aaa'),
|
||||||
|
TkButton.new(f, :text=>'aaaa'))
|
||||||
|
|
||||||
|
f = TkHRBox.new(:borderwidth=>3, :relief=>'raised').pack(:fill=>:x)
|
||||||
|
f.add(TkButton.new(f, :text=>'a'),
|
||||||
|
TkButton.new(f, :text=>'aa'),
|
||||||
|
TkButton.new(f, :text=>'aaa'))
|
||||||
|
|
||||||
|
f = TkVBBox.new(:borderwidth=>3, :relief=>'ridge').pack(:fill=>:x)
|
||||||
|
f.propagate = false
|
||||||
|
f.height 100
|
||||||
|
f.add(TkFrame.new(f){|ff|
|
||||||
|
TkButton.new(ff, :text=>'a').pack(:pady=>4, :padx=>6,
|
||||||
|
:fill=>:both, :expand=>true)
|
||||||
|
},
|
||||||
|
TkFrame.new(f){|ff|
|
||||||
|
TkButton.new(ff, :text=>'aa').pack(:pady=>4, :padx=>6,
|
||||||
|
:fill=>:both, :expand=>true)
|
||||||
|
},
|
||||||
|
TkFrame.new(f){|ff|
|
||||||
|
TkButton.new(ff, :text=>'aaaa').pack(:pady=>4, :padx=>6,
|
||||||
|
:fill=>:both, :expand=>true)
|
||||||
|
})
|
||||||
|
|
||||||
|
Tk.mainloop
|
||||||
|
end
|
Loading…
Reference in a new issue