From 3024ffdc3a5fdb115de651edae9e3d7a335a6614 Mon Sep 17 00:00:00 2001 From: nagai Date: Sat, 29 Mar 2008 05:25:12 +0000 Subject: * ext/tk/*: full update Ruby/Tk to support Ruby(1.9|1.8) and Tc/Tk8.5. * ext/tk/lib/tkextlib/tile.rb: [incompatible] remove TileWidgets' instate/state/identify method to avoid the conflict with standard widget options. Those methods are renamed to ttk_instate/ttk_state/ ttk_identify (tile_instate/tile_state/tile_identify are available too). Although I don't recommend, if you realy need old methods, please define "Tk::USE_OBSOLETE_TILE_STATE_METHOD = true" before "require 'tkextlib/tile'". * ext/tk/lib/tkextlib/tile.rb: "Tk::Tile::__Import_Tile_Widgets__!" is obsolete. It outputs warning. To control default widget set, use "Tk.default_widget_set = :Ttk". * ext/tk/lib/tk.rb: __IGNORE_UNKNOWN_CONFIGURE_OPTION__ method and __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode) method are defind as module methods of TkConfigMethod. It may help users to wrap old Ruby/Tk scripts (use standard widgets) to force to use Ttk widgets. Ttk widgets don't have some options of standard widgets which are control the view of widgets. When set ignore-mode true, configure method tries to ignoure such unknown options with no exception. Of course, it may raise other troubles on the GUI design. So, those are a little danger methods. * ext/tk/lib/tk/itemconfig.rb: __IGNORE_UNKNOWN_CONFIGURE_OPTION__ method and __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode) method are defind as module methods of TkItemConfigMethod as the same purpose as TkConfigMethod's ones. * ext/tk/sample/ttk_wrapper.rb: A new example. This is a tool for wrapping old Ruby/Tk scripts (which use standard widgets) to use Ttk (Tile) widgets as default. * ext/tk/sample/tkextlib/tile/demo.rb: use ttk_instate/ttk_state method instead of instate/state method. * ext/tk/lib/tk/root, ext/tk/lib/tk/namespace.rb, ext/tk/lib/tk/text.rb, ext/tk/lib/tkextlib/*: some 'instance_eval's are replaced to "instance_exec(self)". * ext/tk/lib/tk/event.rb: bug fix on KEY_TBL and PROC_TBL (?x is not a character code on Ruby1.9). * ext/tk/lib/tk/variable.rb: support new style of operation argument on Tcl/Tk's 'trace' command for variables. * ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget: bug fix * ext/tk/sammple/demos-jp/textpeer.rb, ext/tk/sammple/demos-en/textpeer.rb: new widget demo. * ext/tk/tcltklib.c: decrase SEGV troubles (probably) * ext/tk/lib/tk.rb: remove Thread.critical access if Ruby1.9 * ext/tk/lib/tk/multi-tk.rb: support Ruby1.9 (probably) * ext/tk/lib/tkextlib/tile.rb: add method to define Tcl/Tk command to make Tcl/Tk theme sources (based on different version of Tile extension) available. (Tk::Tile::__define_LoadImages_proc_for_comaptibility__) * ext/tk/lib/tk.rb, ext/tk/lib/tk/wm.rb: support dockable frames (Tcl/Tk8.5 feature). 'wm' command can treat many kinds of widgets as toplevel widgets. * ext/tk/lib/tkextlib/tile/style.rb: ditto. (Tk::Tile::Style.__define_wrapper_proc_for_compatibility__) * ext/tk/lib/tk/font.rb: add actual_hash and metrics_hash to get properties as a hash. metrics_hash method returns a boolean value for 'fixed' option. But metrics method returns numeric value (0 or 1) for 'fixed' option, because of backward compatibility. * ext/tk/lib/tk/timer.rb: somtimes fail to set callback procedure. * ext/tk/lib/tk.rb: add Tk.sleep and Tk.wakeup method. Tk.sleep doesn't block the eventloop. It will be better to use the method in event callbacks. * ext/tk/sample/tksleep_sample.rb: sample script about Tk.sleep. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15848 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/tk/sample/binstr_usage.rb | 12 +- ext/tk/sample/demos-en/arrow.rb | 18 +- ext/tk/sample/demos-en/bind.rb | 9 +- ext/tk/sample/demos-en/ctext.rb | 45 ++- ext/tk/sample/demos-en/hello | 6 +- ext/tk/sample/demos-en/hscale.rb | 2 +- ext/tk/sample/demos-en/items.rb | 9 +- ext/tk/sample/demos-en/patch_1.1c1 | 93 ------ ext/tk/sample/demos-en/rolodex-j | 323 --------------------- ext/tk/sample/demos-en/search.rb | 7 +- ext/tk/sample/demos-en/style.rb | 34 ++- ext/tk/sample/demos-en/textpeer.rb | 72 +++++ ext/tk/sample/demos-en/twind.rb | 6 +- ext/tk/sample/demos-en/vscale.rb | 1 - ext/tk/sample/demos-en/widget | 32 +- ext/tk/sample/demos-jp/arrow.rb | 18 +- ext/tk/sample/demos-jp/bind.rb | 9 +- ext/tk/sample/demos-jp/ctext.rb | 45 ++- ext/tk/sample/demos-jp/hscale.rb | 1 - ext/tk/sample/demos-jp/items.rb | 9 +- ext/tk/sample/demos-jp/plot.rb | 6 +- ext/tk/sample/demos-jp/search.rb | 7 +- ext/tk/sample/demos-jp/style.rb | 36 ++- ext/tk/sample/demos-jp/textpeer.rb | 78 +++++ ext/tk/sample/demos-jp/twind.rb | 6 +- ext/tk/sample/demos-jp/vscale.rb | 2 +- ext/tk/sample/demos-jp/widget | 47 ++- ext/tk/sample/encstr_usage.rb | 5 +- ext/tk/sample/irbtkw.rbw | 24 +- ext/tk/sample/tkextlib/tile/demo.rb | 37 ++- .../sample/tkextlib/tile/themes/blue/pkgIndex.tcl | 2 +- ext/tk/sample/tkextlib/tile/themes/kroc.rb | 30 +- ext/tk/sample/tkextlib/tile/toolbutton.tcl | 33 +-- ext/tk/sample/tkrttimer.rb | 13 +- ext/tk/sample/tksleep_sample.rb | 29 ++ ext/tk/sample/ttk_wrapper.rb | 154 ++++++++++ 36 files changed, 700 insertions(+), 560 deletions(-) delete mode 100644 ext/tk/sample/demos-en/patch_1.1c1 delete mode 100644 ext/tk/sample/demos-en/rolodex-j create mode 100644 ext/tk/sample/demos-en/textpeer.rb create mode 100644 ext/tk/sample/demos-jp/textpeer.rb create mode 100644 ext/tk/sample/tksleep_sample.rb create mode 100644 ext/tk/sample/ttk_wrapper.rb (limited to 'ext/tk/sample') diff --git a/ext/tk/sample/binstr_usage.rb b/ext/tk/sample/binstr_usage.rb index 91692856f9..be8399ba51 100644 --- a/ext/tk/sample/binstr_usage.rb +++ b/ext/tk/sample/binstr_usage.rb @@ -16,7 +16,7 @@ to avoid such troubles. Please see the source code of this sample. \ A Tk::BinaryString instance is used to create the image for the center button. EOM -ImgFile=['images','tcllogo.gif'].join(File::Separator) +ImgFile=[File.dirname(__FILE__), 'images','tcllogo.gif'].join(File::Separator) ph1 = TkPhotoImage.new(:file=>ImgFile) p ph1.configinfo @@ -28,12 +28,18 @@ ph2 = TkPhotoImage.new(:data=>b_str) p ph2.configinfo p ph2.data(:grayscale=>true) -ph3 = TkPhotoImage.new() -ph3.put(ph2.data(:grayscale=>true)) +ph3 = TkPhotoImage.new(:palette=>256) +ph3.put(ph2.data) + +ph4 = TkPhotoImage.new() +ph4.put(ph2.data(:grayscale=>true)) + +#p [b_str.encoding, b_str.rb_encoding] f = TkFrame.new.pack TkButton.new(:parent=>f, :image=>ph1, :command=>proc{exit}).pack(:side=>:left) TkButton.new(:parent=>f, :image=>ph2, :command=>proc{exit}).pack(:side=>:left) TkButton.new(:parent=>f, :image=>ph3, :command=>proc{exit}).pack(:side=>:left) +TkButton.new(:parent=>f, :image=>ph4, :command=>proc{exit}).pack(:side=>:left) Tk.mainloop diff --git a/ext/tk/sample/demos-en/arrow.rb b/ext/tk/sample/demos-en/arrow.rb index b62e1966eb..4a589a0892 100644 --- a/ext/tk/sample/demos-en/arrow.rb +++ b/ext/tk/sample/demos-en/arrow.rb @@ -77,11 +77,19 @@ def arrowSetup(c) 'arrow'=>'both', 'arrowshape'=>v.smallTips) TkcText.new(c, v.x2-5*v.b, tmp+5, 'text'=>v.b, 'anchor'=>'n') - TkcText.new(c, v.x1, 310, 'text'=>"'width'=>#{v.width}", 'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') - TkcText.new(c, v.x1, 330, - 'text'=>"'arrowshape'=>[#{v.a}, #{v.b}, #{v.c}]", 'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') + if $tk_version =~ /^4.*/ + TkcText.new(c, v.x1, 310, 'text'=>"'width'=>#{v.width}", 'anchor'=>'w', + 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') + TkcText.new(c, v.x1, 330, + 'text'=>"'arrowshape'=>[#{v.a}, #{v.b}, #{v.c}]",'anchor'=>'w', + 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') + else + TkcText.new(c, v.x1, 310, 'text'=>"'width'=>#{v.width}", 'anchor'=>'w', + 'font'=>'Helvetica 18') + TkcText.new(c, v.x1, 330, + 'text'=>"'arrowshape'=>[#{v.a}, #{v.b}, #{v.c}]", + 'anchor'=>'w', 'font'=>'Helvetica 18') + end v.count += 1 end diff --git a/ext/tk/sample/demos-en/bind.rb b/ext/tk/sample/demos-en/bind.rb index b7e7122c57..5d6ec84edb 100644 --- a/ext/tk/sample/demos-en/bind.rb +++ b/ext/tk/sample/demos-en/bind.rb @@ -43,11 +43,11 @@ def tag_binding_for_bind_demo(tag, enter_style, leave_style) end # text -TkText.new($bind_demo){|t| +txt = TkText.new($bind_demo){|t| # setgrid 'true' - width 60 - height 24 + #width 60 + #height 24 font $font wrap 'word' TkScrollbar.new($bind_demo) {|s| @@ -120,3 +120,6 @@ TkText.new($bind_demo){|t| TkTextMarkInsert.new(t, '0.0') configure('state','disabled') } + +txt.width 60 +txt.width 24 diff --git a/ext/tk/sample/demos-en/ctext.rb b/ext/tk/sample/demos-en/ctext.rb index dbb5e32638..8c10880ed6 100644 --- a/ext/tk/sample/demos-en/ctext.rb +++ b/ext/tk/sample/demos-en/ctext.rb @@ -56,19 +56,28 @@ $ctext_canvas = TkCanvas.new($ctext_demo, 'relief'=>'flat', $ctext_canvas.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'both') # font -textFont = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' +if $tk_version =~ /^4.*/ + textFont = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' +else + textFont = 'Helvetica 24' +end # canvas TkcRectangle.new($ctext_canvas, 245, 195, 255, 205, 'outline'=>'black', 'fill'=>'red') +ctag_text_param = { + 'text'=>"This is just a string of text to demonstrate the text facilities of canvas widgets. Bindings have been been defined to support editing (see above).", + 'width'=>440, 'anchor'=>'n', 'justify'=>'left' +} +if $tk_version =~ /^4.*/ + ctag_text_param['font'] = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' +else + ctag_text_param['font'] = 'Helvetica 24' +end + $ctag_text = TkcTag.new($ctext_canvas) -$ctag_text.withtag(TkcText.new($ctext_canvas, 250, 200, - 'text'=>"This is just a string of text to demonstrate the text facilities of canvas widgets. Bindings have been been defined to support editing (see above).", - 'width'=>440, 'anchor'=>'n', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*', - 'kanjifont'=>'-*--24-*-jisx0208.1983-0', - 'justify'=>'left') ) +$ctag_text.withtag(TkcText.new($ctext_canvas, 250, 200, ctag_text_param)) $ctag_text.bind('1', proc{|x,y| textB1Press $ctext_canvas,x,y}, "%x %y") $ctag_text.bind('B1-Motion', proc{|x,y| textB1Move $ctext_canvas,x,y}, "%x %y") @@ -110,9 +119,14 @@ mkTextConfig $ctext_canvas, x+60, y+60, 'anchor', 'nw', color item = TkcRectangle.new($ctext_canvas, x+40, y+40, x+50, y+50, 'outline'=>'black', 'fill'=>'red') item.bind('1', proc{$ctag_text.configure 'anchor', 'center'}) -TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Text Position', 'anchor'=>'s', - 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', - 'fill'=>'brown') +if $tk_version =~ /^4.*/ + TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Text Position', + 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', + 'anchor'=>'s', 'fill'=>'brown') +else + TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Text Position', + 'font'=>'Times 24', 'anchor'=>'s', 'fill'=>'brown') +end # Lastly, create some items that allow the text's justification to be # changed. @@ -123,9 +137,14 @@ color = 'SeaGreen2' mkTextConfig $ctext_canvas, x, y, 'justify', 'left', color mkTextConfig $ctext_canvas, x+30, y, 'justify', 'center', color mkTextConfig $ctext_canvas, x+60, y, 'justify', 'right', color -TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Justification', 'anchor'=>'s', - 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', - 'fill'=>'brown') +if $tk_version =~ /^4.*/ + TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Justification', + 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', + 'anchor'=>'s', 'fill'=>'brown') +else + TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Justification', + 'font'=>'Times 24', 'anchor'=>'s', 'fill'=>'brown') +end $ctext_canvas.itembind('config', 'Enter', proc{textEnter $ctext_canvas}) $ctext_canvas.itembind('config', 'Leave', diff --git a/ext/tk/sample/demos-en/hello b/ext/tk/sample/demos-en/hello index f06eabe518..5e86ad7e3e 100644 --- a/ext/tk/sample/demos-en/hello +++ b/ext/tk/sample/demos-en/hello @@ -1,9 +1,9 @@ #!/usr/bin/env ruby require 'tk' -unless /^8\.[1-9]/ =~ Tk::TCL_VERSION && !Tk::JAPANIZED_TK - require 'tkencoding' -end +#unless /^8\.[1-9]/ =~ Tk::TCL_VERSION && !Tk::JAPANIZED_TK +# require 'tkencoding' +#end TkButton.new(nil, 'text'=>"Hello Ruby world!", diff --git a/ext/tk/sample/demos-en/hscale.rb b/ext/tk/sample/demos-en/hscale.rb index 14e395b61a..743c4b4852 100644 --- a/ext/tk/sample/demos-en/hscale.rb +++ b/ext/tk/sample/demos-en/hscale.rb @@ -62,7 +62,6 @@ TkFrame.new($hscale_demo) {|frame| scale.set 75 }.pack('side'=>'top', 'fill'=>'x') - def setWidth(w, width) width = width + 21 x2 = width - 30 @@ -72,3 +71,4 @@ def setWidth(w, width) w.coords 'poly',20,15,20,35,x2,35,x2,45,width,25,x2,5,x2,15,20,15 w.coords 'line',20,15,20,35,x2,35,x2,45,width,25,x2,5,x2,15,20,15 end + diff --git a/ext/tk/sample/demos-en/items.rb b/ext/tk/sample/demos-en/items.rb index 8ab7668a07..23191b59b9 100644 --- a/ext/tk/sample/demos-en/items.rb +++ b/ext/tk/sample/demos-en/items.rb @@ -94,8 +94,13 @@ TkcLine.new(cvs, '0c', '16c', '30c', '16c', 'width'=>2) TkcLine.new(cvs, '10c', '0c', '10c', '24c', 'width'=>2) TkcLine.new(cvs, '20c', '0c', '20c', '24c', 'width'=>2) -font1 = '-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*' -font2 = '-Adobe-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*' +if $tk_version =~ /^4.*/ + font1 = '-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*' + font2 = '-Adobe-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*' +else + font1 = 'Helvetica 12' + font2 = 'Helvetica 24 bold' +end if TkWinfo.depth($root).to_i > 1 blue = 'DeepSkyBlue3' red = 'red' diff --git a/ext/tk/sample/demos-en/patch_1.1c1 b/ext/tk/sample/demos-en/patch_1.1c1 deleted file mode 100644 index d3952e71eb..0000000000 --- a/ext/tk/sample/demos-en/patch_1.1c1 +++ /dev/null @@ -1,93 +0,0 @@ ---- /usr/src/ruby-1.1c1/lib/tkcanvas.rb Tue Jul 21 18:18:02 1998 -+++ tkcanvas.rb Fri Jul 24 20:38:24 1998 -@@ -310,7 +310,7 @@ - || key == 'latinfont' || key == 'asciifont' ) - tagfont_configure(tagid(tagOrId), {key=>value}) - else -- tk_call 'itemconfigure', tagid(tagOrId), "-#{key}", value -+ tk_send 'itemconfigure', tagid(tagOrId), "-#{key}", value - end - end - end ---- /usr/src/ruby-1.1c1/lib/tkfont.rb Fri Jul 17 23:43:28 1998 -+++ tkfont.rb Fri Jul 24 17:46:22 1998 -@@ -42,7 +42,7 @@ - r | [] - - when /^8\.*/ -- list(tk_call('font', 'names')) -+ tk_split_simplelist(tk_call('font', 'names')) - - end - end -@@ -89,10 +89,14 @@ - if fnt == [] - TkFont.new(nil, nil).call_font_configure(path, *(args + [{}])) - else -- compound = Hash[*list(tk_call('font', 'configure', -- fnt))].collect{|key,value| -- [key[1..-1], value] -- }.assoc('compound')[1] -+ begin -+ compound = Hash[*list(tk_call('font', 'configure', -+ fnt))].collect{|key,value| -+ [key[1..-1], value] -+ }.assoc('compound')[1] -+ rescue -+ compound = [] -+ end - if compound == [] - TkFont.new(fnt, DEFAULT_KANJI_FONT_NAME) \ - .call_font_configure(path, *(args + [{}])) -@@ -156,14 +160,19 @@ - elsif font.kind_of? Array - finfo = {} - finfo['family'] = font[0].to_s -- if font[1] && font[1] != '0' && font[1] =~ /^(|\+|-)([0-9]+)$/ -- if $1 == '-' -- finfo['pixels'] = font[1].to_s -+ if font[1] -+ fsize = font[1].to_s -+ if fsize != '0' && fsize =~ /^(|\+|-)([0-9]+)$/ -+ if $1 == '-' -+ finfo['pixels'] = $2 -+ else -+ finfo['points'] = $2 -+ end - else -- finfo['points'] = font[1].to_s -+ finfo['points'] = '13' - end - end -- finfo[2..-1].each{|style| -+ font[2..-1].each{|style| - case (style) - when 'normal' - finfo['weight'] = style -@@ -199,16 +208,19 @@ - elsif font.kind_of? Array - finfo = {} - finfo['family'] = font[0].to_s -- if font[1] && font[1] != '0' && font[1] =~ /^(|\+|-)([0-9]+)$/ -- if $1 == '-' -- finfo['pixels'] = $2 -+ if font[1] -+ fsize = font[1].to_s -+ if fsize != '0' && fsize =~ /^(|\+|-)([0-9]+)$/ -+ if $1 == '-' -+ finfo['pixels'] = $2 -+ else -+ finfo['points'] = $2 -+ end - else -- finfo['points'] = $2 -+ finfo['points'] = '13' - end -- else -- finfo['points'] = '13' - end -- finfo[2..-1].each{|style| -+ font[2..-1].each{|style| - case (style) - when 'normal' - finfo['weight'] = style diff --git a/ext/tk/sample/demos-en/rolodex-j b/ext/tk/sample/demos-en/rolodex-j deleted file mode 100644 index 27e2bc9da0..0000000000 --- a/ext/tk/sample/demos-en/rolodex-j +++ /dev/null @@ -1,323 +0,0 @@ -#!/usr/bin/env ruby -# -# rolodex -- -# このスクリプトは Tom LaStrange の rolodex の一部です。 -# -# Copyright (C) 1998 by Takaaki Tateishi -# Time-stamp: "03/08/02 14:02:04 nagai" -# - -require "tk" - -Tk.encoding = "euc-jp" -$font = TkFont.new('k14') - -def show_help(topic,x=0,y=0) - if( topic.is_a?(TkWindow) ) - w = TkWinfo.containing(x,y) - if( w.is_a?(TkWindow) ) - if( TkWinfo.exist?(w) ) - topic = w - end - end - end - - if( $helpTopics.include?(topic) ) - msg = $helpTopics[topic] - else - msg = "このトピックについてのヘルプはまだ使用できません" - end - TkDialog.new("title"=>"Rolodex Help", - "message"=>"「#{topic}」\n\n#{msg}", - "font"=>$font, - "default_button"=>0, - "buttons"=>["OK"]) -end - -def fillCard - clearAction - $root.frame.entry[1].insert(0, "立石 孝彰") - $root.frame.entry[2].insert(0, "923-1292 石川県") - $root.frame.entry[3].insert(0, "辰口町 旭台 1-1") - $root.frame.entry[4].insert(0, "北陸先端科学技術大学院大学") - $root.frame.entry[5].insert(0,"private") - $root.frame.entry[6].insert(0,"***-***-****") - $root.frame.entry[7].insert(0,"***-***-****") -end - -def addAction - for i in 1..7 - STDERR.print format("%-12s %s\n", - RolodexFrame::LABEL[i], - $root.frame.entry[i].value) - end -end - -def clearAction - for i in 1..7 - $root.frame.entry[i].delete(0,"end") - end -end - -def fileAction - TkDialog.new("title"=>"File Selection", - "message"=>"これはファイル選択ダイアログのダミーです。\n", - "font"=>$font, - "default_button"=>0, - "buttons"=>["OK"]) - STDERR.print "dummy file name\n" -end - -def deleteAction - result = TkDialog.new("title"=>"Confirm Action", - "message"=>"よろしいですか?", - "font"=>$font, - "default_button"=>0, - "buttons"=>["キャンセル"]) - if( result.value == 0 ) - clearAction - end -end - - -class RolodexFrame < TkFrame - attr_reader :entry, :label - - LABEL = ["","名前:","住所","","","電話(自宅):","電話(会社):","Fax:"] - - def initialize(parent=nil,keys=nil) - super(parent,keys) - self["relief"] = "flat" - @i = [] - @label = [] - @entry = [] - for i in 1..7 - @i[i] = TkFrame.new(self) - @i[i].pack("side"=>"top", - "pady"=>2, - "anchor"=>"e") - @label[i] = TkLabel.new(@i[i], - "text"=>LABEL[i], - "anchor"=>"e", - "font" => $font) - @entry[i] = TkEntry.new(@i[i], - "width"=>30, - "relief"=>"sunken", - "font" => $font) - @entry[i].pack("side"=>"right") - @label[i].pack("side"=>"right") - end - end -end - -class RolodexButtons < TkFrame - attr_reader :clear, :add, :search, :delete - - def initialize(parent,keys=nil) - super(parent,keys) - @clear = TkButton.new(self, - "text" => "クリアー", - "font" => $font) - @add = TkButton.new(self, - "text" => "追加", - "font" => $font) - @search = TkButton.new(self, - "text" => "検索", - "font" => $font) - @delete = TkButton.new(self, - "text" => "消去", - "font" => $font) - for w in [@clear,@add,@search,@delete] - w.pack("side"=>"left", "padx"=>2) - end - end -end - -class RolodexMenuFrame < TkFrame - attr_reader :file_menu, :help_menu, :file, :help - - def initialize(parent,keys=nil) - super(parent,keys) - configure("relief"=>"raised", - "borderwidth"=>1) - - @file = TkMenubutton.new(self, - "text"=> "ファイル", - "font"=> $font, - "underline"=>0) - @file_menu = TkMenu.new(@file) - @file_menu.add("command", - "label" => "読み込み ...", - "font" => $font, - "command" => proc{fileAction}, - "underline" => 0) - @file_menu.add("command", - "label" => "終了", - "font" => $font, - "command" => proc{$root.destroy}, - "underline" => 0) - @file.menu(@file_menu) - @file.pack("side"=>"left") - - @help = TkMenubutton.new(self, - "text"=> "ヘルプ", - "font"=> $font, - "underline"=>0) - @help_menu = TkMenu.new(@help) - @help_menu.add("command", - "label"=> "コンテキストについて", - "font" => $font, - "command"=>proc{show_help("コンテキスト")}, - "underline"=>3) - @help_menu.add("command", - "label"=> "ヘルプについて", - "font" => $font, - "command"=>proc{show_help("ヘルプ")}, - "underline"=>3) - @help_menu.add("command", - "label"=> "ウィンドウについて", - "font" => $font, - "command"=>proc{show_help("ウィンドウ")}, - "underline"=>3) - @help_menu.add("command", - "label"=> "キー操作について", - "font" => $font, - "command"=>proc{show_help("キー操作")}, - "underline"=>3) - @help_menu.add("command", - "label"=> "バージョン情報", - "font" => $font, - "command"=>proc{show_help("バージョン情報")}, - "underline"=>3) - @help.menu(@help_menu) - @help.pack("side"=>"right") - end -end - -class Rolodex < TkRoot - attr_reader :frame, :buttons, :menu - - def initialize(*args) - super(*args) - @frame = RolodexFrame.new(self) - @frame.pack("side"=>"top", - "fill"=>"y", - "anchor"=>"center") - @buttons = RolodexButtons.new(self) - @buttons.pack("side"=>"bottom", - "pady"=>2, - "anchor"=>"center") - @menu = RolodexMenuFrame.new(self) - @menu.pack("before"=>@frame, - "side"=>"top", - "fill"=>"x") - end -end - -$root = Rolodex.new - -$root.buttons.delete.configure("command"=>proc{deleteAction}) -$root.buttons.add.configure("command"=>proc{addAction}) -$root.buttons.clear.configure("command"=>proc{clearAction}) -$root.buttons.search.configure("command"=>proc{addAction; fillCard}) - -$root.buttons.clear.configure("text"=> "クリアー Ctrl+C", "font" => $font) -$root.bind("Control-c",proc{clearAction}) - -$root.buttons.add.configure("text"=> "追加 Ctrl+A", "font" => $font) -$root.bind("Control-a",proc{addAction}) - -$root.buttons.search.configure("text"=> "検索 Ctrl+S", "font" => $font) -$root.bind("Control-s",proc{addAction; fillCard}) - -$root.buttons.delete.configure("text"=> "消去 Ctrl+D", "font" => $font) -$root.bind("Control-d",proc{deleteAction}) - -$root.menu.file_menu.entryconfigure(1, "accel"=>"Ctrl+F") -$root.bind("Control-f",proc{fileAction}) - -$root.menu.file_menu.entryconfigure(2, "accel"=>"Ctrl+Q") -$root.bind("Control-q",proc{$root.destroy}) - -$root.frame.entry[1].focus - -$root.bind("Any-F1", - proc{|event| show_help(event.widget, event.x_root, event.y_root)}) -$root.bind("Any-Help", - proc{|event| show_help(event.widget, event.x_root, event.y_root)}) - - -$helpTopics = {} - -$helpTopics[$root.menu.file] = <true, 'wrap'=>'word') {|t| pack('side'=>'right', 'fill'=>'y') } pack('expand'=>'yes', 'fill'=>'both') -} +} # Set up display styles for text highlighting. @@ -173,8 +173,13 @@ type a string in the lower entry and type or click on \ \"Load File\". This will cause all of the instances of the string to \ be tagged with the tag \"search\", and it will arrange for the tag\'s \ display attributes to change to make all of the strings blink.") +$search_text.insert('end', "\ +The current directory to load a file is \"#{Dir.pwd}\".\ +") $search_text.set_insert '0.0' $search_fileName.value = '' $search_searchString.value = '' +$search_text.width = 60 +$search_text.height = 20 diff --git a/ext/tk/sample/demos-en/style.rb b/ext/tk/sample/demos-en/style.rb index 5ed11aa459..8606893c9b 100644 --- a/ext/tk/sample/demos-en/style.rb +++ b/ext/tk/sample/demos-en/style.rb @@ -40,9 +40,10 @@ TkFrame.new($style_demo) {|frame| TkText.new($style_demo){|t| # setgrid 'true' - width 70 - height 32 + #width 70 + #height 32 wrap 'word' + font $font TkScrollbar.new($style_demo) {|s| pack('side'=>'right', 'fill'=>'y') command proc{|*args| t.yview(*args)} @@ -51,11 +52,20 @@ TkText.new($style_demo){|t| pack('expand'=>'yes', 'fill'=>'both') # - style_tag_bold = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-O-Normal--*-120-*-*-*-*-*-*') - style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font) + family = 'Courier' + + if $tk_version =~ /^4.*/ + style_tag_bold = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-O-Normal--*-120-*-*-*-*-*-*') + style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font) style_tag_verybig = TkTextTag.new(t, 'font'=>'-*-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*') -# style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font) + # style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font) style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*') + else + style_tag_bold = TkTextTag.new(t, 'font'=>[family, 12, :bold, :italic]) + style_tag_big = TkTextTag.new(t, 'font'=>[family, 14, :bold]) + style_tag_verybig = TkTextTag.new(t, 'font'=>['Helvetica', 24, :bold]) + style_tag_small = TkTextTag.new(t, 'font'=>['Times 8 bold']) + end ### # case($tk_version) # when /^4.*/ @@ -109,8 +119,13 @@ TkText.new($style_demo){|t| style_tag_overstrike = TkTextTag.new(t, 'overstrike'=>'on') style_tag_right = TkTextTag.new(t, 'justify'=>'right') style_tag_center = TkTextTag.new(t, 'justify'=>'center') - style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') - style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') + if $tk_version =~ /^4.*/ + style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') + style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') + else + style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>[family, 10]) + style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>[family, 10]) + end style_tag_margins = TkTextTag.new(t, 'lmargin1'=>'12m', 'lmargin2'=>'6m', 'rmargin'=>'10m') style_tag_spacing = TkTextTag.new(t, 'spacing1'=>'10p', 'spacing2'=>'2p', @@ -132,7 +147,8 @@ available display styles are: insert('end', " You can choose any X font, ") insert('end', "large", style_tag_verybig) insert('end', " or ") - insert('end', "small.\n") + insert('end', "small", style_tag_small) + insert('end', ".\n") insert('end', "\n2. Color.", style_tag_big) insert('end', " You can change either the ") insert('end', "background", style_tag_color1) @@ -209,3 +225,5 @@ available display styles are: } +txt.width 70 +txt.height 32 diff --git a/ext/tk/sample/demos-en/textpeer.rb b/ext/tk/sample/demos-en/textpeer.rb new file mode 100644 index 0000000000..d98ef170b4 --- /dev/null +++ b/ext/tk/sample/demos-en/textpeer.rb @@ -0,0 +1,72 @@ +# +# text widget peering demo (called by 'widget') +# +# based on Tcl/Tk8.5.0 widget demos + +if defined?($textpeer_demo) && $textpeer_demo + $textpeer_demo.destroy + $textpeer_demo = nil +end + +# demo toplevel widget +$textpeer_demo = TkToplevel.new {|w| + title("Text Wdget Peering Demonstration") + iconname("textpeer") + positionWindow(w) +} + +count = [0] + +## Define a widget that we peer from; it won't ever actually be shown though +first = TkText.new($textpeer_demo, :widgetname=>"text#{count[0] += 1}") +first.insert :end,"This is a coupled pair of text widgets; they are peers to " +first.insert :end,"each other. They have the same underlying data model, but " +first.insert :end,"can show different locations, have different current edit " +first.insert :end,"locations, and have different selections. You can also " +first.insert :end,"create additional peers of any of these text widgets using " +first.insert :end,"the Make Peer button beside the text widget to clone, and " +first.insert :end,"delete a particular peer widget using the Delete Peer " +first.insert :end,"button." + +## Procedures to make and kill clones; most of this is just so that the demo +## looks nice... +def makeClone(count, win, txt) + cnt = (count[0] += 1) + peer = TkText::Peer.new(txt, win, :widgetname=>"text#{cnt}") + sbar = TkScrollbar.new(win, :widgetname=>"sb#{cnt}") + peer.yscrollbar sbar + b1 = TkButton.new(win, :widgetname=>"clone#{cnt}", :text=>'Make Peer', + :command=>proc{makeClone(count, win, peer)}) + b2 = TkButton.new(win, :widgetname=>"kill#{cnt}", :text=>'Delete Peer', + :command=>proc{killClone(win, cnt)}) + row = cnt * 2 + TkGrid.configure(peer, sbar, b1, :sticky=>'nsew', :row=>row) + TkGrid.configure('^', '^', b2, :sticky=>'nsew', :row=>(row+=1)) + TkGrid.configure(b1, b2, :sticky=>'new') + TkGrid.rowconfigure(win, b2, :weight=>1) +end + +def killClone(win, cnt) + Tk.destroy("#{win.path}.text#{cnt}", "#{win.path}.sb#{cnt}", + "#{win.path}.clone#{cnt}", "#{win.path}.kill#{cnt}") +end + +## Now set up the GUI +makeClone(count, $textpeer_demo, first) +makeClone(count, $textpeer_demo, first) +first.destroy + +## See Code / Dismiss buttons +TkFrame.new($textpeer_demo){|f| + TkButton.new(f, :text=>'Dismiss', :width=>15, :command=>proc{ + $textpeer_demo.destroy + $textpeer_demo = nil + }).pack(:side=>:left, :expand=>true) + + TkButton.new(f, :text=>'See Code', :width=>15, :command=>proc{ + showCode 'textpeer' + }).pack(:side=>:left, :expand=>true) + + TkGrid.configure(f, '-', '-', :sticky=>'ew', :row=>5000) +} +TkGrid.columnconfigure($textpeer_demo, 0, :weight=>1) diff --git a/ext/tk/sample/demos-en/twind.rb b/ext/tk/sample/demos-en/twind.rb index 24a4bcf706..f29e49f35a 100644 --- a/ext/tk/sample/demos-en/twind.rb +++ b/ext/tk/sample/demos-en/twind.rb @@ -206,7 +206,11 @@ def textWindPlot (t) cursor 'top_left_arrow' } - font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' + if $tk_version =~ /^4.*/ + font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' + else + font = 'Helvetica 18' + end TkcLine.new($twind_plot, 100, 250, 400, 250, 'width'=>2) TkcLine.new($twind_plot, 100, 250, 100, 50, 'width'=>2) diff --git a/ext/tk/sample/demos-en/vscale.rb b/ext/tk/sample/demos-en/vscale.rb index 636b85813b..c0170467d5 100644 --- a/ext/tk/sample/demos-en/vscale.rb +++ b/ext/tk/sample/demos-en/vscale.rb @@ -66,7 +66,6 @@ TkFrame.new($vscale_demo) {|frame| scale.set 75 }.pack - def setHeight(w, height) height = height + 21 y2 = height - 30 diff --git a/ext/tk/sample/demos-en/widget b/ext/tk/sample/demos-en/widget index 3c50582211..391d8532b6 100644 --- a/ext/tk/sample/demos-en/widget +++ b/ext/tk/sample/demos-en/widget @@ -21,7 +21,8 @@ require 'tk' #---------------------------------------------------------------- # widget demo directory -$demo_dir = File.dirname($0) +# $demo_dir = File.dirname($0) +$demo_dir = File.dirname(__FILE__) # root $root = TkRoot.new{title "Ruby/Tk Widget Demonstration"} @@ -164,12 +165,17 @@ else textFrame.pack('expand'=>'yes', 'fill'=>'both') statusBar = TkFrame.new($root) {|f| + if $tk_version =~ /^4.*/ + statusfont = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*' + else + statusfont = 'Helvetica 10' + end $statusBarLabel = \ TkLabel.new(f, 'text'=>" ", 'relief'=>'sunken', 'bd'=>1, 'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*') \ + 'font'=>statusfont) \ .pack('side'=>'left', 'padx'=>2, 'expand'=>'yes', 'fill'=>'both') TkLabel.new(f, 'width'=>8, 'relief'=>'sunken', 'bd'=>1, 'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*') \ + 'font'=>statusfont) \ .pack('side'=>'left', 'padx'=>2) }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>2) end @@ -178,7 +184,11 @@ end # section titles and demo descriptions. Also define the bindings for # tags. -tag_title = TkTextTag.new(txt, 'font'=>'-*-Helvetica-Bold-R-Normal--*-180-*-*-*-*-*-*') +if $tk_version =~ /^4.*/ + tag_title = TkTextTag.new(txt, 'font'=>'-*-Helvetica-Bold-R-Normal--*-180-*-*-*-*-*-*') +else + tag_title = TkTextTag.new(txt, 'font'=>'Helvetica 18 bold') +end # We put some "space" characters to the left and right of each demo description # so that the descriptions are highlighted only when the mouse cursor @@ -331,6 +341,8 @@ txt.insert('end', "5. A text widget with embedded windows. (if supported)\n", ta txt.insert('end', " \n ", tag_demospace) txt.insert('end', "6. A search tool built with a text widget.\n", tag_demo, "demo-search") txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "7. Peering text widgets. (if supported)\n", tag_demo, "demo-textpeer") +txt.insert('end', " \n ", tag_demospace) txt.insert('end', "\n") txt.insert('end', "Canvases\n", tag_title) @@ -445,7 +457,11 @@ def showVars1(parent, *args) text "Variable values:" width 20 anchor 'center' - font '-Adobe-helvetica-medium-r-normal--*-180-*-*-*-*-*-*' + if $tk_version =~ /^4.*/ + font '-Adobe-helvetica-medium-r-normal--*-180-*-*-*-*-*-*' + else + font 'Helvetica 14' + end }.pack('side'=>'top', 'fill'=>'x') len = 1 args.each{|vnam,vbody| @@ -592,7 +608,9 @@ end private :_null_binding def eval_samplecode(code) - Thread.new{ _null_binding.pseudo_toplevel_eval{ eval(code) } }.run + #eval(code) + #_null_binding.pseudo_toplevel_eval{ eval(code) } + Thread.new{ _null_binding.pseudo_toplevel_eval{ eval(code) } } Tk.update end @@ -896,7 +914,7 @@ end # def aboutBox Tk.messageBox('icon'=>'info', 'type'=>'ok', 'title'=>'About Widget Demo', - 'message'=>"Ruby/Tk widget demonstration Ver.1.6.0-en\n\n" + + 'message'=>"Ruby/Tk widget demonstration Ver.1.6.3-en\n\n" + "based on demos of Tk8.1 -- 8.5 " + "( Copyright:: " + "(c) 1996-1997 Sun Microsystems, Inc. / " + diff --git a/ext/tk/sample/demos-jp/arrow.rb b/ext/tk/sample/demos-jp/arrow.rb index 43c6eef4eb..b2c1067027 100644 --- a/ext/tk/sample/demos-jp/arrow.rb +++ b/ext/tk/sample/demos-jp/arrow.rb @@ -74,11 +74,19 @@ def arrowSetup(c) 'arrow'=>'both', 'arrowshape'=>v.smallTips) TkcText.new(c, v.x2-5*v.b, tmp+5, 'text'=>v.b, 'anchor'=>'n') - TkcText.new(c, v.x1, 310, 'text'=>"'width'=>#{v.width}", 'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') - TkcText.new(c, v.x1, 330, - 'text'=>"'arrowshape'=>[#{v.a}, #{v.b}, #{v.c}]", 'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') + if $tk_version =~ /^4.*/ + TkcText.new(c, v.x1, 310, 'text'=>"'width'=>#{v.width}", 'anchor'=>'w', + 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') + TkcText.new(c, v.x1, 330, + 'text'=>"'arrowshape'=>[#{v.a}, #{v.b}, #{v.c}]",'anchor'=>'w', + 'font'=>'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*') + else + TkcText.new(c, v.x1, 310, 'text'=>"'width'=>#{v.width}", 'anchor'=>'w', + 'font'=>'Helvetica 18') + TkcText.new(c, v.x1, 330, + 'text'=>"'arrowshape'=>[#{v.a}, #{v.b}, #{v.c}]", + 'anchor'=>'w', 'font'=>'Helvetica 18') + end v.count += 1 end diff --git a/ext/tk/sample/demos-jp/bind.rb b/ext/tk/sample/demos-jp/bind.rb index 87b39721d1..3b6f6242c2 100644 --- a/ext/tk/sample/demos-jp/bind.rb +++ b/ext/tk/sample/demos-jp/bind.rb @@ -41,11 +41,11 @@ def tag_binding_for_bind_demo(tag, enter_style, leave_style) end # text 生成 -TkText.new($bind_demo){|t| +txt = TkText.new($bind_demo){|t| # 生成 setgrid 'true' - width 60 - height 24 + #width 60 + #height 24 font $font wrap 'word' TkScrollbar.new($bind_demo) {|s| @@ -118,3 +118,6 @@ TkText.new($bind_demo){|t| TkTextMarkInsert.new(t, '0.0') configure('state','disabled') } + +txt.width 60 +txt.width 24 diff --git a/ext/tk/sample/demos-jp/ctext.rb b/ext/tk/sample/demos-jp/ctext.rb index 35d43febbc..f5daf7ca05 100644 --- a/ext/tk/sample/demos-jp/ctext.rb +++ b/ext/tk/sample/demos-jp/ctext.rb @@ -53,19 +53,28 @@ $ctext_canvas = TkCanvas.new($ctext_demo, 'relief'=>'flat', $ctext_canvas.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'both') # font 設定 -textFont = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' +if $tk_version =~ /^4.*/ + textFont = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' +else + textFont = 'Helvetica 24' +end # canvas 設定 TkcRectangle.new($ctext_canvas, 245, 195, 255, 205, 'outline'=>'black', 'fill'=>'red') +ctag_text_param = { + 'text'=>"これはキャンバスwidgetのテキスト機能をデモするための文字列です。\n上で述べたような編集を可能とするためのバインディングを施しています。", + 'width'=>440, 'anchor'=>'n', 'justify'=>'left' +} +if $tk_version =~ /^4.*/ + ctag_text_param['font'] = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' + ctag_text_param['kanjifont'] = '-*-r-*--24-*-jisx0208.1983-0' +else + ctag_text_param['font'] = 'Helvetica 24' +end $ctag_text = TkcTag.new($ctext_canvas) -$ctag_text.withtag(TkcText.new($ctext_canvas, 250, 200, - 'text'=>"これはキャンバスwidgetのテキスト機能をデモするための文字列です。\n上で述べたような編集を可能とするためのバインディングを施しています。", - 'width'=>440, 'anchor'=>'n', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*', - 'kanjifont'=>'-*-r-*--24-*-jisx0208.1983-0', - 'justify'=>'left') ) +$ctag_text.withtag(TkcText.new($ctext_canvas, 250, 200, ctag_text_param)) $ctag_text.bind('1', proc{|x,y| textB1Press $ctext_canvas,x,y}, "%x %y") $ctag_text.bind('B1-Motion', proc{|x,y| textB1Move $ctext_canvas,x,y}, "%x %y") @@ -107,9 +116,14 @@ mkTextConfig $ctext_canvas, x+60, y+60, 'anchor', 'nw', color item = TkcRectangle.new($ctext_canvas, x+40, y+40, x+50, y+50, 'outline'=>'black', 'fill'=>'red') item.bind('1', proc{$ctag_text.configure 'anchor', 'center'}) -TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Text Position', 'anchor'=>'s', - 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', - 'fill'=>'brown') +if $tk_version =~ /^4.*/ + TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Text Position', + 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', + 'anchor'=>'s', 'fill'=>'brown') +else + TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Text Position', + 'font'=>'Times 24', 'anchor'=>'s', 'fill'=>'brown') +end # Lastly, create some items that allow the text's justification to be # changed. @@ -120,9 +134,14 @@ color = 'SeaGreen2' mkTextConfig $ctext_canvas, x, y, 'justify', 'left', color mkTextConfig $ctext_canvas, x+30, y, 'justify', 'center', color mkTextConfig $ctext_canvas, x+60, y, 'justify', 'right', color -TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Justification', 'anchor'=>'s', - 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', - 'fill'=>'brown') +if $tk_version =~ /^4.*/ + TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Justification', + 'font'=>'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', + 'anchor'=>'s', 'fill'=>'brown') +else + TkcText.new($ctext_canvas, x+45, y-5, 'text'=>'Justification', + 'font'=>'Times 24', 'anchor'=>'s', 'fill'=>'brown') +end $ctext_canvas.itembind('config', 'Enter', proc{textEnter $ctext_canvas}) $ctext_canvas.itembind('config', 'Leave', diff --git a/ext/tk/sample/demos-jp/hscale.rb b/ext/tk/sample/demos-jp/hscale.rb index 690479d6d1..b636f0579f 100644 --- a/ext/tk/sample/demos-jp/hscale.rb +++ b/ext/tk/sample/demos-jp/hscale.rb @@ -66,7 +66,6 @@ TkFrame.new($hscale_demo) {|frame| scale.set 75 }.pack('side'=>'top', 'fill'=>'x') - def setWidth(w, width) width = width + 21 x2 = width - 30 diff --git a/ext/tk/sample/demos-jp/items.rb b/ext/tk/sample/demos-jp/items.rb index d538fac75f..c173d3b57f 100644 --- a/ext/tk/sample/demos-jp/items.rb +++ b/ext/tk/sample/demos-jp/items.rb @@ -92,8 +92,13 @@ TkcLine.new(cvs, '0c', '16c', '30c', '16c', 'width'=>2) TkcLine.new(cvs, '10c', '0c', '10c', '24c', 'width'=>2) TkcLine.new(cvs, '20c', '0c', '20c', '24c', 'width'=>2) -font1 = '-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*' -font2 = '-Adobe-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*' +if $tk_version =~ /^4.*/ + font1 = '-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*' + font2 = '-Adobe-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*' +else + font1 = 'Helvetica 12' + font2 = 'Helvetica 24 bold' +end if TkWinfo.depth($root).to_i > 1 blue = 'DeepSkyBlue3' red = 'red' diff --git a/ext/tk/sample/demos-jp/plot.rb b/ext/tk/sample/demos-jp/plot.rb index 09a3446836..dbca3e971c 100644 --- a/ext/tk/sample/demos-jp/plot.rb +++ b/ext/tk/sample/demos-jp/plot.rb @@ -42,7 +42,11 @@ $plot_buttons = TkFrame.new($plot_demo) {|frame| $plot_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') # font 設定 -plotFont = '-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' + if $tk_version =~ /^4.*/ + plotFont = '-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' + else + font = 'Helvetica 18' + end # canvas 設定 $plot_canvas = TkCanvas.new($plot_demo,'relief'=>'raised','width'=>450,'height'=>300) diff --git a/ext/tk/sample/demos-jp/search.rb b/ext/tk/sample/demos-jp/search.rb index adb72fd809..d3692e2455 100644 --- a/ext/tk/sample/demos-jp/search.rb +++ b/ext/tk/sample/demos-jp/search.rb @@ -169,9 +169,14 @@ $search_text.insert('1.0', "\ エントリに文字列を入力し、<リターン> を押すか「反転」ボタンを押してく \ ださい。するとファイル中の、検索文字列と一致する部分に全て \"search_Tag\" \ というタグがつけられ、タグの表示属性としてその文字列が点滅するように \ -設定されます。") +設定されます。\n") +$search_text.insert('end', "\ +ファイル読み込みのカレントディレクトリは \"#{Dir.pwd}\" です。\ +") $search_text.set_insert '0.0' $search_fileName.value = '' $search_searchString.value = '' +$search_text.width = 60 +$search_text.height = 20 diff --git a/ext/tk/sample/demos-jp/style.rb b/ext/tk/sample/demos-jp/style.rb index 50855a549a..c8c7850156 100644 --- a/ext/tk/sample/demos-jp/style.rb +++ b/ext/tk/sample/demos-jp/style.rb @@ -9,6 +9,7 @@ if defined?($style_demo) && $style_demo $style_demo = nil end + # demo 用の toplevel widget を生成 $style_demo = TkToplevel.new {|w| title("Text Demonstration - Display Styles") @@ -16,6 +17,7 @@ $style_demo = TkToplevel.new {|w| positionWindow(w) } + # frame 生成 TkFrame.new($style_demo) {|frame| TkButton.new(frame) { @@ -34,13 +36,15 @@ TkFrame.new($style_demo) {|frame| }.pack('side'=>'left', 'expand'=>'yes') }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + # text 生成 -TkText.new($style_demo){|t| +txt = TkText.new($style_demo){|t| # 生成 setgrid 'true' - width 70 - height 32 + #width 70 + #height 32 wrap 'word' + font $font TkScrollbar.new($style_demo) {|s| pack('side'=>'right', 'fill'=>'y') command proc{|*args| t.yview(*args)} @@ -49,11 +53,20 @@ TkText.new($style_demo){|t| pack('expand'=>'yes', 'fill'=>'both') # テキストタグ設定 (フォント関連) - style_tag_bold = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-O-Normal--*-120-*-*-*-*-*-*') - style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font) + family = 'Courier' + + if $tk_version =~ /^4.*/ + style_tag_bold = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-O-Normal--*-120-*-*-*-*-*-*') + style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font) style_tag_verybig = TkTextTag.new(t, 'font'=>'-*-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*') -# style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font) + # style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font) style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*') + else + style_tag_bold = TkTextTag.new(t, 'font'=>[family, 12, :bold, :italic]) + style_tag_big = TkTextTag.new(t, 'font'=>[family, 14, :bold]) + style_tag_verybig = TkTextTag.new(t, 'font'=>['Helvetica', 24, :bold]) + style_tag_small = TkTextTag.new(t, 'font'=>['Times 8 bold']) + end ### # case($tk_version) # when /^4.*/ @@ -107,8 +120,13 @@ TkText.new($style_demo){|t| style_tag_overstrike = TkTextTag.new(t, 'overstrike'=>'on') style_tag_right = TkTextTag.new(t, 'justify'=>'right') style_tag_center = TkTextTag.new(t, 'justify'=>'center') - style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') - style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') + if $tk_version =~ /^4.*/ + style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') + style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*') + else + style_tag_super = TkTextTag.new(t, 'offset'=>'4p', 'font'=>[family, 10]) + style_tag_sub = TkTextTag.new(t, 'offset'=>'-2p', 'font'=>[family, 10]) + end style_tag_margins = TkTextTag.new(t, 'lmargin1'=>'12m', 'lmargin2'=>'6m', 'rmargin'=>'10m') style_tag_spacing = TkTextTag.new(t, 'spacing1'=>'10p', 'spacing2'=>'2p', @@ -247,3 +265,5 @@ spacing3') } +txt.width 70 +txt.height 32 diff --git a/ext/tk/sample/demos-jp/textpeer.rb b/ext/tk/sample/demos-jp/textpeer.rb new file mode 100644 index 0000000000..9b2b57a698 --- /dev/null +++ b/ext/tk/sample/demos-jp/textpeer.rb @@ -0,0 +1,78 @@ +# -*- coding: euc-jp -*- +# +# text widget peering demo (called by 'widget') +# +# based on Tcl/Tk8.5.0 widget demos + +if defined?($textpeer_demo) && $textpeer_demo + $textpeer_demo.destroy + $textpeer_demo = nil +end + +# demo toplevel widget +$textpeer_demo = TkToplevel.new {|w| + title("Text Wdget Peering Demonstration") + iconname("textpeer") + positionWindow(w) +} + +count = [0] + +## Define a widget that we peer from; it won't ever actually be shown though +first = TkText.new($textpeer_demo, :widgetname=>"text#{count[0] += 1}") +first.insert :end,"このデモは一つの組を成したテキストウィジェットを示します。" +first.insert :end,"それらのテキストウィジェットは対等(ピア;peer)の関係に" +first.insert :end,"なっています。" +first.insert :end,"それらは、基盤となるデータモデルは共通のものを持ちますが、" +first.insert :end,"画面表示位置、編集位置、選択範囲(selection)については" +first.insert :end,"独立に持つことができます。" +first.insert :end,"各テキストウィジェットの脇にある" +first.insert :end,"「ピア(peer)の作成」ボタンを使えば、" +first.insert :end,"新たなピアを追加することが可能です。" +first.insert :end,"また「ピア(peer)の消去」ボタンを使えば、" +first.insert :end,"特定のピアウィジェットを消去することもできます。" + +## Procedures to make and kill clones; most of this is just so that the demo +## looks nice... +def makeClone(count, win, txt) + cnt = (count[0] += 1) + peer = TkText::Peer.new(txt, win, :widgetname=>"text#{cnt}") + sbar = TkScrollbar.new(win, :widgetname=>"sb#{cnt}") + peer.yscrollbar sbar + b1 = TkButton.new(win, :widgetname=>"clone#{cnt}", + :text=>'ピア(peer)の作成', + :command=>proc{makeClone(count, win, peer)}) + b2 = TkButton.new(win, :widgetname=>"kill#{cnt}", + :text=>'ピア(peer)の消去', + :command=>proc{killClone(win, cnt)}) + row = cnt * 2 + TkGrid.configure(peer, sbar, b1, :sticky=>'nsew', :row=>row) + TkGrid.configure('^', '^', b2, :sticky=>'nsew', :row=>(row+=1)) + TkGrid.configure(b1, b2, :sticky=>'new') + TkGrid.rowconfigure(win, b2, :weight=>1) +end + +def killClone(win, cnt) + Tk.destroy("#{win.path}.text#{cnt}", "#{win.path}.sb#{cnt}", + "#{win.path}.clone#{cnt}", "#{win.path}.kill#{cnt}") +end + +## Now set up the GUI +makeClone(count, $textpeer_demo, first) +makeClone(count, $textpeer_demo, first) +first.destroy + +## See Code / Dismiss buttons +TkFrame.new($textpeer_demo){|f| + TkButton.new(f, :text=>'閉じる', :width=>15, :command=>proc{ + $textpeer_demo.destroy + $textpeer_demo = nil + }).pack(:side=>:left, :expand=>true) + + TkButton.new(f, :text=>'コード参照', :width=>15, :command=>proc{ + showCode 'textpeer' + }).pack(:side=>:left, :expand=>true) + + TkGrid.configure(f, '-', '-', :sticky=>'ew', :row=>5000) +} +TkGrid.columnconfigure($textpeer_demo, 0, :weight=>1) diff --git a/ext/tk/sample/demos-jp/twind.rb b/ext/tk/sample/demos-jp/twind.rb index 166a44cdb2..d0fa8ca49e 100644 --- a/ext/tk/sample/demos-jp/twind.rb +++ b/ext/tk/sample/demos-jp/twind.rb @@ -207,7 +207,11 @@ def textWindPlot (t) cursor 'top_left_arrow' } - font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' + if $tk_version =~ /^4.*/ + font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' + else + font = 'Helvetica 18' + end TkcLine.new($twind_plot, 100, 250, 400, 250, 'width'=>2) TkcLine.new($twind_plot, 100, 250, 100, 50, 'width'=>2) diff --git a/ext/tk/sample/demos-jp/vscale.rb b/ext/tk/sample/demos-jp/vscale.rb index eb0cea250d..990ca43215 100644 --- a/ext/tk/sample/demos-jp/vscale.rb +++ b/ext/tk/sample/demos-jp/vscale.rb @@ -67,7 +67,6 @@ TkFrame.new($vscale_demo) {|frame| scale.set 75 }.pack - def setHeight(w, height) height = height + 21 y2 = height - 30 @@ -77,3 +76,4 @@ def setHeight(w, height) w.coords 'poly',15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20 w.coords 'line',15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20 end + diff --git a/ext/tk/sample/demos-jp/widget b/ext/tk/sample/demos-jp/widget index 7982a6651e..3eea4c7887 100644 --- a/ext/tk/sample/demos-jp/widget +++ b/ext/tk/sample/demos-jp/widget @@ -5,7 +5,7 @@ if RUBY_VERSION < '1.9.0' ### !!!!!!!!!!!!!! $KCODE = 'euc' else - $TK_ENCODING = 'EUC-JP' + DEFAULT_TK_ENCODING = 'EUC-JP' end # tk 関係ライブラリの読み込み @@ -13,7 +13,8 @@ require 'tk' # require 'tkafter' # widget demo directory 位置の獲得 -$demo_dir = File.dirname($0) +# $demo_dir = File.dirname($0) +$demo_dir = File.dirname(__FILE__) # root の生成 $root = TkRoot.new{title "Ruby/Tk Widget Demonstration"} @@ -45,18 +46,17 @@ when /^4.*/ # $msg_kanji_font=TkFont.new('Helvetica 16', 'Gothic 16 bold') when /^8.*/ - $font = TkFont.new('Helvetica -12') - $kanji_font = TkFont.new('Helvetica -12', 'Mincho -12') + $font = TkFont.new('Helvetica 12') + $kanji_font = TkFont.new('Helvetica 12', 'Mincho 12') TkOption.add('*kanjiFont', knjfont, 'startupFile') - $msg_kanji_font=TkFont.new('Helvetica 16', 'Gothic 16 bold') + $msg_kanji_font=TkFont.new('Helvetica 18 bold', 'Gothic 18 bold') else - $font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', nil) + $font = TkFont.new('Helvetica 14', nil) knjfont = '-*--16-*-jisx0208.1983-0' - $kanji_font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', - knjfont) + $kanji_font = TkFont.new('Helvetic 14', knj) TkOption.add('*kanjiFont', knjfont, 'startupFile') - $msg_kanji_font=TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', + $msg_kanji_font=TkFont.new('Helvetica 14', '-*--24-*-jisx0208.1983-0') end ####### @@ -185,18 +185,27 @@ else textFrame.pack('expand'=>'yes', 'fill'=>'both') statusBar = TkFrame.new($root) {|f| + if $tk_version =~ /^4.*/ + statusfont = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*' + else + statusfont = 'Helvetica 10' + end $statusBarLabel = \ TkLabel.new(f, 'text'=>" ", 'relief'=>'sunken', 'bd'=>1, 'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*') \ + 'font'=>statusfont) \ .pack('side'=>'left', 'padx'=>2, 'expand'=>'yes', 'fill'=>'both') TkLabel.new(f, 'width'=>8, 'relief'=>'sunken', 'bd'=>1, 'anchor'=>'w', - 'font'=>'-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*') \ + 'font'=>statusfont) \ .pack('side'=>'left', 'padx'=>2) }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>2) end # テキストタグ設定 -tag_title = TkTextTag.new(txt, 'font'=>'-*-Helvetica-Bold-R-Normal--*-180-*-*-*-*-*-*') +if $tk_version =~ /^4.*/ + tag_title = TkTextTag.new(txt, 'font'=>'-*-Helvetica-Bold-R-Normal--*-180-*-*-*-*-*-*') +else + tag_title = TkTextTag.new(txt, 'font'=>'Helvetica 18 bold') +end #tag_kanji_title = TkTextTag.new(txt, 'kanjifont'=>$msg_kanji_font) #tag_middle = TkTextTag.new(txt, 'kanjifont'=>$kanji_font) tag_kanji_title = TkTextTag.new(txt, 'font'=>$msg_kanji_font) @@ -372,6 +381,8 @@ txt.insert('end', "5. txt.insert('end', " \n ", tag_demospace) txt.insert('end', "6. 検索\n", tag_demo, "demo-search") txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "7. テキストウィジェットの対等化(peering) (機能に対応したバージョンのTkが必要)\n", tag_demo, "demo-textpeer") +txt.insert('end', " \n ", tag_demospace) txt.insert('end', "\n") #txt.insert('end', "キャンバス\n", tag_middle) @@ -492,7 +503,11 @@ def showVars1(parent, *args) text "変数値:" width 20 anchor 'center' - font '-Adobe-helvetica-medium-r-normal--*-180-*-*-*-*-*-*' + if $tk_version =~ /^4.*/ + font '-Adobe-helvetica-medium-r-normal--*-180-*-*-*-*-*-*' + else + font 'Helvetica 14' + end }.pack('side'=>'top', 'fill'=>'x') len = 1 args.each{|vnam,vbody| @@ -639,7 +654,9 @@ end private :_null_binding def eval_samplecode(code) - Thread.new{ _null_binding.pseudo_toplevel_eval{ eval(code) } }.run + #eval(code) + #_null_binding.pseudo_toplevel_eval{ eval(code) } + Thread.new{ _null_binding.pseudo_toplevel_eval{ eval(code) } } Tk.update end @@ -931,7 +948,7 @@ end # def aboutBox Tk.messageBox('icon'=>'info', 'type'=>'ok', 'title'=>'About Widget Demo', - 'message'=>"Ruby/Tk ウィジェットデモ Ver.1.6.0-jp\n\n" + + 'message'=>"Ruby/Tk ウィジェットデモ Ver.1.6.3-jp\n\n" + "based on demos of Tk8.1 -- 8.5 " + "( Copyright:: " + "(c) 1996-1997 Sun Microsystems, Inc. / " + diff --git a/ext/tk/sample/encstr_usage.rb b/ext/tk/sample/encstr_usage.rb index 4285ec861c..b22c2504ac 100644 --- a/ext/tk/sample/encstr_usage.rb +++ b/ext/tk/sample/encstr_usage.rb @@ -11,7 +11,7 @@ t1 = TkText.new(:height=>5).pack t2 = TkText.new(:height=>5).pack t3 = TkText.new(:height=>5).pack -src_str = IO.readlines('iso2022-kr.txt').join +src_str = IO.readlines(File.join(File.dirname(__FILE__),'iso2022-kr.txt')).join t1.insert('end', "use neither Tk::EncodedString class nor Tk.encoding= method\n\n") @@ -23,7 +23,8 @@ t2.insert('end', t2.insert('end', enc_str) Tk.encoding = 'iso2022-kr' -t3.insert('end', "use Tk.encoding = 'iso2022-kr'\n\n") +t3.insert('end', "use Tk.encoding = 'iso2022-kr' (Tk.force_default_encoding? == #{Tk.force_default_encoding?})\n\n") + t3.insert('end', src_str) Tk.mainloop diff --git a/ext/tk/sample/irbtkw.rbw b/ext/tk/sample/irbtkw.rbw index f6a35be6ed..3fb6dde626 100644 --- a/ext/tk/sample/irbtkw.rbw +++ b/ext/tk/sample/irbtkw.rbw @@ -4,7 +4,7 @@ # # by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) # -release = '2006/11/06' +release = '2008/03/08' require 'tk' begin @@ -15,10 +15,32 @@ end require 'irb' +if TkCore::WITH_ENCODING +else + # $KCODE setup + case Tk.encoding + when 'shiftjis', 'cp932' + $KCODE='SJIS' + when 'euc-jp' + $KCODE='EUC' + when 'utf-8', 'unicode' + $KCODE='UTF8' + else + # unknown + end +end + # console setup top = TkToplevel.new(:title=>'IRB console') top.protocol(:WM_DELETE_WINDOW){ Tk.exit } +case (Tk.windowingsystem) +when 'win32' + fnt = ['MS Gothic', '-12'] +else + fnt = ['courier', '-12'] +end + console = TkTextIO.new(top, :mode=>:console, :width=>80).pack(:side=>:left, :expand=>true, :fill=>:both) diff --git a/ext/tk/sample/tkextlib/tile/demo.rb b/ext/tk/sample/tkextlib/tile/demo.rb index b604410da4..1a9c029701 100644 --- a/ext/tk/sample/tkextlib/tile/demo.rb +++ b/ext/tk/sample/tkextlib/tile/demo.rb @@ -20,6 +20,12 @@ def version?(ver) TkPackage.vcompare(Tk::Tile.package_version, ver) >= 0 end +# define Tcl/Tk procedures for compatibility +Tk::Tile.__define_LoadImages_proc_for_compatibility__! +Tk::Tile::Style.__define_wrapper_proc_for_compatibility__! + +Tk::Tile::Style.theme_create('step') + Tk.load_tclscript(File.join(demodir, 'toolbutton.tcl')) Tk.load_tclscript(File.join(demodir, 'repeater.tcl')) @@ -55,7 +61,7 @@ $V = TkVariable.new_hash(:THEME => 'default', :CHOICE => 2) # Add in any available loadable themes. -TkPackage.names.find_all{|n| n =~ /^tile::theme::/}.each{|pkg| +TkPackage.names.find_all{|n| n =~ /^(tile|ttk)::theme::/}.each{|pkg| name = pkg.split('::')[-1] unless $THEMELIST.assoc(name) $THEMELIST << [name, Tk.tk_call('string', 'totitle', name)] @@ -66,7 +72,8 @@ TkPackage.names.find_all{|n| n =~ /^tile::theme::/}.each{|pkg| $RUBY_THEMELIST = [] begin load(File.join(demodir, 'themes', 'kroc.rb'), true) -rescue +rescue => e +raise e $RUBY_THEMELIST << ['kroc-rb', 'Kroc (by Ruby)', false] else $RUBY_THEMELIST << ['kroc-rb', 'Kroc (by Ruby)', true] @@ -79,8 +86,8 @@ def makeThemeControl(parent) :variable=>$V.ref(:THEME), :command=>proc{setTheme(theme)}) b.grid(:sticky=>:ew) - unless (TkPackage.names.find{|n| n == "tile::theme::#{theme}"}) - b.state(:disabled) + unless (TkPackage.names.find{|n| n =~ /(tile|ttk)::theme::#{theme}/}) + b.ttk_state(:disabled) end } $RUBY_THEMELIST.each{|theme, name, available| @@ -88,7 +95,7 @@ def makeThemeControl(parent) :variable=>$V.ref(:THEME), :command=>proc{setTheme(theme)}) b.grid(:sticky=>:ew) - b.state(:disabled) unless available + b.ttk_state(:disabled) unless available } c end @@ -98,7 +105,7 @@ def makeThemeMenu(parent) $THEMELIST.each{|theme, name| m.add(:radiobutton, :label=>name, :variable=>$V.ref(:THEME), :value=>theme, :command=>proc{setTheme(theme)}) - unless (TkPackage.names.find{|n| n == "tile::theme::#{theme}"}) + unless (TkPackage.names.find{|n| n =~ /(tile|ttk)::theme::#{theme}/}) m.entryconfigure(:end, :state=>:disabled) end } @@ -111,8 +118,10 @@ def makeThemeMenu(parent) end def setTheme(theme) - if (TkPackage.names.find{|n| n == "tile::theme::#{theme}"}) - TkPackage.require("tile::theme::#{theme}") + if (pkg = TkPackage.names.find{|n| n =~ /(tile|ttk)::theme::#{theme}/}) + unless Tk::Tile::Style.theme_names.find{|n| n == theme} + TkPackage.require(pkg) + end end Tk::Tile::Style.theme_use(theme) end @@ -675,7 +684,7 @@ values = %w(list abc def ghi jkl mno pqr stu vwx yz) combo, :values=>values, :textvariable=>$V.ref(:COMBO)) cb.pack(:side=>:top, :padx=>2, :pady=>2, :expand=>false, :fill=>:x) if i == 1 - cb.state :readonly + cb.ttk_state :readonly begin cb.current = 3 # ignore if unsupported (tile0.4) rescue @@ -922,11 +931,11 @@ end def updateStates $states_list.each{|st| begin - $State[st] = $Widget.window.instate(st) + $State[st] = $Widget.window.ttk_instate(st) rescue - $states_btns[st].state('disabled') + $states_btns[st].ttk_state('disabled') else - $states_btns[st].state('!disabled') + $states_btns[st].ttk_state('!disabled') end } end @@ -934,9 +943,9 @@ end def changeState(st) if $Widget.value != '' if $State.bool_element(st) - $Widget.window.state(st) + $Widget.window.ttk_state(st) else - $Widget.window.state("!#{st}") + $Widget.window.ttk_state("!#{st}") end end end diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl b/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl index 19ddda7c73..4facac70d8 100644 --- a/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl +++ b/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl @@ -1,6 +1,6 @@ # Package index for tile demo pixmap themes. if {[file isdirectory [file join $dir blue]]} { - package ifneeded tile::theme::blue 0.0.1 \ + package ifneeded tile::theme::blue 0.7 \ [list source [file join $dir blue.tcl]] } diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc.rb b/ext/tk/sample/tkextlib/tile/themes/kroc.rb index f67ce7a897..27006d847f 100644 --- a/ext/tk/sample/tkextlib/tile/themes/kroc.rb +++ b/ext/tk/sample/tkextlib/tile/themes/kroc.rb @@ -95,8 +95,35 @@ def kroc_rb_settings # # Elements: # - if TkPackage.vcompare(Tk::Tile.package_version, '0.5') >= 0 + if Tk::Tile::TILE_SPEC_VERSION_ID >= 8 + Tk::Tile::Style.element_create('Button.button', + :image, + [ $images['button-n'], + :pressed, $images['button-p'], + :active, $images['button-h'], + ], :border=>3, :sticky=>:ew) + + Tk::Tile::Style.element_create('Checkbutton.indicator', + :image, + [ $images['check-nu'], + [:pressed, :selected],$images['check-nc'], + :pressed, $images['check-nu'], + [:active, :selected], $images['check-hc'], + :active, $images['check-hu'], + :selected, $images['check-nc'], + ], :sticky=>:w) + Tk::Tile::Style.element_create('Radiobutton.indicator', + :image, + [ $images['radio-nu'], + [:pressed,:selected],$images['radio-nc'], + :pressed, $images['radio-nu'], + [:active,:selected], $images['radio-hc'], + :active, $images['radio-hu'], + :selected, $images['radio-nc'], + ], :sticky=>:w) + + elsif TkPackage.vcompare(Tk::Tile.package_version, '0.5') >= 0 Tk::Tile::Style.element_create('Button.button', :image, $images['button-n'], :map=>[ @@ -125,7 +152,6 @@ def kroc_rb_settings ], :sticky=>:w) else # tile 0.4 or earlier - Tk::Tile::Style.element_create('Button.button', :pixmap, :images=>[ :pressed, $images['button-p'], diff --git a/ext/tk/sample/tkextlib/tile/toolbutton.tcl b/ext/tk/sample/tkextlib/tile/toolbutton.tcl index 2656fff6d8..4e08034e31 100644 --- a/ext/tk/sample/tkextlib/tile/toolbutton.tcl +++ b/ext/tk/sample/tkextlib/tile/toolbutton.tcl @@ -4,18 +4,6 @@ # Demonstration of custom widget styles. # -set tile_ver [package require tile] -if {[package vcompare $tile_ver 0.8] >= 0} { - set style ::ttk::style -} { - set style style -} -if {[package vcompare $tile_ver 0.7] >= 0} { - set conf_subcmd configure -} { - set conf_subcmd default -} - # # ~ BACKGROUND # @@ -54,8 +42,7 @@ if {[package vcompare $tile_ver 0.7] >= 0} { # style; see demo.tcl.) # -#$style theme settings "step" { -$style theme settings "alt" { +style theme settings "step" { # # First, we use [style layout] to define what elements to @@ -64,7 +51,7 @@ $style theme settings "alt" { # and a label. (See also the TScrollbar layout definition # in demos/blue.tcl for a more complicated layout spec.) # - $style layout Toolbutton { + style layout Toolbutton { Toolbutton.background Toolbutton.border -children { Toolbutton.padding -children { @@ -81,7 +68,7 @@ $style theme settings "alt" { # For many options (like -background), the defaults # inherited from the parent style are sufficient. # - $style $conf_subcmd Toolbutton -width 0 -padding 1 -relief flat -borderwidth 2 + style default Toolbutton -width 0 -padding 1 -relief flat -borderwidth 2 # # Finally, use [style map] to specify state-specific @@ -91,7 +78,7 @@ $style theme settings "alt" { # over the widget). Each state-value pair is checked # in order, and the first matching state takes precedence. # - $style map Toolbutton -relief { + style map Toolbutton -relief { disabled flat selected sunken pressed sunken @@ -106,19 +93,19 @@ $style theme settings "alt" { # design decisions from an aesthetic standpoint.) # if {![catch {package require tile::theme::blue}]} { -$style theme settings "blue" { +style theme settings "blue" { # # Default values: # - $style $conf_subcmd Toolbutton \ + style default Toolbutton \ -width 0 -relief flat -borderwidth 2 \ -background #6699CC -foreground #000000 ; # # Configure state-specific values for -relief, as before: # - $style map Toolbutton -relief { + style map Toolbutton -relief { disabled flat selected sunken pressed sunken @@ -129,8 +116,8 @@ $style theme settings "blue" { # Adjust the -padding at the same time, to enhance # the raised/sunken illusion: # - $style $conf_subcmd Toolbutton -padding 4 - $style map Toolbutton -padding { + style default Toolbutton -padding 4 + style map Toolbutton -padding { disabled {4} selected {6 6 2 2} pressed {6 6 2 2} @@ -141,7 +128,7 @@ $style theme settings "blue" { # ... and change the foreground and background colors # when the mouse cursor is over the widget: # - $style map Toolbutton -background { + style map Toolbutton -background { active #008800 } -foreground { active #FFFFFF diff --git a/ext/tk/sample/tkrttimer.rb b/ext/tk/sample/tkrttimer.rb index 531f4a8d5a..0abd4ecbd2 100644 --- a/ext/tk/sample/tkrttimer.rb +++ b/ext/tk/sample/tkrttimer.rb @@ -17,8 +17,17 @@ TkLabel.new(f2, :text=>'use TkRTTimer class').pack label2 = TkLabel.new(:parent=>f2, :relief=>:raised, :width=>10).pack(:fill=>:both) -TkLabel.new(:text=>'Interval setting of each timer is 10 ms.', - :padx=>10, :pady=>5).pack +TkLabel.new(:padx=>10, :pady=>5, :justify=>'left', :text=><v).pack(:pady=>[1, 10]) + +a = TkButton.new(:text=>"button A :: proc{p ['AAA', v.value]}").pack(:fill=>:x, :pady=>[1, 15], :padx=>15) +a.command{p ['AAA', v.value]} + +TkLabel.new(:text=>'Callback of the button B returns LIFO order').pack +b = TkButton.new(:text=>"button B :: proc{n = v.value; p ['B:start', n]; Tk.sleep(10000); p ['B:end', n]}").pack(:fill=>:x, :pady=>[1, 15], :padx=>15) +b.command{n = v.value; p ['B:start', n]; Tk.sleep(10000); p ['B:end', n]} + +TkLabel.new(:text=>'Callback of the button C returns FIFO order').pack +c = TkButton.new(:text=>"button C :: proc{n = v.value; Thread.new{p ['C:start', n]; Tk.sleep(10000); p ['C:end', n]}}").pack(:fill=>:x, :pady=>[1, 15], :padx=>15) +c.command{n = v.value; Thread.new{p ['C:start', n]; Tk.sleep(10000); p ['C:end', n]}} + +TkLabel.new(:text=>'Callback of the button D blocks eventloop (no respond to event)').pack +d = TkButton.new(:text=>"button D :: proc{n = v.value; p ['D:start', n]; sleep(10); p ['D:end', n]}").pack(:fill=>:x, :pady=>[1,15], :padx=>15) +d.command{n = v.value; p ['D:start', n]; sleep(10); p ['D:end', n]} + +TkLabel.new(:text=>'Callback of the button E is another way to avoid eventloop blocking').pack +e = TkButton.new(:text=>"button E :: proc{n = v.value; Thread.new{p ['D:start', n]; sleep(10); p ['D:end', n]}}").pack(:fill=>:x, :pady=>[1,15], :padx=>15) +e.command{n = v.value; Thread.new{p ['D:start', n]; sleep(10); p ['D:end', n]}} + +TkButton.new(:text=>'QUIT', :command=>proc{exit}).pack + +TkTimer.new(500, -1){v.numeric += 1}.start + +Tk.mainloop diff --git a/ext/tk/sample/ttk_wrapper.rb b/ext/tk/sample/ttk_wrapper.rb new file mode 100644 index 0000000000..30ae0ece53 --- /dev/null +++ b/ext/tk/sample/ttk_wrapper.rb @@ -0,0 +1,154 @@ +#!/usr/bin/env ruby +# +# ttk_wrapper.rb -- use Ttk widgets as default on old Ruby/Tk scripts +# +# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) +# +version = '0.1' +# +########################################################################## +# parse commandline arguments +########################################################################## +require 'optparse' +opt = OptionParser.new("Usage: #{$0} [options] rubytk_script" << "\n " << + "Ruby/Tk script wrapper. Use Ttk widgets as default.") +opt.version = version + +OPTS = {} +OPTS[:themedir] = [] +OPTS[:rb_theme] = [] +OPTS[:theme] = 'default' + +opt.on('-l', '--list', 'list available theme names'){|v| OPTS[:list] = true} +opt.on('-t', '--theme theme', 'theme name'){|v| OPTS[:theme] = v} +opt.on('-d', '--themedir themes_dir', 'directory of theme definitions'){|v| + OPTS[:themedir] << v +} +opt.on('-r', '--rubytheme rb_theme', 'theme definition file (ruby script)'){|v| + OPTS[:rb_theme] << v +} +opt.on('-v', '--verbose', 'print verbose messages'){|v| OPTS[:verbose] = true} + +opt.parse!(ARGV) + + +########################################################################## +# load Ttk (Tile) extension +########################################################################## +require 'tk' + +begin + require 'tkextlib/tile' + Tk.default_widget_set = :Ttk +rescue LoadError + if OPTS[:verbose] + print "warning: fail to load 'Ttk' extension. use standard widgets.\n" + end +end + +if OPTS[:verbose] + print "current default widget set is '#{Tk.default_widget_set}'\n" +end + + +########################################################################## +# use themes defined on the demo of Ttk (Tile) extension +########################################################################## +demodir = File.dirname(__FILE__) +demo_themesdir = File.expand_path(File.join(demodir, 'tkextlib', 'tile', 'themes')) + +Tk::AUTO_PATH.lappend(*OPTS[:themedir]) unless OPTS[:themedir].empty? +Tk::AUTO_PATH.lappend('.', demodir, demo_themesdir) + +OPTS[:themedir] << demo_themesdir +print "theme-dirs: #{OPTS[:themedir].inspect}\n" if OPTS[:verbose] + +OPTS[:themedir].each{|themesdir| + if File.directory?(themesdir) + Dir.foreach(themesdir){|name| + next if name == '.' || name == '..' + path = File.join(themesdir, name) + Tk::AUTO_PATH.lappend(path) if File.directory?(path) + } + end +} + +# This forces an update of the available packages list. It's required +# for package names to find the themes in demos/themes/*.tcl +Tk.ip_eval("#{TkPackage.unknown_proc} Tcl #{TkPackage.provide('Tcl')}") + +# load themes written in Ruby. +themes_by_ruby = [File.join(demo_themesdir, 'kroc.rb')] +themes_by_ruby.concat OPTS[:rb_theme] +print "ruby-themes: #{themes_by_ruby.inspect}\n" if OPTS[:verbose] + +themes_by_ruby.each{|f| + begin + load(f, true) + rescue LoadError + print "fail to load \"#{f}\"\n" if OPTS[:verbose] + end +} + + +########################################################################## +# define Tcl/Tk procedures for compatibility. +# those are required when want to use themes included +# in "sample/tkextlib/tile/demo.rb". +########################################################################## +Tk::Tile.__define_LoadImages_proc_for_compatibility__! +Tk::Tile::Style.__define_wrapper_proc_for_compatibility__! + + +########################################################################## +# ignore unsupported options of Ttk widgets +########################################################################## +TkConfigMethod.__set_IGNORE_UNKNOWN_CONFIGURE_OPTION__! true +TkItemConfigMethod.__set_IGNORE_UNKNOWN_CONFIGURE_OPTION__! true + + +########################################################################## +# define utility method +########################################################################## +def setTheme(theme) + unless Tk::Tile::Style.theme_names.find{|n| n == theme} + if (pkg = TkPackage.names.find{|n| n =~ /(tile|ttk)::theme::#{theme}/}) + TkPackage.require(pkg) + end + end + Tk::Tile::Style.theme_use(theme) +end + + +########################################################################## +# make theme name list +########################################################################## +ThemesList = Tk::Tile::Style.theme_names +TkPackage.names.find_all{|n| n =~ /^(tile|ttk)::theme::/}.each{|pkg| + ThemesList << pkg.split('::')[-1] +} +ThemesList.uniq! + + +########################################################################## +# set theme of widget style +########################################################################## +if OPTS[:list] || OPTS[:verbose] + print "supported theme names: #{ThemesList}\n" + exit if OPTS[:list] && ARGV.empty? +end +print "use theme: \"#{OPTS[:theme]}\"\n" if OPTS[:theme] && OPTS[:verbose] +setTheme(OPTS[:theme]) if OPTS[:theme] + + +########################################################################## +# load script +########################################################################## +if (script = File.expand_path(ARGV.shift)) + print "load script \"#{script}\"\n" if OPTS[:verbose] + load(script) +else + print "Error: no script is given.\n" + print opt.help + exit(1) +end -- cgit v1.2.3