From b214246bf1fbb689dc1c5678e3f3c76113584da8 Mon Sep 17 00:00:00 2001 From: ocean Date: Thu, 4 Aug 2005 04:16:27 +0000 Subject: * ext/tk/sample/tkextlib/tile/demo.rb: fixed: Tk::Tile::TProgressbar is supported on tile 0.6 or later, not tile 0.5. * ext/tk/sample/tkextlib/tile/demo.rb: updated scales demo to use Tk::Tile::TProgressbar for tile 0.6 or later. * ext/tk/sample/tkextlib/tile/demo.rb: set some TkVariable default values. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@8904 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/tk/ChangeLog.tkextlib | 10 ++ ext/tk/sample/tkextlib/tile/demo.rb | 181 +++++++++++++++++++++++++++++------- 2 files changed, 155 insertions(+), 36 deletions(-) diff --git a/ext/tk/ChangeLog.tkextlib b/ext/tk/ChangeLog.tkextlib index f12ef04f2f..bc01d92fec 100644 --- a/ext/tk/ChangeLog.tkextlib +++ b/ext/tk/ChangeLog.tkextlib @@ -1,3 +1,13 @@ +2005-08-04 ocean + + * sample/tkextlib/tile/demo.rb: fixed: Tk::Tile::TProgressbar is + supported on tile 0.6 or later, not tile 0.5. + + * sample/tkextlib/tile/demo.rb: updated scales demo to use + Tk::Tile::TProgressbar for tile 0.6 or later. + + * sample/tkextlib/tile/demo.rb: set some TkVariable default values. + 2005-08-03 Hidetoshi NAGAI * lib/tkextlib/tile/treeview.rb: Tk::Tile::Treeview#headingconfigure diff --git a/ext/tk/sample/tkextlib/tile/demo.rb b/ext/tk/sample/tkextlib/tile/demo.rb index a8a350a2af..d09af7c3bd 100644 --- a/ext/tk/sample/tkextlib/tile/demo.rb +++ b/ext/tk/sample/tkextlib/tile/demo.rb @@ -9,6 +9,10 @@ Tk::AUTO_PATH.lappend('.', demodir, File.join(demodir, 'themes')) require 'tkextlib/tile' +def version?(ver) + TkPackage.vcompare(Tk::Tile.package_version, ver) >= 0 +end + Tk.load_tclscript(File.join(demodir, 'toolbutton.tcl')) Tk.load_tclscript(File.join(demodir, 'repeater.tcl')) @@ -37,7 +41,10 @@ $V = TkVariable.new_hash(:THEME => 'default', :COMPOUND => 'top', :CONSOLE => false, :MENURADIO1 => 'One', - :MENUCHECK1 => true) + :MENUCHECK1 => true, + :PBMODE => 'determinate', + :SELECTED => true, + :CHOICE => 2) # Add in any available loadable themes. TkPackage.names.find_all{|n| n =~ /^tile::theme::/}.each{|pkg| @@ -305,6 +312,8 @@ def makeNotebook nb.add(client, :text=>'Demo', :underline=>0) nb.select(client) + scales = Tk::Tile::TFrame.new(nb) + nb.add(scales, :text=>'Scales') combo = Tk::Tile::TFrame.new(nb) nb.add(combo, :text=>'Combobox', :underline=>7) tree = Tk::Tile::TFrame.new(nb) @@ -312,10 +321,10 @@ def makeNotebook others = Tk::Tile::TFrame.new(nb) nb.add(others, :text=>'Others', :underline=>4) - [nb, client, combo, tree, others] + [nb, client, scales, combo, tree, others] end -nb, client, combo, tree, others = makeNotebook() +nb, client, scales, combo, tree, others = makeNotebook() # # Side-by side check, radio, and menu button comparison: @@ -334,7 +343,7 @@ def fillMenu(menu) menu.add(:command, :label=>'Quit', :command=>proc{Tk.root.destroy}) end -l = Tk::Tile::TLabelframe.new(client, :text=>'Styled', :padding=>6) +l = Tk::Tile::TLabelframe.new(client, :text=>'Themed', :padding=>6) r = TkLabelframe.new(client, :text=>'Standard', :padx=>6, :pady=>6) ## Styled frame @@ -360,27 +369,6 @@ e.selection_range(6, :end) ltext_f, ltext = scrolledWidget(l, TkText, true, :width=>12, :height=>5, :wrap=>:none) - -scales = Tk::Tile::TFrame.new(l) -sc = Tk::Tile::TScale.new(scales, :orient=>:horizontal, :from=>0, :to=>100, - :variable=>$V.ref(:SCALE)) -vsc = Tk::Tile::TScale.new(scales, :orient=>:vertical, :from=>-25, :to=>25, - :variable=>$V.ref(:VSCALE)) - -prg = Tk::Tile::TProgress.new(scales, :orient=>:horizontal, - :from=>0, :to=>100) -vprg = Tk::Tile::TProgress.new(scales, :orient=>:vertical, - :from=>-25, :to=>25) - -sc.command{|*args| prg.set(*args)} -vsc.command{|*args| vprg.set(*args)} - -Tk.grid(sc, :columnspan=>2, :sticky=>:ew) -Tk.grid(prg, :columnspan=>2, :sticky=>:ew) -Tk.grid(vsc, vprg, :sticky=>:nws) -TkGrid.columnconfigure(scales, 0, :weight=>1) -TkGrid.columnconfigure(scales, 1, :weight=>1) - # NOTE TO MAINTAINERS: # The checkbuttons are -sticky ew / -expand x on purpose: # it demonstrates one of the differences between TCheckbuttons @@ -394,7 +382,6 @@ Tk.grid(btn, :sticky=>:ew, :padx=>2, :pady=>2) Tk.grid(mb, :sticky=>:ew, :padx=>2, :pady=>2) Tk.grid(e, :sticky=>:ew, :padx=>2, :pady=>2) Tk.grid(ltext_f, :sticky=>:news) -Tk.grid(scales, :sticky=>:news, :pady=>2) TkGrid.columnconfigure(l, 0, :weight=>1) TkGrid.rowconfigure(l, 7, :weight=>1) # text widget (grid is a PITA) @@ -424,11 +411,6 @@ e = TkEntry.new(r, :textvariable=>$entryText) rtext_f, rtext = scrolledWidget(r, TkText, false, :width=>12, :height=>5, :wrap=>:none) -sc = TkScale.new(r, :orient=>:horizontal, :from=>0, :to=>100, - :variable=>$V.ref(:SCALE)) -vsc = TkScale.new(r, :orient=>:vertical, :from=>-25, :to=>25, - :variable=>$V.ref(:VSCALE)) - Tk.grid(cb, :sticky=>:ew) Tk.grid(rb1, :sticky=>:ew) Tk.grid(rb2, :sticky=>:ew) @@ -437,8 +419,6 @@ Tk.grid(btn, :sticky=>:ew, :padx=>2, :pady=>2) Tk.grid(mb, :sticky=>:ew, :padx=>2, :pady=>2) Tk.grid(e, :sticky=>:ew, :padx=>2, :pady=>2) Tk.grid(rtext_f, :sticky=>:news) -Tk.grid(sc, :sticky=>:news) -Tk.grid(vsc, :sticky=>:nws) TkGrid.columnconfigure(l, 0, :weight=>1) TkGrid.rowconfigure(l, 7, :weight=>1) # text widget (grid is a PITA) @@ -467,6 +447,135 @@ nmsgs = msgs.size ltext.insert(:end, "#{n}: #{msg}\n") rtext.insert(:end, "#{n}: #{msg}\n") } +# +# Scales and sliders pane: +# +l = Tk::Tile::TLabelframe.new(scales, :text=>'Themed', :padding=>6) +r = TkLabelframe.new(scales, :text=>'Standard', :padx=>6, :pady=>6) + +if version?('0.6') + + # thremed frame + scale = Tk::Tile::TScale.new(l, :orient=>:horizontal, :from=>0, :to=>100, + :variable=>$V.ref(:SCALE)) + vscale = Tk::Tile::TScale.new(l, :orient=>:vertical, :from=>0, :to=>100, + :variable=>$V.ref(:VSCALE)) + progress = Tk::Tile::TProgressbar.new(l, :orient=>:horizontal, :maximum=>100) + vprogress = Tk::Tile::TProgressbar.new(l, :orient=>:vertical, :maximum=>100) + + if true + def progress.inverted(w, value) + w.value(w.maximum - value) + end + scale.command {|value| progress.value(value)} + vscale.command {|value| progress.inverted(vprogress, value) } + else + # This would also work, but the Tk scale widgets + # in the right hand pane cause some interference when + # in autoincrement/indeterminate mode. + # + progress.variable $V.ref(:SCALE) + vprogress.variable $V.ref(:VSCALE) + end + + scale.set(50) + vscale.set(50) + + lmode = Tk::Tile::TLabel.new(l, :text=>'Progress bar mode') + pbmode0 = Tk::Tile::TRadiobutton.new(l, :variable=>$V.ref(:PBMODE), + :text=>'determinate', :value=>'determinate', + :command=>proc{pbMode(progress, vprogress)}) + pbmode1 = Tk::Tile::TRadiobutton.new(l, :variable=>$V.ref(:PBMODE), + :text=>'indeterminate', :value=>'indeterminate', + :command=>proc{pbMode(progress, vprogress)}) + def pbMode(progress, vprogress) + progress.mode $V[:PBMODE] + vprogress.mode $V[:PBMODE] + end + + start = Tk::Tile::TButton.new(l, :text=>"Start", + :command=>proc{pbStart(progress, vprogress)}) + def pbStart(progress, vprogress) + $V[:PBMODE] = 'indeterminate'; pbMode(progress, vprogress) + progress.start 10 + vprogress.start + end + + stop = Tk::Tile::TButton.new(l, :text=>'Stop', + :command=>proc{pbStop(progress, vprogress)}) + def pbStop(progress, vprogress) + progress.stop + vprogress.stop + end + + Tk.grid(scale, :columnspan=>2, :sticky=>'ew') + Tk.grid(progress, :columnspan=>2, :sticky=>'ew') + Tk.grid(vscale, vprogress, :sticky=>'nws') + + Tk.grid(lmode, :sticky=>'we', :columnspan=>2) + Tk.grid(pbmode0, :sticky=>'we', :columnspan=>2) + Tk.grid(pbmode1, :sticky=>'we', :columnspan=>2) + Tk.grid(start, :sticky=>'we', :columnspan=>2) + Tk.grid(stop, :sticky=>'we', :columnspan=>2) + + l.grid_columnconfigure(0, :weight=>1) + l.grid_columnconfigure(1, :weight=>1) + l.grid_rowconfigure(99, :weight=>1) + + # standard frame + TkScale.new(r, :orient=>:horizontal, :from=>0, :to=>100, + :variable=>$V.ref(:SCALE)).grid(:sticky=>'news') + TkScale.new(r, :orient=>:vertical, :from=>0, :to=>100, + :variable=>$V.ref(:VSCALE)).grid(:sticky=>'nws') + + r.grid_columnconfigure(0, :weight=>1) + r.grid_columnconfigure(1, :weight=>1) + r.grid_rowconfigure(99, :weight=>1) + +else # tile 0.5 or earlier + + # themed frame + scale = Tk::Tile::TScale.new(l, :variable=>$V.ref(:SCALE), + :orient=>:horizontal, :from=>0, :to=>100) + vscale = Tk::Tile::TScale.new(l, :variable=>$V.ref(:VSCALE), + :orient=>:vertical, :from=>-25, :to=>25) + + progress = Tk::Tile::TProgress.new(l, + :orient=>:horizontal, :from=>0, :to=>100) + vprogress = Tk::Tile::TProgress.new(l, + :orient=>:vertical, :from=>-25, :to=>25) + + if true + scale.command{|value| progress.set(value)} + vscale.command{|value| vprogress.set(value)} + else # this would also work. (via TkVariable#trace) + v1 = $V.ref(:SCALE) + v2 = $V.ref(:VSCALE) + v1.trace('w', proc{ progress.set(v1.value) }) + v2.trace('w', proc{ vprogress.set(v2.value) }) + end + + Tk.grid(scale, :columnspan=>2, :sticky=>:ew) + Tk.grid(progress, :columnspan=>2, :sticky=>:ew) + Tk.grid(vscale, vprogress, :sticky=>:nws) + TkGrid.columnconfigure(l, 0, :weight=>1) + TkGrid.columnconfigure(l, 1, :weight=>1) + + # standard frame + TkScale.new(r, :variable=>$V.ref(:SCALE), + :orient=>:horizontal, :from=>0, :to=>100).grid(:sticky=>'news') + TkScale.new(r, :variable=>$V.ref(:VSCALE), + :orient=>:vertical, :from=>-25, :to=>25).grid(:sticky=>'nws') + + TkGrid.columnconfigure(r, 0, :weight=>1) + TkGrid.columnconfigure(r, 1, :weight=>1) +end + +# layout frames +Tk.grid(l, r, :sticky=>'nwes', :padx=>6, :pady=>6) +scales.grid_columnconfigure(0, :weight=>1) +scales.grid_columnconfigure(1, :weight=>1) +scales.grid_rowconfigure(0, :weight=>1) # # Command box: @@ -560,7 +669,7 @@ values = %w(list abc def ghi jkl mno pqr stu vwx yz) # # Treeview widget demo pane: # -if TkPackage.vcompare(Tk::Tile.package_version, '0.5') >= 0 +if version?('0.5') treeview = nil # avoid 'undefined' error scrollbar = Tk::Tile::TScrollbar.new(tree, @@ -822,9 +931,9 @@ def repeatDemo f = Tk::Tile::TFrame.new($repeatDemo) b = Tk::Tile::TButton.new(f, :class=>'Repeater', :text=>'Press and hold') - begin + if version?('0.6') p = Tk::Tile::TProgressbar.new(f, :orient=>:horizontal, :maximum=>10) - rescue # progressbar is not supported (tile 0.4) + else # progressbar is not supported p = Tk::Tile::TProgress.new(f, :orient=>:horizontal, :from=>0, :to=>10) def p.step i = self.get + 1 -- cgit v1.2.3