Hidetoshi NAGAI
2/7/2008 9:28:00 PM
From: Karl Miller <karl.miller.km@gmail.com>
Subject: Re: Ruby/Tk/Iwidgets tabnotebook (and scrollbar)
Date: Wed, 6 Feb 2008 07:53:53 +0900
Message-ID: <7dbb75f30cad0a50c37526bc2bbdf7ea@ruby-forum.com>
> > Probably the following is better. Sorry.
> >
> Yay! This worked very well. Thank you :)
The previous version does not work with some of widget options
(e.g. tn.equaltabs = false, tn.gap = 2, and so on).
And, 'show_tab' method should be implemented on Tk::Iwidgets::Tabset.
The following is the final version (I hope so ;-)).
If it has no problem, I'll add 'show_tab' method to official files.
==================================================================
# Command to control the tabset
class Tk::Iwidgets::Tabnotebook
def show_tab(idx)
@tabset.show_tab(idx)
self
end
end
class Tk::Iwidgets::Tabset
def show_tab(idx)
if index(idx) == 0
self.start = 0
return
end
reutrn unless @canvas ||= self.winfo_children[0]
delta = 1 if (delta = cget(:gap)) == 'overlap' ||
(delta = self.winfo_pixels(delta) + 1) <= 0
case cget(:tabpos)
when 's', 'n'
if (head = tabcget(idx, :left)) < 0
self.start -= head
return
end
tabs_size = @canvas.winfo_width
tab_start, tab_end = @canvas .
find_overlapping(head, 0, head + delta, @canvas.winfo_height) .
find_all{|id| @canvas.itemtype(id) == TkcPolygon} .
map!{|id| bbox = @canvas.bbox(id); [bbox[0], bbox[2]]} . max
when 'e', 'w'
if (head = tabcget(idx, :top)) < 0
self.start -= head
return
end
tabs_size = @canvas.winfo_height
tab_start, tab_end = @canvas .
find_overlapping(0, head, @canvas.winfo_width, head + delta) .
find_all{|id| @canvas.itemtype(id) == TkcPolygon} .
map!{|id| bbox = @canvas.bbox(id); [bbox[1], bbox[3]]} . max
end
if (size = tab_end - tab_start + 1) > tabs_size
self.start -= tab_start
elsif head + size > tabs_size
self.start -= head + size - tabs_size
end
self
end
end
tn.component_widget('tabset').command{|idx|
tn.view(idx)
tn.show_tab(idx)
}
# An example to following to resizing of the Tabnotebook widget
tn.bind('Configure'){
tn.show_tab(:select)
}
==================================================================
--
Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)