From: Hidetoshi NAGAI Date: 2008-02-08T06:28:04+09:00 Subject: Re: Ruby/Tk/Iwidgets tabnotebook (and scrollbar) From: Karl Miller 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)