diff options
Diffstat (limited to 'ext/tk/sample/demos-jp')
67 files changed, 9362 insertions, 0 deletions
diff --git a/ext/tk/sample/demos-jp/README b/ext/tk/sample/demos-jp/README new file mode 100644 index 0000000000..42bec16c60 --- /dev/null +++ b/ext/tk/sample/demos-jp/README @@ -0,0 +1,54 @@ + + Ruby/Tk widget-demo + version 1.2 ( 2000/04/08 ) + �ʰ����ǽ���幩�� ([email protected]) + +ɸ�����ۤ� Tcl/Tk ��ĥ�ѥå������������� Ruby (�ʲ� Ruby/Tk �ȸƤӤޤ�) +�Ǥϡ�Tk widget ���Ѥ��� GUI �κ�����Ԥ����Ȥ��Ǥ��ޤ����ºݤ� GUI ����� +���Ƥ������ˤ��͡��ʼ��㤬����ץ�Ȥ���¸�ߤ���������ʤΤǤ�����Ruby/Tk +�ˤϤ��Τ褦��Ŭ���ʥ���ץ륹����ץȽ����¸�ߤ��ޤ���Ǥ�����������Ф��� +��ĥ�ѥå������θ��Ǥ��� Tcl/Tk �ˤϡ�Tk widget ���Ѥ��ƤɤΤ褦�ʤ��Ȥ��� +���뤫����ΤȤ��� widget-demo ��¸�ߤ����ꡤTcl/Tk ���Ѥ��� GUI �κ��� +��������ݤ���ɽŪ����ץ�ȤʤäƤ��ޤ����ܥ��������֤ϡ�Ruby/Tk �ν����� +�������ɽŪ�ʥ���ץ륹����ץȤȤ��٤���Tcl/Tk �� widget-demo ��ܿ������� +�ΤǤ��� + +����ΥС������� ruby-1.4.x ���б��Ȥ��Ƥ����ޤ�������С���������٤ơ� +�ۤȤ���ѹ��Ϥ���ޤ���ruby-1.1c2 �ʾ�ʤ�ư���Ȼפ��ޤ���ruby-1.5.x �ˤ� +���Ƥϥƥ��Ȥ��Ƥ��ޤ����Τ��ᡤ��ߴ��αƶ����Ф뤳�Ȥ����뤫�⤷��ޤ� +�����ξ��Ǥ⾯���ν�����ư������Ȼפ��ޤ����Ȥ߹��� Tk �ΥС������ϡ� +4.2 �Ǥ� 8.0 �Ǥ⽤���ʤ�ư������Ϥ��Ǥ��������������ܸ��ǤǤΰܿ��Ȥʤä� +���뤿�ᡤ���ܸ첽���줿 Tk �����Ѥ���������������ץȤΥƥ��Ȥϡ���С����� +��κݤ� Tk4.2jp �� Tk8.0jp �ξ�ǹԤäƤ��ޤ� (�����ˤǤϤʤ��Ǥ���)������ +�ΥС������Ǥ� ruby-1.4.x + Tk8.0jp ��Ǥδ�ñ�ʥƥ��Ȥ����ԤäƤ��ޤ��� +�����Ȥ����ۤɤν����Ϥ��Ƥ��ޤ���Τ�����Ϥʤ��ȹͤ��Ƥ��ޤ��� + +�ܥ��������֤˴ޤޤ�륹����ץȤ�¿���ϡ����ȤʤäƤ��� Tcl/Tk �Ǥ����Ū�� +��������ץȵ��ҤȤʤ�褦�ˤ��Ƥ��ޤ������Τ��ᡤRuby/Tk �Υ���ץ�ȸ����� +�ϡ����ޤ� Ruby �餷���ʤ��Ȥ������Ǥ��礦���ˤ⤫����餺�����Τ褦�ʵ��� +���äƤ�����ͳ�ϡ�Ruby/Tk �Υɥ���������ˤ���ޤ��� + +Tcl/Tk �ˤ�Ŭ���ʻ��ͽ�����¸�ߤ��Ƥ��ޤ����顤Ruby/Tk ������ץȤ���� +����ݤϡ����Τ褦�� Tcl/Tk �λ��ͽ�Ǿ�����䤤�ʤ���������뤳�Ȥˤʤ�Ȼ� +���ޤ����� widget �λ�����Ȥ��ơ�Tcl/Tk �� widget-demo �Ȥ��뤳�Ȥ⤢�� +�Ǥ��礦��Ruby/Tk �Ǥε��Ҥ� widget-demo �� Tcl/Tk �Ǥε��Ҥ˶ᤤ��Τˤ��� +�����С���������ˤ�äơ�Ruby/Tk ����������뤳�Ȥ��Ǥ���ȹͤ����ޤ��� +��ö Ruby/Tk �Ǥ� �� widget �λ�����ˡ�������Ƥ��ޤ��С�Ruby �餷�������� +�ץȤ�������뤳�Ȥ����ʤ��Ǥ��礦���ܥ��������֤Υ�����ץȤϡ�Ruby/Tk +��ǽ�˽�������ޤǤ�Ƨ��Ȥ������Ѥ��Ƥ���������й����Ǥ��� + +widget-demo �ΰܿ��ˤ����äƤϡ��������ˤ�ܿ�����������ץȤ����Ƥ����� +���ޤ����������˴��դΰդ�ɽ���ޤ��� + + Ω�С�JAIST ([email protected]) ���� + ʿ���ͻ� ([email protected]) ���� + +ʿ������ˤ�� Ruby/Tk ����� Web page (http://www.cdrom.co.jp/~hiramatu/) +�� Ruby/Tk �ν�����ͭ�ѤȻפ��ޤ��Τǡ����Ҥ����Ȥ��������� + +�ޤ������� ([email protected]) �����Ϥ���Ȥ��ơ�widget-demo �ΰܿ��˺ݤ� +��ɬ�פȤʤä� Ruby �� Tk ��Ϣ�饤�֥�꽤���ˤĤ��ơ����������Х��λ�Ŧ�� +�Ƥ��������������ˤⴶ���פ��ޤ��� + +�����ƺǸ�˺���δ��դ� Ruby �߷Ԥ� �ޤĤ�� �椭�Ҥ� ([email protected]) +��������������Ȼפ��ޤ��� diff --git a/ext/tk/sample/demos-jp/arrow.rb b/ext/tk/sample/demos-jp/arrow.rb new file mode 100644 index 0000000000..3640798db1 --- /dev/null +++ b/ext/tk/sample/demos-jp/arrow.rb @@ -0,0 +1,235 @@ +# +# arrowhead widget demo (called by 'widget') +# + +# arrowSetup -- +# This method regenerates all the text and graphics in the canvas +# window. It's called when the canvas is initially created, and also +# whenever any of the parameters of the arrow head are changed +# interactively. +# +# Arguments: +# c - Name of the canvas widget. + +def arrowSetup(c) + v = $demo_arrowInfo + + # Remember the current box, if there is one. + tags = c.gettags('current') + if tags != [] + cur = tags.find{|t| t.kind_of?(String) && t =~ /^box[1-3]$/ } + else + cur = nil + end + + # Create the arrow and outline. + c.delete('all') + TkcLine.new(c, v.x1, v.y, v.x2, v.y, + { 'width'=>10 * v.width, + 'arrowshape'=>[10*v.a, 10*v.b, 10*v.c], + 'arrow'=>'last' + }.update(v.bigLineStyle) ) + xtip = v.x2 - 10*v.b + deltaY = 10*v.c + 5*v.width + TkcLine.new(c, v.x2, v.y, xtip, v.y + deltaY, + v.x2 - 10*v.a, v.y, xtip, v.y - deltaY, v.x2, v.y, + 'width'=>2, 'capstyle'=>'round', 'joinstyle'=>'round') + + # Create the boxes for reshaping the line and arrowhead. + TkcRectangle.new(c, v.x2-10*v.a-5, v.y-5, v.x2-10*v.a+5, v.y+5, + {'tags'=>['box1', $arrowTag_box]}.update(v.boxStyle) ) + TkcRectangle.new(c, xtip-5, v.y-deltaY-5, xtip+5, v.y-deltaY+5, + {'tags'=>['box2', $arrowTag_box]}.update(v.boxStyle) ) + TkcRectangle.new(c, v.x1-5, v.y-5*v.width-5, v.x1+5, v.y-5*v.width+5, + {'tags'=>['box3', $arrowTag_box]}.update(v.boxStyle) ) + c.itemconfigure cur, v.activeStyle if cur + + # Create three arrows in actual size with the same parameters + TkcLine.new(c, v.x2+50, 0, v.x2+50, 1000, 'width'=>2) + tmp = v.x2+100 + TkcLine.new(c, tmp, v.y-125, tmp, v.y-75, 'width'=>v.width, + 'arrow'=>'both', 'arrowshape'=>[v.a, v.b, v.c]) + TkcLine.new(c, tmp-25, v.y, tmp+25, v.y, 'width'=>v.width, + 'arrow'=>'both', 'arrowshape'=>[v.a, v.b, v.c]) + TkcLine.new(c, tmp-25, v.y+75, tmp+25, v.y+125, 'width'=>v.width, + 'arrow'=>'both', 'arrowshape'=>[v.a, v.b, v.c]) + + # Create a bunch of other arrows and text items showing the + # current dimensions. + tmp = v.x2+10 + TkcLine.new(c, tmp, v.y-5*v.width, tmp, v.y-deltaY, + 'arrow'=>'both', 'arrowshape'=>v.smallTips) + TkcText.new(c, v.x2+15, v.y-deltaY+5*v.c, 'text'=>v.c, 'anchor'=>'w') + tmp = v.x1-10 + TkcLine.new(c, tmp, v.y-5*v.width, tmp, v.y+5*v.width, + 'arrow'=>'both', 'arrowshape'=>v.smallTips) + TkcText.new(c, v.x1-15, v.y, 'text'=>v.width, 'anchor'=>'e') + tmp = v.y+5*v.width+10*v.c+10 + TkcLine.new(c, v.x2-10*v.a, tmp, v.x2, tmp, + 'arrow'=>'both', 'arrowshape'=>v.smallTips) + TkcText.new(c, v.x2-5*v.a, tmp+5, 'text'=>v.a, 'anchor'=>'n') + tmp = tmp+25 + TkcLine.new(c, v.x2-10*v.b, tmp, v.x2, tmp, + '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-*-*-*-*-*-*') + + v.count += 1 +end + +# toplevel widget ��¸�ߤ���к������ +if defined?($arrow_demo) && $arrow_demo + $arrow_demo.destroy + $arrow_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$arrow_demo = TkToplevel.new {|w| + title("Arrowhead Editor Demonstration") + iconname("arrow") + positionWindow(w) +} + +# label ���� +TkLabel.new($arrow_demo, 'font'=>$font, 'wraplength'=>'5i', 'justify'=>'left', + 'text'=>"���� widget �ǡ������Х��ǻȤ���饤��ˤĤ����͡������������Ƭ�η����Ƥߤ뤳�Ȥ��Ǥ��ޤ���������������η����Ѥ���ˤϡ����礵�줿����ˤĤ��Ƥ��� 3�ĤλͳѤ�ɥ�å����Ƥ�����������¦����������̤��礭���ǤΥ���ץ���Ƥ��ޤ������Υƥ����Ȥϥ饤���ƥ���Ф������ꥪ�ץ����Ǥ���"){ + pack('side'=>'top') +} + +# frame ���� +$arrow_buttons = TkFrame.new($arrow_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $arrow_demo + $arrow_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'arrow'} + }.pack('side'=>'left', 'expand'=>'yes') +} +$arrow_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# canvas ���� +$arrow_canvas = TkCanvas.new($arrow_demo, 'width'=>500, 'height'=>350, + 'relief'=>'sunken', 'borderwidth'=>2) +$arrow_canvas.pack('expand'=>'yes', 'fill'=>'both') + +# ������ +unless Struct.const_defined?("ArrowInfo") + $demo_arrowInfo = Struct.new("ArrowInfo", :a, :b, :c, :width, :motionProc, + :x1, :x2, :y, :smallTips, :count, + :bigLineStyle, :boxStyle, :activeStyle).new +end +$demo_arrowInfo.a = 8 +$demo_arrowInfo.b = 10 +$demo_arrowInfo.c = 3 +$demo_arrowInfo.width = 2 +$demo_arrowInfo.motionProc = proc{} +$demo_arrowInfo.x1 = 40 +$demo_arrowInfo.x2 = 350 +$demo_arrowInfo.y = 150 +$demo_arrowInfo.smallTips = [5, 5, 2] +$demo_arrowInfo.count = 0 +if TkWinfo.depth($arrow_canvas) > 1 + $demo_arrowInfo.bigLineStyle = {'fill'=>'SkyBlue1'} + $demo_arrowInfo.boxStyle = {'fill'=>'', 'outline'=>'black', 'width'=>1} + $demo_arrowInfo.activeStyle = {'fill'=>'red', 'outline'=>'black', 'width'=>1} +else + $demo_arrowInfo.bigLineStyle = {'fill'=>'black', + 'stipple'=>'@'+[$demo_dir, 'images', 'grey.25'].join(File::Separator)} + $demo_arrowInfo.boxStyle = {'fill'=>'', 'outline'=>'black', 'width'=>1} + $demo_arrowInfo.activeStyle = {'fill'=>'black','outline'=>'black','width'=>1} +end +$arrowTag_box = TkcTag.new($arrow_canvas) +arrowSetup $arrow_canvas +$arrowTag_box.bind('Enter', proc{$arrow_canvas.itemconfigure('current', $demo_arrowInfo.activeStyle)}) +$arrowTag_box.bind('Leave', proc{$arrow_canvas.itemconfigure('current', $demo_arrowInfo.boxStyle)}) +$arrowTag_box.bind('B1-Enter', proc{}) +$arrowTag_box.bind('B1-Leave', proc{}) +$arrow_canvas.itembind('box1', '1', + proc{$demo_arrowInfo.motionProc \ + = proc{|x,y| arrowMove1 $arrow_canvas, x, y}}) +$arrow_canvas.itembind('box2', '1', + proc{$demo_arrowInfo.motionProc \ + = proc{|x,y| arrowMove2 $arrow_canvas, x, y}}) +$arrow_canvas.itembind('box3', '1', + proc{$demo_arrowInfo.motionProc \ + = proc{|x,y| arrowMove3 $arrow_canvas, x, y}}) +$arrowTag_box.bind('B1-Motion', + proc{|x,y| $demo_arrowInfo.motionProc.call(x,y)}, "%x %y") +$arrow_canvas.bind('Any-ButtonRelease-1', proc{arrowSetup $arrow_canvas}) + +# arrowMove1 -- +# This method is called for each mouse motion event on box1 (the +# one at the vertex of the arrow). It updates the controlling parameters +# for the line and arrowhead. +# +# Arguments: +# c - The name of the canvas window. +# x, y - The coordinates of the mouse. + +def arrowMove1(c,x,y) + v = $demo_arrowInfo + newA = (v.x2+5-c.canvasx(x).round)/10 + newA = 0 if newA < 0 + newA = 25 if newA > 25 + if newA != v.a + c.move('box1', 10*(v.a-newA), 0) + v.a = newA + end +end + +# arrowMove2 -- +# This method is called for each mouse motion event on box2 (the +# one at the trailing tip of the arrowhead). It updates the controlling +# parameters for the line and arrowhead. +# +# Arguments: +# c - The name of the canvas window. +# x, y - The coordinates of the mouse. + +def arrowMove2(c,x,y) + v = $demo_arrowInfo + newB = (v.x2+5-c.canvasx(x).round)/10 + newB = 0 if newB < 0 + newB = 25 if newB > 25 + newC = (v.y+5-c.canvasy(y).round-5*v.width)/10 + newC = 0 if newC < 0 + newC = 20 if newC > 20 + if newB != v.b || newC != v.c + c.move('box2', 10*(v.b-newB), 10*(v.c-newC)) + v.b = newB + v.c = newC + end +end + +# arrowMove3 -- +# This method is called for each mouse motion event on box3 (the +# one that controls the thickness of the line). It updates the +# controlling parameters for the line and arrowhead. +# +# Arguments: +# c - The name of the canvas window. +# x, y - The coordinates of the mouse. + +def arrowMove3(c,x,y) + v = $demo_arrowInfo + newWidth = (v.y+2-c.canvasy(y).round)/5 + newWidth = 0 if newWidth < 0 + newWidth = 20 if newWidth > 20 + if newWidth != v.width + c.move('box3', 0, 5*(v.width-newWidth)) + v.width = newWidth + end +end + diff --git a/ext/tk/sample/demos-jp/bind.rb b/ext/tk/sample/demos-jp/bind.rb new file mode 100644 index 0000000000..1f221a6293 --- /dev/null +++ b/ext/tk/sample/demos-jp/bind.rb @@ -0,0 +1,106 @@ +# +# text (tag bindings) widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($bind_demo) && $bind_demo + $bind_demo.destroy + $bind_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$bind_demo = TkToplevel.new {|w| + title("Text Demonstration - Tag Bindings") + iconname("bind") + positionWindow(w) +} + +# frame ���� +TkFrame.new($bind_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $bind_demo + $bind_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'bind'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# bind �ѥ�å� +def tag_binding_for_bind_demo(tag, enter_style, leave_style) + tag.bind('Any-Enter', proc{tag.configure enter_style}) + tag.bind('Any-Leave', proc{tag.configure leave_style}) +end + +# text ���� +TkText.new($bind_demo){|t| + # ���� + setgrid 'true' + width 60 + height 24 + font $font + wrap 'word' + TkScrollbar.new($bind_demo) {|s| + pack('side'=>'right', 'fill'=>'y') + command proc{|*args| t.yview(*args)} + t.yscrollcommand proc{|first,last| s.set first,last} + } + pack('expand'=>'yes', 'fill'=>'both') + + # ������������ + if TkWinfo.depth($root).to_i > 1 + tagstyle_bold = {'background'=>'#43ce80', 'relief'=>'raised', + 'borderwidth'=>1} + tagstyle_normal = {'background'=>'', 'relief'=>'flat'} + else + tagstyle_bold = {'foreground'=>'white', 'background'=>'black'} + tagstyle_normal = {'foreground'=>'', 'background'=>''} + end + + # �ƥ��������� + insert 'insert', "�ƥ�����widget��ɽ��������������椹��Τ�Ʊ�������Υᥫ�˥����Ȥäơ��ƥ����Ȥ�Tcl�Υ��ޥ�ɤ������Ƥ뤳�Ȥ��Ǥ��ޤ�������ˤ�ꡢ�ޥ����䥭���ܡ��ɤΥ��������������Tcl�Υ��ޥ�ɤ��¹Ԥ����褦�ˤʤ�ޤ����㤨�С����Υ����Х��Υǥ�ץ������ˤĤ��Ƥ�����ʸ�ˤϤ��Τ褦�ʥ������Ĥ��Ƥ��ޤ����ޥ���������ʸ�ξ�˻��äƤ���������ʸ�����ꡢ�ܥ���1���Ȥ��������Υǥ⤬�Ϥޤ�ޤ��� + +" + insert('end', '1. �����Х� widget �˺�뤳�ȤΤǤ��륢���ƥ�μ������Ƥ˴ؤ��륵��ץ롣', (d1 = TkTextTag.new(t)) ) + insert('end', "\n\n") + insert('end', '2. ��ñ�� 2�����Υץ��åȡ��ǡ�����ɽ������ư�������Ȥ��Ǥ��롣', (d2 = TkTextTag.new(t)) ) + insert('end', "\n\n") + insert('end', '3. �ƥ����ȥ����ƥ�Υ����ȹ�·����', + (d3 = TkTextTag.new(t)) ) + insert('end', "\n\n") + insert('end', '4. �饤���ƥ�Τ���������Ƭ�η��Υ��ǥ�����', + (d4 = TkTextTag.new(t)) ) + insert('end', "\n\n") + insert('end', '5. ���֥��ȥåפ��ѹ����뤿��ε�ǽ�Ĥ��Υ롼�顼��', + (d5 = TkTextTag.new(t)) ) + insert('end', "\n\n") + insert('end', + '6. �����Х����ɤ���äƥ��������뤹��Τ�������åɡ�', + (d6 = TkTextTag.new(t)) ) + + # binding + [d1, d2, d3, d4, d5, d6].each{|tag| + tag_binding_for_bind_demo(tag, tagstyle_bold, tagstyle_normal) + } + d1.bind('1', + proc{eval `cat #{[$demo_dir,'items.rb'].join(File::Separator)}`}) + d2.bind('1', + proc{eval `cat #{[$demo_dir,'plot.rb'].join(File::Separator)}`}) + d3.bind('1', + proc{eval `cat #{[$demo_dir,'ctext.rb'].join(File::Separator)}`}) + d4.bind('1', + proc{eval `cat #{[$demo_dir,'arrow.rb'].join(File::Separator)}`}) + d5.bind('1', + proc{eval `cat #{[$demo_dir,'ruler.rb'].join(File::Separator)}`}) + d6.bind('1', + proc{eval `cat #{[$demo_dir,'cscroll.rb'].join(File::Separator)}`}) + + TkTextMarkInsert.new(t, '0.0') + configure('state','disabled') +} diff --git a/ext/tk/sample/demos-jp/bitmap.rb b/ext/tk/sample/demos-jp/bitmap.rb new file mode 100644 index 0000000000..a400862881 --- /dev/null +++ b/ext/tk/sample/demos-jp/bitmap.rb @@ -0,0 +1,70 @@ +# +# bitmap widget demo (called by 'widget') +# + +# bitmapRow -- +# Create a row of bitmap items in a window. +# +# Arguments: +# w - The parent window that is to contain the row. +# args - The names of one or more bitmaps, which will be displayed +# in a new row across the bottom of w along with their +# names. + +def bitmapRow(w,*args) + TkFrame.new(w){|row| + pack('side'=>'top', 'fill'=>'both') + for bitmap in args + TkFrame.new(row){|base| + pack('side'=>'left', 'fill'=>'both', 'pady'=>'.25c', 'padx'=>'.25c') + TkLabel.new(base, 'text'=>bitmap, 'width'=>9).pack('side'=>'bottom') + TkLabel.new(base, 'bitmap'=>bitmap).pack('side'=>'bottom') + } + end + } +end + +# toplevel widget ��¸�ߤ���к������ +if defined?($bitmap_demo) && $bitmap_demo + $bitmap_demo.destroy + $bitmap_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$bitmap_demo = TkToplevel.new {|w| + title("Bitmap Demonstration") + iconname("bitmap") + positionWindow(w) +} + +# label ���� +TkLabel.new($bitmap_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left', + 'text'=>"���Υ�����ɥ��ˤϡ�Tk ���Ȥ߹��ޤ줿���٤ƤΥӥåȥޥåפ���������̾���ȶ���ɽ������Ƥ��ޤ���Tcl �Υ�����ץ���Ǥϡ����줾���̾�����Ѥ��ƻ��Ȥ��ޤ���"){ + pack('side'=>'top') +} + +# frame ���� +$bitmap_buttons = TkFrame.new($bitmap_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $bitmap_demo + $bitmap_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'bitmap'} + }.pack('side'=>'left', 'expand'=>'yes') +} +$bitmap_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +TkFrame.new($bitmap_demo){|f| + bitmapRow(f,'error','gray25','gray50','hourglass') + bitmapRow(f,'info','question','questhead','warning') + pack('side'=>'top', 'expand'=>'yes', 'fill'=>'both') +} + diff --git a/ext/tk/sample/demos-jp/browse1 b/ext/tk/sample/demos-jp/browse1 new file mode 100644 index 0000000000..6bb8fb35ca --- /dev/null +++ b/ext/tk/sample/demos-jp/browse1 @@ -0,0 +1,63 @@ +#!/usr/local/bin/ruby + +# browse -- +# This script generates a directory browser, which lists the working +# directory and allow you to open files or subdirectories by +# double-clicking. + +require 'tk' + +# Create a scrollbar on the right side of the main window and a listbox +# on the left side. + +listbox = TkListbox.new(nil, 'relief'=>'sunken', + 'width'=>20, 'height'=>20, 'setgrid'=>'yes') {|l| + TkScrollbar.new(nil, 'command'=>proc{|*args| l.yview *args}) {|s| + pack('side'=>'right', 'fill'=>'y') + l.yscrollcommand(proc{|first,last| s.set(first,last)}) + } + + pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') +} + +root = TkRoot.new +root.minsize(1,1) + +# The procedure below is invoked to open a browser on a given file; if the +# file is a directory then another instance of this program is invoked; if +# the file is a regular file then the Mx editor is invoked to display +# the file. + +def browse (dir, file) + file = dir + File::Separator + file if dir != '.' + type = File.ftype(file) + if type == 'directory' + system($0 + ' ' + file + ' &') + else + if type == 'file' + if ENV['EDITOR'] + system(ENV['EDITOR'] + ' ' + file + ' &') + else + system('xedit ' + file + ' &') + end + else + STDOUT.print "\"#{file}\" isn't a directory or regular file" + end + end +end + +# Fill the listbox with a list of all the files in the directory (run +# the "ls" command to get that information). + +dir = ARGV[0] ? ARGV[0] : '.' +open("|ls -a #{dir}", 'r'){|fid| fid.readlines}.each{|fname| + listbox.insert('end', fname.chomp) +} + +# Set up bindings for the browser. + +Tk.bind_all('Control-c', proc{root.destroy}) +listbox.bind('Double-Button-1', + proc{TkSelection.get.each{|f| browse dir, f}}) + +Tk.mainloop diff --git a/ext/tk/sample/demos-jp/browse2 b/ext/tk/sample/demos-jp/browse2 new file mode 100644 index 0000000000..755afa682c --- /dev/null +++ b/ext/tk/sample/demos-jp/browse2 @@ -0,0 +1,82 @@ +#!/usr/local/bin/ruby + +# browse -- +# This script generates a directory browser, which lists the working +# directory and allow you to open files or subdirectories by +# double-clicking. + +require 'tk' + +class Browse + BROWSE_WIN_COUNTER = TkVariable.new(0) + + def initialize(dir) + BROWSE_WIN_COUNTER.value = BROWSE_WIN_COUNTER.to_i + 1 + + # create base frame + base = TkToplevel.new { + minsize(1,1) + title('Browse : ' + dir) + } + + # Create a scrollbar on the right side of the main window and a listbox + # on the left side. + list = TkListbox.new(base, 'relief'=>'sunken', + 'width'=>20, 'height'=>20, 'setgrid'=>'yes') {|l| + TkScrollbar.new(base, 'command'=>proc{|*args| l.yview *args}) {|s| + pack('side'=>'right', 'fill'=>'y') + l.yscrollcommand(proc{|first,last| s.set(first,last)}) + } + + pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') + + # Fill the listbox with a list of all the files in the directory (run + # the "ls" command to get that information). + open("|ls -a #{dir}", 'r'){|fid| fid.readlines}.each{|fname| + l.insert('end', fname.chomp) + } + + } + + # Set up bindings for the browser. + base.bind('Control-c', + proc{ + base.destroy + Browse::BROWSE_WIN_COUNTER.value = \ + Browse::BROWSE_WIN_COUNTER.to_i - 1}) + list.bind('Double-Button-1', + proc{TkSelection.get.each{|f| self.browse dir, f}}) + end + + # The method below is invoked to open a browser on a given file; if the + # file is a directory then another instance of this program is invoked; if + # the file is a regular file then the Mx editor is invoked to display + # the file. + def browse (dir, file) + file = dir + File::Separator + file if dir != '.' + type = File.ftype(file) + if type == 'directory' + Browse.new(file) + else + if type == 'file' + if ENV['EDITOR'] + system(ENV['EDITOR'] + ' ' + file + ' &') + else + system('xedit ' + file + ' &') + end + else + STDOUT.print "\"#{file}\" isn't a directory or regular file" + end + end + end + +end + +Browse.new(ARGV[0] ? ARGV[0] : '.') + +TkRoot.new { + withdraw + Browse::BROWSE_WIN_COUNTER.trace('w', proc{exit if Browse::BROWSE_WIN_COUNTER.to_i == 0}) +} + +Tk.mainloop diff --git a/ext/tk/sample/demos-jp/button.rb b/ext/tk/sample/demos-jp/button.rb new file mode 100644 index 0000000000..33247261f2 --- /dev/null +++ b/ext/tk/sample/demos-jp/button.rb @@ -0,0 +1,80 @@ +# +# button widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($button_demo) && $button_demo + $button_demo.destroy + $button_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$button_demo = TkToplevel.new {|w| + title("Button Demonstration") + iconname("button") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($button_demo) { + font $kanji_font + wraplength '4i' + justify 'left' + text "�ܥ����å�����ȡ��ܥ�����طʿ������Υܥ���˽�Ƥ��뿧�ˤʤ�ޤ����ܥ���ܥ���ؤΰ�ư�ϥ��֤����ȤǤ��ǽ�Ǥ����ޤ����ڡ����Ǽ¹Ԥ��뤳�Ȥ��Ǥ��ޤ���" +} +msg.pack('side'=>'top') + +# frame ���� +$button_buttons = TkFrame.new($button_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $button_demo + $button_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'button'} + }.pack('side'=>'left', 'expand'=>'yes') + +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# button ���� +TkButton.new($button_demo){ + text "Peach Puff" + width 10 + command proc{ + $button_demo.configure('bg','PeachPuff1') + $button_buttons.configure('bg','PeachPuff1') + } +}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) + +TkButton.new($button_demo){ + text "Light Blue" + width 10 + command proc{ + $button_demo.configure('bg','LightBlue1') + $button_buttons.configure('bg','LightBlue1') + } +}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) + +TkButton.new($button_demo){ + text "Sea Green" + width 10 + command proc{ + $button_demo.configure('bg','SeaGreen2') + $button_buttons.configure('bg','SeaGreen2') + } +}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) + +TkButton.new($button_demo){ + text "Yellow" + width 10 + command proc{ + $button_demo.configure('bg','Yellow1') + $button_buttons.configure('bg','Yellow1') + } +}.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2) diff --git a/ext/tk/sample/demos-jp/check.rb b/ext/tk/sample/demos-jp/check.rb new file mode 100644 index 0000000000..50c21fac0e --- /dev/null +++ b/ext/tk/sample/demos-jp/check.rb @@ -0,0 +1,66 @@ +# +# checkbutton widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($check_demo) && $check_demo + $check_demo.destroy + $check_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$check_demo = TkToplevel.new {|w| + title("Checkbutton Demonstration") + iconname("check") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($check_demo) { + font $font + wraplength '4i' + justify 'left' + text "���ˤ� 3 �ĤΥ����å��ܥ���ɽ������Ƥ��ޤ�������å�����ȥܥ����������֤��Ѥ�ꡢTcl �ѿ��ˤ��Υܥ���ξ��֤��ͤ����ꤷ�ޤ������ߤ��ѿ����ͤ�ˤϡ��ѿ����ȡץܥ����å����Ƥ���������" +} +msg.pack('side'=>'top') + +# �ѿ����� +wipers = TkVariable.new(0) +brakes = TkVariable.new(0) +sober = TkVariable.new(0) + +# frame ���� +TkFrame.new($check_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $check_demo + $check_demo = nil + $showVarsWin[tmppath.path] = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'check'} + }.pack('side'=>'left', 'expand'=>'yes') + + + TkButton.new(frame) { + text '�ѿ�����' + command proc{ + showVars($check_demo, + ['wipers', wipers], ['brakes', brakes], ['sober', sober]) + } + }.pack('side'=>'left', 'expand'=>'yes') + +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + + +# checkbutton ���� +[ TkCheckButton.new($check_demo, 'text'=>'�磻�ѡ� OK', 'variable'=>wipers), + TkCheckButton.new($check_demo, 'text'=>'�֥졼�� OK', 'variable'=>brakes), + TkCheckButton.new($check_demo, 'text'=>'�ɥ饤�С�����', 'variable'=>sober) +].each{|w| w.relief('flat'); w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w')} + diff --git a/ext/tk/sample/demos-jp/clrpick.rb b/ext/tk/sample/demos-jp/clrpick.rb new file mode 100644 index 0000000000..55cfd9c7c6 --- /dev/null +++ b/ext/tk/sample/demos-jp/clrpick.rb @@ -0,0 +1,74 @@ +# +# widget demo prompts the user to select a color (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($clrpick_demo) && $clrpick_demo + $clrpick_demo.destroy + $clrpick_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$clrpick_demo = TkToplevel.new {|w| + title("Color Selection Dialogs") + iconname("colors") + positionWindow(w) +} + +# label ���� +TkLabel.new($clrpick_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left', + 'text'=>"�ʲ��Υܥ�����ơ����Υ�����ɥ���ˤ��륦�������åȤ����ʿ����طʿ������Ʋ�������").pack('side'=>'top') + +# frame ���� +TkFrame.new($clrpick_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $clrpick_demo + $clrpick_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'clrpick'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# button ���� +TkButton.new($clrpick_demo, 'text'=>'�طʿ������� ...') {|b| + command(proc{setColor $clrpick_demo, b, 'background', + ['background', 'highlightbackground']}) + pack('side'=>'top', 'anchor'=>'c', 'pady'=>'2m') +} + +TkButton.new($clrpick_demo, 'text'=>'���ʿ������� ...') {|b| + command(proc{setColor $clrpick_demo, b, 'foreground', ['foreground']}) + pack('side'=>'top', 'anchor'=>'c', 'pady'=>'2m') +} + +def setColor(w,button,name,options) + w.grab + initialColor = button[name] + color = Tk.chooseColor('title'=>"Choose a #{name} color", 'parent'=>w, + 'initialcolor'=>initialColor) + if color != "" + setColor_helper(w,options,color) + end + + w.grab('release') +end + +def setColor_helper(w, options, color) + options.each{|opt| + begin + w[opt] = color + rescue + end + } + TkWinfo.children(w).each{|child| + setColor_helper child, options, color + } +end + diff --git a/ext/tk/sample/demos-jp/colors.rb b/ext/tk/sample/demos-jp/colors.rb new file mode 100644 index 0000000000..f9a5983e75 --- /dev/null +++ b/ext/tk/sample/demos-jp/colors.rb @@ -0,0 +1,143 @@ +# +# listbox widget demo 'colors' (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($colors_demo) && $colors_demo + $colors_demo.destroy + $colors_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$colors_demo = TkToplevel.new {|w| + title("Listbox Demonstration (colors)") + iconname("colors") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($colors_demo) { + font $font + wraplength '4i' + justify 'left' + text "���ˤϿ���̾�������ä�����������С��դΥꥹ�ȥܥå�����ɽ������Ƥ��ޤ����ꥹ�Ȥ������뤵����Τϥ���������С��Ǥ�Ǥ��ޤ������ꥹ�ȥܥå�������ǥޥ����Υܥ���2(��ܥ���)�����ޤޥɥ�å����Ƥ�Ǥ��ޤ������뿧��ܥ���1(���ܥ���)�ǥ��֥륯��å�����ȥ��ץꥱ����������Τ����ο��ˤʤ�ޤ���" +} +msg.pack('side'=>'top') + +# frame ���� +TkFrame.new($colors_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $colors_demo + $colors_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'colors'} + }.pack('side'=>'left', 'expand'=>'yes') + +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +colors_lbox = nil +TkFrame.new($colors_demo, 'borderwidth'=>10) {|w| + s = TkScrollbar.new(w) + colors_lbox = TkListbox.new(w) { + setgrid 1 + width 10 + height 12 + yscrollcommand proc{|first,last| s.set first,last} + } + s.command(proc{|*args| colors_lbox.yview(*args)}) + s.pack('side'=>'right', 'fill'=>'y') + colors_lbox.pack('side'=>'left', 'expand'=>1, 'fill'=>'both') +}.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'y') + +colors_lbox.bind('Double-1', proc{TkPalette.setPalette TkSelection.get}) + +ins_data = [ + 'gray60','gray70','gray80','gray85','gray90','gray95', + 'snow1','snow2','snow3','snow4','seashell1','seashell2', + 'seashell3','seashell4','AntiqueWhite1','AntiqueWhite2', + 'AntiqueWhite3','AntiqueWhite4','bisque1','bisque2', + 'bisque3','bisque4','PeachPuff1','PeachPuff2', + 'PeachPuff3','PeachPuff4','NavajoWhite1','NavajoWhite2', + 'NavajoWhite3','NavajoWhite4','LemonChiffon1', + 'LemonChiffon2','LemonChiffon3','LemonChiffon4', + 'cornsilk1','cornsilk2','cornsilk3','cornsilk4', + 'ivory1','ivory2','ivory3','ivory4','honeydew1', + 'honeydew2','honeydew3','honeydew4','LavenderBlush1', + 'LavenderBlush2','LavenderBlush3','LavenderBlush4', + 'MistyRose1','MistyRose2','MistyRose3','MistyRose4', + 'azure1','azure2','azure3','azure4','SlateBlue1', + 'SlateBlue2','SlateBlue3','SlateBlue4','RoyalBlue1', + 'RoyalBlue2','RoyalBlue3','RoyalBlue4','blue1','blue2', + 'blue3','blue4','DodgerBlue1','DodgerBlue2', + 'DodgerBlue3','DodgerBlue4','SteelBlue1','SteelBlue2', + 'SteelBlue3','SteelBlue4','DeepSkyBlue1','DeepSkyBlue2', + 'DeepSkyBlue3','DeepSkyBlue4','SkyBlue1','SkyBlue2', + 'SkyBlue3','SkyBlue4','LightSkyBlue1','LightSkyBlue2', + 'LightSkyBlue3','LightSkyBlue4','SlateGray1', + 'SlateGray2','SlateGray3','SlateGray4', + 'LightSteelBlue1','LightSteelBlue2','LightSteelBlue3', + 'LightSteelBlue4','LightBlue1','LightBlue2', + 'LightBlue3','LightBlue4','LightCyan1','LightCyan2', + 'LightCyan3','LightCyan4','PaleTurquoise1', + 'PaleTurquoise2','PaleTurquoise3','PaleTurquoise4', + 'CadetBlue1','CadetBlue2','CadetBlue3','CadetBlue4', + 'turquoise1','turquoise2','turquoise3','turquoise4', + 'cyan1','cyan2','cyan3','cyan4','DarkSlateGray1', + 'DarkSlateGray2','DarkSlateGray3','DarkSlateGray4', + 'aquamarine1','aquamarine2','aquamarine3','aquamarine4', + 'DarkSeaGreen1','DarkSeaGreen2','DarkSeaGreen3', + 'DarkSeaGreen4','SeaGreen1','SeaGreen2','SeaGreen3', + 'SeaGreen4','PaleGreen1','PaleGreen2','PaleGreen3', + 'PaleGreen4','SpringGreen1','SpringGreen2', + 'SpringGreen3','SpringGreen4','green1','green2', + 'green3','green4','chartreuse1','chartreuse2', + 'chartreuse3','chartreuse4','OliveDrab1','OliveDrab2', + 'OliveDrab3','OliveDrab4','DarkOliveGreen1', + 'DarkOliveGreen2','DarkOliveGreen3','DarkOliveGreen4', + 'khaki1','khaki2','khaki3','khaki4','LightGoldenrod1', + 'LightGoldenrod2','LightGoldenrod3','LightGoldenrod4', + 'LightYellow1','LightYellow2','LightYellow3', + 'LightYellow4','yellow1','yellow2','yellow3','yellow4', + 'gold1','gold2','gold3','gold4','goldenrod1', + 'goldenrod2','goldenrod3','goldenrod4','DarkGoldenrod1', + 'DarkGoldenrod2','DarkGoldenrod3','DarkGoldenrod4', + 'RosyBrown1','RosyBrown2','RosyBrown3','RosyBrown4', + 'IndianRed1','IndianRed2','IndianRed3','IndianRed4', + 'sienna1','sienna2','sienna3','sienna4','burlywood1', + 'burlywood2','burlywood3','burlywood4','wheat1', + 'wheat2','wheat3','wheat4','tan1','tan2','tan3','tan4', + 'chocolate1','chocolate2','chocolate3','chocolate4', + 'firebrick1','firebrick2','firebrick3','firebrick4', + 'brown1','brown2','brown3','brown4','salmon1','salmon2', + 'salmon3','salmon4','LightSalmon1','LightSalmon2', + 'LightSalmon3','LightSalmon4','orange1','orange2', + 'orange3','orange4','DarkOrange1','DarkOrange2', + 'DarkOrange3','DarkOrange4','coral1','coral2','coral3', + 'coral4','tomato1','tomato2','tomato3','tomato4', + 'OrangeRed1','OrangeRed2','OrangeRed3','OrangeRed4', + 'red1','red2','red3','red4','DeepPink1','DeepPink2', + 'DeepPink3','DeepPink4','HotPink1','HotPink2', + 'HotPink3','HotPink4','pink1','pink2','pink3','pink4', + 'LightPink1','LightPink2','LightPink3','LightPink4', + 'PaleVioletRed1','PaleVioletRed2','PaleVioletRed3', + 'PaleVioletRed4','maroon1','maroon2','maroon3', + 'maroon4','VioletRed1','VioletRed2','VioletRed3', + 'VioletRed4','magenta1','magenta2','magenta3', + 'magenta4','orchid1','orchid2','orchid3','orchid4', + 'plum1','plum2','plum3','plum4','MediumOrchid1', + 'MediumOrchid2','MediumOrchid3','MediumOrchid4', + 'DarkOrchid1','DarkOrchid2','DarkOrchid3', + 'DarkOrchid4','purple1','purple2','purple3','purple4', + 'MediumPurple1','MediumPurple2','MediumPurple3', + 'MediumPurple4','thistle1','thistle2','thistle3', 'thistle4' +] + +colors_lbox.insert(0, *ins_data) diff --git a/ext/tk/sample/demos-jp/cscroll.rb b/ext/tk/sample/demos-jp/cscroll.rb new file mode 100644 index 0000000000..7f5ffa2f02 --- /dev/null +++ b/ext/tk/sample/demos-jp/cscroll.rb @@ -0,0 +1,130 @@ +# +# simple scrollable canvas widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($cscroll_demo) && $cscroll_demo + $cscroll_demo.destroy + $cscroll_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$cscroll_demo = TkToplevel.new {|w| + title("Scrollable Canvas Demonstration") + iconname("cscroll") + positionWindow(w) +} + +# label ���� +TkLabel.new($cscroll_demo, 'font'=>$font, 'wraplength'=>'4i', + 'justify'=>'left', 'text'=>"���Υ�����ɥ��ˤϥ���������С���ޥ����Υܥ���2 �ǥ���������Ǥ��륭���Х� widget ��ɽ������Ƥ��ޤ����ͳѤξ�ǥܥ���1 ��å�����ȡ����Υ���ǥå�����ɸ����Ϥ˽��Ϥ���ޤ���"){ + pack('side'=>'top') +} + +# frame ���� +$cscroll_buttons = TkFrame.new($cscroll_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $cscroll_demo + $cscroll_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'cscroll'} + }.pack('side'=>'left', 'expand'=>'yes') +} +$cscroll_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +unless $tk_version =~ /^4\.[01]/ + $cscroll_grid = TkFrame.new($cscroll_demo) { + pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) + } + TkGrid.rowconfigure($cscroll_grid, 0, 'weight'=>1, 'minsize'=>0) + TkGrid.columnconfigure($cscroll_grid, 0, 'weight'=>1, 'minsize'=>0) +end + +# canvas ���� +$cscroll_canvas = TkCanvas.new($cscroll_demo, + 'relief'=>'sunken', 'borderwidth'=>2, + 'scrollregion'=>['-11c', '-11c', '50c', '20c'] + ) {|c| + if $tk_version =~ /^4\.[01]/ + pack('expand'=>'yes', 'fill'=>'both') + else + grid('in'=>$cscroll_grid, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + end + + TkScrollbar.new($cscroll_demo, 'command'=>proc{|*args| c.yview(*args)}) {|vs| + c.yscrollcommand(proc{|first,last| vs.set first,last}) + if $tk_version =~ /^4\.[01]/ + pack('side'=>'right', 'fill'=>'y') + else + grid('in'=>$cscroll_grid, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + end + } + + TkScrollbar.new($cscroll_demo, 'orient'=>'horiz', + 'command'=>proc{|*args| c.xview(*args)}) {|hs| + c.xscrollcommand(proc{|first,last| hs.set first,last}) + if $tk_version =~ /^4\.[01]/ + pack('side'=>'bottom', 'fill'=>'x') + else + grid('in'=>$cscroll_grid, 'padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + end + } +} + +bg = $cscroll_canvas.configinfo('bg')[4] +(0..19).each{|i| + x = -10+3*i + y = -10 + (0..9).each{|j| + TkcRectangle.new($cscroll_canvas, "#{x}c", "#{y}c", "#{x+2}c", "#{y+2}c", + 'outline'=>'black', 'fill'=>bg, 'tags'=>'rect') + TkcText.new($cscroll_canvas, "#{x+1}c", "#{y+1}c", + 'text'=>"#{i},#{j}", 'anchor'=>'center', 'tags'=>'text') + y += 3 + } +} + +$cscroll_canvas.itembind('all', 'Any-Enter', proc{scrollEnter $cscroll_canvas}) +$cscroll_canvas.itembind('all', 'Any-Leave', proc{scrollLeave $cscroll_canvas}) +$cscroll_canvas.itembind('all', '1', proc{scrollButton $cscroll_canvas}) +$cscroll_canvas.itembind('all', 'Any-Enter', proc{scrollEnter $cscroll_canvas}) +$cscroll_canvas.bind('2', proc{|x,y| $cscroll_canvas.scan_mark(x,y)}, '%x %y') +$cscroll_canvas.bind('B2-Motion', + proc{|x,y| $cscroll_canvas.scan_dragto(x,y)}, '%x %y') + +def scrollEnter(c) + id = c.find_withtag('current')[0].id + id -= 1 if c.gettags('current').include?('text') + $oldFill = c.itemconfiginfo(id, 'fill')[4] + if TkWinfo.depth(c) > 1 + c.itemconfigure(id, 'fill'=>'SeaGreen1') + else + c.itemconfigure(id, 'fill'=>'black') + c.itemconfigure(id+1, 'fill'=>'white') + end +end + +def scrollLeave(c) + id = c.find_withtag('current')[0].id + id -= 1 if c.gettags('current').include?('text') + c.itemconfigure(id, 'fill'=>$oldFill) + c.itemconfigure(id+1, 'fill'=>'black') +end + +def scrollButton(c) + id = c.find_withtag('current')[0].id + id += 1 unless c.gettags('current').include?('text') + print "You buttoned at #{c.itemconfiginfo(id,'text')[4]}\n" +end + diff --git a/ext/tk/sample/demos-jp/ctext.rb b/ext/tk/sample/demos-jp/ctext.rb new file mode 100644 index 0000000000..62b02b3972 --- /dev/null +++ b/ext/tk/sample/demos-jp/ctext.rb @@ -0,0 +1,181 @@ +# +# Canvas Text widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($ctext_demo) && $ctext_demo + $ctext_demo.destroy + $ctext_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$ctext_demo = TkToplevel.new {|w| + title("Canvas Text Demonstration") + iconname("Text") + positionWindow(w) +} + +# label ���� +TkLabel.new($ctext_demo, 'font'=>$font, 'wraplength'=>'5i', 'justify'=>'left', + 'text'=>"���Υ�����ɥ��ˤϥ����Х�widget�Υƥ����ȵ�ǽ��ǥ⤹�뤿��Υƥ�����ʸ����ɽ������Ƥ��ޤ����ޥ�����ͳѤ���˻��äƤ���������å�����Ȱ��֤����Ѥ�����������а��֤��Ѥ����ꡢ��·�����Ѥ����ꤹ�뤳�Ȥ��Ǥ��ޤ����ޤ��ʲ��Τ褦���Խ��Τ���δ�ñ�ʥХ���ǥ��ݡ��Ȥ��Ƥ��ޤ��� + + 1. �ޥ�������äƤ���������å��������ϤǤ��ޤ��� + 2. �ܥ���1������Ǥ��ޤ��� + 3. �ޥ����ΰ��֤˥ܥ���2�������ƥ����Ȥԡ��Ǥ��ޤ��� + 4.�Хå����ڡ�����ȥ�����-H���������������ľ����ʸ���������ޤ��� + 5. Delete�������������������ľ���ʸ���������ޤ���"){ + pack('side'=>'top') +} + +# frame ���� +$ctext_buttons = TkFrame.new($ctext_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $ctext_demo + $ctext_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'ctext'} + }.pack('side'=>'left', 'expand'=>'yes') +} +$ctext_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# canvas ���� +$ctext_canvas = TkCanvas.new($ctext_demo, 'relief'=>'flat', + 'borderwidth'=>0, 'width'=>500, 'height'=>350) +$ctext_canvas.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'both') + +# font ���� +textFont = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*' + +# canvas ���� +TkcRectangle.new($ctext_canvas, 245, 195, 255, 205, + 'outline'=>'black', 'fill'=>'red') + +$ctag_text = TkcTag.new($ctext_canvas) +$ctag_text.withtag(TkcText.new($ctext_canvas, 250, 200, + 'text'=>"����ϥ����Х�widget�Υƥ����ȵ�ǽ��ǥ⤹�뤿���ʸ����Ǥ����ޥ�������äƤ���������å��������ϤǤ��ޤ������ƥ���ȥ�����-D�Ǿõ�뤳�Ȥ�Ǥ��ޤ���", + 'width'=>440, 'anchor'=>'n', + 'font'=>'-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*', + 'kanjifont'=>'-*--24-*-jisx0208.1983-0', + 'justify'=>'left') ) + +$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") +$ctag_text.bind('Shift-1', + proc{|x,y| $ctext_canvas.seleect_adjust 'current', "@#{x},#{y}"}, + "%x %y") +$ctag_text.bind('Shift-B1-Motion', + proc{|x,y| textB1Move $ctext_canvas,x,y}, "%x %y") +$ctag_text.bind('KeyPress', proc{|a| textInsert $ctext_canvas,a}, "%A") +$ctag_text.bind('Return', proc{textInsert $ctext_canvas,"\n"}) +$ctag_text.bind('Control-h', proc{textBs $ctext_canvas}) +$ctag_text.bind('BackSpace', proc{textBs $ctext_canvas}) +$ctag_text.bind('Delete', proc{textDel $ctext_canvas}) +$ctag_text.bind('2', proc{|x,y| textPaste $ctext_canvas, "@#{x},#{y}"}, + "%x %y") + +# Next, create some items that allow the text's anchor position +# to be edited. + +def mkTextConfig(w,x,y,option,value,color) + item = TkcRectangle.new(w, x, y, x+30, y+30, + 'outline'=>'black', 'fill'=>color, 'width'=>1) + item.bind('1', proc{$ctag_text.configure option, value}) + w.addtag_withtag('config', item) +end + +x = 50 +y = 50 +color = 'LightSkyBlue1' +mkTextConfig $ctext_canvas, x, y, 'anchor', 'se', color +mkTextConfig $ctext_canvas, x+30, y, 'anchor', 's', color +mkTextConfig $ctext_canvas, x+60, y, 'anchor', 'sw', color +mkTextConfig $ctext_canvas, x, y+30, 'anchor', 'e', color +mkTextConfig $ctext_canvas, x+30, y+30, 'anchor', 'center', color +mkTextConfig $ctext_canvas, x+60, y+30, 'anchor', 'w', color +mkTextConfig $ctext_canvas, x, y+60, 'anchor', 'ne', color +mkTextConfig $ctext_canvas, x+30, y+60, 'anchor', 'n', color +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') + +# Lastly, create some items that allow the text's justification to be +# changed. + +x = 350 +y = 50 +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') + +$ctext_canvas.itembind('config', 'Enter', proc{textEnter $ctext_canvas}) +$ctext_canvas.itembind('config', 'Leave', + proc{$ctext_canvas\ + .itemconfigure('current', + 'fill'=>$textConfigFill)}) + +$textConfigFill = '' + +def textEnter(w) + $textConfigFill = (w.itemconfiginfo 'current', 'fill')[4] + w.itemconfigure 'current', 'fill', 'black' +end + +def textInsert(w, string) + return if string == "" + begin + $ctag_text.dchars 'sel.first', 'sel.last' + rescue + end + $ctag_text.insert 'insert', string +end + +def textPaste(w, pos) + begin + $ctag_text.insert pos, TkSelection.get + rescue + end +end + +def textB1Press(w,x,y) + w.icursor 'current', "@#{x},#{y}" + w.itemfocus 'current' + w.focus + w.select_from 'current', "@#{x},#{y}" +end + +def textB1Move(w,x,y) + w.select_to 'current', "@#{x},#{y}" +end + +def textBs(w) + begin + $ctag_text.dchars 'sel.first', 'sel.last' + rescue + char = $ctag_text.index('insert').to_i - 1 + $ctag_text.dchars(char) if char >= 0 + end +end + +def textDel(w) + begin + $ctag_text.dchars 'sel.first', 'sel.last' + rescue + $ctag_text.dchars 'insert' + end +end + diff --git a/ext/tk/sample/demos-jp/dialog1.rb b/ext/tk/sample/demos-jp/dialog1.rb new file mode 100644 index 0000000000..317b6d9eb3 --- /dev/null +++ b/ext/tk/sample/demos-jp/dialog1.rb @@ -0,0 +1,35 @@ +# +# a dialog box with a local grab (called by 'widget') +# +class TkDialog_Demo1 < TkDialog + def title + "Dialog with local grab" + end + + def message + '�⡼��������������ܥå����Ǥ���Tk �� "grab" ���ޥ�ɤ���Ѥ��ƥ����������ܥå����ǡ֥������륰��֡פ��Ƥ��ޤ������Τ����줫�Υܥ����¹Ԥ��뤳�Ȥˤ�äơ����Υ�����������������ޤǡ����Υ���֤ˤ�äƥ��ץꥱ��������¾�Υ�����ɥ��Ǥϡ��ݥ��ط��Υ��٥�Ȥ������뤳�Ȥ��Ǥ��ʤ��ʤäƤ��ޤ���' + end + + def bitmap + 'info' + end + + def default_button + 0 + end + + def buttons +# "λ�� ����� �����ɻ���" + ["λ��", "�����", "�����ɻ���"] + end +end + +ret = TkDialog_Demo1.new('message_config'=>{'wraplength'=>'4i'}).value +case ret +when 0 + print "���ʤ��ϡ�λ��פ��ޤ����͡�\n" +when 1 + print "���ʤ��ϡ֥����פ��ޤ����͡�\n" +when 2 + showCode dialog1 +end diff --git a/ext/tk/sample/demos-jp/dialog2.rb b/ext/tk/sample/demos-jp/dialog2.rb new file mode 100644 index 0000000000..295522e562 --- /dev/null +++ b/ext/tk/sample/demos-jp/dialog2.rb @@ -0,0 +1,39 @@ +# +# a dialog box with a global grab (called by 'widget') +# +class TkDialog_Demo2 < TkDialog + def title + "Dialog with global grab" + end + + def message + '���Υ����������ܥå����ϥ������Х륰��֤���Ѥ��Ƥ��ޤ������Υܥ����¹Ԥ���ޤǡ��ǥ����ץ쥤��Τ����ʤ��ΤȤ����äǤ��ޤ��������Х륰��֤���Ѥ��뤳�Ȥϡ��ޤ��ɤ��ͤ��ǤϤ���ޤ��ɤ����Ƥ�ɬ�פˤʤ�ޤǻȤ����Ȼפ�ʤ��Dz�������' + end + + def bitmap + 'info' + end + + def default_button + 0 + end + + def buttons +# "λ�� ����� �����ɻ���" + ["λ��", "�����", "�����ɻ���"] + end +end + +ret = TkDialog_Demo2.new('message_config'=>{'wraplength'=>'4i'}, + 'prev_command'=>proc{|dialog| + Tk.after 100, proc{dialog.grab('global')} + }).value +case ret +when 0 + print "���ʤ��ϡ�λ��פ��ޤ����͡�\n" +when 1 + print "���ʤ��ϡ֥����פ��ޤ����͡�\n" +when 2 + showCode dialog2 +end + diff --git a/ext/tk/sample/demos-jp/doc.org/README b/ext/tk/sample/demos-jp/doc.org/README new file mode 100644 index 0000000000..90677d3316 --- /dev/null +++ b/ext/tk/sample/demos-jp/doc.org/README @@ -0,0 +1,7 @@ +This directory contains a collection of demonstration programs that +are translated into Japanese. You need to use a Japanized "wish" to +see these Japanese-translated demonstration programs. You also need +to put this directory ("demos.jp") at the next to "demos" since some +of the programs refer to the image files at "demos". + +Please refer to the README file at "demos" for more detail. diff --git a/ext/tk/sample/demos-jp/doc.org/README.JP b/ext/tk/sample/demos-jp/doc.org/README.JP new file mode 100644 index 0000000000..42b4929378 --- /dev/null +++ b/ext/tk/sample/demos-jp/doc.org/README.JP @@ -0,0 +1,14 @@ +This directory contains "widget" demo for the Japanized Tcl7.6/Tk4.2. +Most of the messages in the original are translated to Japanese. +But other tools in this directory are not translated. + +Following 2 kanji fonts are defined at the beginning of the file "widget." + + -*--24-*-jisx0208.1983-0 + -*--16-*-jisx0208.1983-0 + +These fonts are all part of the core distribution of X11R5, so +if you are running X11R5, you don't have to modify the file. + +But if you don't have these fonts, replace them with appropriate ones. +"-*--14-*-jisx0208.1983-0" will be a good choice. diff --git a/ext/tk/sample/demos-jp/doc.org/README.tk80 b/ext/tk/sample/demos-jp/doc.org/README.tk80 new file mode 100644 index 0000000000..c71f977d74 --- /dev/null +++ b/ext/tk/sample/demos-jp/doc.org/README.tk80 @@ -0,0 +1,46 @@ +This directory contains a collection of programs to demonstrate +the features of the Tk toolkit. The programs are all scripts for +"wish", a windowing shell. If wish has been installed in /usr/local +then you can invoke any of the programs in this directory just +by typing its file name to your command shell. Otherwise invoke +wish with the file as its first argument, e.g., "wish hello". +The rest of this file contains a brief description of each program. +Files with names ending in ".tcl" are procedure packages used by one +or more of the demo programs; they can't be used as programs by +themselves so they aren't described below. + +hello - Creates a single button; if you click on it, a message + is typed and the application terminates. + +widget - Contains a collection of demonstrations of the widgets + currently available in the Tk library. Most of the .tcl + files are scripts for individual demos available through + the "widget" program. + +ixset - A simple Tk-based wrapper for the "xset" program, which + allows you to interactively query and set various X options + such as mouse acceleration and bell volume. Thanks to + Pierre David for contributing this example. + +rolodex - A mock-up of a simple rolodex application. It has much of + the user interface for such an application but no back-end + database. This program was written in response to Tom + LaStrange's toolkit benchmark challenge. + +tcolor - A color editor. Allows you to edit colors in several + different ways, and will also perform automatic updates + using "send". + +rmt - Allows you to "hook-up" remotely to any Tk application + on the display. Select an application with the menu, + then just type commands: they'll go to that application. + +timer - Displays a seconds timer with start and stop buttons. + Control-c and control-q cause it to exit. + +browse - A simple directory browser. Invoke it with and argument + giving the name of the directory you'd like to browse. + Double-click on files or subdirectories to browse them. + Control-c and control-q cause the program to exit. + +sccs id = SCCS: @(#) README 1.3 96/02/16 10:49:14 diff --git a/ext/tk/sample/demos-jp/doc.org/license.terms b/ext/tk/sample/demos-jp/doc.org/license.terms new file mode 100644 index 0000000000..03ca6fcb31 --- /dev/null +++ b/ext/tk/sample/demos-jp/doc.org/license.terms @@ -0,0 +1,39 @@ +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., and other parties. The following +terms apply to all files associated with the software unless explicitly +disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. diff --git a/ext/tk/sample/demos-jp/doc.org/license.terms.tk80 b/ext/tk/sample/demos-jp/doc.org/license.terms.tk80 new file mode 100644 index 0000000000..03ca6fcb31 --- /dev/null +++ b/ext/tk/sample/demos-jp/doc.org/license.terms.tk80 @@ -0,0 +1,39 @@ +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., and other parties. The following +terms apply to all files associated with the software unless explicitly +disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. diff --git a/ext/tk/sample/demos-jp/entry1.rb b/ext/tk/sample/demos-jp/entry1.rb new file mode 100644 index 0000000000..273b6728df --- /dev/null +++ b/ext/tk/sample/demos-jp/entry1.rb @@ -0,0 +1,56 @@ +# +# entry (no scrollbars) widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($entry1_demo) && $entry1_demo + $entry1_demo.destroy + $entry1_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$entry1_demo = TkToplevel.new {|w| + title("Entry Demonstration (no scrollbars)") + iconname("entry1") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($entry1_demo) { + font $font + wraplength '5i' + justify 'left' + text "3����ΰۤʤ륨��ȥ꤬ɽ������Ƥ��ޤ���ʸ�������Ϥ���ˤϥݥ�����äƹԤ�������å����Ƥ��饿���פ��Ƥ���������ɸ��Ū��Motif���Խ���ǽ����Emacs�Υ����Х���ɤȤȤ�ˡ����ݡ��Ȥ���Ƥ��ޤ����㤨�С��Хå����ڡ����ȥ���ȥ�����-H�ϥ�������κ���ʸ�����������ǥ�ȥ����ȥ���ȥ�����-D�ϥ�������α�¦��ʸ���������ޤ���Ĺ��ƥ�����ɥ��������ڤ�ʤ���Τϡ��ޥ����Υܥ���2�����ޤޥɥ�å����뤳�Ȥǥ��������뤵���뤳�Ȥ��Ǥ��ޤ������ܸ�����Ϥ���Τϥ���ȥ�����-�Хå�����å���Ǥ���kinput2��ư���Ƥ�������Ϥ��뤳�Ȥ��Ǥ��ޤ���" +} +msg.pack('side'=>'top') + +# frame ���� +TkFrame.new($entry1_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $entry1_demo + $entry1_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'entry1'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# entry ���� +e1 = TkEntry.new($entry1_demo, 'relief'=>'sunken') +e2 = TkEntry.new($entry1_demo, 'relief'=>'sunken') +e3 = TkEntry.new($entry1_demo, 'relief'=>'sunken') +[e1,e2,e3].each{|w| w.pack('side'=>'top', 'padx'=>10, 'pady'=>5, 'fill'=>'x')} + +# ��������� +e1.insert(0, '�����') +e2.insert('end', "���Υ���ȥ�ˤ�Ĺ��ʸ�������äƤ��ơ�") +e2.insert('end', "Ĺ�����ƥ�����ɥ��ˤ������ڤ�ʤ��Τǡ�") +e2.insert('end', "�ºݤν꽪��ޤǸ���ˤϥ��������뤵���ʤ����") +e2.insert('end', "�ʤ�ʤ��Ǥ��礦��") + diff --git a/ext/tk/sample/demos-jp/entry2.rb b/ext/tk/sample/demos-jp/entry2.rb new file mode 100644 index 0000000000..7efac005f0 --- /dev/null +++ b/ext/tk/sample/demos-jp/entry2.rb @@ -0,0 +1,87 @@ +# +# entry (with scrollbars) widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($entry2_demo) && $entry2_demo + $entry2_demo.destroy + $entry2_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$entry2_demo = TkToplevel.new {|w| + title("Entry Demonstration (with scrollbars)") + iconname("entry2") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($entry2_demo) { + font $font + wraplength '5i' + justify 'left' + text "3����ΰۤʤ륨��ȥ꤬�ơ�����������С��դ�ɽ������Ƥ��ޤ���ʸ�������Ϥ���ˤϥݥ�����äƹԤ�������å����Ƥ��饿���פ��Ƥ���������ɸ��Ū��Motif���Խ���ǽ����Emacs�Υ����Х���ɤȤȤ�ˡ����ݡ��Ȥ���Ƥ��ޤ����㤨�С��Хå����ڡ����ȥ���ȥ�����-H�ϥ�������κ���ʸ�����������ǥ�ȥ����ȥ���ȥ�����-D�ϥ�������α�¦��ʸ���������ޤ���Ĺ��ƥ�����ɥ��������ڤ�ʤ���Τϡ��ޥ����Υܥ���2�����ޤޥɥ�å����뤳�Ȥǥ��������뤵���뤳�Ȥ��Ǥ��ޤ������ܸ�����Ϥ���Τϥ���ȥ�����-�Хå�����å���Ǥ���kinput2��ư���Ƥ�������Ϥ��뤳�Ȥ��Ǥ��ޤ���" +} +msg.pack('side'=>'top') + +# frame ���� +TkFrame.new($entry2_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $entry2_demo + $entry2_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'entry2'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +TkFrame.new($entry2_demo, 'borderwidth'=>10) {|w| + # entry 1 + s1 = TkScrollbar.new(w, 'relief'=>'sunken', 'orient'=>'horiz') + e1 = TkEntry.new(w, 'relief'=>'sunken') { + xscrollcommand proc{|first,last| s1.set first,last} + } + s1.command(proc{|*args| e1.xview(*args)}) + e1.pack('side'=>'top', 'fill'=>'x') + s1.pack('side'=>'top', 'fill'=>'x') + + # spacer + TkFrame.new(w, 'width'=>20, 'height'=>10).pack('side'=>'top', 'fill'=>'x') + + # entry 2 + s2 = TkScrollbar.new(w, 'relief'=>'sunken', 'orient'=>'horiz') + e2 = TkEntry.new(w, 'relief'=>'sunken') { + xscrollcommand proc{|first,last| s2.set first,last} + } + s2.command(proc{|*args| e2.xview(*args)}) + e2.pack('side'=>'top', 'fill'=>'x') + s2.pack('side'=>'top', 'fill'=>'x') + + # spacer + TkFrame.new(w, 'width'=>20, 'height'=>10).pack('side'=>'top', 'fill'=>'x') + + # entry 3 + s3 = TkScrollbar.new(w, 'relief'=>'sunken', 'orient'=>'horiz') + e3 = TkEntry.new(w, 'relief'=>'sunken') { + xscrollcommand proc{|first,last| s3.set first,last} + } + s3.command(proc{|*args| e3.xview(*args)}) + e3.pack('side'=>'top', 'fill'=>'x') + s3.pack('side'=>'top', 'fill'=>'x') + + # ��������� + e1.insert(0, '�����') + e2.insert('end', "���Υ���ȥ�ˤ�Ĺ��ʸ�������äƤ��ơ�") + e2.insert('end', "Ĺ�����ƥ�����ɥ��ˤ������ڤ�ʤ��Τǡ�") + e2.insert('end', "�ºݤν꽪��ޤǸ���ˤϥ��������뤵���ʤ����") + e2.insert('end', "�ʤ�ʤ��Ǥ��礦��") + +}.pack('side'=>'top', 'fill'=>'x', 'expand'=>'yes') + diff --git a/ext/tk/sample/demos-jp/filebox.rb b/ext/tk/sample/demos-jp/filebox.rb new file mode 100644 index 0000000000..1754596706 --- /dev/null +++ b/ext/tk/sample/demos-jp/filebox.rb @@ -0,0 +1,95 @@ +# +# widget demo prompts the user to select a file (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($filebox_demo) && $entry2_demo + $filebox_demo.destroy + $filebox_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$filebox_demo = TkToplevel.new {|w| + title("File Selection Dialogs") + iconname("filebox") + positionWindow(w) +} + +# label ���� +TkLabel.new($filebox_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left', + 'text'=>"����ȥ�˥ե�����̾��ľ�����Ϥ��뤫��\"Browse\" �ܥ�����ƥե����������������������ե�����̾������Dz�������").pack('side'=>'top') + +# frame ���� +TkFrame.new($filebox_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $filebox_demo + $filebox_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'filebox'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +['����', '��¸'].each{|type| + TkFrame.new($filebox_demo) {|f| + TkLabel.new(f, 'text'=>"�ե������#{type}: ", 'anchor'=>'e')\ + .pack('side'=>'left') + + TkEntry.new(f, 'width'=>20) {|e| + pack('side'=>'left', 'expand'=>'yes', 'fill'=>'x') + + TkButton.new(f, 'text'=>'Browse ...', + 'command'=>proc{fileDialog $filebox_demo,e,type})\ + .pack('side'=>'left') + } + + pack('fill'=>'x', 'padx'=>'1c', 'pady'=>3) + } +} + +$tk_strictMotif = TkVarAccess.new('tk_strictMotif') +if ($tk_platform['platform'] == 'unix') + TkCheckButton.new($filebox_demo, + 'text'=>'Motif��������Υ������������Ѥ���', + 'variable'=>$tk_strictMotif, + 'onvalue'=>1, 'offvalue'=>0 ).pack('anchor'=>'c') +end + +def fileDialog(w,ent,operation) + # Type names Extension(s) Mac File Type(s) + # + #-------------------------------------------------------- + types = [ + ['Text files', ['.txt','.doc'] ], + ['Text files', [], 'TEXT' ], + ['Ruby Scripts', ['.rb'], 'TEXT' ], + ['Tcl Scripts', ['.tcl'], 'TEXT' ], + ['C Source Files', ['.c','.h'] ], + ['All Source Files', ['.rb','.tcl','.c','.h'] ], + ['Image Files', ['.gif'] ], + ['Image Files', ['.jpeg','.jpg'] ], + ['Image Files', [], ['GIFF','JPEG']], + ['All files', '*' ] + ] + + if operation == '����' + file = Tk.getOpenFile('filetypes'=>types, 'parent'=>w) + else + file = Tk.getSaveFile('filetypes'=>types, 'parent'=>w, + 'initialfile'=>'Untitled', + 'defaultextension'=>'.txt') + end + if file != "" + ent.delete 0, 'end' + ent.insert 0, file + ent.xview 'end' + end +end + diff --git a/ext/tk/sample/demos-jp/floor.rb b/ext/tk/sample/demos-jp/floor.rb new file mode 100644 index 0000000000..bb655d5b55 --- /dev/null +++ b/ext/tk/sample/demos-jp/floor.rb @@ -0,0 +1,1717 @@ +# +# floorDisplay widget demo (called by 'widget') +# + +# floorDisplay -- +# Recreate the floorplan display in the canvas given by "w". The +# floor given by "active" is displayed on top with its office structure +# visible. +# +# Arguments: +# w - Name of the canvas window. +# active - Number of active floor (1, 2, or 3). + +def floorDisplay(w,active) + return if $activeFloor == active + + w.delete('all') + $activeFloor = active + + # First go through the three floors, displaying the backgrounds for + # each floor. + + floor_bg1(w,$floor_colors['bg1'],$floor_colors['outline1']) + floor_bg2(w,$floor_colors['bg2'],$floor_colors['outline2']) + floor_bg3(w,$floor_colors['bg3'],$floor_colors['outline3']) + + # Raise the background for the active floor so that it's on top. + + w.raise("floor#{active}") + + # Create a dummy item just to mark this point in the display list, + # so we can insert highlights here. + + TkcRectangle.new(w,0,100,1,101, 'fill'=>'', 'outline'=>'', 'tags'=>'marker') + + # Add the walls and labels for the active floor, along with + # transparent polygons that define the rooms on the floor. + # Make sure that the room polygons are on top. + + $floorLabels.clear + $floorItems.clear + send("floor_fg#{active}", w, $floor_colors['offices']) + w.raise('room') + + # Offset the floors diagonally from each other. + + w.move('floor1', '2c', '2c') + w.move('floor2', '1c', '1c') + + # Create items for the room entry and its label. + TkcWindow.new(w, 600, 100, 'anchor'=>'w', 'window'=>$floor_entry) + TkcText.new(w, 600, 100, 'anchor'=>'e', 'text'=>"�����ֹ�: ") + w['scrollregion'] = w.bbox('all') +end + +# newRoom -- +# This method is invoked whenever the mouse enters a room +# in the floorplan. It changes tags so that the current room is +# highlighted. +# +# Arguments: +# w - The name of the canvas window. + +def newRoom(w) + id = w.find_withtag('current')[0] + $currentRoom.value = $floorLabels[id.id] if id != "" + Tk.update(true) +end + +# roomChanged -- +# This method is invoked whenever the currentRoom variable changes. +# It highlights the current room and unhighlights any previous room. +# +# Arguments: +# w - The canvas window displaying the floorplan. +# args - Not used. + +def roomChanged(w,*args) + w.delete('highlight') + item = $floorItems[$currentRoom.value] + return if item == nil + new = TkcPolygon.new(w, *(w.coords(item))) + new.configure('fill'=>$floor_colors['active'], 'tags'=>'highlight') + w.raise(new, 'marker') +end + +# floor_bg1 -- +# This method represents part of the floorplan database. When +# invoked, it instantiates the background information for the first +# floor. +# +# Arguments: +# w - The canvas window. +# fill - Fill color to use for the floor's background. +# outline - Color to use for the floor's outline. + +def floor_bg1(w,fill,outline) + TkcPolygon.new(w,347,80,349,82,351,84,353,85,363,92,375,99,386,104, + 386,129,398,129,398,162,484,162,484,129,559,129,559,133,725, + 133,725,129,802,129,802,389,644,389,644,391,559,391,559,327, + 508,327,508,311,484,311,484,278,395,278,395,288,400,288,404, + 288,409,290,413,292,418,297,421,302,422,309,421,318,417,325, + 411,330,405,332,397,333,344,333,340,334,336,336,335,338,332, + 342,331,347,332,351,334,354,336,357,341,359,340,360,335,363, + 331,365,326,366,304,366,304,355,258,355,258,387,60,387,60,391, + 0,391,0,337,3,337,3,114,8,114,8,25,30,25,30,5,93,5,98,5,104,7, + 110,10,116,16,119,20,122,28,123,32,123,68,220,68,220,34,221, + 22,223,17,227,13,231,8,236,4,242,2,246,0,260,0,283,1,300,5, + 321,14,335,22,348,25,365,29,363,39,358,48,352,56,337,70, + 344,76,347,80, 'tags'=>['floor1','bg'], 'fill'=>fill) + TkcLine.new(w,386,129,398,129, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,258,355,258,387, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,60,387,60,391, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,0,337,0,391, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,60,391,0,391, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,3,114,3,337, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,258,387,60,387, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,484,162,398,162, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,398,162,398,129, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,484,278,484,311, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,484,311,508,311, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,508,327,508,311, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,559,327,508,327, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,644,391,559,391, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,644,389,644,391, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,559,129,484,129, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,484,162,484,129, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,725,133,559,133, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,559,129,559,133, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,725,129,802,129, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,802,389,802,129, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,3,337,0,337, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,559,391,559,327, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,802,389,644,389, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,725,133,725,129, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,8,25,8,114, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,8,114,3,114, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,30,25,8,25, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,484,278,395,278, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,30,25,30,5, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,93,5,30,5, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,98,5,93,5, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,104,7,98,5, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,110,10,104,7, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,116,16,110,10, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,119,20,116,16, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,122,28,119,20, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,123,32,122,28, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,123,68,123,32, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,220,68,123,68, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,386,129,386,104, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,386,104,375,99, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,375,99,363,92, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,353,85,363,92, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,220,68,220,34, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,337,70,352,56, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,352,56,358,48, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,358,48,363,39, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,363,39,365,29, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,365,29,348,25, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,348,25,335,22, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,335,22,321,14, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,321,14,300,5, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,300,5,283,1, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,283,1,260,0, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,260,0,246,0, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,246,0,242,2, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,242,2,236,4, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,236,4,231,8, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,231,8,227,13, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,223,17,227,13, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,221,22,223,17, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,220,34,221,22, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,340,360,335,363, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,335,363,331,365, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,331,365,326,366, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,326,366,304,366, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,304,355,304,366, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,395,288,400,288, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,404,288,400,288, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,409,290,404,288, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,413,292,409,290, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,418,297,413,292, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,421,302,418,297, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,422,309,421,302, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,421,318,422,309, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,421,318,417,325, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,417,325,411,330, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,411,330,405,332, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,405,332,397,333, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,397,333,344,333, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,344,333,340,334, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,340,334,336,336, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,336,336,335,338, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,335,338,332,342, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,331,347,332,342, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,332,351,331,347, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,334,354,332,351, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,336,357,334,354, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,341,359,336,357, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,341,359,340,360, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,395,288,395,278, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,304,355,258,355, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,347,80,344,76, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,344,76,337,70, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,349,82,347,80, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,351,84,349,82, 'fill'=>outline, 'tags'=>['floor1','bg']) + TkcLine.new(w,353,85,351,84, 'fill'=>outline, 'tags'=>['floor1','bg']) +end + +# floor_bg2 -- +# This method represents part of the floorplan database. When +# invoked, it instantiates the background information for the first +# floor. +# +# Arguments: +# w - The canvas window. +# fill - Fill color to use for the floor's background. +# outline - Color to use for the floor's outline. + +def floor_bg2(w,fill,outline) + TkcPolygon.new(w,559,129,484,129,484,162,398,162,398,129,315,129, + 315,133,176,133,176,129,96,129,96,133,3,133,3,339,0,339,0,391, + 60,391,60,387,258,387,258,329,350,329,350,311,395,311,395,280, + 484,280,484,311,508,311,508,327,558,327,558,391,644,391,644, + 367,802,367,802,129,725,129,725,133,559,133,559,129, + 'tags'=>['floor2','bg'], 'fill'=>fill) + TkcLine.new(w,350,311,350,329, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,398,129,398,162, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,802,367,802,129, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,802,129,725,129, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,725,133,725,129, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,559,129,559,133, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,559,133,725,133, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,484,162,484,129, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,559,129,484,129, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,802,367,644,367, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,644,367,644,391, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,644,391,558,391, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,558,327,558,391, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,558,327,508,327, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,508,327,508,311, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,484,311,508,311, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,484,280,484,311, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,398,162,484,162, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,484,280,395,280, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,395,280,395,311, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,258,387,60,387, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,3,133,3,339, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,3,339,0,339, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,60,391,0,391, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,0,339,0,391, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,60,387,60,391, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,258,329,258,387, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,350,329,258,329, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,395,311,350,311, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,398,129,315,129, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,176,133,315,133, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,176,129,96,129, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,3,133,96,133, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,315,133,315,129, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,176,133,176,129, 'fill'=>outline, 'tags'=>['floor2','bg']) + TkcLine.new(w,96,133,96,129, 'fill'=>outline, 'tags'=>['floor2','bg']) +end + +# floor_bg3 -- +# This method represents part of the floorplan database. When +# invoked, it instantiates the background information for the first +# floor. +# +# Arguments: +# w - The canvas window. +# fill - Fill color to use for the floor's background. +# outline - Color to use for the floor's outline. + +def floor_bg3(w,fill,outline) + TkcPolygon.new(w,159,300,107,300,107,248,159,248,159,129,96,129,96, + 133,21,133,21,331,0,331,0,391,60,391,60,370,159,370,159,300, + 'tags'=>['floor3','bg'], 'fill'=>fill) + TkcPolygon.new(w,258,370,258,329,350,329,350,311,399,311,399,129, + 315,129,315,133,176,133,176,129,159,129,159,370,258,370, + 'tags'=>['floor3','bg'], 'fill'=>fill) + TkcLine.new(w,96,133,96,129, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,176,129,96,129, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,176,129,176,133, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,315,133,176,133, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,315,133,315,129, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,399,129,315,129, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,399,311,399,129, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,399,311,350,311, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,350,329,350,311, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,350,329,258,329, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,258,370,258,329, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,60,370,258,370, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,60,370,60,391, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,60,391,0,391, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,0,391,0,331, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,21,331,0,331, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,21,331,21,133, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,96,133,21,133, 'fill'=>outline, 'tags'=>['floor3','bg']) + TkcLine.new(w,107,300,159,300,159,248,107,248,107,300, + 'fill'=>outline, 'tags'=>['floor3','bg']) +end + +# floor_fg1 -- +# This method represents part of the floorplan database. When +# invoked, it instantiates the foreground information for the first +# floor (office outlines and numbers). +# +# Arguments: +# w - The canvas window. +# color - Color to use for drawing foreground information. + +def floor_fg1(w,color) + i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '101' + $floorItems['101'] = i + TkcText.new(w,358,209, 'text'=>'101', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = 'Pub Lift1' + $floorItems['Pub Lift1'] = i + TkcText.new(w,323,223, 'text'=>'Pub Lift1', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = 'Priv Lift1' + $floorItems['Priv Lift1'] = i + TkcText.new(w,323,188, 'text'=>'Priv Lift1', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,42,389,42,337,1,337,1,389, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '110' + $floorItems['110'] = i + TkcText.new(w,21.5,363, 'text'=>'110', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,59,389,59,385,90,385,90,337,44,337,44,389, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '109' + $floorItems['109'] = i + TkcText.new(w,67,363, 'text'=>'109', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,51,300,51,253,6,253,6,300, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '111' + $floorItems['111'] = i + TkcText.new(w,28.5,276.5, 'text'=>'111', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,98,248,98,309,79,309,79,248, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '117B' + $floorItems['117B'] = i + TkcText.new(w,88.5,278.5, 'text'=>'117B', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,51,251,51,204,6,204,6,251, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '112' + $floorItems['112'] = i + TkcText.new(w,28.5,227.5, 'text'=>'112', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,6,156,51,156,51,203,6,203, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '113' + $floorItems['113'] = i + TkcText.new(w,28.5,179.5, 'text'=>'113', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,85,169,79,169,79,192,85,192, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '117A' + $floorItems['117A'] = i + TkcText.new(w,82,180.5, 'text'=>'117A', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,77,302,77,168,53,168,53,302, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '117' + $floorItems['117'] = i + TkcText.new(w,65,235, 'text'=>'117', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,51,155,51,115,6,115,6,155, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '114' + $floorItems['114'] = i + TkcText.new(w,28.5,135, 'text'=>'114', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,95,115,53,115,53,168,95,168, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '115' + $floorItems['115'] = i + TkcText.new(w,74,141.5, 'text'=>'115', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,87,113,87,27,10,27,10,113, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '116' + $floorItems['116'] = i + TkcText.new(w,48.5,70, 'text'=>'116', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,89,91,128,91,128,113,89,131, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '118' + $floorItems['118'] = i + TkcText.new(w,108.5,102, 'text'=>'118', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,178,128,178,132,216,132,216,91, + 163,91,163,112,149,112,149,128, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '120' + $floorItems['120'] = i + TkcText.new(w,189.5,111.5, 'text'=>'120', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,79,193,87,193,87,169,136,169,136,192, + 156,192,156,169,175,169,175,246,79,246, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '122' + $floorItems['122'] = i + TkcText.new(w,131,207.5, 'text'=>'122', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,138,169,154,169,154,191,138,191, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '121' + $floorItems['121'] = i + TkcText.new(w,146,180, 'text'=>'121', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,99,300,126,300,126,309,99,309, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '106A' + $floorItems['106A'] = i + TkcText.new(w,112.5,304.5, 'text'=>'106A', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,128,299,128,309,150,309,150,248,99,248,99,299, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '105' + $floorItems['105'] = i + TkcText.new(w,124.5,278.5, 'text'=>'105', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,174,309,174,300,152,300,152,309, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '106B' + $floorItems['106B'] = i + TkcText.new(w,163,304.5, 'text'=>'106B', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,176,299,176,309,216,309,216,248,152,248,152,299, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '104' + $floorItems['104'] = i + TkcText.new(w,184,278.5, 'text'=>'104', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,138,385,138,337,91,337,91,385, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '108' + $floorItems['108'] = i + TkcText.new(w,114.5,361, 'text'=>'108', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,256,337,140,337,140,385,256,385, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '107' + $floorItems['107'] = i + TkcText.new(w,198,361, 'text'=>'107', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,300,353,300,329,260,329,260,353, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = 'Smoking' + $floorItems['Smoking'] = i + TkcText.new(w,280,341, 'text'=>'Smoking', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,314,135,314,170,306,170,306,246,177,246,177,135, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '123' + $floorItems['123'] = i + TkcText.new(w,245.5,190.5, 'text'=>'123', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,217,248,301,248,301,326,257,326,257,310,217,310, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '103' + $floorItems['103'] = i + TkcText.new(w,259,287, 'text'=>'103', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,396,188,377,188,377,169,316,169,316,131,396,131, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '124' + $floorItems['124'] = i + TkcText.new(w,356,150, 'text'=>'124', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,397,226,407,226,407,189,377,189,377,246,397,246, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '125' + $floorItems['125'] = i + TkcText.new(w,392,217.5, 'text'=>'125', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,399,187,409,187,409,207,474,207,474,164,399,164, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '126' + $floorItems['126'] = i + TkcText.new(w,436.5,185.5, 'text'=>'126', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,409,209,409,229,399,229,399,253, + 486,253,486,239,474,239,474,209, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '127' + $floorItems['127'] = i + TkcText.new(w,436.5,'231', 'text'=>'127', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,501,164,501,174,495,174,495,188, + 490,188,490,204,476,204,476,164, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = 'MShower' + $floorItems['MShower'] = i + TkcText.new(w,488.5,'184', 'text'=>'MShower', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,497,176,513,176,513,204,492,204,492,190,497,190, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = 'Closet' + $floorItems['Closet'] = i + TkcText.new(w,502.5,190, 'text'=>'Closet', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,476,237,476,206,513,206,513,254,488,254,488,237, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = 'WShower' + $floorItems['WShower'] = i + TkcText.new(w,494.5,230, 'text'=>'WShower', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,486,131,558,131,558,135,724,135,724,166, + 697,166,697,275,553,275,531,254,515,254, + 515,174,503,174,503,161,486,161, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '130' + $floorItems['130'] = i + TkcText.new(w,638.5,205, 'text'=>'130', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,308,242,339,242,339,248,342,248, + 342,246,397,246,397,276,393,276, + 393,309,300,309,300,248,308,248, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '102' + $floorItems['102'] = i + TkcText.new(w,367.5,278.5, 'text'=>'102', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,397,255,486,255,486,276,397,276, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '128' + $floorItems['128'] = i + TkcText.new(w,441.5,265.5, 'text'=>'128', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,510,309,486,309,486,255,530,255, + 552,277,561,277,561,325,510,325, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '129' + $floorItems['129'] = i + TkcText.new(w,535.5,293, 'text'=>'129', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,696,281,740,281,740,387,642,387, + 642,389,561,389,561,277,696,277, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '133' + $floorItems['133'] = i + TkcText.new(w,628.5,335, 'text'=>'133', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,742,387,742,281,800,281,800,387, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '132' + $floorItems['132'] = i + TkcText.new(w,771,334, 'text'=>'132', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,800,168,800,280,699,280,699,168, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '134' + $floorItems['134'] = i + TkcText.new(w,749.5,224, 'text'=>'134', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,726,131,726,166,800,166,800,131, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '135' + $floorItems['135'] = i + TkcText.new(w,763,148.5, 'text'=>'135', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,340,360,335,363,331,365,326,366,304,366, + 304,312,396,312,396,288,400,288,404,288, + 409,290,413,292,418,297,421,302,422,309, + 421,318,417,325,411,330,405,332,397,333, + 344,333,340,334,336,336,335,338,332,342, + 331,347,332,351,334,354,336,357,341,359, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = 'Ramona Stair' + $floorItems['Ramona Stair'] = i + TkcText.new(w,368,323, 'text'=>'Ramona Stair', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,30,23,30,5,93,5,98,5,104,7,110,10,116,16,119,20, + 122,28,123,32,123,68,220,68,220,87,90,87,90,23, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = 'University Stair' + $floorItems['University Stair'] = i + TkcText.new(w,155,77.5, 'text'=>'University Stair', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,282,37,295,40,312,49,323,56,337,70,352,56, + 358,48,363,39,365,29,348,25,335,22,321,14, + 300,5,283,1,260,0,246,0,242,2,236,4,231,8, + 227,13,223,17,221,22,220,34,260,34, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = 'Plaza Stair' + $floorItems['Plaza Stair'] = i + TkcText.new(w,317.5,28.5, 'text'=>'Plaza Stair', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,220,34,260,34,282,37,295,40,312,49, + 323,56,337,70,350,83,365,94,377,100, + 386,104,386,128,220,128, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = 'Plaza Deck' + $floorItems['Plaza Deck'] = i + TkcText.new(w,303,81, 'text'=>'Plaza Deck', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,257,336,77,336,6,336,6,301,77,301,77,310,257,310, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '106' + $floorItems['106'] = i + TkcText.new(w,131.5,318.5, 'text'=>'106', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + i = TkcPolygon.new(w,146,110,162,110,162,91,130,91,130,115,95,115, + 95,128,114,128,114,151,157,151,157,153,112,153, + 112,130,97,130,97,168,175,168,175,131,146,131, + 'fill'=>'', 'tags'=>['floor1','room']) + $floorLabels[i.id] = '119' + $floorItems['119'] = i + TkcText.new(w,143.5,133, 'text'=>'119', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor1','label']) + TkcLine.new(w,155,191,155,189, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,155,177,155,169, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,96,129,96,169, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,78,169,176,169, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,176,247,176,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,340,206,307,206, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,340,187,340,170, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,340,210,340,201, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,340,247,340,224, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,340,241,307,241, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,376,246,376,170, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,307,247,307,170, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,376,170,307,170, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,315,129,315,170, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,147,129,176,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,202,133,176,133, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,398,129,315,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,258,352,258,387, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,60,387,60,391, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,0,337,0,391, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,60,391,0,391, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,3,114,3,337, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,258,387,60,387, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,52,237,52,273, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,52,189,52,225, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,52,140,52,177, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,395,306,395,311, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,531,254,398,254, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,475,178,475,238, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,502,162,398,162, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,398,129,398,188, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,383,188,376,188, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,408,188,408,194, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,398,227,398,254, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,408,227,398,227, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,408,222,408,227, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,408,206,408,210, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,408,208,475,208, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,484,278,484,311, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,484,311,508,311, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,508,327,508,311, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,559,327,508,327, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,644,391,559,391, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,644,389,644,391, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,514,205,475,205, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,496,189,496,187, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,559,129,484,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,484,162,484,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,725,133,559,133, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,559,129,559,133, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,725,149,725,167, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,725,129,802,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,802,389,802,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,739,167,802,167, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,396,188,408,188, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,0,337,9,337, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,58,337,21,337, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,43,391,43,337, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,105,337,75,337, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,91,387,91,337, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,154,337,117,337, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,139,387,139,337, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,227,337,166,337, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,258,337,251,337, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,258,328,302,328, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,302,355,302,311, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,395,311,302,311, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,484,278,395,278, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,395,294,395,278, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,473,278,473,275, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,473,256,473,254, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,533,257,531,254, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,553,276,551,274, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,698,276,553,276, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,559,391,559,327, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,802,389,644,389, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,741,314,741,389, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,698,280,698,167, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,707,280,698,280, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,802,280,731,280, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,741,280,741,302, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,698,167,727,167, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,725,137,725,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,514,254,514,175, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,496,175,514,175, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,502,175,502,162, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,475,166,475,162, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,496,176,496,175, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,491,189,496,189, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,491,205,491,189, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,487,238,475,238, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,487,240,487,238, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,487,252,487,254, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,315,133,304,133, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,256,133,280,133, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,78,247,270,247, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,307,247,294,247, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,214,133,232,133, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,217,247,217,266, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,217,309,217,291, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,217,309,172,309, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,154,309,148,309, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,175,300,175,309, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,151,300,175,300, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,151,247,151,309, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,78,237,78,265, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,78,286,78,309, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,106,309,78,309, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,130,309,125,309, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,99,309,99,247, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,127,299,99,299, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,127,309,127,299, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,155,191,137,191, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,137,169,137,191, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,78,171,78,169, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,78,190,78,218, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,86,192,86,169, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,86,192,78,192, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,52,301,3,301, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,52,286,52,301, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,52,252,3,252, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,52,203,3,203, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,3,156,52,156, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,8,25,8,114, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,63,114,3,114, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,75,114,97,114, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,108,114,129,114, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,129,114,129,89, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,52,114,52,128, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,132,89,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,88,25,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,88,114,88,89, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,218,89,144,89, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,147,111,147,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,162,111,147,111, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,162,109,162,111, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,162,96,162,89, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,218,89,218,94, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,218,89,218,119, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,8,25,88,25, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,258,337,258,328, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,113,129,96,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,302,355,258,355, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,386,104,386,129, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,377,100,386,104, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,365,94,377,100, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,350,83,365,94, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,337,70,350,83, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,337,70,323,56, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,312,49,323,56, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,295,40,312,49, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,282,37,295,40, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,260,34,282,37, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,253,34,260,34, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,386,128,386,104, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,113,152,156,152, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,113,152,156,152, 'fill'=>color, 'tags'=>['floor1','wall']) + TkcLine.new(w,113,152,113,129, 'fill'=>color, 'tags'=>['floor1','wall']) +end + +# floor_fg2 -- +# This method represents part of the floorplan database. When +# invoked, it instantiates the foreground information for the second +# floor (office outlines and numbers). +# +# Arguments: +# w - The canvas window. +# color - Color to use for drawing foreground information. + +def floor_fg2(w,color) + i = TkcPolygon.new(w,748,188,755,188,755,205,758,205,758,222, + 800,222,800,168,748,168, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '238' + $floorItems['238'] = i + TkcText.new(w,774,195, 'text'=>'238', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,726,188,746,188,746,166,800,166,800,131,726,131, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '237' + $floorItems['237'] = i + TkcText.new(w,763,148.5, 'text'=>'237', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,497,187,497,204,559,204,559,324,641,324, + 643,324,643,291,641,291,641,205,696,205, + 696,291,694,291,694,314,715,314,715,291, + 715,205,755,205,755,190,724,190,724,187, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '246' + $floorItems['246'] = i + TkcText.new(w,600,264, 'text'=>'246', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,694,279,643,279,643,314,694,314, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '247' + $floorItems['247'] = i + TkcText.new(w,668.5,296.5, 'text'=>'247', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,232,250,308,250,308,242,339,242,339,246, + 397,246,397,255,476,255,476,250,482,250,559,250, + 559,274,482,274,482,278,396,278,396,274,232,274, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '202' + $floorItems['202'] = i + TkcText.new(w,285.5,260, 'text'=>'202', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,53,228,53,338,176,338,233,338,233,196, + 306,196,306,180,175,180,175,169,156,169, + 156,196,176,196,176,228, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '206' + $floorItems['206'] = i + TkcText.new(w,143,267, 'text'=>'206', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,51,277,6,277,6,338,51,338, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '212' + $floorItems['212'] = i + TkcText.new(w,28.5,307.5, 'text'=>'212', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,557,276,486,276,486,309,510,309,510,325,557,325, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '245' + $floorItems['245'] = i + TkcText.new(w,521.5,300.5, 'text'=>'245', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,560,389,599,389,599,326,560,326, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '244' + $floorItems['244'] = i + TkcText.new(w,579.5,357.5, 'text'=>'244', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,601,389,601,326,643,326,643,389, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '243' + $floorItems['243'] = i + TkcText.new(w,622,357.5, 'text'=>'243', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,688,316,645,316,645,365,688,365, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '242' + $floorItems['242'] = i + TkcText.new(w,666.5,340.5, 'text'=>'242', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,802,367,759,367,759,226,802,226, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = 'Barbecue Deck' + $floorItems['Barbecue Deck'] = i + TkcText.new(w,780.5,296.5, 'text'=>'Barbecue Deck', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,755,262,755,314,717,314,717,262, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '240' + $floorItems['240'] = i + TkcText.new(w,736,288, 'text'=>'240', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,755,316,689,316,689,365,755,365, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '241' + $floorItems['241'] = i + TkcText.new(w,722,340.5, 'text'=>'241', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,755,206,717,206,717,261,755,261, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '239' + $floorItems['239'] = i + TkcText.new(w,736,233.5, 'text'=>'239', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,695,277,643,277,643,206,695,206, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '248' + $floorItems['248'] = i + TkcText.new(w,669,241.5, 'text'=>'248', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,676,135,676,185,724,185,724,135, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '236' + $floorItems['236'] = i + TkcText.new(w,700,160, 'text'=>'236', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,675,135,635,135,635,145,628,145,628,185,675,185, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '235' + $floorItems['235'] = i + TkcText.new(w,651.5,160, 'text'=>'235', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,626,143,633,143,633,135,572,135, + 572,143,579,143,579,185,626,185, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '234' + $floorItems['234'] = i + TkcText.new(w,606,160, 'text'=>'234', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,557,135,571,135,571,145,578,145, + 578,185,527,185,527,131,557,131, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '233' + $floorItems['233'] = i + TkcText.new(w,552.5,158, 'text'=>'233', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,476,249,557,249,557,205,476,205, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '230' + $floorItems['230'] = i + TkcText.new(w,516.5,227, 'text'=>'230', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,476,164,486,164,486,131,525,131,525,185,476,185, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '232' + $floorItems['232'] = i + TkcText.new(w,500.5,158, 'text'=>'232', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,476,186,495,186,495,204,476,204, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '229' + $floorItems['229'] = i + TkcText.new(w,485.5,195, 'text'=>'229', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,474,207,409,207,409,187,399,187,399,164,474,164, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '227' + $floorItems['227'] = i + TkcText.new(w,436.5,185.5, 'text'=>'227', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,399,228,399,253,474,253,474,209,409,209,409,228, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '228' + $floorItems['228'] = i + TkcText.new(w,436.5,231, 'text'=>'228', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,397,246,397,226,407,226,407,189,377,189,377,246, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '226' + $floorItems['226'] = i + TkcText.new(w,392,217.5, 'text'=>'226', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,377,169,316,169,316,131,397,131,397,188,377,188, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '225' + $floorItems['225'] = i + TkcText.new(w,356.5,150, 'text'=>'225', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,234,198,306,198,306,249,234,249, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '224' + $floorItems['224'] = i + TkcText.new(w,270,223.5, 'text'=>'224', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,270,179,306,179,306,170,314,170,314,135,270,135, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '223' + $floorItems['223'] = i + TkcText.new(w,292,157, 'text'=>'223', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,268,179,221,179,221,135,268,135, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '222' + $floorItems['222'] = i + TkcText.new(w,244.5,157, 'text'=>'222', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,177,179,219,179,219,135,177,135, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '221' + $floorItems['221'] = i + TkcText.new(w,198,157, 'text'=>'221', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,299,327,349,327,349,284,341,284,341,276,299,276, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '204' + $floorItems['204'] = i + TkcText.new(w,324,301.5, 'text'=>'204', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,234,276,297,276,297,327,257,327,257,338,234,338, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '205' + $floorItems['205'] = i + TkcText.new(w,265.5,307, 'text'=>'205', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,256,385,256,340,212,340,212,385, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '207' + $floorItems['207'] = i + TkcText.new(w,234,362.5, 'text'=>'207', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,210,340,164,340,164,385,210,385, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '208' + $floorItems['208'] = i + TkcText.new(w,187,362.5, 'text'=>'208', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,115,340,162,340,162,385,115,385, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '209' + $floorItems['209'] = i + TkcText.new(w,138.5,362.5, 'text'=>'209', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,89,228,89,156,53,156,53,228, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '217' + $floorItems['217'] = i + TkcText.new(w,71,192, 'text'=>'217', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,89,169,97,169,97,190,89,190, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '217A' + $floorItems['217A'] = i + TkcText.new(w,93,179.5, 'text'=>'217A', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,89,156,89,168,95,168,95,135,53,135,53,156, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '216' + $floorItems['216'] = i + TkcText.new(w,71,145.5, 'text'=>'216', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,51,179,51,135,6,135,6,179, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '215' + $floorItems['215'] = i + TkcText.new(w,28.5,157, 'text'=>'215', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,51,227,6,227,6,180,51,180, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '214' + $floorItems['214'] = i + TkcText.new(w,28.5,203.5, 'text'=>'214', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,51,275,6,275,6,229,51,229, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '213' + $floorItems['213'] = i + TkcText.new(w,28.5,252, 'text'=>'213', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,114,340,67,340,67,385,114,385, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '210' + $floorItems['210'] = i + TkcText.new(w,90.5,362.5, 'text'=>'210', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,59,389,59,385,65,385,65,340,1,340,1,389, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '211' + $floorItems['211'] = i + TkcText.new(w,33,364.5, 'text'=>'211', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,393,309,350,309,350,282,342,282,342,276,393,276, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '203' + $floorItems['203'] = i + TkcText.new(w,367.5,292.5, 'text'=>'203', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,99,191,91,191,91,226,174,226,174,198, + 154,198,154,192,109,192,109,169,99,169, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '220' + $floorItems['220'] = i + TkcText.new(w,132.5,208.5, 'text'=>'220', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = 'Priv Lift2' + $floorItems['Priv Lift2'] = i + TkcText.new(w,323,188, 'text'=>'Priv Lift2', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = 'Pub Lift 2' + $floorItems['Pub Lift 2'] = i + TkcText.new(w,323,223, 'text'=>'Pub Lift 2', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '218' + $floorItems['218'] = i + TkcText.new(w,136,149.5, 'text'=>'218', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '219' + $floorItems['219'] = i + TkcText.new(w,132.5,180, 'text'=>'219', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, + 'fill'=>'', 'tags'=>['floor2','room']) + $floorLabels[i.id] = '201' + $floorItems['201'] = i + TkcText.new(w,358,209, 'text'=>'201', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor2','label']) + TkcLine.new(w,641,186,678,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,757,350,757,367, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,634,133,634,144, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,634,144,627,144, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,572,133,572,144, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,572,144,579,144, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,398,129,398,162, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,174,197,175,197, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,175,197,175,227, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,757,206,757,221, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,396,188,408,188, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,727,189,725,189, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,747,167,802,167, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,747,167,747,189, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,755,189,739,189, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,769,224,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,802,224,802,129, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,802,129,725,129, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,725,189,725,129, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,725,186,690,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,676,133,676,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,627,144,627,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,629,186,593,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,579,144,579,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,559,129,559,133, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,725,133,559,133, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,484,162,484,129, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,559,129,484,129, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,526,129,526,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,540,186,581,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,528,186,523,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,511,186,475,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,496,190,496,186, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,496,205,496,202, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,475,205,527,205, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,558,205,539,205, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,558,205,558,249, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,558,249,475,249, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,662,206,642,206, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,695,206,675,206, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,695,278,642,278, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,642,291,642,206, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,695,291,695,206, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,716,208,716,206, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,757,206,716,206, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,757,221,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,793,224,802,224, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,757,262,716,262, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,716,220,716,264, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,716,315,716,276, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,757,315,703,315, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,757,325,757,224, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,757,367,644,367, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,689,367,689,315, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,647,315,644,315, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,659,315,691,315, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,600,325,600,391, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,627,325,644,325, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,644,391,644,315, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,615,325,575,325, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,644,391,558,391, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,563,325,558,325, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,558,391,558,314, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,558,327,508,327, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,558,275,484,275, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,558,302,558,275, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,508,327,508,311, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,484,311,508,311, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,484,275,484,311, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,475,208,408,208, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,408,206,408,210, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,408,222,408,227, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,408,227,398,227, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,398,227,398,254, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,408,188,408,194, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,383,188,376,188, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,398,188,398,162, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,398,162,484,162, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,475,162,475,254, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,398,254,475,254, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,484,280,395,280, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,395,311,395,275, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,307,197,293,197, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,278,197,233,197, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,233,197,233,249, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,307,179,284,179, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,233,249,278,249, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,269,179,269,133, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,220,179,220,133, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,155,191,110,191, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,90,190,98,190, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,98,169,98,190, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,52,133,52,165, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,52,214,52,177, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,52,226,52,262, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,52,274,52,276, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,234,275,234,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,226,339,258,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,211,387,211,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,214,339,177,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,258,387,60,387, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,3,133,3,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,165,339,129,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,117,339,80,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,68,339,59,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,0,339,46,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,60,391,0,391, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,0,339,0,391, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,60,387,60,391, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,258,329,258,387, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,350,329,258,329, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,395,311,350,311, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,398,129,315,129, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,176,133,315,133, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,176,129,96,129, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,3,133,96,133, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,66,387,66,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,115,387,115,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,163,387,163,339, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,234,275,276,275, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,288,275,309,275, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,298,275,298,329, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,341,283,350,283, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,321,275,341,275, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,375,275,395,275, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,315,129,315,170, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,376,170,307,170, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,307,250,307,170, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,376,245,376,170, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,340,241,307,241, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,340,245,340,224, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,340,210,340,201, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,340,187,340,170, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,340,206,307,206, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,293,250,307,250, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,271,179,238,179, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,226,179,195,179, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,176,129,176,179, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,182,179,176,179, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,174,169,176,169, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,162,169,90,169, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,96,169,96,129, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,175,227,90,227, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,90,190,90,227, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,52,179,3,179, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,52,228,3,228, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,52,276,3,276, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,155,177,155,169, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,110,191,110,169, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,155,189,155,197, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,350,283,350,329, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,162,197,155,197, 'fill'=>color, 'tags'=>['floor2','wall']) + TkcLine.new(w,341,275,341,283, 'fill'=>color, 'tags'=>['floor2','wall']) +end + +# floor_fg3 -- +# This method represents part of the floorplan database. When +# invoked, it instantiates the foreground information for the third +# floor (office outlines and numbers). +# +# Arguments: +# w - The canvas window. +# color - Color to use for drawing foreground information. + +def floor_fg3(w,color) + i = TkcPolygon.new(w,89,228,89,180,70,180,70,228, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '316' + $floorItems['316'] = i + TkcText.new(w,79.5,204, 'text'=>'316', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,115,368,162,368,162,323,115,323, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '309' + $floorItems['309'] = i + TkcText.new(w,138.5,345.5, 'text'=>'309', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,164,323,164,368,211,368,211,323, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '308' + $floorItems['308'] = i + TkcText.new(w,187.5,345.5, 'text'=>'308', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,256,368,212,368,212,323,256,323, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '307' + $floorItems['307'] = i + TkcText.new(w,234,345.5, 'text'=>'307', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,244,276,297,276,297,327,260,327,260,321,244,321, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '305' + $floorItems['305'] = i + TkcText.new(w,270.5,301.5, 'text'=>'305', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,251,219,251,203,244,203,244,219, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '324B' + $floorItems['324B'] = i + TkcText.new(w,247.5,211, 'text'=>'324B', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,251,249,244,249,244,232,251,232, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '324A' + $floorItems['324A'] = i + TkcText.new(w,247.5,240.5, 'text'=>'324A', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,223,135,223,179,177,179,177,135, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '320' + $floorItems['320'] = i + TkcText.new(w,200,157, 'text'=>'320', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,114,368,114,323,67,323,67,368, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '310' + $floorItems['310'] = i + TkcText.new(w,90.5,345.5, 'text'=>'310', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,23,277,23,321,68,321,68,277, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '312' + $floorItems['312'] = i + TkcText.new(w,45.5,299, 'text'=>'312', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,23,229,68,229,68,275,23,275, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '313' + $floorItems['313'] = i + TkcText.new(w,45.5,252, 'text'=>'313', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,68,227,23,227,23,180,68,180, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '314' + $floorItems['314'] = i + TkcText.new(w,40.5,203.5, 'text'=>'314', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,95,179,95,135,23,135,23,179, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '315' + $floorItems['315'] = i + TkcText.new(w,59,157, 'text'=>'315', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,99,226,99,204,91,204,91,226, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '316B' + $floorItems['316B'] = i + TkcText.new(w,95,215, 'text'=>'316B', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,91,202,99,202,99,180,91,180, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '316A' + $floorItems['316A'] = i + TkcText.new(w,95,191, 'text'=>'316A', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,97,169,109,169,109,192,154,192,154,198, + 174,198,174,226,101,226,101,179,97,179, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '319' + $floorItems['319'] = i + TkcText.new(w,141.5,209, 'text'=>'319', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,65,368,58,368,58,389,1,389,1,333,23,333,23,323,65,323, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '311' + $floorItems['311'] = i + TkcText.new(w,29.5,361, 'text'=>'311', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '318' + $floorItems['318'] = i + TkcText.new(w,132.5,180, 'text'=>'318', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '317' + $floorItems['317'] = i + TkcText.new(w,136,149.5, 'text'=>'317', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,274,194,274,221,306,221,306,194, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '323' + $floorItems['323'] = i + TkcText.new(w,290,207.5, 'text'=>'323', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,306,222,274,222,274,249,306,249, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '325' + $floorItems['325'] = i + TkcText.new(w,290,235.5, 'text'=>'325', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,263,179,224,179,224,135,263,135, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '321' + $floorItems['321'] = i + TkcText.new(w,243.5,157, 'text'=>'321', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,314,169,306,169,306,192,273,192, + 264,181,264,135,314,135, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '322' + $floorItems['322'] = i + TkcText.new(w,293.5,163.5, 'text'=>'322', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = 'Pub Lift3' + $floorItems['Pub Lift3'] = i + TkcText.new(w,323,223, 'text'=>'Pub Lift3', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = 'Priv Lift3' + $floorItems['Priv Lift3'] = i + TkcText.new(w,323,188, 'text'=>'Priv Lift3', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,350,284,376,284,376,276,397,276,397,309,350,309, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '303' + $floorItems['303'] = i + TkcText.new(w,373.5,292.5, 'text'=>'303', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,272,203,272,249,252,249,252,230, + 244,230,244,221,252,221,252,203, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '324' + $floorItems['324'] = i + TkcText.new(w,262,226, 'text'=>'324', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,299,276,299,327,349,327,349,284,341,284,341,276, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '304' + $floorItems['304'] = i + TkcText.new(w,324,301.5, 'text'=>'304', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '301' + $floorItems['301'] = i + TkcText.new(w,358,209, 'text'=>'301', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,397,246,377,246,377,185,397,185, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '327' + $floorItems['327'] = i + TkcText.new(w,387,215.5, 'text'=>'327', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,316,131,316,169,377,169,377,185,397,185,397,131, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '326' + $floorItems['326'] = i + TkcText.new(w,365.5,150, 'text'=>'326', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,308,251,242,251,242,274,342,274,342,282,375, 282, + 375,274,397,274,397,248,339,248,339,242,308,242, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '302' + $floorItems['302'] = i + TkcText.new(w,319.5,261, 'text'=>'302', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + i = TkcPolygon.new(w,70,321,242,321,242,200,259,200,259,203,272,203, + 272,193,263,180,242,180,175,180,175,169,156,169, + 156,196,177,196,177,228,107,228,70,228,70,275,107,275, + 107,248,160,248,160,301,107,301,107,275,70,275, + 'fill'=>'', 'tags'=>['floor3','room']) + $floorLabels[i.id] = '306' + $floorItems['306'] = i + TkcText.new(w,200.5,284.5, 'text'=>'306', 'fill'=>color, + 'anchor'=>'c', 'tags'=>['floor3','label']) + TkcLine.new(w,341,275,341,283, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,162,197,155,197, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,396,247,399,247, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,399,129,399,311, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,258,202,243,202, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,350,283,350,329, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,251,231,243,231, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,243,220,251,220, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,243,250,243,202, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,155,197,155,190, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,110,192,110,169, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,155,192,110,192, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,155,177,155,169, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,176,197,176,227, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,69,280,69,274, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,21,276,69,276, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,69,262,69,226, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,21,228,69,228, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,21,179,75,179, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,69,179,69,214, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,90,220,90,227, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,90,204,90,202, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,90,203,100,203, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,90,187,90,179, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,90,227,176,227, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,100,179,100,227, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,100,179,87,179, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,96,179,96,129, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,162,169,96,169, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,173,169,176,169, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,182,179,176,179, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,176,129,176,179, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,195,179,226,179, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,224,133,224,179, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,264,179,264,133, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,238,179,264,179, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,273,207,273,193, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,273,235,273,250, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,273,224,273,219, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,273,193,307,193, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,273,222,307,222, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,273,250,307,250, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,384,247,376,247, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,340,206,307,206, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,340,187,340,170, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,340,210,340,201, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,340,247,340,224, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,340,241,307,241, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,376,247,376,170, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,307,250,307,170, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,376,170,307,170, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,315,129,315,170, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,376,283,366,283, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,376,283,376,275, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,399,275,376,275, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,341,275,320,275, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,341,283,350,283, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,298,275,298,329, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,308,275,298,275, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,243,322,243,275, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,243,275,284,275, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,258,322,226,322, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,212,370,212,322, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,214,322,177,322, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,163,370,163,322, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,165,322,129,322, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,84,322,117,322, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,71,322,64,322, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,115,322,115,370, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,66,322,66,370, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,52,322,21,322, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,21,331,0,331, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,21,331,21,133, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,96,133,21,133, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,176,129,96,129, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,315,133,176,133, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,315,129,399,129, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,399,311,350,311, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,350,329,258,329, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,258,322,258,370, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,60,370,258,370, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,60,370,60,391, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,0,391,0,331, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,60,391,0,391, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,307,250,307,242, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,273,250,307,250, 'fill'=>color, 'tags'=>['floor3','wall']) + TkcLine.new(w,258,250,243,250, 'fill'=>color, 'tags'=>['floor3','wall']) +end + +# Below is the "main program" that creates the floorplan demonstration. + +# toplevel widget ��¸�ߤ���к������ +if defined?($floor_demo) && $floor_demo + $floor_demo.destroy + $floor_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$floor_demo = TkToplevel.new {|w| + title("Floorplan Canvas Demonstration") + iconname("Floorplan") + positionWindow(w) + geometry('+20+20') + minsize(100,100) +} + +# label ���� +TkLabel.new($floor_demo, 'font'=>$font, 'wraplength'=>'8i', 'justify'=>'left', + 'text'=>"���Υ�����ɥ��ˤϥǥ������륨�����åץ��ȼҤΥ���������ꥵ������ܥ�ȥ� (DECWRL) �δּ�꤬�줿�����Х� widget �����äƤ��ޤ�������� 3�����Ƥǡ���ˤ��Τ�����1��ʬ�����Ĥޤꤽ�δּ�꤬ɽ�������褦�ˤʤäƤ��ޤ������볬������ˤϡ����ξ�ǥޥ����κ��ܥ����å����Ƥ����������ޥ���������Ƥ��볬�ξ��ư���ȡ����β��ˤ��������ο����Ѥ�ꡢ�����ֹ椬�������ֹ�:�ץ���ȥ��ɽ������ޤ����ޤ�������ȥ�������ֹ��Ȥ��������ο����Ѥ��ޤ���"){ + pack('side'=>'top') +} + +# frame ���� +$floor_buttons = TkFrame.new($floor_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $floor_demo + $floor_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'floor'} + }.pack('side'=>'left', 'expand'=>'yes') +} +$floor_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# �ѿ����� +$floorLabels = {} +$floorItems = {} + +# canvas ���� +if $tk_version =~ /^4\.[01]/ + $floor_canvas_frame = TkFrame.new($floor_demo,'bd'=>2,'relief'=>'sunken', + 'highlightthickness'=>2) + $floor_canvas = TkCanvas.new($floor_canvas_frame, + 'width'=>900, 'height'=>500, 'borderwidth'=>0, + 'highlightthickness'=>0) {|c| + TkScrollbar.new($floor_demo, 'orient'=>'horiz', + 'command'=>proc{|*args| c.xview(*args)}){|hs| + c.xscrollcommand(proc{|first,last| hs.set first,last}) + pack('side'=>'bottom', 'fill'=>'x') + } + TkScrollbar.new($floor_demo, 'command'=>proc{|*args| c.yview(*args)}){|vs| + c.yscrollcommand(proc{|first,last| vs.set first,last}) + pack('side'=>'right', 'fill'=>'y') + } + } + $floor_canvas_frame.pack('side'=>'top','fill'=>'both', 'expand'=>'yes') + $floor_canvas.pack('expand'=>'yes', 'fill'=>'both') + +else + TkFrame.new($floor_demo) {|f| + pack('side'=>'top', 'fill'=>'both', 'expand'=>'yes') + + h = TkScrollbar.new(f, 'highlightthickness'=>0, 'orient'=>'horizontal') + v = TkScrollbar.new(f, 'highlightthickness'=>0, 'orient'=>'vertical') + + TkFrame.new(f, 'bd'=>2, 'relief'=>'sunken') {|f1| + $floor_canvas = TkCanvas.new(f1, 'width'=>900, 'height'=>500, + 'borderwidth'=>0, + 'highlightthickness'=>0) { + xscrollcommand(proc{|first,last| h.set first,last}) + yscrollcommand(proc{|first,last| v.set first,last}) + pack('expand'=>'yes', 'fill'=>'both') + } + grid('padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + } + + v.grid('padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + h.grid('padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + + TkGrid.rowconfigure(f, 0, 'weight'=>1, 'minsize'=>0) + TkGrid.columnconfigure(f, 0, 'weight'=>1, 'minsize'=>0) + + pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) + + v.command(proc{|*args| c.yview(*args)}) + h.command(proc{|*args| c.xview(*args)}) + } +end + + +# Create an entry for displaying and typing in current room. + +$currentRoom = TkVariable.new +$floor_entry = TkEntry.new($floor_canvas, 'width'=>10, 'relief'=>'sunken', + 'bd'=>2, 'textvariable'=>$currentRoom) + +# Choose colors, then fill in the floorplan. + +$floor_colors = {} +if TkWinfo.depth($floor_canvas) > 1 + $floor_colors['bg1'] = '#a9c1da' + $floor_colors['outline1'] = '#77889a' + $floor_colors['bg2'] = '#9ab0c6' + $floor_colors['outline2'] = '#687786' + $floor_colors['bg3'] = '#8ba0b3' + $floor_colors['outline3'] = '#596673' + $floor_colors['offices'] = 'Black' + $floor_colors['active'] = '#c4d1df' +else + $floor_colors['bg1'] = 'white' + $floor_colors['outline1'] = 'black' + $floor_colors['bg2'] = 'white' + $floor_colors['outline2'] = 'black' + $floor_colors['bg3'] = 'white' + $floor_colors['outline3'] = 'black' + $floor_colors['offices'] = 'Black' + $floor_colors['active'] = 'black' +end + +$activeFloor = '' +floorDisplay $floor_canvas,3 + +# Set up event bindings for canvas: + +$floor_canvas.itembind('floor1', '1', proc{floorDisplay $floor_canvas,1}) +$floor_canvas.itembind('floor2', '1', proc{floorDisplay $floor_canvas,2}) +$floor_canvas.itembind('floor3', '1', proc{floorDisplay $floor_canvas,3}) +$floor_canvas.itembind('room', 'Enter', proc{newRoom $floor_canvas}) +$floor_canvas.itembind('room', 'Leave', proc{$currentRoom.value = ''}) +$floor_canvas.bind('2', proc{|x,y| $floor_canvas.scan_mark x,y}, '%x %y') +$floor_canvas.bind('B2-Motion', + proc{|x,y| $floor_canvas.scan_dragto x,y}, '%x %y') +$floor_canvas.bind('Destroy', proc{$currentRoom.unset}) +$currentRoom.value = '' +$currentRoom.trace('w',proc{roomChanged $floor_canvas}) + diff --git a/ext/tk/sample/demos-jp/form.rb b/ext/tk/sample/demos-jp/form.rb new file mode 100644 index 0000000000..35baeed46b --- /dev/null +++ b/ext/tk/sample/demos-jp/form.rb @@ -0,0 +1,62 @@ +# +# form widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($form_demo) && $form_demo + $form_demo.destroy + $form_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$form_demo = TkToplevel.new {|w| + title("Form Demonstration") + iconname("form") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($form_demo) { + font $font + wraplength '4i' + justify 'left' + text "���Υ�����ɥ��ϴ�ñ�ʥե����������ѤˤʤäƤ��ơ����ޤ��ޤʥ���ȥ�����Ϥ��Ǥ��ޤ������֤ǥ���ȥ�����ؤ����Ǥ��ޤ���" +} +msg.pack('side'=>'top', 'fill'=>'x') + +# frame ���� +TkFrame.new($form_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $form_demo + $form_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'form'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# entry ���� +form_data = [] +(1..5).each{|i| + f = TkFrame.new($form_demo, 'bd'=>2) + e = TkEntry.new(f, 'relief'=>'sunken', 'width'=>40) + l = TkLabel.new(f) + e.pack('side'=>'right') + l.pack('side'=>'left') + form_data[i] = {'frame'=>f, 'entry'=>e, 'label'=>l} +} + +# ʸ�������� +form_data[1]['label'].text('̾��:') +form_data[2]['label'].text('����:') +form_data[5]['label'].text('����:') + +# pack +(1..5).each{|i| form_data[i]['frame'].pack('side'=>'top', 'fill'=>'x')} + diff --git a/ext/tk/sample/demos-jp/hello b/ext/tk/sample/demos-jp/hello new file mode 100644 index 0000000000..94e450899c --- /dev/null +++ b/ext/tk/sample/demos-jp/hello @@ -0,0 +1,9 @@ +#!/usr/local/bin/ruby +require 'tk' + +TkButton.new(nil, + 'text'=>"����ˤ��ϡ�����", + 'command'=>proc{print "����ˤ��ϡ�����\n"; exit} +).pack + +Tk.mainloop diff --git a/ext/tk/sample/demos-jp/hscale.rb b/ext/tk/sample/demos-jp/hscale.rb new file mode 100644 index 0000000000..4333239c73 --- /dev/null +++ b/ext/tk/sample/demos-jp/hscale.rb @@ -0,0 +1,76 @@ +require "tkcanvas" + +if defined?($hscale_demo) && $hscale_deom + $hscale_demo.destroy + $hscale_demo = nil +end + +$hscale_demo = TkToplevel.new {|w| + title("Horizontal Scale Demonstration") + iconname("hscale") +} +positionWindow($hscale_demo) + + +msg = TkLabel.new($hscale_demo) { + font $font + wraplength '3.5i' + justify 'left' + text "���ˤ������1�Ĥȿ�ʿ�ʥ������뤬ɽ������Ƥ��ޤ���\ +���������ǥޥ����ܥ���1��å����ޤ��ϥɥ�å������\ +�����Ĺ�����Ѥ��뤳�Ȥ��Ǥ��ޤ���" +} +msg.pack('side'=>'top') + +TkFrame.new($hscale_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc { + tmppath = $hscale_demo + $hscale_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc { showCode 'hscale' } + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +TkFrame.new($hscale_demo) {|frame| + canvas = TkCanvas.new(frame) {|c| + width 50 + height 50 + bd 0 + highlightthickness 0 + TkcPolygon.new(c, '0', '0', '1', '1', '2', '2') { + fill 'DeepSkyBlue' + tags 'poly' + } + TkcLine.new(c, '0', '0', '1', '1', '2', '2', '0', '0') { + fill 'black' + tags 'line' + } + }.pack('side'=>'top', 'expand'=>'yes', 'anchor'=>'s', 'fill'=>'x', 'padx'=>'15') + scale = TkScale.new(frame) { + orient 'horizontal' + length 284 + from 0 + to 250 + command proc{|value| setWidth(canvas, value)} + tickinterval 50 + }.pack('side'=>'bottom', 'expand'=>'yes', 'anchor'=>'n') + scale.set 75 +}.pack('side'=>'top', 'fill'=>'x') + + +def setWidth(w, width) + width = width + 21 + x2 = width - 30 + if x2 < 21 + x2 = 21 + end + 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-jp/icon.rb b/ext/tk/sample/demos-jp/icon.rb new file mode 100644 index 0000000000..9b39d33847 --- /dev/null +++ b/ext/tk/sample/demos-jp/icon.rb @@ -0,0 +1,91 @@ +# +# iconic button widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($icon_demo) && $icon_demo + $icon_demo.destroy + $icon_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$icon_demo = TkToplevel.new {|w| + title("Iconic Button Demonstration") + iconname("icon") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($icon_demo) { + font $font + wraplength '5i' + justify 'left' + text "���Υ�����ɥ��ˤϥ饸���ܥ���ȥ����å��ܥ����˥ӥåȥޥåפ������ɽ������ 3 �Ĥ���ˡ���Ƥ��ޤ������ˤ���Τ�2�ĤΥ饸���ܥ���ǡ����줾�줬���ӥåȥޥåפ���������������ǤǤ��Ƥ��ޤ�������ˤ���Τϡ�����Ѥߤ��ɤ����ˤ�äưۤʤ������ɽ����������å��ܥ���Ǥ�����¦�ˤ���Τ�����Ѥߤ��ɤ����ˤ�ä��طʿ����Ѥ��ӥåȥޥåפ�ɽ����������å��ܥ���Ǥ���" +} +msg.pack('side'=>'top') + +# frame ���� +TkFrame.new($icon_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $icon_demo + $icon_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'icon'} + }.pack('side'=>'left', 'expand'=>'yes') + +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# image ���� +flagup = \ +TkBitmapImage.new('file'=>[$demo_dir, + 'images','flagup.bmp'].join(File::Separator), + 'maskfile'=>\ + [$demo_dir,'images','flagup.bmp'].join(File::Separator)) +flagdown = \ +TkBitmapImage.new('file'=>[$demo_dir, + 'images','flagdown.bmp'].join(File::Separator), + 'maskfile'=>\ + [$demo_dir,'images','flagdown.bmp'].join(File::Separator)) + +# �ѿ����� +letters = TkVariable.new + +# frame ���� +TkFrame.new($icon_demo, 'borderwidth'=>10){|w| + TkFrame.new(w) {|f| + TkRadioButton.new(f){ + bitmap '@' + [$demo_dir,'images','letters.bmp'].join(File::Separator) + variable letters + value 'full' + }.pack('side'=>'top', 'expand'=>'yes') + + TkRadioButton.new(f){ + bitmap '@' + [$demo_dir,'images','noletter.bmp'].join(File::Separator) + variable letters + value 'empty' + }.pack('side'=>'top', 'expand'=>'yes') + + }.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'5m') + + TkCheckButton.new(w) { + image flagdown + selectimage flagup + indicatoron 0 + selectcolor self['background'] + }.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'5m') + + TkCheckButton.new(w) { + bitmap '@' + [$demo_dir,'images','letters.bmp'].join(File::Separator) + indicatoron 0 + selectcolor 'SeaGreen1' + }.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'5m') + +}.pack('side'=>'top') + diff --git a/ext/tk/sample/demos-jp/image1.rb b/ext/tk/sample/demos-jp/image1.rb new file mode 100644 index 0000000000..bfe47c47af --- /dev/null +++ b/ext/tk/sample/demos-jp/image1.rb @@ -0,0 +1,57 @@ +# +# two image widgets demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($image1_demo) && $image1_demo + $image1_demo.destroy + $image1_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$image1_demo = TkToplevel.new {|w| + title('Image Demonstration #1') + iconname("Image1") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($image1_demo) { + font $font + wraplength '4i' + justify 'left' + text "���Υǥ�Ǥ�2�ĤΥ�٥��˲����줾��ɽ�����Ƥ��ޤ���" +} +msg.pack('side'=>'top') + +# frame ���� +TkFrame.new($image1_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $image1_demo + $image1_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'image1'} + }.pack('side'=>'left', 'expand'=>'yes') + +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# image ���� +image1a = \ +TkPhotoImage.new('file'=>[$demo_dir, + 'images','earth.gif'].join(File::Separator)) +image1b = \ +TkPhotoImage.new('file'=>[$demo_dir, + 'images','earthris.gif'].join(File::Separator)) + +# label ���� +[ TkLabel.new($image1_demo, 'image'=>image1a, 'bd'=>1, 'relief'=>'sunken'), + TkLabel.new($image1_demo, 'image'=>image1b, 'bd'=>1, 'relief'=>'sunken') +].each{|w| w.pack('side'=>'top', 'padx'=>'.5m', 'pady'=>'.5m')} + diff --git a/ext/tk/sample/demos-jp/image2.rb b/ext/tk/sample/demos-jp/image2.rb new file mode 100644 index 0000000000..07f9b17ebe --- /dev/null +++ b/ext/tk/sample/demos-jp/image2.rb @@ -0,0 +1,101 @@ +# +# widget demo 'load image' (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($image2_demo) && $image2_demo + $image2_demo.destroy + $image2_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$image2_demo = TkToplevel.new {|w| + title('Image Demonstration #2') + iconname("Image2") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($image2_demo) { + font $font + wraplength '4i' + justify 'left' + text "���Υǥ�Ǥ�Tk�� photo image ����Ѥ��Ʋ����뤳�Ȥ��Ǥ��ޤ����ǽ�˥���ȥ���ˤ˥ǥ��쥯�ȥ�̾������Ʋ����������˲��Υꥹ�ȥܥå����ˤ��Υǥ��쥯�ȥ������ɤ��뤿�ᡢ�������Ƥ������������θ塢���������뤿��˥ꥹ�ȥܥå�������Υե�����̾����֥륯��å����Ʋ�������" +} +msg.pack('side'=>'top') + +# frame ���� +TkFrame.new($image2_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $image2_demo + $image2_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'image2'} + }.pack('side'=>'left', 'expand'=>'yes') + +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# �ѿ����� +$dirName = TkVariable.new([$demo_dir,'images'].join(File::Separator)) + +# image ���� +$image2a = TkPhotoImage.new + +# �ե�����̾������ +TkLabel.new($image2_demo, 'text'=>'�ǥ��쥯�ȥ�:')\ +.pack('side'=>'top', 'anchor'=>'w') + +image2_e = TkEntry.new($image2_demo) { + width 30 + textvariable $dirName +}.pack('side'=>'top', 'anchor'=>'w') + +TkFrame.new($image2_demo, 'height'=>'3m', 'width'=>20)\ +.pack('side'=>'top', 'anchor'=>'w') + +TkLabel.new($image2_demo, 'text'=>'�ե�����:')\ +.pack('side'=>'top', 'anchor'=>'w') + +TkFrame.new($image2_demo){|w| + s = TkScrollbar.new(w) + l = TkListbox.new(w) { + width 20 + height 10 + yscrollcommand proc{|first,last| s.set first,last} + } + s.command(proc{|*args| l.yview(*args)}) + l.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y') + s.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y') + #l.insert(0,'earth.gif', 'earthris.gif', 'mickey.gif', 'teapot.ppm') + l.insert(0,'earth.gif', 'earthris.gif', 'teapot.ppm') + l.bind('Double-1', proc{|x,y| loadImage $image2a,l,x,y}, '%x %y') + + image2_e.bind 'Return', proc{loadDir l} + +}.pack('side'=>'top', 'anchor'=>'w') + +# image ���� +[ TkFrame.new($image2_demo, 'height'=>'3m', 'width'=>20), + TkLabel.new($image2_demo, 'text'=>'����:'), + TkLabel.new($image2_demo, 'image'=>$image2a) +].each{|w| w.pack('side'=>'top', 'anchor'=>'w')} + +# ��å���� +def loadDir(w) + w.delete(0,'end') + Dir.glob([$dirName,'*'].join(File::Separator)).sort.each{|f| + w.insert('end',File.basename(f)) + } +end + +def loadImage(img,w,x,y) + img.file([$dirName, w.get("@#{x},#{y}")].join(File::Separator)) +end + diff --git a/ext/tk/sample/demos-jp/images/earth.gif b/ext/tk/sample/demos-jp/images/earth.gif Binary files differnew file mode 100644 index 0000000000..3ae4a9ce01 --- /dev/null +++ b/ext/tk/sample/demos-jp/images/earth.gif diff --git a/ext/tk/sample/demos-jp/images/earthris.gif b/ext/tk/sample/demos-jp/images/earthris.gif Binary files differnew file mode 100644 index 0000000000..48f08c4421 --- /dev/null +++ b/ext/tk/sample/demos-jp/images/earthris.gif diff --git a/ext/tk/sample/demos-jp/images/face.bmp b/ext/tk/sample/demos-jp/images/face.bmp new file mode 100644 index 0000000000..03d829f4d1 --- /dev/null +++ b/ext/tk/sample/demos-jp/images/face.bmp @@ -0,0 +1,173 @@ +#define face_width 108 +#define face_height 144 +#define face_x_hot 48 +#define face_y_hot 80 +static char face_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, + 0x20, 0x80, 0x24, 0x05, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x88, + 0x24, 0x20, 0x80, 0x24, 0x00, 0x00, 0x00, 0x10, 0x80, 0x04, 0x00, 0x01, + 0x00, 0x01, 0x40, 0x0a, 0x09, 0x00, 0x92, 0x04, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x40, 0x12, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x84, + 0x24, 0x40, 0x22, 0xa8, 0x02, 0x14, 0x84, 0x92, 0x40, 0x42, 0x12, 0x04, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52, 0x11, 0x00, 0x12, 0x00, + 0x40, 0x02, 0x00, 0x20, 0x00, 0x08, 0x00, 0xaa, 0x02, 0x54, 0x85, 0x24, + 0x00, 0x10, 0x12, 0x00, 0x00, 0x81, 0x44, 0x00, 0x90, 0x5a, 0x00, 0xea, + 0x1b, 0x00, 0x80, 0x40, 0x40, 0x02, 0x00, 0x08, 0x00, 0x20, 0xa2, 0x05, + 0x8a, 0xb4, 0x6e, 0x45, 0x12, 0x04, 0x08, 0x00, 0x00, 0x00, 0x10, 0x02, + 0xa8, 0x92, 0x00, 0xda, 0x5f, 0x10, 0x00, 0x10, 0xa1, 0x04, 0x20, 0x41, + 0x02, 0x00, 0x5a, 0x25, 0xa0, 0xff, 0xfb, 0x05, 0x41, 0x02, 0x04, 0x00, + 0x00, 0x08, 0x40, 0x80, 0xec, 0x9b, 0xec, 0xfe, 0x7f, 0x01, 0x04, 0x20, + 0x90, 0x02, 0x04, 0x00, 0x08, 0x20, 0xfb, 0x2e, 0xf5, 0xff, 0xff, 0x57, + 0x00, 0x04, 0x02, 0x00, 0x00, 0x20, 0x01, 0xc1, 0x6e, 0xab, 0xfa, 0xff, + 0xff, 0x05, 0x90, 0x20, 0x48, 0x02, 0x00, 0x04, 0x20, 0xa8, 0xdf, 0xb5, + 0xfe, 0xff, 0xff, 0x0b, 0x01, 0x00, 0x01, 0x00, 0x80, 0x80, 0x04, 0xe0, + 0xbb, 0xef, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x04, 0x48, 0x02, 0x00, 0x20, + 0x80, 0xf4, 0x6f, 0xfb, 0xff, 0xff, 0xff, 0x20, 0x90, 0x40, 0x02, 0x00, + 0x00, 0x04, 0x08, 0xb8, 0xf6, 0xff, 0xff, 0xdf, 0xbe, 0x12, 0x45, 0x10, + 0x90, 0x04, 0x90, 0x00, 0x22, 0xfa, 0xff, 0xff, 0xff, 0xbb, 0xd7, 0xe9, + 0x3a, 0x02, 0x02, 0x00, 0x04, 0x90, 0x80, 0xfe, 0xdf, 0xf6, 0xb7, 0xef, + 0xbe, 0x56, 0x57, 0x40, 0x48, 0x09, 0x00, 0x04, 0x00, 0xfa, 0xf5, 0xdf, + 0xed, 0x5a, 0xd5, 0xea, 0xbd, 0x09, 0x00, 0x00, 0x40, 0x00, 0x92, 0xfe, + 0xbf, 0x7d, 0xb7, 0x6a, 0x55, 0xbf, 0xf7, 0x02, 0x11, 0x01, 0x00, 0x91, + 0x00, 0xff, 0xff, 0xaf, 0x55, 0x55, 0x5b, 0xeb, 0xef, 0x22, 0x04, 0x04, + 0x04, 0x00, 0xa4, 0xff, 0xf7, 0xad, 0xaa, 0xaa, 0xaa, 0xbe, 0xfe, 0x03, + 0x20, 0x00, 0x10, 0x44, 0x80, 0xff, 0x7f, 0x55, 0x12, 0x91, 0x2a, 0xeb, + 0xbf, 0x0b, 0x82, 0x02, 0x00, 0x00, 0xd1, 0x7f, 0xdf, 0xa2, 0xa4, 0x54, + 0x55, 0xfd, 0xfd, 0x47, 0x08, 0x08, 0x00, 0x21, 0xe4, 0xff, 0x37, 0x11, + 0x09, 0xa5, 0xaa, 0xb6, 0xff, 0x0d, 0x80, 0x00, 0x00, 0x04, 0xd0, 0xff, + 0x4f, 0x44, 0x20, 0x48, 0x55, 0xfb, 0xff, 0x27, 0x11, 0x02, 0x40, 0x40, + 0xe2, 0xfb, 0x15, 0x11, 0x4a, 0x55, 0x4a, 0x7d, 0xf7, 0x0f, 0x00, 0x00, + 0x04, 0x08, 0xf8, 0xdf, 0x52, 0x44, 0x01, 0x52, 0xb5, 0xfa, 0xff, 0x0f, + 0x49, 0x02, 0x00, 0x02, 0xe9, 0xf6, 0x0a, 0x11, 0xa4, 0x88, 0x4a, 0x6d, + 0xff, 0x5f, 0x00, 0x00, 0x10, 0x20, 0xf0, 0x2f, 0x21, 0x44, 0x10, 0x52, + 0xb5, 0xfa, 0xff, 0x0f, 0x44, 0x04, 0x80, 0x08, 0xf8, 0xab, 0x8a, 0x00, + 0x81, 0xa4, 0xd4, 0xd6, 0xfe, 0x2f, 0x00, 0x00, 0x04, 0x40, 0xb5, 0x2d, + 0x21, 0x08, 0x04, 0x90, 0xaa, 0xfa, 0xff, 0x1f, 0x11, 0x01, 0x00, 0x04, + 0xf0, 0x57, 0x0a, 0x22, 0x40, 0x4a, 0xda, 0x5e, 0xfb, 0x1f, 0x40, 0x00, + 0x40, 0x20, 0xba, 0x95, 0x90, 0x00, 0x01, 0xa0, 0xaa, 0xea, 0xff, 0x5f, + 0x02, 0x02, 0x00, 0x01, 0xe8, 0x57, 0x05, 0x00, 0x00, 0x12, 0xd5, 0xfe, + 0xfd, 0x1f, 0x48, 0x00, 0x04, 0x48, 0x7a, 0x95, 0x08, 0x02, 0x10, 0x40, + 0xaa, 0x55, 0xf7, 0x1f, 0x00, 0x09, 0x20, 0x00, 0xf8, 0x57, 0x22, 0x10, + 0x00, 0x28, 0xa9, 0xfa, 0xff, 0x5f, 0x02, 0x00, 0x00, 0x49, 0xdd, 0x29, + 0x01, 0x00, 0x80, 0x80, 0xaa, 0xd7, 0xff, 0x0f, 0x10, 0x00, 0x08, 0x00, + 0xf8, 0x96, 0x08, 0x00, 0x00, 0x20, 0x54, 0xfa, 0xee, 0x3f, 0x81, 0x04, + 0x40, 0x24, 0xfe, 0x55, 0x82, 0x00, 0x00, 0x82, 0xd2, 0xad, 0xff, 0x0f, + 0x08, 0x00, 0x04, 0x80, 0x6c, 0x97, 0x00, 0x00, 0x02, 0x20, 0xa9, 0xf6, + 0xdf, 0x5f, 0x00, 0x02, 0x20, 0x09, 0xfa, 0x49, 0x12, 0x00, 0x20, 0x84, + 0x54, 0xdb, 0xfe, 0x1f, 0x91, 0x00, 0x00, 0x00, 0xf8, 0x2b, 0x00, 0x20, + 0x00, 0x40, 0xa4, 0xf6, 0xbb, 0x1f, 0x04, 0x00, 0x44, 0x92, 0x7e, 0x95, + 0x02, 0x00, 0x00, 0x89, 0xaa, 0xdd, 0xff, 0x1f, 0x20, 0x09, 0x10, 0x00, + 0xf4, 0x57, 0x20, 0x01, 0x08, 0x20, 0xa9, 0x76, 0xff, 0x5f, 0x02, 0x00, + 0x00, 0x21, 0xfc, 0x4a, 0x05, 0x00, 0x01, 0x80, 0x54, 0xdb, 0xff, 0x1e, + 0x08, 0x02, 0x04, 0x08, 0xf9, 0x2b, 0x00, 0x00, 0x40, 0x28, 0xd2, 0xf6, + 0xff, 0xbf, 0x80, 0x00, 0x90, 0x00, 0xbc, 0x92, 0x08, 0x10, 0x00, 0x82, + 0x54, 0xdb, 0xff, 0x1f, 0x20, 0x00, 0x00, 0x44, 0xf9, 0x55, 0x02, 0x01, + 0x00, 0x20, 0xaa, 0xbd, 0xfd, 0x3f, 0x08, 0x04, 0x04, 0x10, 0xf4, 0x2a, + 0x01, 0x00, 0x22, 0x80, 0xd4, 0xf6, 0xff, 0x5f, 0x82, 0x00, 0x40, 0x02, + 0xf8, 0x55, 0x20, 0x00, 0x00, 0x50, 0x6a, 0xdf, 0xfe, 0x3f, 0x00, 0x00, + 0x00, 0x48, 0xe9, 0x4a, 0x05, 0x08, 0x00, 0xa5, 0xd5, 0xf5, 0xff, 0x3f, + 0x10, 0x01, 0x10, 0x01, 0xb0, 0xab, 0x92, 0x02, 0x40, 0xf8, 0xbf, 0xde, + 0xfe, 0x5f, 0x02, 0x04, 0x04, 0x48, 0xfa, 0xd4, 0x6f, 0x20, 0x84, 0xef, + 0xff, 0xfb, 0xff, 0x1f, 0x20, 0x00, 0x00, 0x00, 0xe0, 0xed, 0xbf, 0x0b, + 0xa1, 0x7e, 0xff, 0xbf, 0xfd, 0x5f, 0x04, 0x01, 0x20, 0x49, 0xd2, 0xfb, + 0xfe, 0x55, 0xd4, 0xff, 0xff, 0xf6, 0xff, 0x07, 0x00, 0x04, 0x00, 0x00, + 0xc0, 0xaa, 0xfb, 0x2b, 0xa2, 0xfe, 0xff, 0xdf, 0xee, 0x1f, 0x91, 0x00, + 0x82, 0xa4, 0xa4, 0xf5, 0xff, 0x57, 0xd5, 0xff, 0xbf, 0xfd, 0xff, 0x4d, + 0x00, 0x00, 0x20, 0x00, 0x88, 0x5b, 0xff, 0x2f, 0x69, 0xff, 0xff, 0xdb, + 0xfe, 0x1f, 0x24, 0x02, 0x00, 0x49, 0xa2, 0xd6, 0xff, 0x5f, 0xea, 0xff, + 0x7f, 0x7f, 0x7f, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x40, 0xab, 0xf7, 0xbb, + 0xf0, 0xdf, 0xff, 0xd5, 0xff, 0xbf, 0x82, 0x04, 0x42, 0x24, 0x91, 0xd5, + 0xaa, 0xae, 0xd4, 0xaa, 0x52, 0x7b, 0xff, 0x15, 0x08, 0x00, 0x00, 0x01, + 0x04, 0x55, 0xd5, 0x55, 0x70, 0x5b, 0x75, 0xdd, 0xdf, 0x1f, 0x40, 0x00, + 0x08, 0x48, 0xa0, 0x4a, 0xa9, 0x56, 0xea, 0x56, 0xad, 0x6a, 0x7d, 0x9b, + 0x04, 0x01, 0x00, 0x02, 0x42, 0x2a, 0xd5, 0xaa, 0xa8, 0xaa, 0xaa, 0xfa, + 0xdf, 0x2f, 0x10, 0x04, 0x22, 0x48, 0x08, 0x45, 0x2a, 0x15, 0x68, 0x55, + 0x55, 0xd7, 0x76, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x40, 0x2a, 0x80, 0xa0, + 0xb2, 0x09, 0x48, 0xb9, 0xdf, 0x17, 0x22, 0x01, 0x00, 0x24, 0x45, 0x8a, + 0x24, 0x4a, 0x54, 0x51, 0x91, 0xf6, 0x6e, 0x4b, 0x00, 0x04, 0x90, 0x00, + 0x80, 0x52, 0x00, 0x20, 0x69, 0x05, 0xa4, 0xaa, 0xff, 0x1e, 0x48, 0x00, + 0x02, 0x92, 0x08, 0x05, 0x81, 0x94, 0xd4, 0x92, 0x40, 0xfd, 0xb6, 0x8b, + 0x00, 0x01, 0x40, 0x00, 0x82, 0x54, 0x00, 0x48, 0x68, 0x05, 0x90, 0xa4, + 0xef, 0x06, 0x24, 0x00, 0x08, 0x12, 0x10, 0x05, 0x00, 0x10, 0xb5, 0x01, + 0x42, 0xfb, 0xbf, 0x43, 0x00, 0x09, 0x00, 0x40, 0x81, 0xa8, 0x08, 0x4a, + 0xaa, 0x96, 0x90, 0xac, 0x6d, 0x15, 0x22, 0x00, 0x20, 0x09, 0x04, 0x15, + 0x80, 0x28, 0xdc, 0x01, 0x24, 0xfb, 0xbf, 0x01, 0x80, 0x04, 0x09, 0x00, + 0x40, 0x48, 0x02, 0x45, 0xb2, 0x2e, 0x41, 0x6d, 0xef, 0x05, 0x11, 0x00, + 0x40, 0x52, 0x02, 0x15, 0x29, 0x2a, 0xac, 0x42, 0x54, 0xfb, 0x3b, 0x51, + 0x84, 0x00, 0x08, 0x00, 0x20, 0x54, 0x80, 0x05, 0xb5, 0x3d, 0xa2, 0xb6, + 0xdf, 0x00, 0x20, 0x04, 0x20, 0x49, 0x89, 0xa8, 0x6a, 0x29, 0xac, 0xd6, + 0x54, 0xff, 0x3f, 0x84, 0x00, 0x01, 0x04, 0x10, 0x00, 0x94, 0xa8, 0x56, + 0xda, 0x5f, 0xab, 0xd5, 0x1e, 0x10, 0x48, 0x00, 0x90, 0x82, 0x48, 0xa8, + 0xb2, 0xac, 0xfd, 0x55, 0xd5, 0xfe, 0x9f, 0x80, 0x00, 0x0a, 0x02, 0x08, + 0x02, 0x55, 0x5a, 0x75, 0xff, 0xaf, 0xb6, 0xf7, 0x2d, 0x12, 0x92, 0x00, + 0x10, 0x20, 0x10, 0xa8, 0x54, 0xd5, 0xbf, 0x5d, 0xad, 0xdd, 0x0f, 0x00, + 0x00, 0x04, 0x40, 0x09, 0x84, 0xa8, 0xaa, 0x5a, 0xed, 0xeb, 0x6a, 0xff, + 0x9f, 0xa4, 0x24, 0x01, 0x02, 0xa0, 0x20, 0x50, 0x55, 0xd5, 0xbe, 0xae, + 0xad, 0xfd, 0x16, 0x00, 0x10, 0x04, 0x20, 0x0a, 0x08, 0xb4, 0xaa, 0x95, + 0xaa, 0x7b, 0xb7, 0xdb, 0x5f, 0x92, 0x04, 0x01, 0x84, 0x20, 0x21, 0x51, + 0xd5, 0x2a, 0xa9, 0xee, 0xd5, 0xfe, 0x0d, 0x00, 0x20, 0x04, 0x10, 0x00, + 0x08, 0x50, 0xe9, 0xd7, 0xd4, 0xfb, 0xb5, 0xff, 0x9f, 0x24, 0x09, 0x01, + 0x42, 0x4a, 0xa2, 0x64, 0xd5, 0x55, 0x7b, 0x7f, 0xda, 0x7d, 0x4f, 0x00, + 0x20, 0x04, 0x00, 0x80, 0x00, 0xa0, 0x2a, 0x13, 0x84, 0x6a, 0x55, 0xff, + 0x1d, 0x48, 0x8a, 0x00, 0x94, 0x24, 0x8a, 0xc8, 0xaa, 0x42, 0x20, 0x5d, + 0xf5, 0xff, 0x5f, 0x01, 0x00, 0x02, 0x01, 0x00, 0x20, 0xa2, 0x4a, 0x1a, + 0x82, 0x56, 0xda, 0xbd, 0x3f, 0x92, 0x92, 0x00, 0x90, 0x92, 0x00, 0x40, + 0x95, 0x6a, 0xf4, 0x55, 0x6d, 0xff, 0xd6, 0x00, 0x00, 0x0a, 0x04, 0x20, + 0x14, 0x49, 0x4b, 0xaa, 0xaa, 0x56, 0xf5, 0xff, 0xbf, 0xab, 0xa4, 0x00, + 0x20, 0x89, 0x40, 0x80, 0xaa, 0xaa, 0xaa, 0xaa, 0xde, 0xbf, 0xeb, 0x03, + 0x00, 0x02, 0x04, 0x02, 0x0a, 0x10, 0x2b, 0x2a, 0x55, 0x5b, 0xf5, 0xff, + 0xd7, 0x2f, 0x92, 0x00, 0x10, 0x28, 0x21, 0x01, 0x56, 0x95, 0xa0, 0x56, + 0xdf, 0xef, 0xea, 0x87, 0x40, 0x0a, 0x42, 0x41, 0x00, 0x90, 0xaa, 0x52, + 0xb6, 0xad, 0xfa, 0xff, 0xd5, 0x2f, 0x14, 0x00, 0x00, 0x04, 0x95, 0x04, + 0xaa, 0xac, 0x55, 0x6b, 0xff, 0xb7, 0xea, 0x9f, 0x40, 0x02, 0x28, 0x51, + 0x00, 0x40, 0x58, 0xd5, 0xda, 0xd6, 0x6e, 0x7f, 0xf9, 0x3f, 0x12, 0x04, + 0x02, 0x04, 0x49, 0x25, 0x55, 0xaa, 0x77, 0xab, 0xff, 0x2b, 0xfd, 0x3f, + 0x48, 0x01, 0x20, 0x41, 0x00, 0x00, 0x58, 0xa9, 0xda, 0xea, 0xfd, 0xaf, + 0xfa, 0xff, 0x02, 0x04, 0x08, 0x14, 0x29, 0x49, 0x52, 0x55, 0x55, 0x55, + 0xff, 0x8d, 0xfe, 0x3f, 0xa8, 0x00, 0x02, 0x41, 0x00, 0x02, 0xa0, 0xa2, + 0xaa, 0xea, 0xff, 0x53, 0xfd, 0xff, 0x02, 0x04, 0x50, 0x04, 0x25, 0xa8, + 0x54, 0x49, 0x52, 0xb5, 0xbf, 0x8a, 0xfe, 0xff, 0xa9, 0x08, 0x04, 0x50, + 0x80, 0x02, 0xa1, 0x2a, 0x95, 0xea, 0xff, 0xa1, 0xff, 0xff, 0x03, 0x02, + 0x90, 0x02, 0x09, 0x08, 0x44, 0x49, 0x52, 0xbd, 0x7f, 0xca, 0xff, 0xff, + 0x2b, 0x09, 0x04, 0x48, 0x40, 0x82, 0x90, 0x56, 0xa9, 0xf6, 0xbf, 0xd0, + 0xff, 0xff, 0x47, 0x00, 0x50, 0x02, 0x15, 0x11, 0x40, 0x95, 0xaa, 0xfd, + 0x2f, 0xe9, 0xff, 0xff, 0x8f, 0x0a, 0x84, 0x50, 0x40, 0x84, 0x14, 0xaa, + 0x6a, 0xff, 0x5f, 0xf2, 0xff, 0xff, 0x7f, 0x00, 0x10, 0x02, 0x09, 0x10, + 0x40, 0x7d, 0xf7, 0xff, 0x0b, 0xfc, 0xff, 0xff, 0xaf, 0x02, 0x84, 0x50, + 0x42, 0x85, 0x12, 0xd0, 0xdd, 0xff, 0xa7, 0xf2, 0xff, 0xff, 0xff, 0x04, + 0x00, 0x0a, 0x08, 0x10, 0x48, 0xf8, 0xff, 0xff, 0x0a, 0xfe, 0xff, 0xff, + 0x7f, 0x03, 0xa4, 0x80, 0xa2, 0x8a, 0x02, 0x68, 0xff, 0xff, 0x52, 0xfd, + 0xff, 0xff, 0xff, 0x07, 0x00, 0x2a, 0x08, 0x20, 0x28, 0xdc, 0xff, 0x5f, + 0x05, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x92, 0x40, 0x22, 0x09, 0x02, 0xea, + 0xfb, 0xaf, 0x48, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x12, 0x81, 0xa0, + 0x48, 0x9c, 0x6e, 0x93, 0xa2, 0xff, 0xff, 0xff, 0xff, 0x07, 0xa8, 0x40, + 0x28, 0x0a, 0x02, 0x74, 0xb5, 0x45, 0x81, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0x02, 0x0a, 0x81, 0x20, 0x08, 0xae, 0xaa, 0x90, 0xe8, 0xff, 0xff, 0xff, + 0xff, 0x0f, 0x90, 0x40, 0x28, 0x88, 0x12, 0x58, 0x15, 0x50, 0xd0, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0x44, 0x0a, 0x41, 0x21, 0x08, 0xae, 0x04, 0x14, + 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x10, 0x40, 0x14, 0x88, 0x04, 0xba, + 0x02, 0x28, 0xe8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x42, 0x15, 0x41, 0x21, + 0x05, 0xad, 0x00, 0x05, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x10, 0x40, + 0x24, 0x8a, 0x0e, 0x36, 0x00, 0x0a, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0x42, 0x25, 0x90, 0xd0, 0x8b, 0xc2, 0x41, 0x05, 0xfc, 0xff, 0xff, 0xff, + 0xff, 0x0f, 0x10, 0x08, 0x05, 0xe8, 0x8e, 0x58, 0x80, 0x02, 0xfa, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0x4a, 0x20, 0xa8, 0xba, 0x0b, 0x2b, 0x51, 0x01, + 0xfe, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x8a, 0x02, 0xe8, 0xaf, 0x84, + 0x90, 0x04, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x52, 0x21, 0x54, 0xbf, + 0x1f, 0x15, 0xa5, 0x02, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x08, + 0x01, 0xfa, 0xb6, 0xa4, 0x52, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0x4a, 0xa2, 0x54, 0xef, 0x5f, 0x4b, 0xa4, 0x80, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x0f, 0x80, 0x10, 0x82, 0xfe, 0xbf, 0x92, 0x52, 0x42, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0x12, 0x42, 0xa8, 0xbf, 0x1f, 0x24, 0x80, 0xa0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x84, 0x28, 0x8a, 0xf7, 0x37, 0x80, + 0x52, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x10, 0x82, 0xe0, 0xff, + 0x1f, 0x00, 0x20, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x84, 0x28, + 0xca, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + 0x10, 0x42, 0xf0, 0xfd, 0x1b, 0x00, 0x50, 0xf0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x0f, 0xa4, 0x10, 0xc5, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0x00, 0x22, 0xf8, 0xff, 0x0e, 0x00, 0x00, 0xf0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xaa, 0x88, 0xe2, 0xff, 0x0f, 0x10, + 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x25, 0xfa, 0xff, + 0x0f, 0x01, 0x11, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xfb, + 0xfb, 0xff, 0x7f, 0x5d, 0xd5, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f}; diff --git a/ext/tk/sample/demos-jp/images/flagdown.bmp b/ext/tk/sample/demos-jp/images/flagdown.bmp new file mode 100644 index 0000000000..55abc51825 --- /dev/null +++ b/ext/tk/sample/demos-jp/images/flagdown.bmp @@ -0,0 +1,27 @@ +#define flagdown_width 48 +#define flagdown_height 48 +static char flagdown_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe1, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x80, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x04, + 0x00, 0x00, 0x03, 0x00, 0x06, 0x06, 0x00, 0x80, 0x01, 0x00, 0x06, 0x07, + 0x00, 0xc0, 0x1f, 0x00, 0x87, 0x07, 0x00, 0xe0, 0x7f, 0x80, 0xc7, 0x07, + 0x00, 0x70, 0xe0, 0xc0, 0xe5, 0x07, 0x00, 0x38, 0x80, 0xe1, 0x74, 0x07, + 0x00, 0x18, 0x80, 0x71, 0x3c, 0x07, 0x00, 0x0c, 0x00, 0x3b, 0x1e, 0x03, + 0x00, 0x0c, 0x00, 0x1f, 0x0f, 0x00, 0x00, 0x86, 0x1f, 0x8e, 0x07, 0x00, + 0x00, 0x06, 0x06, 0xc6, 0x05, 0x00, 0x00, 0x06, 0x00, 0xc6, 0x05, 0x00, + 0x00, 0x06, 0x00, 0xc6, 0x04, 0x00, 0x00, 0x06, 0x00, 0x06, 0x04, 0x00, + 0x7f, 0x06, 0x00, 0x06, 0xe4, 0xff, 0x00, 0x06, 0x00, 0x06, 0x04, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x00, 0x06, 0x06, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x00, 0x86, 0x01, 0x00, + 0x00, 0x06, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x06, 0x00, 0x66, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x3e, 0x00, 0x00, + 0x00, 0xfe, 0xff, 0x2f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x27, 0x00, 0x00, + 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00, + 0xf7, 0xbf, 0x8e, 0xfc, 0xdf, 0xf8, 0x9d, 0xeb, 0x9b, 0x76, 0xd2, 0x7a, + 0x46, 0x30, 0xe2, 0x0f, 0xe1, 0x47, 0x55, 0x84, 0x48, 0x11, 0x84, 0x19}; diff --git a/ext/tk/sample/demos-jp/images/flagup.bmp b/ext/tk/sample/demos-jp/images/flagup.bmp new file mode 100644 index 0000000000..6eb0d846a3 --- /dev/null +++ b/ext/tk/sample/demos-jp/images/flagup.bmp @@ -0,0 +1,27 @@ +#define flagup_width 48 +#define flagup_height 48 +static char flagup_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xef, 0x6a, 0x00, + 0x00, 0x00, 0xc0, 0x7b, 0x75, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0x6a, 0x00, + 0x00, 0x00, 0x30, 0x60, 0x75, 0x00, 0x00, 0x00, 0x18, 0xe0, 0x7f, 0x00, + 0x00, 0x00, 0x0c, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x06, 0xe0, 0x04, 0x00, + 0x00, 0x00, 0x03, 0xe0, 0x04, 0x00, 0x00, 0x80, 0x01, 0xe0, 0x06, 0x00, + 0x00, 0xc0, 0x1f, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x7f, 0xe0, 0x07, 0x00, + 0x00, 0x70, 0xe0, 0xe0, 0x05, 0x00, 0x00, 0x38, 0x80, 0xe1, 0x04, 0x00, + 0x00, 0x18, 0x80, 0xf1, 0x04, 0x00, 0x00, 0x0c, 0x00, 0xfb, 0x04, 0x00, + 0x00, 0x0c, 0x00, 0xff, 0x04, 0x00, 0x00, 0x86, 0x1f, 0xee, 0x04, 0x00, + 0x00, 0x06, 0x06, 0xe6, 0x04, 0x00, 0x00, 0x06, 0x00, 0xe6, 0x04, 0x00, + 0x00, 0x06, 0x00, 0xe6, 0x04, 0x00, 0x00, 0x06, 0x00, 0x66, 0x04, 0x00, + 0x7f, 0x56, 0x52, 0x06, 0xe4, 0xff, 0x00, 0x76, 0x55, 0x06, 0x04, 0x00, + 0x00, 0x56, 0x57, 0x06, 0x04, 0x00, 0x00, 0x56, 0x55, 0x06, 0x06, 0x00, + 0x00, 0x56, 0xd5, 0x06, 0x03, 0x00, 0x00, 0x06, 0x00, 0x86, 0x01, 0x00, + 0x54, 0x06, 0x00, 0xc6, 0x54, 0x55, 0xaa, 0x06, 0x00, 0x66, 0xaa, 0x2a, + 0x54, 0x06, 0x00, 0x36, 0x55, 0x55, 0xaa, 0x06, 0x00, 0xbe, 0xaa, 0x2a, + 0x54, 0xfe, 0xff, 0x6f, 0x55, 0x55, 0xaa, 0xfc, 0xff, 0xa7, 0xaa, 0x2a, + 0x54, 0x01, 0x88, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a, + 0x54, 0x55, 0x8d, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a, + 0x54, 0x55, 0x8d, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a, + 0x54, 0x55, 0x8d, 0x50, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa8, 0xaa, 0x2a, + 0x54, 0x55, 0x95, 0x54, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a, + 0x54, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/ext/tk/sample/demos-jp/images/gray25.bmp b/ext/tk/sample/demos-jp/images/gray25.bmp new file mode 100644 index 0000000000..b234b3cb0b --- /dev/null +++ b/ext/tk/sample/demos-jp/images/gray25.bmp @@ -0,0 +1,6 @@ +#define grey_width 16 +#define grey_height 16 +static char grey_bits[] = { + 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, + 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, + 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44}; diff --git a/ext/tk/sample/demos-jp/images/grey.25 b/ext/tk/sample/demos-jp/images/grey.25 new file mode 100644 index 0000000000..b234b3cb0b --- /dev/null +++ b/ext/tk/sample/demos-jp/images/grey.25 @@ -0,0 +1,6 @@ +#define grey_width 16 +#define grey_height 16 +static char grey_bits[] = { + 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, + 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, + 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44}; diff --git a/ext/tk/sample/demos-jp/images/grey.5 b/ext/tk/sample/demos-jp/images/grey.5 new file mode 100644 index 0000000000..37688893f0 --- /dev/null +++ b/ext/tk/sample/demos-jp/images/grey.5 @@ -0,0 +1,6 @@ +#define grey_width 16 +#define grey_height 16 +static char grey_bits[] = { + 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, + 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, + 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa}; diff --git a/ext/tk/sample/demos-jp/images/letters.bmp b/ext/tk/sample/demos-jp/images/letters.bmp new file mode 100644 index 0000000000..0f12568d1a --- /dev/null +++ b/ext/tk/sample/demos-jp/images/letters.bmp @@ -0,0 +1,27 @@ +#define letters_width 48 +#define letters_height 48 +static char letters_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, + 0x00, 0xfa, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2a, + 0x00, 0x3a, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2e, + 0xe0, 0xff, 0xff, 0xff, 0xff, 0x21, 0x20, 0x00, 0x00, 0x00, 0x00, 0x21, + 0xa0, 0x03, 0x00, 0x00, 0x70, 0x21, 0x20, 0x00, 0x00, 0x00, 0x50, 0x21, + 0xa0, 0x1f, 0x00, 0x00, 0x50, 0x21, 0x20, 0x00, 0x00, 0x00, 0x70, 0x21, + 0xfe, 0xff, 0xff, 0xff, 0x0f, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x21, + 0xfa, 0x01, 0x00, 0x80, 0x0b, 0x21, 0x02, 0x00, 0x00, 0x80, 0x0a, 0x21, + 0xba, 0x01, 0x00, 0x80, 0x0a, 0x21, 0x02, 0x00, 0x00, 0x80, 0x0b, 0x21, + 0x3a, 0x00, 0x00, 0x00, 0x08, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x21, + 0x02, 0xc0, 0xfb, 0x03, 0x08, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x3f, + 0x02, 0xc0, 0xbd, 0x0f, 0x08, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, + 0x02, 0xc0, 0x7f, 0x7b, 0x08, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, + 0x02, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, + 0xfe, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/ext/tk/sample/demos-jp/images/noletter.bmp b/ext/tk/sample/demos-jp/images/noletter.bmp new file mode 100644 index 0000000000..5774124efe --- /dev/null +++ b/ext/tk/sample/demos-jp/images/noletter.bmp @@ -0,0 +1,27 @@ +#define noletters_width 48 +#define noletters_height 48 +static char noletters_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, + 0x00, 0xf0, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x7f, 0x00, + 0x00, 0x3e, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x00, 0x00, 0xf0, 0x01, + 0x80, 0x07, 0x00, 0x00, 0xc0, 0x03, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x07, + 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x78, 0x0e, + 0xf0, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x70, 0x00, 0x00, 0x00, 0x1e, 0x1c, + 0x38, 0x00, 0x00, 0x00, 0x0f, 0x38, 0x38, 0x00, 0x00, 0x80, 0x07, 0x38, + 0x3c, 0xfc, 0xff, 0xff, 0x7f, 0x78, 0x1c, 0x04, 0x00, 0xe0, 0x41, 0x70, + 0x1c, 0x04, 0x00, 0xf0, 0x40, 0x70, 0x1c, 0x74, 0x00, 0x78, 0x4e, 0x70, + 0x0e, 0x04, 0x00, 0x3c, 0x4a, 0xe0, 0x0e, 0x74, 0x03, 0x1e, 0x4a, 0xe0, + 0x0e, 0x04, 0x00, 0x0f, 0x4e, 0xe0, 0x0e, 0x04, 0x80, 0x07, 0x40, 0xe0, + 0x0e, 0x04, 0xf8, 0x0f, 0x40, 0xe0, 0x0e, 0x04, 0xe0, 0x01, 0x40, 0xe0, + 0x0e, 0x04, 0xf8, 0x00, 0x40, 0xe0, 0x0e, 0x04, 0x78, 0x00, 0x40, 0xe0, + 0x0e, 0x04, 0xfc, 0xf3, 0x40, 0xe0, 0x1c, 0x04, 0x1e, 0x00, 0x40, 0x70, + 0x1c, 0x04, 0x0f, 0x00, 0x40, 0x70, 0x1c, 0x84, 0x07, 0x00, 0x40, 0x70, + 0x3c, 0xfc, 0xff, 0xff, 0x7f, 0x78, 0x38, 0xe0, 0x01, 0x00, 0x00, 0x38, + 0x38, 0xf0, 0x00, 0x00, 0x00, 0x38, 0x70, 0x78, 0x00, 0x00, 0x00, 0x1c, + 0xf0, 0x3c, 0x00, 0x00, 0x00, 0x1e, 0xe0, 0x1e, 0x00, 0x00, 0x00, 0x0e, + 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x07, 0x00, 0x00, 0x80, 0x07, + 0x80, 0x07, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x1f, 0x00, 0x00, 0xf0, 0x01, + 0x00, 0x3e, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x7f, 0x00, + 0x00, 0xf0, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00}; diff --git a/ext/tk/sample/demos-jp/images/pattern.bmp b/ext/tk/sample/demos-jp/images/pattern.bmp new file mode 100644 index 0000000000..df31baf789 --- /dev/null +++ b/ext/tk/sample/demos-jp/images/pattern.bmp @@ -0,0 +1,6 @@ +#define foo_width 16 +#define foo_height 16 +static char foo_bits[] = { + 0x60, 0x06, 0x90, 0x09, 0x90, 0x09, 0xb0, 0x0d, 0x4e, 0x72, 0x49, 0x92, + 0x71, 0x8e, 0x8e, 0x71, 0x8e, 0x71, 0x71, 0x8e, 0x49, 0x92, 0x4e, 0x72, + 0xb0, 0x0d, 0x90, 0x09, 0x90, 0x09, 0x60, 0x06}; diff --git a/ext/tk/sample/demos-jp/images/tcllogo.gif b/ext/tk/sample/demos-jp/images/tcllogo.gif Binary files differnew file mode 100644 index 0000000000..3fc7720b17 --- /dev/null +++ b/ext/tk/sample/demos-jp/images/tcllogo.gif diff --git a/ext/tk/sample/demos-jp/images/teapot.ppm b/ext/tk/sample/demos-jp/images/teapot.ppm new file mode 100644 index 0000000000..78afefbf82 --- /dev/null +++ b/ext/tk/sample/demos-jp/images/teapot.ppm @@ -0,0 +1,56 @@ +P6 +256 256 +255 +\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�[7 eOLjQLmSMoTMnSMlRMhPL_9 \�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�nSMtVMzYN~[N~[N\N\O�\O�]O�]O�]O�]O�\O�\O}[NyYNtVM\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�G-wXN}[N�]O�^O�_O�`O�`O�`O�`O�aO�aO�aO�aO�aO�aO�aO�aO�`O�_O�^O\N\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�aMLyYN�_O�aP�bP�cP�cP�dP�dP�dP�dP�dP�dP�dP�dP�dP�eP�eP�eP�eP�eP�dP�cP�_OpUM\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�wXN�_O�dP�fP�gQ�hQ�hQ�iQ�iQ�iQ�iQ�iQ�jQ�jQ�jQ�jQ�jQ�jQ�jQ�jQ�jQ�jQ�iQ�fP�`O\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�NCJiQL�bP�hQ�kQ�mR�nR�oR�oR�oR�oR�oR�oR�oR�oR�pR�pS�qS�qS�rS�rS�rS�qS�oR�jQ�]O\KK\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�fOLrUM�cP�lR�qS�tS�uT�wT�xT�xT�yT�yT�zT�zU�zU�zU�zU�zU�yT�xT�wT�tS�mR�aOhPL\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�a0 cNLqUM�\O�fQ�pS�wV�zV�|V�}V�V�VǀVɂW̅[Տe�w���ꪅĈg�qT�fQ{ZNYIK9\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�O1{G#�JkRMqUMtVN�iS�v\��d��b�zZ�vU�uT�sS�qS�nR�jQ�eP�^OrUM�Hh>!T4\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�G-V5wE"~I#�M%�U+�e7�l:�g2�b*�a(�`(�^(�])�^-�]1�S,qC$`9 R3G-\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�@)J/i>!pA"tD"wF$yH&xH&tE$wE#yG%}M+�T4S5mE*Z7!K/B*;'\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\��aO�oR�{UǀVυX<(F-a: e<!h>!j@#k@$h>"d<!c=$hD-fF2[<)K0@);'5$˂VǀV�|U_LKYIK\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\��_O�xTɂW����֒k�|X�>�f-�^(�Z'�W&�T&�N>)F-J/b; g>#nD(jB&c<!b=%jH2_A/I0!<(8&5$�J�Y�S%8&;'?)E,<:HA=HE?IJAISFJYIKXIK\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\��nR�}Uܘqʊe�vU�e,�V&�V�C +�@|>y<u:r9o7l6 +j5 +h4 +g3 +5$D,K/b; h>"wM1tK.e="a<#cA,U8&E-<(9&.!a0 b1 c1 + ++3#@)46G<:HMCIXHK\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�U*�vT�~X�{Y�k+�W&�N$|>u:p8k5 +f3 +a0 _/ ]. [- �I�\*�_(�LkRMmSMmSMnSMnSMD,R3W5mA"|O0|P1j?"c<!a=%Y7"N1F,;'NCJNCJNDJODJODJODJh>!a: X/K% +g3 +a0 Z- \/T*Q(�H�m8kRMmSMnTMoTMpTMpUM15G15G05G04G04GpUMpTM5^9 d<!yF#�O+�N,rC#qB"pB#k?"a: Z7 6ODJPDJPEJQEJQEJREJREJREJRFJSFJSFJSFJSFJe<!X/ +^/ V+Q(L&I$r9�TlRMnSM46G47G47G46G46G46G46G46G36G36G25G25G15G04G/4F.3F +�`O~[NqUM[- �HUGJUGJVGJVGJVHJWHJWHJWHKWHKXHKXHKXHKXHKXHKXIKXIKXIKXIKXIKh>!Y0 + +L&C!:4 +�X&pUMuWMwXNxXN<:H<:H<:H<:H<;H<;H<;H<;H=;H=;H=;H=;H>;H>;H?<H@<HA=HC>HG@ILBIREJ[JKcNLjQL�pR�uT�zU�~VȁW˂X֎c�sҎe�{V�vT�pS�kR�gQ�bP�_O�^O�]O�\O�\O�\O�\O�]O�]O�]O�]O�]O�]O�]O�]O�]O�]O�]O�\O�\O~\N}[N|ZNxXN�T%H$ +�W&rVMvWNyYNzYN|ZN}[N}[N><H?<H?<H?<H?<H?<H@<H@<H@<HA=HA=HB=HC>HE?IG@IIAIKBIODJSFJWHK�hQ�lR�pR�b(�i*�n+�|7�|6�r,�q+�p-�l+�g)�b(�sS�pS�lR�iQ�gQ�eP�cP�aP�aO�`O�`O�_O�_O�_O�_O�_O�_O�_O�_O�_O�_O�^O�^O�^O�^O�]O�]O�\O~[N{ZN�T% + + + + +@%<-$G?@�pfdNLuWM\NdNL\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�TFJvWN�aP./01�E}[N�]O�_O�`O�aP�bP�bP�cP�cP�cP�dP�dP�dP�eP�eP�eP�eP�fP�fQ�fQ�gQ�gQ�gQ�hQ�hQ�hQ�iQ�iQ�jQ�jQ�kQ�kR�lR�lR�Y&�\'�^'�^�b�c�e�i �g�c�b�a�`�^�]�X�['�Z'�Y&�mR�mR�mR�lR�lR�lR�kR�kQ�kQ�jQ�jQ�jQ�iQ�iQ�iQ�iQ�hQ�hQ�hQ�hQ�gQ�gQ�gQ�gQ�gQ�fQ�fQ�fQ�fP�eP�eP�dP�cP�aP�O + B\�\�\�\�\�\�\�\�\�\�%7!!C*F#P){dY�ze��p�\OgPL\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�SFJ`LKvWN�aPm6 + +\�\�\�\�\�\�\�\�\� B B +$5 �`(�e)�nR�jQ�^OJAI\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�XIK^KKdNLhPLuWM�]O�bP�fQ�eP +m6 +�`O�cP�fQ�hQ�hQ�iQ�iQ�jQ�jQ�jQ�jQ�jQ�jQ�jQ�kQ�kQ�kQ�kR�kR�kR�kR�lR�lR�lR�lR�lR�lR�lR�mR�mR�mR�mR�g)�c(�c(�b(�V�c�e�i!�i!�d�b�`�`�_�_�^�Q�]'�_(�`(�f)�nR�nR�nR�nR�nR�nR�nR�nR�nR�nR�nR�nR�nR�mR�mR�mR�mR�mR�mR�mR�mR�mR�nR�mR�mR�nR�mR�mR�mR�mR�kR�hQ�Ga0 �bP�mR�jQ�fQ�aP}[NrUMmSM�L$\�\�\�\�\�\�\�\� B B +#C, 8&H.Z7 �pR�jQ{ZN\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�QEJ[JK`LKdNLhQLqUM{ZN�_O�cP�gQ�hQ +�bP�eP�hQ�iQ�jQ�jQ�kQ�kQ�kR�kR�kR�lR�lR�lR�lR�lR�lR�lR�lR�lR�lR�mR�mR�mR�mR�mR�mR�mR�mR�mR�nR�nR�j*�g)�e)�d)�d�X�g�h�e�c�b�b�b�U�`(�a(�a(�c(�i*�oR�oR�nR�nR�nR�nR�nR�nR�nR�nR�nR�nR�nR�nR�nR�nR�nR�oR�oR�oR�oR�oR�oR�oR�oR�oR�oR�oR�oR�nR�mR�jQ�Q%Z- �jQ�nR�lR�hQ�dP�_OuWMpTMnSMkRLa: \�\�\�\�\�\�\� B B&D2 +@*S6#G@IPDJ�hQmSM\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�VGJ]KKbMLeOLiQLlRMvWN\O�aO�eP�hQ�jQ�gQ +\�\�\�\�\� B'D+E$(1J/jH1NCJUGJYIKUGJ\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�XHK]KKbNLfOLiQLkRMmSMoTMqUMxXN\N�_O�bP�fP�hQ�kQ�mR�oR�pS�pR�hQ�mR�oR�pS�qS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�rS�sS�sS�sS�sS�sS�sS�sS�sS�sS�sS�sS�sS�tS�tS�tS�uS�uS�uT�uT�uT�uT�uT�vT�wT�vT�vT�uT�tS�mR�tS�uT�uS�tS�rS�pR�mR�kQ�hQ�eP�aP�^O\N{ZNvXNqUMpTMnSMlRM�P%\�\�\�\� B#C*E$.E- .!G$Y:%d<"SFJYIKZIKNCJ\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�PDJZIK_LKdNLgPLjQLlRMnSMpTMqUMuWMyYN�\O�`O�cP�fP�hQ�jQ�mR�oR�qS�rS�rS�rS�mR +!C+E'0F.4F7%8%U/lG.SFJZIK]KKZIKB=H\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�REJZJK`LKdNLgPLjQLlRMnSMpTMqUMtWMxXN{ZN~[N�]O�^O�`O�aO�bP�dP�gQ�iQ�kQ�lR�nR�pS�rS�sS�tT�uT�vT�wT�xT�yT�yT�yT�yT�yT�xT�vT�rS�nR�hQ�|U�|U�|U�|U�|U�|U�|U�|U�|U�|U�|U�|U�|U�|U�}U�}U�}U�}U�}U�}U�}U�~U�~U�~V�~V�VŀWƁX�a(�lR�rS�vT�yT�zU�|U�~V�XƂ[Ɇ_dӑjԓmԓnБlʌhĆd��_�{[�vW�sU�pS�nR�kR�iQ�hQ�gQ�fQ�eP�dP�bP�aO�_O�^O�\O|ZNxXNsVMpTMnTMmSMjQL�C B)D&/F-3F47G6%>"Y7 kA$YIK]KK^KKSFJ\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�VGJ\KKbMLeOLhPLkRLmSMnTMpTMrUMuWNyYN|ZN\N�]O�_O�`O�aP�bP�cP�eP�fP�hQ�jQ�lR�nR�oS�qT�sT�uU�vU�wV�xV�yV�yU�zU�zU�{U�{U�{U�|U�|U�|U�|U�|U�{U�{U�{U�zU�zT�yT�yT�xT�wT�vT�vT�vT�vT�wT�wT�wT�xT�yT�zT�zU�{U�{U�|U�|U�}U�VŀWǂYɄ\͈_ьdٔl�u�|쩂ſt명榁ޟ{sˎld�^�yZ�uW�qU�oS�lR�kR�jQ�iQ�hQ�gQ�fQ�eP�dP�cP�aP�`O�^O�]O}[NyYNuWMpTMoTMmSMkRLgPL&D#.E,3F46G;'<(D"iB(VGJ]KK`LK[JKB>H\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�NCJYIK^LKcNLfOLiQLkRMmSMoTMqUMsVMvXNzYN}[N�\O�^O�_O�`O�aP�cP�dP�eP�fQ�gQ�hQ�iQ�kR�mS�oT�rU�tW�wY�zZ�}\�]��^��^��^^\��Z�Y�X�~W�~W�~V�~V�~V�~V�~U�~U�~U�~U�U�U�V�V�V�V�VƀVƀVǀWǁWȂXɃZ˅[͇^ЊaӍdؒiܗn�t�z�����������������驅�~֘vˏmÇf��`�z[�vX�rU�pT�oS�nS�lR�kR�kR�jQ�iQ�hQ�fQ�eP�dP�cP�bP�`O�_O�]O~[NzYNvWNpTMoTMnSMkRMhQLo7,2F36G99HC+@ ]8 nA"\JK`ML_LKSFJ\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�SFJ[JK`LKdNLgPLjQLlRMnSMpTMqUMtVMwXNzZN}[N�]O�^O�_O�aO�bP�cP�dP�eP�fQ�gQ�hQ�iQ�jR�lR�mS�oU�rW�vZ�{]��a��fŊjˏnГqӕsՖsՖrՖqՔoӒmяjύg͊cˈaɆ^Ȅ\ǂ[ƁYŀXŀW�W�W�V�V�WŀWƀWǁXȂYɃ[ʅ\͇_ϊaҍeՑhٕmݙq�v�z�}꧀멃몄騃奀ߠ|ٛwӕȑmƉh��c�~^�yZ�vX�tW�sV�qU�pT�oS�nS�mR�lR�kR�jQ�iQ�hQ�gQ�fP�eP�cP�bP�aO�_O�^O\N{ZNwXNsVMoTMnSMlRMiQL~I#26G99G?<HA*E$ i@$ZIKaMLbML[JK;:H\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�WHJ]KKbMLeOLhPLjRLlSMnTMpTMrUMuWMxXN{ZN~\N�]O�^O�`O�aO�bP�cP�dP�eP�fQ�gQ�hQ�iQ�kR�lS�mT�oU�rW�uZ�y]�~a��fl˒sԚzܡ�㧆諉뮋������묈訄�~ߞyڙt֕oҐjΌfˈbȅ_ƃ\ŁZĀY�X�W�~W�~W�~W�XÀXĀYŁZƃ\Dž^Ɇ`ˈb̊d͋fgΎiΎjΎj͎jˌiljgÆd��a�^�}]�|\�{[�yZ�xY�vX�tW�sV�qU�pT�oS�nS�mR�lR�kR�jQ�iQ�hQ�gQ�fP�eP�dP�bP�aO�_O�^O�\O|ZNxXNtVMpTMnSMmSMjQLgPL99G?<HG-E&b;!YIK`MLdOM`LKNCJ\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\��lR�yT�~UʂXʃY�X�{W�tU�W'�[(�hQ�lR�cP�\OhQL\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�NCJYIK^LKcNLfOLiQLkRLmSMoTMqUMrVMvWNyYN|ZN\N�]O�_O�`O�aP�bP�cP�dP�fP�gQ�hQ�iQ�jR�kR�lS�nT�pU�sW�vZ�z]�b��glɑsИy؞ޤ�㩊譍챐ﳑﳑ뭊穅⣀ݞzؘtғniɉdƅ`Â]��[�~Y�}X�|W�|V�{V�{V�{V�{V�{V�|W�|W�}X�}Y�~Z�~Z�~Z�}[�}[�}[�~\�~\�~]�~]�~]�~]�}]�|\�z[�yZ�wY�vX�tW�sV�rU�pT�oS�nS�mR�lR�kR�jQ�iQ�hQ�gQ�fQ�eP�dP�cP�aP�`O�^O�]O}[NyYNuWNpTMnTMmSMkRLhPL|H$D>IQ2P+XHK_LLfQOcNLXIK\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\��qS�yT�~VΈ`遲ޜv��]�qS�L�G|>g3 +S)?*%.�hQ�hQ�eP�`OuWM\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�SFJ[JK`LKdNLgPLjQLlRMnSMoTMqUMsVMwXNzYN}[N�\O�^O�_O�`O�aP�bP�dP�eP�fP�gQ�hQ�iQ�jR�kR�lS�nT�pV�sX�vZ�z^�b��gËmʒsјz؟�ޤ�㩊譍ꯏ및ꯎ謋娇ं۞|֙wѓq̎lljgÅb��_�\�}Z�{X�zW�yV�yU�xU�xU�xT�xT�xU�xU�xU�yV�yV�yW�zW�{X�{Y�|Z�}[�}[�}\�~\�~]�~]�}]�|\�{\�z[�yZ�wY�vX�tW�sV�rU�pT�oS�nS�mR�lR�kR�jQ�iQ�hQ�gQ�fQ�eP�dP�cP�bP�`O�_O�]O~[NzZNvWNrUMoTMmSMlRMiQLeOLJAIJ(h>!]KKfQOgQN_LKD>I\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\��iQ�tS�yT�{U�YΌeרּ���u�|\�Z'�L�D +|> + ++,!.! "`E6�iY�lZ�o\�q]�s^�^J�va�wb�yc�zd�{e�}foTMqUMsVMuWNwXNyYN{ZN|ZN~[N\O�]O�]O�^O�_O�_O�`O�`O�aO�aP�bP�bP�cP�cP�cP�dP�dP�dP�dP�eP�eP�eP�eP�eP�eP�eP�eP�fP�fP�fP�fP�fP�fP�fP�eP�eP�eP�eP�eP�eP�eP�dP�dP�dP�dP�cP�cP�cP�bP�bP�aP�aO�`O�`O�_O�_O�^O�]O�]O\O~[N|[N{ZNyYNwXN��i��i��i��i��h�hR�fQ�dQ�bP�wfx]O�pdkbtd_m`]OEDG?A;:@.S�.S�.S�.S�.S�/S�/S�/S�/S�/S�/S�/S�/S�Tx�Tx�Tx�Tx�Tx�Tx�Tx�Tx�Ty�/S�Gl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl���܅�܅��Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl���܅��������������������Ei���ր�ր�ր�ր�ր�ր�ր�ր�ր�ր�ր�ր�׀�׀�׀�׀�׀�׀��Bg�Bg�Bg�Bg�Bg�&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Af�Af�%J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%I|%I|%I|%I|%I|%I| ++,YA5jPBpSD�l[�o]�q^�t`�_K�wb�yc�ze�{f�}g�h��i�lSrVMtWMvWNxXNyYN{ZN|[N~[N\O�]O�]O�^O�_O�_O�`O�`O�`O�aP�aP�bP�bP�bP�cP�cP�cP�cP�dP�dP�dP�dP�dP�dP�dP�dP�eP�eP�eP�eP�eP�dP�dP�dP�dP�dP�dP�dP�cP�cP�cP�cP�bP�bP�bP�aP�aO�`O�`O�`O�_O�^O�^O�]O�]O\O~[N|[N{ZNyYNxXN��j��j��j��j��j��j�hS�gS�eR�cR|`Q�sf�oe}jcrd`k_]LCDC=@,,3(4F(4F.S�.S�/S�/S�/S�/S�/S�/S�/S�Tx�Tx�Tx�Tx�Tx�Tx�Tx�Tx�Tx�Ty�Ty�Ty����Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl����Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Ch�Ch��ր�ր�ր�ր��Ei�Ei�Ei���ր�ր�ր�ր�ր�ր�׀�׀�׀��Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Bg�Bg�&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�&J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%I|%I|%I|%I|%I|#5H71O;3V?4iOBoSDsVF�o]{[I^K�`L�bN�dO�{f�}g�~h��j�kT�mU�oV�qW�rWwXNxXNzYN{ZN}[N~[N\O�]O�]O�^O�^O�_O�_O�`O�`O�`O�aO�aP�aP�bP�bP�bP�bP�cP�cP�cP�cP�cP�cP�cP�cP�cP�cP�cP�cP�cP�cP�cP�cP�cP�cP�bP�bP�bP�bP�aP�aP�aO�`O�`O�_O�_O�_O�^O�^O�]O�\O\N~[N|ZN{ZNyYN�oT�oT�oT�nT��l��l��l�jU�iT�hT�fT�cS�vi�rg�nfyidqdah^^HBD?<@)+3OZkMYk(5F(5F(5F/S�/S�/S�/S�/S�Tx�Tx�Tx�Tx�Tx�Tx�Tx�Tx�Ty�Ty�Ty�Ty�Uy���܆�܆�܆��Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl���܆�܆�܆�܆��Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Dh�Dh�Dh�Ch�&K}&K}&K}&K}&K}&K}Ch�Ch�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�&J|&J|&J|&J|&J|&J|Bg�Bg�Bg�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�&J|&J|&J|&J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%J|%I|%I|A99N?;L:2T>4gNBlRD�k\�n^z[J~^L�aN�cO�dP�fQ�gR�hT�jU�lV�nW�pX�rX�sY��q��q��r��r��r��s�z[�z[�z[�{[�{[�{ZœrŒqŒqŒpŒpőo�yV�xV�xU�wT�wT�aP�bP�bP�bP�bP�bP�bP�bP�bP�bP�bP�bP�bP�bP�aP�aP�aP�aP�aO�aO�`O�`O�`O�_O�_O�^O�^O�^O�]O�]O�\O~\N}[N|ZNzYN�pT�pU�pU�pU�oV�oV�nV�mV�lV�kV�jV�hV�fU~cU�uj�qh~mfugdkaad\^E@D98?$(2minffm^blV^lMYk(5F(5F/S�Tx�Tx�Tx�Tx�Tx�Tx�Tx�Tx�Tx�Ty�Ty�Ty�Uy�Uy���܆�܆�܆�܆�܆�܆�܆��Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl���݆�݆�݆�݆�݆�݆�݆�݆�݆��Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�Hl�'K}'K}'K}'K}'K}'K}'K}'K}'K}&K}&K}Ch�Ch�Ch�Ch�Ch�Ch�Ch�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�&J|Cg�Cg�Cg�Cg�Cg�Bg�Bg�Bg�Bg�Bg�Bg�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�&J|&J|&J|&J|&J|&J|&J|%J|%J|%J|%J|%J|%J|%J|Ae�Ae�;GY<68I=:I82Q=4XA6~fZ�j\�m^�p`|]L�`N�cP�eQ�gS�j��l��m��n�oX�qY�rZ�t[��r��s��s��t��t��t�z]�{]�{]�{\�{\�{\�{[ēsērĒrĒqĒpđp�yWĐoÐnÏmÏllk��k�aO�aO�aO�aO�aO�aO�aO�`O�`O�`O�`O�`O�`O�_O�_O�_O�_O�^O�^O�]O�]O�]O\O~\N}[N|ZN��l��l��m�qV�qV�qV�pW�pW�oW��n��n��n��n��n�~n�eW�xl�tk�piykfodcf_`JDG@>C*,5$1MYk�tr~tstmolinadmX_lNZkMZkTx�Tx�Tx�Tx�Tx�Tx�Tx�Ty�Ty�Ty�Uy�Uy�Uy���݆�݆�݆�݆�݆�݆�݆�݆�݆��Hl�Hl�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm���݆�݆�݇�݇�݇�݇�݇�݇�݇�݇�݇�݇��Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�Hm�'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}'K}Dh�Dh�Dh�Dh�Ch�Ch�Ch�Ch�Ch�Ch�Ch�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�&J}&J}&J}Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Cg�Bg�Bg�Bg�Bg�Bg�Bg�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�Bf�&J|&J|&J|&J|&J|&J|&J|&J|&J|&J|Af�Af�Af�Af�;GY;GY;GY1'!D:9N?;N;3]I?zdY�h[�l^�oa�sc�ue�bQ�dR�fT�l��m��n��o��p��q��r��s�v]�w]��u��u��u��u��v�{^�{^�|^�|]�|]�{\�{\�{[�{[�zZ�zZ�yY�yX�xXonn��m��m�uT�uS�tS�tS�tR�sR�sQ�_O�_O�_O�^O�^O�^O�^O�^O�]O�]O�]O�rS�rS�rS��k��l��l��m��m��m��n��n�qW�qX�qX��o��o��p��p��p��p�p�}o{cXv`Vp]U}nishfhaba\_DAF::B$)4 +., 7(8'A1&F4(L8*oXIw]Jpdasfcvhexkg{mi~oj�qll\Xn^Yp`Zpa[qa\rb]rc^sc^sd_ue`wf`xgayhayhayhb�x�y�y�y�y�y�y�~ywgbvfateasd`qd`pc`nb_la_�ut|ssxqrunpZUXVRWROUMMSHIRIC@967-/3'+0(*-ACF?AD;=@#%( +.+>1(B3)B2&F4'E4)gTGlXJs^OzcTzaPqfethgvjhbVTcWUdXVeYWfZXg[Yh\Zi]Zi][j^\�us�ususts~tt~tt}tt|st{stut~tt|sszrsyqrwpquoqsmpqloXTXTQWPOULLSSJEA<:=99757335./2113)+.'),)+.8:="( +"6*#5*">2)>0&A2'C3(I8-^OFbRHfUJjXMq^RwcVzfYfRDfQCdN@zdTqijrjksklrklrklrklqjmpjmpjmojmojmnimmimkhliflscYm`Xg\VbYT^VRE>;A<:>98:77645:873220/0,-/)+.*,/#%( & + +&3#.$-% .% .& /&!,#,#@70A71XNHXNHWNHWNHZRLYQLYQLXQLWQLWPLUOLSNLQMKOLJMJJ0//.-.,,-&(+"(!' + +%' %$#" ! !$ + + + + + +* + ;?E7CU;HY=I[ diff --git a/ext/tk/sample/demos-jp/items.rb b/ext/tk/sample/demos-jp/items.rb new file mode 100644 index 0000000000..84e561f27c --- /dev/null +++ b/ext/tk/sample/demos-jp/items.rb @@ -0,0 +1,372 @@ +# +# canvas item types widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($items_demo) && $items_demo + $items_demo.destroy + $items_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$items_demo = TkToplevel.new {|w| + title("Canvas Item Demonstration") + iconname("Items") + positionWindow(w) +} + +# label ���� +TkLabel.new($items_demo) { + font $font + wraplength '5i' + justify 'left' + text "���Υ�����ɥ��ˤϥ����Х� widget �����äƤ��ꡢ������ˤϥ����Х� widget �����ݡ��Ȥ����͡��ʥ����פΥ����ƥ���㤬���äƤ��ޤ������Τ褦�����Ǥ��ޤ���\n �ܥ���-1 �ɥ�å�:\t�����ƥ��ư������\n �ܥ���-2 �ɥ�å�:\t�����Ƥ�����ʬ�餹��\n �ܥ���-3 �ɥ�å�:\t�ΰ��Ϥ���\n ����ȥ�����-F:\t�ΰ�β��Υ����ƥ��ɽ�����롣" +}.pack('side'=>'top') + +# frame ���� +TkFrame.new($items_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $items_demo + $items_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'items'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +cvs = nil +TkFrame.new($items_demo) {|cf| + # canvas ���� + cvs = TkCanvas.new(cf) {|c| + focus + scrollregion '0c 0c 30c 24c' + width '15c' + height '10c' + relief 'sunken' + borderwidth 2 + + hs = TkScrollbar.new(cf) {|s| + orient 'horizontal' + command proc{|*args| c.xview(*args)} + c.xscrollcommand proc{|first,last| s.set first,last} + } + + vs = TkScrollbar.new(cf) {|s| + command proc{|*args| c.yview(*args)} + c.yscrollcommand proc{|first,last| s.set first,last} + } + + if $tk_version =~ /^4\.[01]/ + hs.pack('side'=>'bottom', 'fill'=>'x') + vs.pack('side'=>'right', 'fill'=>'y') + c.pack('in'=>cf, 'expand'=>'yes', 'fill'=>'both') + + else + c.grid('in'=>cf, 'row'=>0, 'column'=>0, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + vs.grid('row'=>0, 'column'=>1, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + hs.grid('row'=>1, 'column'=>0, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + TkGrid.rowconfigure(cf, 0, 'weight'=>1, 'minsize'=>0) + TkGrid.columnconfigure(cf, 0, 'weight'=>1, 'minsize'=>0) + + end + + } +}.pack('side'=>'top', 'fill'=>'both', 'expand'=>'yes') + +# Display a 3x3 rectangular grid +TkcRectangle.new(cvs, '0c', '0c', '30c', '24c', 'width'=>2) +TkcLine.new(cvs, '0c', '8c', '30c', '8c', 'width'=>2) +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 TkWinfo.depth($root).to_i > 1 + blue = 'DeepSkyBlue3' + red = 'red' + bisque = 'bisque3' + green = 'SeaGreen3' +else + blue = 'black' + red = 'black' + bisque = 'black' + green = 'black' +end + +# tag ���֥������Ȥ����� +$tag_item = TkcGroup.new(cvs) + +# Set up demos within each of the areas of the grid. +TkcText.new(cvs, '5c', '.2c', 'text'=>'�饤��', 'anchor'=>'n') +TkcLine.new(cvs, '1c', '1c', '3c', '1c', '1c', '4c', '3c', '4c', + 'width'=>2, 'fill'=>blue, 'capstyle'=>'butt', + 'join'=>'miter', 'tags'=>$tag_item ) +TkcLine.new(cvs, '4.67c','1c','4.67c','4c', 'arrow'=>'last', 'tags'=>$tag_item) +TkcLine.new(cvs, '6.33c','1c','6.33c','4c', 'arrow'=>'both', 'tags'=>$tag_item) +TkcLine.new(cvs, '5c','6c','9c','6c','9c','1c','8c','1c','8c','4.8c','8.8c', + '4.8c','8.8c','1.2c','8.2c','1.2c','8.2c','4.6c','8.6c','4.6c', + '8.6c','1.4c','8.4c','1.4c','8.4c','4.4c', + 'width'=>3, 'fill'=>red, 'tags'=>$tag_item ) +TkcLine.new(cvs, '1c','5c','7c','5c','7c','7c','9c','7c', 'width'=>'.5c', + 'stipple'=>'@'+[$demo_dir, + 'images','gray25.bmp'].join(File::Separator), + 'arrow'=>'both', 'arrowshape'=>'15 15 7', 'tags'=>$tag_item ) +TkcLine.new(cvs, '1c','7c','1.75c','5.8c','2.5c','7c','3.25c','5.8c','4c','7c', + 'width'=>'.5c', 'capstyle'=>'round', 'join'=>'round', + 'tags'=>$tag_item ) + +TkcText.new(cvs, '15c', '.2c', + 'text'=>'���� (��餫�ˤĤʤ���ľ��)', 'anchor'=>'n') +TkcLine.new(cvs, '11c','4c','11.5c','1c','13.5c','1c','14c','4c', + 'smooth'=>'on', 'fill'=>blue, 'tags'=>$tag_item ) +TkcLine.new(cvs, '15.5c','1c','19.5c','1.5c','15.5c','4.5c','19.5c','4c', + 'smooth'=>'on', 'arrow'=>'both', 'width'=>3, 'tags'=>$tag_item ) +TkcLine.new(cvs, '12c','6c','13.5c','4.5c','16.5c','7.5c','18c','6c', + '16.5c','4.5c','13.5c','7.5c','12c','6c', + 'smooth'=>'on', 'width'=>'3m', 'capstyle'=>'round', + 'stipple'=>'@'+[$demo_dir, + 'images', 'gray25.bmp'].join(File::Separator), + 'fill'=>red, 'tags'=>$tag_item ) + +TkcText.new(cvs, '25c', '.2c', 'text'=>'¿�ѷ�', 'anchor'=>'n') +TkcPolygon.new(cvs, '21c','1.0c','22.5c','1.75c','24c','1.0c','23.25c','2.5c', + '24c','4.0c','22.5c','3.25c','21c','4.0c','21.75c','2.5c', + 'fill'=>'green', 'outline'=>'black', 'width'=>4, + 'tags'=>$tag_item ) +TkcPolygon.new(cvs, '25c','4c','25c','4c','25c','1c','26c','1c','27c','4c', + '28c','1c','29c','1c','29c','4c','29c','4c', + 'fill'=>red, 'smooth'=>'on', 'tags'=> $tag_item) +TkcPolygon.new(cvs, '22c','4.5c','25c','4.5c','25c','6.75c','28c','6.75c', + '28c','5.25c','24c','5.25c','24c','6.0c','26c','6c','26c', + '7.5c','22c','7.5c', + 'stipple'=>'@' + [$demo_dir, + 'images', 'gray25.bmp'].join(File::Separator), + 'outline'=>'black', 'tags'=>$tag_item ) + +TkcText.new(cvs, '5c', '8.2c', 'text'=>'���', 'anchor'=>'n') +TkcRectangle.new(cvs, '1c','9.5c','4c','12.5c', + 'outline'=>red, 'width'=>'3m', 'tags'=>$tag_item) +TkcRectangle.new(cvs, '0.5c','13.5c','4.5c','15.5c', + 'fill'=>green, 'tags'=>$tag_item ) +TkcRectangle.new(cvs, '6c','10c','9c','15c', 'outline'=>'', + 'stipple'=>'@'+[$demo_dir, + 'images','gray25.bmp'].join(File::Separator), + 'fill'=>blue, 'tags'=>$tag_item ) + +TkcText.new(cvs, '15c', '8.2c', 'text'=>'�ʱ�', 'anchor'=>'n') +TkcOval.new(cvs, '11c','9.5c','14c','12.5c', + 'outline'=>red, 'width'=>'3m', 'tags'=>$tag_item) +TkcOval.new(cvs, '10.5c','13.5c','14.5c','15.5c', + 'fill'=>green, 'tags'=>$tag_item ) +TkcOval.new(cvs, '16c','10c','19c','15c', 'outline'=>'', + 'stipple'=>'@'+[$demo_dir, + 'images','gray25.bmp'].join(File::Separator), + 'fill'=>blue, 'tags'=>$tag_item ) + +TkcText.new(cvs, '25c', '8.2c', 'text'=>'�ƥ�����', 'anchor'=>'n') +TkcRectangle.new(cvs, '22.4c','8.9c','22.6c','9.1c') +TkcText.new(cvs, '22.5c', '9c', 'anchor'=>'n', 'font'=>font1, 'width'=>'4c', + 'text'=>'û���ƥ����ȡ���ɥ�åס���·������������ (��)��\ +���ϳƥƥ����ȤΥ����ݥ���Ȥ���', 'tags'=>$tag_item ) +TkcRectangle.new(cvs, '25.4c','10.9c','25.6c','11.1c') +TkcText.new(cvs, '25.5c', '11c', 'anchor'=>'w', 'font'=>font1, 'fill'=>blue, + 'text'=>'�����Ĥ��ιԡ�\n���줾����Ω��\n��·����\n\ +���ƺ�ü����������Ƥ��롣', 'justify'=>'center', 'tags'=>$tag_item ) +TkcRectangle.new(cvs, '24.9c','13.9c','25.1c','14.1c') +if $tk_version =~ /^4\.[01]/ + TkcText.new(cvs, '25c', '14c', 'anchor'=>'c', 'font'=>font2, 'fill'=>red, + 'stipple'=>'@' + [$demo_dir, + 'images', 'grey.5'].join(File::Separator), + 'text'=>'Stippled characters', 'tags'=>$tag_item ) +else + TkcText.new(cvs, '25c', '14c', 'anchor'=>'c', 'font'=>font2, 'fill'=>red, + 'stipple'=>'gray50', 'text'=>'Stippled characters', + 'tags'=>$tag_item ) +end + +TkcText.new(cvs, '5c', '16.2c', 'text'=>'��', 'anchor'=>'n') +TkcArc.new(cvs, '0.5c','17c','7c','20c', 'fill'=>green, 'outline'=>'black', + 'start'=>45, 'extent'=>270, 'style'=>'pieslice', 'tags'=>$tag_item) +#TkcArc.new(cvs, '6.5c','17c','9.5c','20c', 'width'=>'4m', 'style'=>'arc', +# 'outline'=>blue, 'start'=>135, 'extent'=>270, +# 'outlinestipple'=>'@' + ['images', 'grey.25'].join(File::Separator), +# 'tags'=>$tag_item) +TkcArc.new(cvs, '6.5c','17c','9.5c','20c', 'width'=>'4m', 'style'=>'arc', + 'outline'=>blue, 'start'=>135, 'extent'=>270, + 'outlinestipple'=>'@'+[$demo_dir, + 'images','gray25.bmp'].join(File::Separator), + 'tags'=>$tag_item) +TkcArc.new(cvs, '0.5c','20c','9.5c','24c', 'width'=>'4m', 'style'=>'pieslice', + 'fill'=>'', 'outline'=>red, 'start'=>225, 'extent'=>90, + 'tags'=>$tag_item) +TkcArc.new(cvs, '5.5c','20.5c','9.5c','23.5c', 'width'=>'4m', 'style'=>'chord', + 'fill'=>blue, 'outline'=>'', 'start'=>45, 'extent'=>270, + 'tags'=>$tag_item) + +TkcText.new(cvs, '15c', '16.2c', 'text'=>'�ӥåȥޥå�', 'anchor'=>'n') +#TkcBitmap.new(cvs, '13c','20c', +# 'bitmap'=>'@' + ['images', 'face'].join(File::Separator), +# 'tags'=>$tag_item) +TkcBitmap.new(cvs, '13c','20c', + 'bitmap'=>'@' + [$demo_dir, + 'images', 'face.bmp'].join(File::Separator), + 'tags'=>$tag_item) +#TkcBitmap.new(cvs, '17c','18.5c', +# 'bitmap'=>'@' + ['images', 'noletters'].join(File::Separator), +# 'tags'=>$tag_item) +TkcBitmap.new(cvs, '17c','18.5c', + 'bitmap'=>'@' + [$demo_dir, + 'images', 'noletter.bmp'].join(File::Separator), + 'tags'=>$tag_item) +#TkcBitmap.new(cvs, '17c','21.5c', +# 'bitmap'=>'@' + ['images', 'letters'].join(File::Separator), +# 'tags'=>$tag_item) +# ���η����Ǥ��ǽ +TkcBitmap.new(cvs, '17c','21.5c') { + bitmap '@' + [$demo_dir, 'images', 'letters.bmp'].join(File::Separator) + tags $tag_item +} +#TkcBitmap.new(cvs, '17c','21.5c') { +# bitmap '@' + ['images', 'letters'].join(File::Separator) +# tags $tag_item +#} + +TkcText.new(cvs, '25c', '16.2c', 'text'=>'������ɥ�', 'anchor'=>'n') +TkButton.new(cvs) {|b| + text '�����Ƥ�' + command proc{butPress cvs, red} + TkcWindow.new(cvs, '21c','18c', + 'window'=>b, 'anchor'=>'nw', 'tags'=>$tag_item) +} +TkEntry.new(cvs, 'width'=>20, 'relief'=>'sunken') {|e| + insert 'end', '�Խ����Ƥ�' + TkcWindow.new(cvs, '21c','21c', + 'window'=>e, 'anchor'=>'nw', 'tags'=>$tag_item) +} +TkScale.new(cvs, 'from'=>0, 'to'=>100, 'length'=>'6c', 'sliderlength'=>'.4c', + 'width'=>'.5c', 'tickinterval'=>0 ) {|s| + TkcWindow.new(cvs, '28.5c','17.5c', + 'window'=>s, 'anchor'=>'n', 'tags'=>$tag_item) +} +TkcText.new(cvs, '21c', '17.9c', 'text'=>'�ܥ���:', 'anchor'=>'sw') +TkcText.new(cvs, '21c', '20.9c', 'text'=>'����ȥ�:', 'anchor'=>'sw') +TkcText.new(cvs, '28.5c', '17.4c', 'text'=>'��������:', 'anchor'=>'s') + +# Set up event bindings for canvas: +cvs.itembind($tag_item, 'Any-Enter', proc{itemEnter cvs}) +cvs.itembind($tag_item, 'Any-Leave', proc{itemLeave cvs}) +cvs.bind('2', proc{|x,y| cvs.scan_mark x,y}, '%x %y') +cvs.bind('B2-Motion', proc{|x,y| cvs.scan_dragto x,y}, '%x %y') +cvs.bind('3', proc{|x,y| itemMark cvs,x,y}, '%x %y') +cvs.bind('B3-Motion', proc{|x,y| itemStroke cvs,x,y}, '%x %y') +cvs.bind('Control-f', proc{itemsUnderArea cvs}) +cvs.bind('1', proc{|x,y| itemStartDrag cvs,x,y}, '%x %y') +cvs.bind('B1-Motion', proc{|x,y| itemDrag cvs,x,y}, '%x %y') +# Utility methods for highlighting the item under the pointer + +$restoreCmd = nil +def itemEnter (c) + if TkWinfo.depth(c).to_i == 1 + $restoreCmd = nil + return + end + type = c.itemtype('current') + if type == TkcWindow + $restoreCmd = nil + return + end + if type == TkcBitmap + bg = (c.itemconfiginfo('current', 'background'))[4] + $restoreCmd = proc{c.itemconfigure 'current', 'background', bg} + c.itemconfigure 'current', 'background', 'SteelBlue2' + return + end + fill = (c.itemconfiginfo('current', 'fill'))[4] + if (type == TkcRectangle || type == TkcOval || type == TkcArc) && fill == [] + outline = (c.itemconfiginfo('current', 'outline'))[4] + $restoreCmd = proc{c.itemconfigure 'current', 'outline', outline} + c.itemconfigure 'current', 'outline', 'SteelBlue2' + else + $restoreCmd = proc{c.itemconfigure 'current', 'fill', fill} + c.itemconfigure 'current', 'fill', 'SteelBlue2' + end +end + +def itemLeave(c) + $restoreCmd.call if $restoreCmd +end + +# Utility methods for stroking out a rectangle and printing what's +# underneath the rectangle's area. + +def itemMark(c,x,y) + $areaX1 = c.canvasx(x) + $areaY1 = c.canvasy(y) + c.delete 'area' +end + +def itemStroke(c,x,y) + x = c.canvasx(x) + y = c.canvasy(y) + if $areaX1 != x && $areaY1 != y + c.delete 'area' + c.addtag_withtag 'area', TkcRectangle.new(c, $areaX1, $areaY1, x, y, + '-outline', 'black') + $areaX2 = x + $areaY2 = y + end +end + +def itemsUnderArea(c) + area = c.find_withtag('area') + items = [] + c.find_enclosed($areaX1,$areaY1,$areaX2,$areaY2).each{|i| + items.push(i) if i.gettags.include?($tag_item) + } + print "Items enclosed by area: #{items.inspect}\n"; STDOUT.flush + items.clear + c.find_overlapping($areaX1,$areaY1,$areaX2,$areaY2).each{|i| + items.push(i) if i.gettags.include?($tag_item) + } + print "Items overlapping area: #{items.inspect}\n"; STDOUT.flush +end + +$areaX1 = 0 +$areaY1 = 0 +$areaX2 = 0 +$areaY2 = 0 + +# Utility methods to support dragging of items. + +def itemStartDrag(c,x,y) + $lastX = c.canvasx(x) + $lastY = c.canvasy(y) +end + +def itemDrag(c,x,y) + x = c.canvasx(x) + y = c.canvasy(y) + c.move 'current', x - $lastX, y - $lastY + $lastX = x + $lastY = y +end + +# Method that's invoked when the button embedded in the canvas +# is invoked. + +def butPress(w,color) + i = TkcText.new(w, '25c', '18.1c', + 'text'=>'���Ƥ�!!', 'fill'=>color, 'anchor'=>'n') + Tk.after(500, proc{w.delete i}) +end diff --git a/ext/tk/sample/demos-jp/ixset b/ext/tk/sample/demos-jp/ixset new file mode 100644 index 0000000000..5391012cfb --- /dev/null +++ b/ext/tk/sample/demos-jp/ixset @@ -0,0 +1,333 @@ +#!/usr/local/bin/ruby + +# ixset -- +# A nice interface to "xset" to change X server settings +# + +require 'tk' + +class Xsettings + # + # Button actions + # + def quit + @root.destroy + end + + def ok + writesettings + quit + end + + def cancel + readsettings + dispsettings + end + + # apply is just "writesettings" + + + # + # Read current settings + # + def readsettings + xfd = open("|xset q", 'r') + xfd.readlines.each{|line| + fields = line.chomp.strip.split(/\s+/) + case fields[0] + when "auto" + if fields[1] == 'repeat:' + @kbdrep = fields[2] + @w_kbdrep.set(@kbdrep) + @kbdcli = fields[6] + end + + when "bell" + @bellvol = fields[2] + @bellpit = fields[5] + @belldur = fields[8] + + when "acceleration:" + @mouseacc = fields[1] + @mousethr = fields[3] + + when "prefer" + if fields[2] == 'yes' + @screenbla = 'blank' + else + @screenbla = 'noblank' + end + @w_screenbla.set(@screenbla) + + when "timeout:" + @screentim = fields[1] + @screencyc = fields[3] + + end + } + + xfd.close + end + + # + # Write settings into the X server + # + def writesettings + @bellvol = @w_bellvol.get + @bellpit = @w_bellpit.get + @belldur = @w_belldur.get + + @kbdrep = @w_kbdrep.get + if @kbdrep == 'on' + @kbdcli = @w_kbdcli.get + else + @kbdcli = 'off' + end + + @mouseacc = @w_mouseacc.get + @mousethr = @w_mousethr.get + + @screentim = @w_screentim.get + @screencyc = @w_screencyc.get + @screenbla = @w_screenbla.get + + system("xset \ + b #{@bellvol} #{@bellpit} #{@belldur} \ + c #{@kbdcli} \ + r #{@kbdrep} \ + m #{@mouseacc} #{@mousethr} \ + s #{@screentim} #{@screencyc} \ + s #{@screenbla}") + end + + # + # Sends all settings to the window + # + def dispsettings + @w_bellvol.set(@bellvol) + @w_bellpit.set(@bellpit) + @w_belldur.set(@belldur) + + @w_kbdonoff.set(@w_kbdrep.get) + @w_kbdcli.set(@kbdcli) + + @w_mouseacc.set(@mouseacc) + @w_mousethr.set(@mousethr) + + @w_screenblank.set(@w_screenbla.get) + @w_screenpat.set(@w_screenbla.get) + + @w_screentim.set(@screentim) + @w_screencyc.set(@screencyc) + end + + # + # Create all windows, and pack them + # + class LabelEntry + def initialize(parent, text, length) + @frame = TkFrame.new(parent) + TkLabel.new(@frame, 'text'=>text).pack('side'=>'left','expand'=>'y') + @entry = TkEntry.new(@frame, 'width'=>length, 'relief'=>'sunken') { + pack('side'=>'left','expand'=>'y') + } + end + def pack(keys) + @frame.pack(keys) + end + def get + @entry.value + end + def set(value) + @entry.delete(0,'end') + @entry.insert(0, value) + end + end + + def createwindows + win = self + + # + # Buttons + # + buttons = TkFrame.new(@root) {|f| + [ TkButton.new(f, 'command'=>proc{win.ok}, 'text'=>'Ok'), + TkButton.new(f, 'command'=>proc{win.writesettings}, 'text'=>'Apply'), + TkButton.new(f, 'command'=>proc{win.cancel}, 'text'=>'Cancel'), + TkButton.new(f, 'command'=>proc{win.quit}, 'text'=>'Quit') ].each{|b| + b.pack('side'=>'left', 'expand'=>'yes', 'pady'=>5) + } + } + + # + # Bell settings + # + bell = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) + l = TkLabel.new(bell, 'text'=>'Bell Settings') + @w_bellvol = TkScale.new(bell, 'from'=>0, 'to'=>100, 'length'=>200, + 'tickinterval'=>20, 'orient'=>'horizontal', + 'label'=>"Volume (%)") + + f = TkFrame.new(bell) + @w_bellpit = LabelEntry.new(f, "Pitch (Hz)", 6) + @w_bellpit.pack('side'=>'left', 'padx'=>5) + @w_belldur = LabelEntry.new(f, "Duration (ms)", 6) + @w_belldur.pack('side'=>'right', 'padx'=>5) + + l.pack('side'=>'top', 'expand'=>'yes') + @w_bellvol.pack('side'=>'top', 'expand'=>'yes') + f.pack('side'=>'top', 'expand'=>'yes') + + # + # Keyboard settings + # + kbdonoff = nil + kbdcli = nil + kbd = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) + l = TkLabel.new(kbd, 'text'=>'Keyboard Repeat Settings') + f = TkFrame.new(kbd) + @w_kbdonoff = TkCheckButton.new(f, 'text'=>'On', 'relief'=>'flat', + 'onvalue'=>'on', 'offvalue'=>'off', + 'variable'=>@w_kbdrep ) { + def self.set(value) + if value == 'on' + self.select + else + self.deselect + end + end + pack('side'=>'left', 'expand'=>'yes', 'fill'=>'both') + } + @w_kbdcli = TkScale.new(f, 'from'=>0, 'to'=>100, 'length'=>200, + 'tickinterval'=>20, 'orient'=>'horizontal', + 'label'=>'Click Volume (%)') + @w_kbdcli.pack('side'=>'left', 'expand'=>'yes') + l.pack('side'=>'top', 'expand'=>'yes') + f.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'fill'=>'x') + + # + # Mouse settings + # + mouse = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) + l = TkLabel.new(mouse, 'text'=>'Mouse Settings') + f = TkFrame.new(mouse) + @w_mouseacc = LabelEntry.new(f, 'Acceleration', 3) + @w_mouseacc.pack('side'=>'left') + @w_mousethr = LabelEntry.new(f, 'Threshold (pixels)', 3) + @w_mousethr.pack('side'=>'right') + l.pack('side'=>'top') + f.pack('side'=>'top', 'expand'=>'yes') + + # + # Screen Saver settings + # + screen = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2) + l = TkLabel.new(screen, 'text'=>'Screen-saver Settings') + f = TkFrame.new(screen) + ff1 = TkFrame.new(f) + [ @w_screenblank = TkRadioButton.new(ff1, 'text'=>'Blank', + 'relief'=>'flat', + 'variable'=>@w_screenbla, + 'value'=>'blank') { + def self.set(value) + if value == 'blank' + self.select + else + self.deselect + end + end + }, + @w_screenpat = TkRadioButton.new(ff1, 'text'=>'Pattern', + 'relief'=>'flat', + 'variable'=>@w_screenbla, + 'value'=>'noblank') { + def self.set(value) + if value != 'blank' + self.select + else + self.deselect + end + end + } + ].each {|w| w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') } + + ff2 = TkFrame.new(f) + [ @w_screentim = LabelEntry.new(ff2, 'Timeout (s)', 5), + @w_screencyc = LabelEntry.new(ff2, 'Cycle (s)', 5) ].each{|w| + w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'e') + } + + ff1.pack('side'=>'left') + ff2.pack('side'=>'left') + + l.pack('side'=>'top') + f.pack('side'=>'top', 'expand'=>'yes') + + # + # Main window + # + buttons.pack('side'=>'top', 'fill'=>'both') + bell.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') + kbd.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') + mouse.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') + screen.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes') + + # + # Let the user resize our window + # + @root.minsize(10,10) + end + + def initialize + @root = TkRoot.new + + @kbdrep = 'on' + @w_kbdrep = TkVariable.new(@kbdrep) + def @w_kbdrep.get + self.value + end + def @w_kbdrep.set(val) + self.value=val + end + + @kbdcli = 0 + + @bellvol = 100 + @bellpit = 440 + @belldur = 100 + + @mouseacc = "3/1" + @mousethr = 4 + + @screenbla = "blank" + @w_screenbla = TkVariable.new(@screenbla) + def @w_screenbla.get + self.value + end + def @w_screenbla.set(val) + self.value=val + end + + @screentim = 600 + @screencyc = 600 + + # + # Listen what "xset" tells us... + # + readsettings + + # + # Create all windows + # + createwindows + + # + # Write xset parameters + # + dispsettings + end +end + +Xsettings.new + +Tk.mainloop diff --git a/ext/tk/sample/demos-jp/label.rb b/ext/tk/sample/demos-jp/label.rb new file mode 100644 index 0000000000..80ab5f3d8f --- /dev/null +++ b/ext/tk/sample/demos-jp/label.rb @@ -0,0 +1,64 @@ +# +# label widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($label_demo) && $label_demo + $label_demo.destroy + $label_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$label_demo = TkToplevel.new {|w| + title("Label Demonstration") + iconname("label") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($label_demo) { + font $font + wraplength '4i' + justify 'left' + text "���ˤ�5�ĤΥ�٥뤬ɽ������Ƥ��ޤ�����¦�ˤϥƥ����ȥ�٥뤬3�Ĥ��ꡢ��¦�ˤϥӥåȥޥåץ�٥�ȥƥ����ȥ�٥뤬����ޤ�����٥�Ȥ����ΤϤ��ޤ�����ΤǤϤ���ޤ��ʤ��ʤ�į���ʳ�����Ǥ��ʤ�����Ǥ���" +} +msg.pack('side'=>'top') + +# frame ���� +TkFrame.new($label_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $label_demo + $label_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'label'} + }.pack('side'=>'left', 'expand'=>'yes') + +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# label demo �ѥե졼������ +f_left = TkFrame.new($label_demo) +f_right = TkFrame.new($label_demo) +[f_left, f_right].each{|w| w.pack('side'=>'left', 'expand'=>'yes', + 'padx'=>10, 'pady'=>10, 'fill'=>'both')} + +# label ���� +[ TkLabel.new(f_left, 'text'=>'�ǽ�Υ�٥�'), + TkLabel.new(f_left, 'text'=>'2 ���ܡ�����ä��⤭�夬�餻�Ƥߤޤ���', + 'relief'=>'raised'), + TkLabel.new(f_left, 'text'=>'3 ���ܡ�����Ǥ��ޤ� ', 'relief'=>'sunken') +].each{|w| w.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'anchor'=>'w')} + +TkLabel.new(f_right) { + bitmap('@' + [$demo_dir,'images','face.bmp'].join(File::Separator)) + borderwidth 2 + relief 'sunken' +}.pack('side'=>'top') + +TkLabel.new(f_right) { text 'Tcl/Tk ��ͭ��' }.pack('side'=>'top') diff --git a/ext/tk/sample/demos-jp/menu.rb b/ext/tk/sample/demos-jp/menu.rb new file mode 100644 index 0000000000..fb32623cc8 --- /dev/null +++ b/ext/tk/sample/demos-jp/menu.rb @@ -0,0 +1,186 @@ +# +# menus widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($menu_demo) && $menu_demo + $menu_demo.destroy + $menu_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$menu_demo = TkToplevel.new {|w| + title("File Selection Dialogs") + iconname("menu") + positionWindow(w) +} + +# menu frame ���� +$menu_frame = TkFrame.new($menu_demo, 'relief'=>'raised', 'bd'=>2) +$menu_frame.pack('side'=>'top', 'fill'=>'x') + +# label ���� +TkLabel.new($menu_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { + if $tk_platform['platform'] == 'macintosh' + text("���Υ�����ɥ����͡��ʥ�˥塼�ȥ��������ɥ�˥塼���鹽������Ƥ��ޤ���Command-X �����Ϥ���ȡ�X�����ޥ�ɥ��������³����ɽ������Ƥ���ʸ���ʤ�С���������졼����Ȥä����ܵ�ư��Ԥ����Ȥ��Ǥ��ޤ�����˥塼�����桢�Ǹ�Τ�Τϡ����Υ�˥塼�κǽ�ι��ܤ����뤳�Ȥ���Ω�����뤳�Ȥ��Ǥ��ޤ���") + else + text("���Υ�����ɥ����͡��ʥ�˥塼�ȥ��������ɥ�˥塼���鹽������Ƥ��ޤ���Alt-X �����Ϥ���ȡ�X����˥塼�˥�������饤���դ���ɽ������Ƥ���ʸ���ʤ�С������ܡ��ɤ���λ��꤬�Ǥ��ޤ�����������ǥ�˥塼�Υȥ�С������ǽ�Ǥ�����˥塼�����ꤵ�줿�ݤˤϡ����ڡ��������Ǽ¹Ԥ��뤳�Ȥ��Ǥ��ޤ������뤤�ϡ���������饤���դ���ʸ�������Ϥ��뤳�ȤǤ�¹ԤǤ��ޤ�����˥塼�Υ���ȥ꤬��������졼������äƤ�����ϡ����Υ�������졼�������Ϥ��뤳�Ȥǥ�˥塼����ꤹ�뤳�Ȥʤ��˼¹Ԥ��뤳�Ȥ��Ǥ��ޤ�����˥塼�����桢�Ǹ�Τ�Τϡ����Υ�˥塼�κǽ�ι��ܤ����뤳�Ȥ���Ω�����뤳�Ȥ��Ǥ��ޤ���") + end +}.pack('side'=>'top') + +# frame ���� +TkFrame.new($menu_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $menu_demo + $menu_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'menu'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# menu ���� +TkMenubutton.new($menu_frame, 'text'=>'File', 'underline'=>0) {|m| + pack('side'=>'left') + TkMenu.new(m, 'tearoff'=>false) {|file_menu| + m.configure('menu'=>file_menu) + add('command', 'label'=>'���� ...', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"���� ..."���Ф��륢���������������Ƥ��ޤ���'}) + add('command', 'label'=>'����', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"����"���Ф��륢���������������Ƥ��ޤ���'}) + add('command', 'label'=>'��¸', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"��¸"���Ф��륢���������������Ƥ��ޤ���'}) + add('command', 'label'=>'��¸(����) ...', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"��¸(����) ..."���Ф��륢���������������Ƥ��ޤ���'}) + add('separator') + add('command', 'label'=>'�ץ������� ...', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"�ץ������� ..."���Ф��륢���������������Ƥ��ޤ���'}) + add('command', 'label'=>'�ץ��� ...', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"�ץ��� ..."���Ф��륢���������������Ƥ��ޤ���'}) + add('separator') + add('command', 'label'=>'��λ', 'command'=>proc{$menu_demo.destroy}) + } +} + +if $tk_platform['platform'] == 'macintosh' + modifier = 'Command' +elsif $tk_platform['platform'] == 'windows' + modifier = 'Control' +else + modifier = 'Meta' +end + +TkMenubutton.new($menu_frame, 'text'=>'Basic', 'underline'=>0) {|m| + pack('side'=>'left') + TkMenu.new(m, 'tearoff'=>false) {|basic_menu| + m.configure('menu'=>basic_menu) + add('command', 'label'=>'���⤷�ʤ�Ĺ������ȥ�') + ['A','B','C','D','E','F','G'].each{|c| + # add('command', 'label'=>"ʸ�� \"#{c}\" �����", 'underline'=>4, + add('command', 'label'=>"Print letter \"#{c}\" (ʸ�� \"#{c}\" �����)", + 'underline'=>14, 'accelerator'=>"Meta+#{c}", + 'command'=>proc{print c,"\n"}, 'accelerator'=>"#{modifier}+#{c}") + $menu_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"}) + } + } +} + +TkMenubutton.new($menu_frame, 'text'=>'Cascades', 'underline'=>0) {|m| + pack('side'=>'left') + TkMenu.new(m, 'tearoff'=>false) {|cascade_menu| + m.configure('menu'=>cascade_menu) + add('command', 'label'=>'Print hello(����ˤ���)', + 'command'=>proc{print "Hello(����ˤ���)\n"}, + 'accelerator'=>"#{modifier}+H", 'underline'=>6) + $menu_demo.bind("#{modifier}-h", proc{print "Hello(����ˤ���)\n"}) + add('command', 'label'=>'Print goodbye(���褦�ʤ�)', + 'command'=>proc{print "Goodbye(���褦�ʤ�)\n"}, + 'accelerator'=>"#{modifier}+G", 'underline'=>6) + $menu_demo.bind("#{modifier}-g", proc{print "Goodbye(���褦�ʤ�)\n"}) + + TkMenu.new(m, 'tearoff'=>false) {|cascade_check| + cascade_menu.add('cascade', 'label'=>'Check buttons(�����å��ܥ���)', + 'menu'=>cascade_check, 'underline'=>0) + oil = TkVariable.new(0) + add('check', 'label'=>'����������', 'variable'=>oil) + trans = TkVariable.new(0) + add('check', 'label'=>'�ȥ�ߥå��������', 'variable'=>trans) + brakes = TkVariable.new(0) + add('check', 'label'=>'�֥졼������', 'variable'=>brakes) + lights = TkVariable.new(0) + add('check', 'label'=>'�饤������', 'variable'=>lights) + add('separator') + add('command', 'label'=>'���ߤ��ͤ�ɽ��', + 'command'=>proc{showVars($menu_demo, + ['����������', oil], + ['�ȥ�ߥå��������', trans], + ['�֥졼������', brakes], + ['�饤������', lights])} ) + invoke 1 + invoke 3 + } + + TkMenu.new(m, 'tearoff'=>false) {|cascade_radio| + cascade_menu.add('cascade', 'label'=>'Radio buttons(�饸���ܥ���)', + 'menu'=>cascade_radio, 'underline'=>0) + pointSize = TkVariable.new + add('radio', 'label'=>'10 �ݥ����', 'variable'=>pointSize, 'value'=>10) + add('radio', 'label'=>'14 �ݥ����', 'variable'=>pointSize, 'value'=>14) + add('radio', 'label'=>'18 �ݥ����', 'variable'=>pointSize, 'value'=>18) + add('radio', 'label'=>'24 �ݥ����', 'variable'=>pointSize, 'value'=>24) + add('radio', 'label'=>'32 �ݥ����', 'variable'=>pointSize, 'value'=>32) + add('separator') + style = TkVariable.new + add('radio', 'label'=>'�����ޥ�', 'variable'=>style, 'value'=>'roman') + add('radio', 'label'=>'�ܡ����', 'variable'=>style, 'value'=>'bold') + add('radio', 'label'=>'������å�', 'variable'=>style, 'value'=>'italic') + add('separator') + add('command', 'label'=>'���ߤ��ͤ�ɽ��', + 'command'=>proc{showVars($menu_demo, + ['�ݥ���ȥ�����', pointSize], + ['��������', style])} ) + invoke 1 + invoke 7 + } + } +} + +TkMenubutton.new($menu_frame, 'text'=>'Icons', 'underline'=>0) {|m| + pack('side'=>'left') + TkMenu.new(m, 'tearoff'=>false) {|icon_menu| + m.configure('menu'=>icon_menu) + add('command', + 'bitmap'=>'@'+[$demo_dir,'images','pattern.bmp'].join(File::Separator), + 'command'=>proc{TkDialog.new('title'=>'Bitmap Menu Entry', + 'text'=>'�����ʤ���������˥塼�ι��ܤϥƥ����ȤǤϤʤ��ӥåȥޥåפ�ɽ�����Ƥ��ޤ���������ʳ������Ǥ�¾�Υ�˥塼���ܤ��Ѥ��ޤ���', + 'bitmap'=>'', 'default'=>0, + 'buttons'=>'λ��')} ) + ['info', 'questhead', 'error'].each{|icon| + add('command', 'bitmap'=>icon, + 'command'=>proc{print "You invoked the #{icon} bitmap\n"}) + } + } +} + +TkMenubutton.new($menu_frame, 'text'=>'More', 'underline'=>0) {|m| + pack('side'=>'left') + TkMenu.new(m, 'tearoff'=>false) {|more_menu| + m.configure('menu'=>more_menu) + [ '����ȥ�','�̤Υ���ȥ�','���⤷�ʤ�','�ۤȤ�ɲ��⤷�ʤ�', + '������յ������Τ�' ].each{|i| + add('command', 'label'=>i, + 'command'=>proc{print "You invoked \"#{i}\"\n"}) + } + } +} + +TkMenubutton.new($menu_frame, 'text'=>'Colors', 'underline'=>0) {|m| + pack('side'=>'left') + TkMenu.new(m) {|colors_menu| + m.configure('menu'=>colors_menu) + ['red', 'orange', 'yellow', 'green', 'blue'].each{|c| + add('command', 'label'=>c, 'background'=>c, + 'command'=>proc{print "You invoked \"#{c}\"\n"}) + } + } +} diff --git a/ext/tk/sample/demos-jp/menu8x.rb b/ext/tk/sample/demos-jp/menu8x.rb new file mode 100644 index 0000000000..a6d3c5e09e --- /dev/null +++ b/ext/tk/sample/demos-jp/menu8x.rb @@ -0,0 +1,219 @@ +# +# menus widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($menu8x_demo) && $menu8x_demo + $menu8x_demo.destroy + $menu8x_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$menu8x_demo = TkToplevel.new {|w| + title("Menu Demonstration (Tk8.x)") + iconname("menu") + positionWindow(w) +} + +# version check +if $tk_version.to_f < 8.0 + +# label ���� +TkLabel.new($menu8x_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { + text("�¹Ԥ��褦�Ȥ���������ץȤ� Tk8.0 �ʾ�����ѤǤ��뵡ǽ�����Ѥ��Ƥ��뤿�ᡢ���ʤ��� Ruby#{VERSION}/Tk#{$tk_version}#{(Tk::JAPANIZED_TK)? 'jp': ''} �Ǥ�����˼¹ԤǤ��ޤ���äƥǥ�μ¹Ԥ���ߤ��ޤ����������������Υ����ɻ��ȥܥ�������Ȥǡ��¹Ԥ���ߤ��줿������ץȤΥ������Ȥ��뤳�Ȥϲ�ǽ�Ǥ���") +}.pack('side'=>'top') + +# frame ���� +TkFrame.new($menu8x_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $menu8x_demo + $menu8x_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'menu'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +else ; # Tk8.x + +# label ���� +TkLabel.new($menu8x_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { + if $tk_platform['platform'] == 'macintosh' + text("���Υ�����ɥ����͡��ʥ�˥塼�ȥ��������ɥ�˥塼���鹽������Ƥ��ޤ���Command-X �����Ϥ���ȡ�X�����ޥ�ɥ��������³����ɽ������Ƥ���ʸ���ʤ�С���������졼����Ȥä����ܵ�ư��Ԥ����Ȥ��Ǥ��ޤ�����˥塼�����桢�Ǹ�Τ�Τϡ����Υ�˥塼�κǽ�ι��ܤ����뤳�Ȥ���Ω�����뤳�Ȥ��Ǥ��ޤ���") + else + text("���Υ�����ɥ����͡��ʥ�˥塼�ȥ��������ɥ�˥塼���鹽������Ƥ��ޤ���Alt-X �����Ϥ���ȡ�X����˥塼�˥�������饤���դ���ɽ������Ƥ���ʸ���ʤ�С������ܡ��ɤ���λ��꤬�Ǥ��ޤ�����������ǥ�˥塼�Υȥ�С������ǽ�Ǥ�����˥塼�����ꤵ�줿�ݤˤϡ����ڡ��������Ǽ¹Ԥ��뤳�Ȥ��Ǥ��ޤ������뤤�ϡ���������饤���դ���ʸ�������Ϥ��뤳�ȤǤ�¹ԤǤ��ޤ�����˥塼�Υ���ȥ꤬��������졼������äƤ�����ϡ����Υ�������졼�������Ϥ��뤳�Ȥǥ�˥塼����ꤹ�뤳�Ȥʤ��˼¹Ԥ��뤳�Ȥ��Ǥ��ޤ�����˥塼�����桢�Ǹ�Τ�Τϡ����Υ�˥塼�κǽ�ι��ܤ����뤳�Ȥ���Ω�����뤳�Ȥ��Ǥ��ޤ���") + end +}.pack('side'=>'top') + +# ����ɽ�������� +$menu8xstatus = TkVariable.new(" ") +TkFrame.new($menu8x_demo) {|frame| + TkLabel.new(frame, 'textvariable'=>$menu8xstatus, 'relief'=>'sunken', + 'bd'=>1, 'font'=>['Helvetica', '10'], 'anchor'=>'w')\ + .pack('side'=>'left', 'padx'=>2, 'expand'=>'yes', 'fill'=>'both') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>2) + +# frame ���� +TkFrame.new($menu8x_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $menu8x_demo + $menu8x_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'menu'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# menu ���� +TkMenu.new($menu8x_demo, 'tearoff'=>false) {|m| + TkMenu.new(m, 'tearoff'=>false) {|file_menu| + m.add('cascade', 'label'=>'File', 'menu'=>file_menu, 'underline'=>0) + add('command', 'label'=>'���� ...', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"���� ..."���Ф��륢���������������Ƥ��ޤ���'}) + add('command', 'label'=>'����', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"����"���Ф��륢���������������Ƥ��ޤ���'}) + add('command', 'label'=>'��¸', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"��¸"���Ф��륢���������������Ƥ��ޤ���'}) + add('command', 'label'=>'��¸(����) ...', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"��¸(����) ..."���Ф��륢���������������Ƥ��ޤ���'}) + add('separator') + add('command', 'label'=>'�ץ������� ...', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"�ץ������� ..."���Ф��륢���������������Ƥ��ޤ���'}) + add('command', 'label'=>'�ץ��� ...', 'command'=>proc{fail '����ϡ��ǥ�Ǥ��Τ�"�ץ��� ..."���Ф��륢���������������Ƥ��ޤ���'}) + add('separator') + add('command', 'label'=>'��λ', 'command'=>proc{$menu8x_demo.destroy}) + } + + if $tk_platform['platform'] == 'macintosh' + modifier = 'Command' + elsif $tk_platform['platform'] == 'windows' + modifier = 'Control' + else + modifier = 'Meta' + end + + TkMenu.new(m, 'tearoff'=>false) {|basic_menu| + m.add('cascade', 'label'=>'Basic', 'menu'=>basic_menu, 'underline'=>0) + add('command', 'label'=>'���⤷�ʤ�Ĺ������ȥ�') + ['A','B','C','D','E','F','G'].each{|c| + # add('command', 'label'=>"ʸ�� \"#{c}\" �����", 'underline'=>4, + add('command', 'label'=>"Print letter \"#{c}\" (ʸ�� \"#{c}\" �����)", + 'underline'=>14, 'accelerator'=>"Meta+#{c}", + 'command'=>proc{print c,"\n"}, 'accelerator'=>"#{modifier}+#{c}") + $menu8x_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"}) + } + } + + TkMenu.new(m, 'tearoff'=>false) {|cascade_menu| + m.add('cascade', 'label'=>'Cascades', 'menu'=>cascade_menu, 'underline'=>0) + add('command', 'label'=>'Print hello(����ˤ���)', + 'command'=>proc{print "Hello(����ˤ���)\n"}, + 'accelerator'=>"#{modifier}+H", 'underline'=>6) + $menu8x_demo.bind("#{modifier}-h", proc{print "Hello(����ˤ���)\n"}) + add('command', 'label'=>'Print goodbye(���褦�ʤ�)', + 'command'=>proc{print "Goodbye(���褦�ʤ�)\n"}, + 'accelerator'=>"#{modifier}+G", 'underline'=>6) + $menu8x_demo.bind("#{modifier}-g", proc{print "Goodbye(���褦�ʤ�)\n"}) + + TkMenu.new(m, 'tearoff'=>false) {|cascade_check| + cascade_menu.add('cascade', 'label'=>'Check buttons(�����å��ܥ���)', + 'menu'=>cascade_check, 'underline'=>0) + oil = TkVariable.new(0) + add('check', 'label'=>'����������', 'variable'=>oil) + trans = TkVariable.new(0) + add('check', 'label'=>'�ȥ�ߥå��������', 'variable'=>trans) + brakes = TkVariable.new(0) + add('check', 'label'=>'�֥졼������', 'variable'=>brakes) + lights = TkVariable.new(0) + add('check', 'label'=>'�饤������', 'variable'=>lights) + add('separator') + add('command', 'label'=>'���ߤ��ͤ�ɽ��', + 'command'=>proc{showVars($menu8x_demo, + ['����������', oil], + ['�ȥ�ߥå��������', trans], + ['�֥졼������', brakes], + ['�饤������', lights])} ) + invoke 1 + invoke 3 + } + + TkMenu.new(m, 'tearoff'=>false) {|cascade_radio| + cascade_menu.add('cascade', 'label'=>'Radio buttons(�饸���ܥ���)', + 'menu'=>cascade_radio, 'underline'=>0) + pointSize = TkVariable.new + add('radio', 'label'=>'10 �ݥ����', 'variable'=>pointSize, 'value'=>10) + add('radio', 'label'=>'14 �ݥ����', 'variable'=>pointSize, 'value'=>14) + add('radio', 'label'=>'18 �ݥ����', 'variable'=>pointSize, 'value'=>18) + add('radio', 'label'=>'24 �ݥ����', 'variable'=>pointSize, 'value'=>24) + add('radio', 'label'=>'32 �ݥ����', 'variable'=>pointSize, 'value'=>32) + add('separator') + style = TkVariable.new + add('radio', 'label'=>'�����ޥ�', 'variable'=>style, 'value'=>'roman') + add('radio', 'label'=>'�ܡ����', 'variable'=>style, 'value'=>'bold') + add('radio', 'label'=>'������å�', 'variable'=>style, 'value'=>'italic') + add('separator') + add('command', 'label'=>'���ߤ��ͤ�ɽ��', + 'command'=>proc{showVars($menu8x_demo, + ['�ݥ���ȥ�����', pointSize], + ['��������', style])} ) + invoke 1 + invoke 7 + } + } + + TkMenu.new(m, 'tearoff'=>false) {|icon_menu| + m.add('cascade', 'label'=>'Icons', 'menu'=>icon_menu, 'underline'=>0) + add('command', + 'bitmap'=>'@'+[$demo_dir,'images','pattern.bmp'].join(File::Separator), + 'hidemargin'=>1, + 'command'=>proc{TkDialog.new('title'=>'Bitmap Menu Entry', + 'text'=>'�����ʤ���������˥塼�ι��ܤϥƥ����ȤǤϤʤ��ӥåȥޥåפ�ɽ�����Ƥ��ޤ���������ʳ������Ǥ�¾�Υ�˥塼���ܤ��Ѥ��ޤ���', + 'bitmap'=>'', 'default'=>0, + 'buttons'=>'λ��')} ) + ['info', 'questhead', 'error'].each{|icon| + add('command', 'bitmap'=>icon, 'hidemargin'=>1, + 'command'=>proc{print "You invoked the #{icon} bitmap\n"}) + } + + entryconfigure(2, 'columnbreak'=>1) + } + + TkMenu.new(m, 'tearoff'=>false) {|more_menu| + m.add('cascade', 'label'=>'More', 'menu'=>more_menu, 'underline'=>0) + [ '����ȥ�','�̤Υ���ȥ�','���⤷�ʤ�','�ۤȤ�ɲ��⤷�ʤ�', + '������յ������Τ�' ].each{|i| + add('command', 'label'=>i, + 'command'=>proc{print "You invoked \"#{i}\"\n"}) + } + } + + TkMenu.new(m) {|colors_menu| + m.add('cascade', 'label'=>'Colors', 'menu'=>colors_menu, 'underline'=>1) + ['red', 'orange', 'yellow', 'green', 'blue'].each{|c| + add('command', 'label'=>c, 'background'=>c, + 'command'=>proc{print "You invoked \"#{c}\"\n"}) + } + } + + $menu8x_demo.configure('menu'=>m) +} + +TkMenu.bind('<MenuSelect>', + proc{|w| + begin + label = w.entrycget('active', 'label') + rescue + label = ' ' + end + $menu8xstatus.value = label + Tk.update('idletasks') + }, '%W') + +end ; # Tk 8.x diff --git a/ext/tk/sample/demos-jp/menubu.rb b/ext/tk/sample/demos-jp/menubu.rb new file mode 100644 index 0000000000..90056e02c6 --- /dev/null +++ b/ext/tk/sample/demos-jp/menubu.rb @@ -0,0 +1,223 @@ +require "tkcanvas" + +def optionMenu(menubutton, varName, firstValue, *rest) + varName.value = firstValue + configoptions = {'textvariable'=>varName,'indicatoron'=>'on', + 'relief'=>'raised','borderwidth'=>2,'highlightthickness'=>2, + 'anchor'=>'c','direction'=>'flush'} + configoptions.each {|key, value| + menubutton.configure(key, value) + } + menu = TkMenu.new(menubutton) { + tearoff 'off' + add 'radio', 'label'=>firstValue, 'variable'=>varName + } + menubutton.menu(menu) + for i in rest + menu.add 'radio', 'label'=>i, 'variable'=>varName + end + + return menu +end + +if defined?($menubu_demo) && $menubu_demo + $menubu_demo.destroy + $menubu_demo = nil +end + +$menubu_demo = TkToplevel.new {|w| + title("Menu Button Demonstration") + iconname("menubutton") +} + +positionWindow($menubu_demo) + +# version check +if $tk_version.to_f < 8.0 + +# label ���� +TkLabel.new($menubu_demo,'font'=>$font,'wraplength'=>'4i','justify'=>'left') { + text("�¹Ԥ��褦�Ȥ���������ץȤ� Tk8.0 �ʾ�����ѤǤ��뵡ǽ�����Ѥ��Ƥ��뤿�ᡢ���ʤ��� Ruby#{VERSION}/Tk#{$tk_version}#{(Tk::JAPANIZED_TK)? 'jp': ''} �Ǥ�����˼¹ԤǤ��ޤ���äƥǥ�μ¹Ԥ���ߤ��ޤ����������������Υ����ɻ��ȥܥ�������Ȥǡ��¹Ԥ���ߤ��줿������ץȤΥ������Ȥ��뤳�Ȥϲ�ǽ�Ǥ���") +}.pack('side'=>'top') + +# frame ���� +TkFrame.new($menubu_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $menubu_demo + $menubu_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'menu'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +else ; # Tk8.x + +body = TkFrame.new($menubu_demo) +body.pack('expand'=>'yes', 'fill'=>'both') + +below = TkMenubutton.new(body) { + text "Below" + underline 0 + direction 'below' + relief 'raised' +} +belowMenu = TkMenu.new(below) { + tearoff 0 + add 'command', 'label'=>"Below menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Below menu.\""} + add 'command', 'label'=>"Below menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Below menu.\""} +} +below.menu(belowMenu) +below.grid('row'=>0, 'column'=>1, 'sticky'=>'n') + +below = TkMenubutton.new(body) { + text "Below" + underline 0 + direction 'below' + relief 'raised' +} +belowMenu = TkMenu.new(below) { + tearoff 0 + add 'command', 'label'=>"Below menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Below menu.\""} + add 'command', 'label'=>"Below menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Below menu.\""} +} +below.menu(belowMenu) +below.grid('row'=>0, 'column'=>1, 'sticky'=>'n') + +below = TkMenubutton.new(body) { + text "Below" + underline 0 + direction 'below' + relief 'raised' +} +belowMenu = TkMenu.new(below) { + tearoff 0 + add 'command', 'label'=>"Below menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Below menu.\""} + add 'command', 'label'=>"Below menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Below menu.\""} +} +below.menu(belowMenu) +below.grid('row'=>0, 'column'=>1, 'sticky'=>'n') + +right = TkMenubutton.new(body) { + text "Right" + underline 0 + direction 'right' + relief 'raised' +} +rightMenu = TkMenu.new(right) { + tearoff 0 + add 'command', 'label'=>"Right menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Left menu.\""} + add 'command', 'label'=>"Right menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Right menu.\""} +} +right.menu(rightMenu) +right.grid('row'=>1, 'column'=>0, 'sticky'=>'w') + +left = TkMenubutton.new(body) { + text "Left" + underline 0 + direction 'left' + relief 'raised' +} +leftMenu = TkMenu.new(left) { + tearoff 0 + add 'command', 'label'=>"Left menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Left menu.\""} + add 'command', 'label'=>"Left menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Left menu.\""} +} +left.menu(leftMenu) +left.grid('row'=>1, 'column'=>2, 'sticky'=>'e') + +center = TkFrame.new(body) { + grid('row'=>1, 'column'=>1, 'sticky'=>'news') +} + +above = TkMenubutton.new(body) { + text "Above" + underline 0 + direction 'above' + relief 'raised' +} +aboveMenu = TkMenu.new(above) { + tearoff 0 + add 'command', 'label'=>"Above menu: first item", 'command'=>proc {puts "\"You have selected the first item from the Above menu.\""} + add 'command', 'label'=>"Above menu: second item", 'command'=>proc {puts "\"You have selected the second item from the Above menu.\""} +} +above.menu(aboveMenu) +above.grid('row'=>2, 'column'=>1, 'sticky'=>'s') + +center = TkFrame.new(body) { + grid('row'=>1, 'column'=>1, 'sticky'=>'news') +} + +TkFrame.new($menubu_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc { + tmppath = $menubu_demo + $menubu_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc { showCode 'menubu' } + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'expand'=>'yes', 'fill'=>'x', 'pady'=>'2m') + +msg = TkLabel.new(center) { +# font $font + wraplength '4i' + justify 'left' + text "����ϥ�˥塼�ܥ���Υǥ�Ǥ���\"Below\"�Υܥ����\ +���˥�˥塼��Ф���\"Right\"�Υܥ���ϱ��˥�˥塼��Ф��ơ�\ +�ġĤȤʤ�ޤ�������ʸ�Ϥβ��ˤ�2�ĤΥ��ץ�����˥塼������ޤ���\ +1�Ĥ����̤Υ�˥塼�ǡ��⤦1�Ĥ�16���Υѥ�åȤǤ���" +} +msg.pack('side'=>'top', 'padx'=>25, 'pady'=>25) + +TkFrame.new(center) {|f| + menubuttonoptions = TkVariable.new + mbutton = TkMenubutton.new(f) + options = optionMenu(mbutton, menubuttonoptions, + 'one', 'two', 'three') + mbutton.pack('side'=>'left', 'padx'=>25, 'pady'=>25) + paletteColor = TkVariable.new + colors = ['Black','red4','DarkGreen','NavyBlue', 'gray75', + 'Red','Green','Blue','gray50','Yellow','Cyan','Magenta', + 'White','Brown','DarkSeaGreen','DarkViolet'] + colorMenuButton = TkMenubutton.new(f) + m = optionMenu(colorMenuButton, paletteColor, *colors) + topBorderColor = 'gray50' + bottomBorderColor = 'gray75' + for i in 0..15 + image = TkPhotoImage.new('height'=>16, 'width'=>16) + image.put(topBorderColor, 0, 0, 16, 1) + image.put(topBorderColor, 0, 1, 1, 16) + image.put(bottomBorderColor, 0, 15, 16, 16) + image.put(bottomBorderColor, 15, 1, 16, 16) + image.put(colors[i], 1, 1, 15, 15) + + selectimage = TkPhotoImage.new('height'=>16, 'width'=>16) + selectimage.put('Black', 0, 0, 16, 2) + selectimage.put('Black', 0, 2, 2, 16) + selectimage.put('Black', 2, 14, 16, 16) + selectimage.put('Black', 14, 2, 16, 14) + selectimage.put(colors[i], 2, 2, 14, 14) + + m.entryconfigure(i, 'image'=>image, 'selectimage'=>selectimage, 'hidemargin'=>'on') + end + m.configure('tearoff', 'on') + for c in ['Black', 'gray75', 'gray50', 'White'] + m.entryconfigure(c, 'columnbreak'=>1) + end + colorMenuButton.pack('side'=>'left', 'padx'=>25, 'pady'=>25) + pack 'padx'=>25, 'pady'=>25 +} + +end ; # Tk8.x diff --git a/ext/tk/sample/demos-jp/msgbox.rb b/ext/tk/sample/demos-jp/msgbox.rb new file mode 100644 index 0000000000..cf53d70487 --- /dev/null +++ b/ext/tk/sample/demos-jp/msgbox.rb @@ -0,0 +1,85 @@ +# +# message boxes widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($msgbox_demo) && $msgbox_demo + $msgbox_demo.destroy + $msgbox_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$msgbox_demo = TkToplevel.new {|w| + title("Message Box Demonstration") + iconname("messagebox") + positionWindow(w) +} + +# label ���� +TkLabel.new($msgbox_demo, 'font'=>$font, 'wraplength'=>'4i', 'justify'=>'left', + 'text'=>"ɽ�����륢������ȥ�å������ܥå����μ��������Dz������������� \"��å������ܥå���\" �ܥ�����ȡ����ꤷ����å������ܥå�����ɽ������ޤ���").pack('side'=>'top') + +# frame ���� +TkFrame.new($msgbox_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $msgbox_demo + $msgbox_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'msgbox'} + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '��å������ܥå���' + command proc{showMessageBox $msgbox_demo} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +$msgbox_leftframe = TkFrame.new($msgbox_demo) +$msgbox_rightframe = TkFrame.new($msgbox_demo) +$msgbox_leftframe .pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y', + 'pady'=>'.5c', 'padx'=>'.5c') +$msgbox_rightframe.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'y', + 'pady'=>'.5c', 'padx'=>'.5c') + +TkLabel.new($msgbox_leftframe, 'text'=>'��������').pack('side'=>'top') +TkFrame.new($msgbox_leftframe, 'relief'=>'ridge', 'bd'=>1, 'height'=>2)\ +.pack('side'=>'top', 'fill'=>'x', 'expand'=>'no') + +$msgboxIcon = TkVariable.new('info') +['error', 'info', 'question', 'warning'].each {|icon| + TkRadioButton.new($msgbox_leftframe, 'text'=>icon, 'variable'=>$msgboxIcon, + 'relief'=>'flat', 'value'=>icon, 'width'=>16, + 'anchor'=>'w').pack('side'=>'top', 'pady'=>2, + 'anchor'=>'w', 'fill'=>'x') +} + +TkLabel.new($msgbox_rightframe, 'text'=>'����').pack('side'=>'top') +TkFrame.new($msgbox_rightframe, 'relief'=>'ridge', 'bd'=>1, 'height'=>2)\ +.pack('side'=>'top', 'fill'=>'x', 'expand'=>'no') + +$msgboxType = TkVariable.new('ok') +['abortretryignore', 'ok', 'okcancel', + 'retrycancel', 'yesno', 'yesnocancel'].each {|type| + TkRadioButton.new($msgbox_rightframe, 'text'=>type, 'variable'=>$msgboxType, + 'relief'=>'flat', 'value'=>type, 'width'=>16, + 'anchor'=>'w').pack('side'=>'top', 'pady'=>2, + 'anchor'=>'w', 'fill'=>'x') +} + +def showMessageBox(w) + button = Tk.messageBox('icon'=>$msgboxIcon.value, 'type'=>$msgboxType.value, + 'title'=>'Message', 'parent'=>w, + 'message'=>"����� \"#{$msgboxType.value}\" �Ȥ�������Υ�å������ܥå����ǡ�\"#{$msgboxIcon.value}\" �Υ�������ɽ������Ƥ��ޤ���") + + Tk.messageBox('icon'=>'info', 'type'=>'ok', 'parent'=>w, + 'message'=>"���ʤ��� \"#{button}\" ���ޤ����͡�") +end + diff --git a/ext/tk/sample/demos-jp/plot.rb b/ext/tk/sample/demos-jp/plot.rb new file mode 100644 index 0000000000..464dd4441d --- /dev/null +++ b/ext/tk/sample/demos-jp/plot.rb @@ -0,0 +1,118 @@ +# +# 2-D plot widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($plot_demo) && $plot_demo + $plot_demo.destroy + $plot_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$plot_demo = TkToplevel.new {|w| + title("Plot Demonstration") + iconname("Plot") + positionWindow(w) +} + +# label ���� +TkLabel.new($plot_demo, 'font'=>$font, 'wraplength'=>'4i', 'justify'=>'left', + 'text'=>"���Υ�����ɥ��ϴ�ñ��2�����Υץ��åȤ�ޤ�������Х� widget�Ǥ���ɽ�����줿����ޥ����ܥ���1�ǥɥ�å����ƥǡ������뤳�Ȥ��Ǥ��ޤ���"){ + pack('side'=>'top') +} + +# frame ���� +$plot_buttons = TkFrame.new($plot_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $plot_demo + $plot_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'plot'} + }.pack('side'=>'left', 'expand'=>'yes') +} +$plot_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# font ���� +plotFont = '-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' + +# canvas ���� +$plot_canvas = TkCanvas.new($plot_demo,'relief'=>'raised','width'=>450,'height'=>300) +$plot_canvas.pack('side'=>'top', 'fill'=>'x') + +# plot ���� +TkcLine.new($plot_canvas, 100, 250, 400, 250, 'width'=>2) +TkcLine.new($plot_canvas, 100, 250, 100, 50, 'width'=>2) +TkcText.new($plot_canvas, 225, 20, + 'text'=>"��ñ�ʥץ��å�", 'font'=>plotFont, 'fill'=>'brown') + +(0..10).each {|i| + x = 100 + (i * 30) + TkcLine.new($plot_canvas, x, 250, x, 245, 'width'=>2) + TkcText.new($plot_canvas, x, 254, + 'text'=>10*i, 'font'=>plotFont, 'anchor'=>'n') +} +(0..5).each {|i| + y = 250 - (i * 40) + TkcLine.new($plot_canvas, 100, y, 105, y, 'width'=>2) + TkcText.new($plot_canvas, 96, y, + 'text'=>"#{i*50}.0", 'font'=>plotFont, 'anchor'=>'e') +} + +for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]] + x = 100 + (3*xx) + y = 250 - (4*yy)/5 + item = TkcOval.new($plot_canvas, x-6, y-6, x+6, y+6, + 'width'=>1, 'outline'=>'black', 'fill'=>'SkyBlue2') + item.addtag 'point' +end + +$plot_canvas.itembind('point', 'Any-Enter', + proc{$plot_canvas.itemconfigure 'current','fill','red'}) +$plot_canvas.itembind('point', 'Any-Leave', + proc{$plot_canvas.itemconfigure 'current','fill','SkyBlue2'}) +$plot_canvas.itembind('point', '1', + proc{|x,y| plotDown $plot_canvas,x,y}, "%x %y") +$plot_canvas.itembind('point', 'ButtonRelease-1', + proc{$plot_canvas.dtag 'selected'}) +$plot_canvas.bind('B1-Motion', + proc{|x,y| plotMove $plot_canvas,x,y}, "%x %y") + +$plot = {'lastX'=>0, 'lastY'=>0} + +# plotDown -- +# This method is invoked when the mouse is pressed over one of the +# data points. It sets up state to allow the point to be dragged. +# +# Arguments: +# w - The canvas window. +# x, y - The coordinates of the mouse press. + +def plotDown (w, x, y) + w.dtag 'selected' + w.addtag_withtag 'selected', 'current' + w.raise 'current' + $plot['lastX'] = x + $plot['lastY'] = y +end + +# plotMove -- +# This method is invoked during mouse motion events. It drags the +# current item. +# +# Arguments: +# w - The canvas window. +# x, y - The coordinates of the mouse. + +def plotMove (w, x, y) + w.move 'selected', x - $plot['lastX'], y - $plot['lastY'] + $plot['lastX'] = x + $plot['lastY'] = y +end + diff --git a/ext/tk/sample/demos-jp/puzzle.rb b/ext/tk/sample/demos-jp/puzzle.rb new file mode 100644 index 0000000000..7e7aafac2f --- /dev/null +++ b/ext/tk/sample/demos-jp/puzzle.rb @@ -0,0 +1,105 @@ +# +# widet demo 'puzzle' (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($puzzle_demo) && $puzzle_demo + $puzzle_demo.destroy + $puzzle_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$puzzle_demo = TkToplevel.new {|w| + title("15-Puzzle Demonstration") + iconname("15-Puzzle") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($puzzle_demo) { + font $font + wraplength '4i' + justify 'left' + text "����15-�ѥ���ϥܥ����ƤǤ��Ƥ��ޤ��������Ƥ������٤Υԡ�����å�����ȡ����Υԡ��������ζ����Ƥ�����˥��饤�ɤ��ޤ�����������³�����ԡ��������ο��ν�˾夫�鲼�������鱦���¤֤褦�ˤ��Ƥ���������" +} +msg.pack('side'=>'top') + +# frame ���� +TkFrame.new($puzzle_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $puzzle_demo + $puzzle_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'puzzle'} + }.pack('side'=>'left', 'expand'=>'yes') + +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +# +# Special trick: scrollbar widget ���������Ƥ��� trough color ���Ѥ��뤳�Ȥ� +# ������ʬ�Τ���ΰſ����������ꤹ�� +# +s = TkScrollbar.new($puzzle_demo) +base = TkFrame.new($puzzle_demo) { + width 120 + height 120 + borderwidth 2 + relief 'sunken' + bg s['troughcolor'] +} +s.destroy +base.pack('side'=>'top', 'padx'=>'1c', 'pady'=>'1c') + +# proc �Υ������פ��Ĥ��뤿�ᡤproc ������åɤ��Ѱ� +# �������Ƥ����ͤС��롼������ͤ��Ѳ����� num �αƶ�������� +# puzzleSwitch ���� 2 �������Ѳ����Ƥ��ޤ��������̤�ˤϤʤ�ʤ��� +def def_puzzleswitch_proc(w, num) + proc{puzzleSwitch w, num} +end + +$xpos = {} +$ypos = {} +order = [3,1,6,2,5,7,15,13,4,11,8,9,14,10,12] +(0..14).each{|i| + num = order[i] + $xpos[num] = (i % 4) * 0.25 + $ypos[num] = (i / 4) * 0.25 + TkButton.new(base) {|w| + relief 'raised' + text num + highlightthickness 0 + command def_puzzleswitch_proc(w, num) + }.place('relx'=>$xpos[num], 'rely'=>$ypos[num], + 'relwidth'=>0.25, 'relheight'=>0.25) +} +$xpos['space'] = 0.75 +$ypos['space'] = 0.75 + +############ +def puzzleSwitch(w, num) + if ( ($ypos[num] >= ($ypos['space'] - 0.01)) \ + && ($ypos[num] <= ($ypos['space'] + 0.01)) \ + && ($xpos[num] >= ($xpos['space'] - 0.26)) \ + && ($xpos[num] <= ($xpos['space'] + 0.26))) \ + || (($xpos[num] >= ($xpos['space'] - 0.01)) \ + && ($xpos[num] <= ($xpos['space'] + 0.01)) \ + && ($ypos[num] >= ($ypos['space'] - 0.26)) \ + && ($ypos[num] <= ($ypos['space'] + 0.26))) + tmp = $xpos['space'] + $xpos['space'] = $xpos[num] + $xpos[num] = tmp + tmp = $ypos['space'] + $ypos['space'] = $ypos[num] + $ypos[num] = tmp + w.place('relx'=>$xpos[num], 'rely'=>$ypos[num]) + end +end + diff --git a/ext/tk/sample/demos-jp/radio.rb b/ext/tk/sample/demos-jp/radio.rb new file mode 100644 index 0000000000..871503029e --- /dev/null +++ b/ext/tk/sample/demos-jp/radio.rb @@ -0,0 +1,80 @@ +# +# radiobutton widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($radio_demo) && $radio_demo + $radio_demo.destroy + $radio_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$radio_demo = TkToplevel.new {|w| + title("Radiobutton Demonstration") + iconname("radio") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($radio_demo) { + font $font + wraplength '4i' + justify 'left' + text "���ˤ�2�ĤΥ饸���ܥ��롼�פ�ɽ������Ƥ��ޤ����ܥ����å�����ȡ����Υܥ�����������Υ��롼�פ��������ޤ����ƥ��롼�פ��Ф��Ƥ��Υ��롼�פ���ΤɤΥܥ�������Ƥ��뤫���ѿ���������Ƥ��Ƥ��ޤ������ߤ��ѿ����ͤ�ˤϡ��ѿ����ȡץܥ����å����Ƥ���������" +} +msg.pack('side'=>'top') + +# �ѿ����� +size = TkVariable.new +color = TkVariable.new + +# frame ���� +TkFrame.new($radio_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $radio_demo + $radio_demo = nil + $showVarsWin[tmppath.path] = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'radio'} + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�ѿ�����' + command proc{ + showVars($radio_demo, ['size', size], ['color', color]) + } + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +f_left = TkFrame.new($radio_demo) +f_right = TkFrame.new($radio_demo) +f_left.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') +f_right.pack('side'=>'left', 'expand'=>'yes', 'padx'=>'.5c', 'pady'=>'.5c') + +# radiobutton ���� +[10, 12, 18, 24].each {|sz| + TkRadioButton.new(f_left) { + text "�ݥ���ȥ����� #{sz}" + variable size + relief 'flat' + value sz + }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') +} + +['��', '��', '��', '��', '��', '��'].each {|col| + TkRadioButton.new(f_right) { + text col + variable color + relief 'flat' + value col.downcase + }.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') +} + diff --git a/ext/tk/sample/demos-jp/rmt b/ext/tk/sample/demos-jp/rmt new file mode 100644 index 0000000000..64583d714e --- /dev/null +++ b/ext/tk/sample/demos-jp/rmt @@ -0,0 +1,265 @@ +#!/usr/local/bin/ruby + +# rmt -- +# This script implements a simple remote-control mechanism for +# Tk applications. It allows you to select an application and +# then type commands to that application. + +require 'tk' + +class Rmt + def initialize(parent=nil) + win = self + + unless parent + parent = TkRoot.new + end + root = TkWinfo.toplevel(parent) + root.minsize(1,1) + + # The instance variable below keeps track of the remote application + # that we're sending to. If it's an empty string then we execute + # the commands locally. + @app = 'local' + @mode = 'Ruby' + + # The instance variable below keeps track of whether we're in the + # middle of executing a command entered via the text. + @executing = 0 + + # The instance variable below keeps track of the last command executed, + # so it can be re-executed in response to !! commands. + @lastCommand = "" + + # Create menu bar. Arrange to recreate all the information in the + # applications sub-menu whenever it is cascaded to. + + TkFrame.new(root, 'relief'=>'raised', 'bd'=>2) {|f| + pack('side'=>'top', 'fill'=>'x') + TkMenubutton.new(f, 'text'=>'File', 'underline'=>0) {|mb| + TkMenu.new(mb) {|mf| + mb.menu(mf) + TkMenu.new(mf) {|ma| + postcommand proc{win.fillAppsMenu ma} + mf.add('cascade', 'label'=>'Select Application', + 'menu'=>ma, 'underline'=>0) + } + add('command', 'label'=>'Quit', + 'command'=>proc{root.destroy}, 'underline'=>0) + } + pack('side'=>'left') + } + } + + # Create text window and scrollbar. + + @txt = TkText.new(root, 'relief'=>'sunken', 'bd'=>2, 'setgrid'=>true) {|t| + TkScrollbar.new(root, 'command'=>proc{|*args| t.yview *args}) { + pack('side'=>'right', 'fill'=>'both') + } + pack('side'=>'left') + } + + @promptEnd = TkTextMark.new(@txt, 'insert') + + # Create a binding to forward commands to the target application, + # plus modify many of the built-in bindings so that only information + # in the current command can be deleted (can still set the cursor + # earlier in the text and select and insert; just can't delete). + + @txt.bindtags([@txt, TkText, root, 'all']) + @txt.bind('Return', proc{ + @txt.set_insert('end - 1c') + @txt.insert('insert', "\n") + win.invoke + Tk.callback_break + }) + @txt.bind('Delete', proc{ + begin + @txt.tag_remove('sel', 'sel.first', @promptEnd) + rescue + end + if @txt.tag_nextrange('sel', '1.0', 'end') == [] + if @txt.compare('insert', '<', @promptEnd) + Tk.callback_break + end + end + }) + @txt.bind('BackSpace', proc{ + begin + @txt.tag_remove('sel', 'sel.first', @promptEnd) + rescue + end + if @txt.tag_nextrange('sel', '1.0', 'end') == [] + if @txt.compare('insert', '<', @promptEnd) + Tk.callback_break + end + end + }) + @txt.bind('Control-d', proc{ + if @txt.compare('insert', '<', @promptEnd) + Tk.callback_break + end + }) + @txt.bind('Control-k', proc{ + if @txt.compare('insert', '<', @promptEnd) + @txt.set_insert(@promptEnd) + end + }) + @txt.bind('Control-t', proc{ + if @txt.compare('insert', '<', @promptEnd) + Tk.callback_break + end + }) + @txt.bind('Meta-d', proc{ + if @txt.compare('insert', '<', @promptEnd) + Tk.callback_break + end + }) + @txt.bind('Meta-BackSpace', proc{ + if @txt.compare('insert', '<=', @promptEnd) + Tk.callback_break + end + }) + @txt.bind('Control-h', proc{ + if @txt.compare('insert', '<=', @promptEnd) + Tk.callback_break + end + }) + + @txt.tag_configure('bold', 'font'=>['Courier', 12, 'bold']) + + @app = Tk.appname('rmt') + if (@app =~ /^rmt(.*)$/) + root.title("Tk Remote Controller#{$1}") + root.iconname("Tk Remote#{$1}") + end + prompt + @txt.focus + #@app = TkWinfo.appname(TkRoot.new) + end + + def tkTextInsert(w,s) + return if s == "" + begin + if w.compare('sel.first','<=','insert') \ + && w.compare('sel.last','>=','insert') + w.tag_remove('sel', 'sel.first', @promptEnd) + w.delete('sel.first', 'sel.last') + end + rescue + end + w.insert('insert', s) + w.see('insert') + end + + # The method below is used to print out a prompt at the + # insertion point (which should be at the beginning of a line + # right now). + + def prompt + @txt.insert('insert', "#{@app}: ") + @promptEnd.set('insert') + @promptEnd.gravity = 'left' + @txt.tag_add('bold', "#{@promptEnd.path} linestart", @promptEnd) + end + + # The method below executes a command (it takes everything on the + # current line after the prompt and either sends it to the remote + # application or executes it locally, depending on "app". + + def invoke + cmd = @txt.get(@promptEnd, 'insert') + @executing += 1 + case (@mode) + when 'Tcl' + if Tk.info('complete', cmd) + if (cmd == "!!\n") + cmd = @lastCommand + else + @lastCommand = cmd + end + begin + msg = Tk.appsend(@app, false, cmd) + rescue + msg = "Error: #{$!}" + end + @txt.insert('insert', msg + "\n") if msg != "" + prompt + @promptEnd.set('insert') + end + + when 'Ruby' + if (cmd == "!!\n") + cmd = @lastCommand + end + complete = true + begin + eval("proc{#{cmd}}") + rescue + complete = false + end + if complete + @lastCommand = cmd + begin +# msg = Tk.appsend(@app, false, +# 'ruby', +# '"(' + cmd.gsub(/[][$"]/, '\\\\\&') + ').to_s"') + msg = Tk.rb_appsend(@app, false, cmd) + rescue + msg = "Error: #{$!}" + end + @txt.insert('insert', msg + "\n") if msg != "" + prompt + @promptEnd.set('insert') + end + end + + @executing -= 1 + @txt.yview_pickplace('insert') + end + + # The following method is invoked to change the application that + # we're talking to. It also updates the prompt for the current + # command, unless we're in the middle of executing a command from + # the text item (in which case a new prompt is about to be output + # so there's no need to change the old one). + + def newApp(appName, mode) + @app = appName + @mode = mode + if @executing == 0 + @promptEnd.gravity = 'right' + @txt.delete("#{@promptEnd.path} linestart", @promptEnd) + @txt.insert(@promptEnd, "#{appName}: ") + @txt.tag_add('bold', "#{@promptEnd.path} linestart", @promptEnd) + @promptEnd.gravity = 'left' + end + end + + # The method below will fill in the applications sub-menu with a list + # of all the applications that currently exist. + + def fillAppsMenu(menu) + win = self + begin + menu.delete(0,'last') + rescue + end + TkWinfo.interps.sort.each{|ip| + if Tk.appsend(ip, false, 'info commands ruby') == "" + mode = 'Tcl' + else + mode = 'Ruby' + end + menu.add('command', 'label'=>format("%s (#{mode}/Tk)", ip), + 'command'=>proc{win.newApp ip, mode}) + } + menu.add('command', 'label'=>format("local (Ruby/Tk)"), + 'command'=>proc{win.newApp 'local', 'Ruby'}) + end +end + +Rmt.new + +Tk.mainloop diff --git a/ext/tk/sample/demos-jp/rolodex b/ext/tk/sample/demos-jp/rolodex new file mode 100644 index 0000000000..9ed1f6d7d1 --- /dev/null +++ b/ext/tk/sample/demos-jp/rolodex @@ -0,0 +1,320 @@ +#!/usr/local/bin/ruby +# +# rolodex -- +# This script is a part of Tom LaStrange's rolodex +# +# Copyright (C) 1998 by Takaaki Tateishi <[email protected]> +# Time-stamp: "98/07/20 12:00:02 ttate" +# + +require "tk" + + +def show_help(topic,x=0,y=0) + if( topic.is_a?(TkWindow) ) + w = TkWinfo.containing(x,y) + if( TkWinfo.exist?(w) ) + topic = w + end + end + + if( $helpTopics.include?(topic) ) + msg = $helpTopics[topic] + else + msg = "Sorry, but no help is available for this topic" + end + TkDialog.new("title"=>"Rolodex Help", + "message"=>"Information on #{topic}:\n\n#{msg}", + "default_button"=>0, + "buttons"=>["OK"]) +end + +def fillCard + clearAction + $root.frame.entry[1].insert(0,"Takaaki Tateishi") + $root.frame.entry[2].insert(0,"Japan Advanced Institute of Science and Techonology") + $root.frame.entry[3].insert(0,"1-1 Asahidai, Tatsunokuchi") + $root.frame.entry[4].insert(0,"Ishikawa 923-1292, Japan") + $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"=>"This is a dummy file selection dialog box.\n", + "default_button"=>0, + "buttons"=>["OK"]) + STDERR.print "dummy file name\n" +end + +def deleteAction + result = TkDialog.new("title"=>"Confirm Action", + "message"=>"Are you sure?", + "default_button"=>0, + "buttons"=>["Cancel"]) + if( result.value == 0 ) + clearAction + end +end + + +class RolodexFrame < TkFrame + attr_reader :entry, :label + + LABEL = ["","Name:","Address:","","","Home Phone:","Work Phone:","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") + @entry[i] = TkEntry.new(@i[i], + "width"=>30, + "relief"=>"sunken") + @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" => "Clear") + @add = TkButton.new(self, + "text" => "Add") + @search = TkButton.new(self, + "text" => "Search") + @delete = TkButton.new(self, + "text" => "Delete") + 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"=>"File", + "underline"=>0) + @file_menu = TkMenu.new(@file) + @file_menu.add("command", + "label" => "Load ...", + "command" => proc{fileAction}, + "underline" => 0) + @file_menu.add("command", + "label" => "Exit", + "command" => proc{$root.destroy}, + "underline" => 0) + @file.menu(@file_menu) + @file.pack("side"=>"left") + + @help = TkMenubutton.new(self, + "text"=>"Help", + "underline"=>0) + @help_menu = TkMenu.new(@help) + @help_menu.add("command", + "label"=>"On Context...", + "command"=>proc{show_help("context")}, + "underline"=>3) + @help_menu.add("command", + "label"=>"On Help...", + "command"=>proc{show_help("help")}, + "underline"=>3) + @help_menu.add("command", + "label"=>"On Window...", + "command"=>proc{show_help("window")}, + "underline"=>3) + @help_menu.add("command", + "label"=>"On Keys...", + "command"=>proc{show_help("keys")}, + "underline"=>3) + @help_menu.add("command", + "label"=>"On version...", + "command"=>proc{show_help("version")}, + "underline"=>3) + @help.menu(@help_menu) + @help.pack("side"=>"right") + end +end + +class Rolodex < TkRoot + attr_reader :frame, :buttons, :menu + + def initialize + super + @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"=>"Clear Ctrl+C") +$root.bind("Control-c",proc{clearAction}) + +$root.buttons.add.configure("text"=>"Add Ctrl+A") +$root.bind("Control-a",proc{addAction}) + +$root.buttons.search.configure("text"=>"Search Ctrl+S") +$root.bind("Control-s",proc{addAction; fillCard}) + +$root.buttons.delete.configure("text"=>"Delete... Ctrl+D") +$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] = <<EOF +This is the "file" menu. It can be used to invoke\ +some overall operations on the rolodex applications,\ +such as loading a file or exiting. +EOF + +$helpTopics[$root.menu.file_menu.index(0)] = <<EOF +The "Load" entry in the "File" menu posts a dialog box\ +that you can use to select a rolodex file +EOF + +$helpTopics[$root.menu.file_menu.index(1)] = <<EOF +The "Exit" entry in the "File" menu causes the rolodex\ +application to terminate +EOF + +$helpTopics[$root.frame.entry[1]] = <<EOF +In this field of the rolodex entry you should\ +type the person's name +EOF + +$helpTopics[$root.frame.entry[2]] = <<EOF +In this field of the rolodex entry you should\ +type the first line of the person's address +EOF + +$helpTopics[$root.frame.entry[3]] = <<EOF +In this field of the rolodex entry you should\ +type the second line of the person's address +EOF + +$helpTopics[$root.frame.entry[4]] = <<EOF +In this field of the rolodex entry you should\ +type the third line of the person's address +EOF + +$helpTopics[$root.frame.entry[5]] = <<EOF +In this field of the rolodex entry you should\ +type the person's home phone number, or "private"\ +if the person doesn't want his or he number publicized +EOF + +$helpTopics[$root.frame.entry[6]] = <<EOF +In this field of the rolodex entry you should\ +type the person's work phone number +EOF + +$helpTopics[$root.frame.entry[7]] = <<EOF +In this field of the rolodex entry you should\ +type the phone number for the person's FAX machine +EOF + +$helpTopics["context"] = <<EOF +Unfortunately, this application doesn't support context-sensitive\ +help in the usual way, because when this demo was written Ruby/Tk\ +didn't have a grab mechanism and this is needed for context-sensitive\ +help. Instead, you can achive much the same effect by simply moving\ +the mouse over the window you're curious about and pressing the\ +Help or F1 keys. You can do this anytime. +EOF + +$helpTopics["help"] = <<EOF +This application provides only very crude help. Besides the\ +entries in this menu, you can get help on individual windows\ +by moving the mouse cursor over the window and pressing the\ +Help or F1 keys. +EOF + +$helpTopics["window"] = <<EOF +This window is a dummy rolodex application created as part of\ +Tom LaStrange's toolkit benchmark. It doesn't really do anything\ +useful except to demonstrate a few features of the Ruby/Tk. +EOF + +$helpTopics["keys"] = <<EOF +The following accelerator keys are defined for this application\ +(in addition to those already available for the entry windows): +Ctrl+A: Add +Ctrl+C: Clear +Ctrl+D: Delete +Ctrl+F: Enter file name +Ctrl+Q: Exit application (quit) +Ctrl+S: Search (dummy operation) +EOF + +$helpTopics["version"] = <<EOF +This is version 1.0. +EOF + +Tk.mainloop diff --git a/ext/tk/sample/demos-jp/rolodex-j b/ext/tk/sample/demos-jp/rolodex-j new file mode 100644 index 0000000000..170f7bb96b --- /dev/null +++ b/ext/tk/sample/demos-jp/rolodex-j @@ -0,0 +1,311 @@ +#!/usr/local/bin/ruby +# +# rolodex -- +# ���Υ�����ץȤ� Tom LaStrange �� rolodex �ΰ����Ǥ��� +# +# Copyright (C) 1998 by Takaaki Tateishi <[email protected]> +# Time-stamp: "98/07/20 12:00:36 ttate" +# + +require "tk" + +# UTF8�ؤ��Ѵ���Ԥʤ��� + +$encoding = "euc-jp" +def j(str) + Tk.toUTF8(str,$encoding) +end + + +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"=>j("��#{topic}��\n\n#{msg}"), + "default_button"=>0, + "buttons"=>["OK"]) +end + +def fillCard + clearAction + $root.frame.entry[1].insert(0,j("Ω�� ����")) + $root.frame.entry[2].insert(0,j("923-1292 ���")) + $root.frame.entry[3].insert(0,j("ä��Į ���� 1-1")) + $root.frame.entry[4].insert(0,j("��Φ��ü�ʳص�����ر����")) + $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], + Tk.fromUTF8($root.frame.entry[i].value,$encoding)) + 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"=>j("����ϥե�������������������Υ��ߡ��Ǥ���\n"), + "default_button"=>0, + "buttons"=>["OK"]) + STDERR.print "dummy file name\n" +end + +def deleteAction + result = TkDialog.new("title"=>"Confirm Action", + "message"=>j("��������Ǥ�����"), + "default_button"=>0, + "buttons"=>[j("�����")]) + 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"=>j(LABEL[i]), + "anchor"=>"e") + @entry[i] = TkEntry.new(@i[i], + "width"=>30, + "relief"=>"sunken") + @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" => j("���ꥢ��")) + @add = TkButton.new(self, + "text" => j("�ɲ�")) + @search = TkButton.new(self, + "text" => j("����")) + @delete = TkButton.new(self, + "text" => j("�õ�")) + 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"=>j("�ե�����"), + "underline"=>0) + @file_menu = TkMenu.new(@file) + @file_menu.add("command", + "label" => j("�ɤ߹��� ..."), + "command" => proc{fileAction}, + "underline" => 0) + @file_menu.add("command", + "label" => j("��λ"), + "command" => proc{$root.destroy}, + "underline" => 0) + @file.menu(@file_menu) + @file.pack("side"=>"left") + + @help = TkMenubutton.new(self, + "text"=>j("�إ��"), + "underline"=>0) + @help_menu = TkMenu.new(@help) + @help_menu.add("command", + "label"=>j("����ƥ����ȤˤĤ���"), + "command"=>proc{show_help("����ƥ�����")}, + "underline"=>3) + @help_menu.add("command", + "label"=>j("�إ�פˤĤ���"), + "command"=>proc{show_help("�إ��")}, + "underline"=>3) + @help_menu.add("command", + "label"=>j("������ɥ��ˤĤ���"), + "command"=>proc{show_help("������ɥ�")}, + "underline"=>3) + @help_menu.add("command", + "label"=>j("�������ˤĤ���"), + "command"=>proc{show_help("�������")}, + "underline"=>3) + @help_menu.add("command", + "label"=>j("�С���������"), + "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 + super + @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"=>j("���ꥢ�� Ctrl+C")) +$root.bind("Control-c",proc{clearAction}) + +$root.buttons.add.configure("text"=>j("�ɲ� Ctrl+A")) +$root.bind("Control-a",proc{addAction}) + +$root.buttons.search.configure("text"=>j("���� Ctrl+S")) +$root.bind("Control-s",proc{addAction; fillCard}) + +$root.buttons.delete.configure("text"=>j("�õ� Ctrl+D")) +$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] = <<EOF +����ϡ֥ե�����ץ�˥塼�Ǥ������ɤ߹��ߡפ�ֽ�λ�פʤɤ� +�Ԥʤ����Ȥ��Ǥ��ޤ��� +EOF + +$helpTopics[$root.menu.file_menu.index(0)] = <<EOF +�ե�������ɤ߹��ߤ�Ԥʤ��Ȥ��˻Ȥ��ޤ��� +EOF + +$helpTopics[$root.menu.file_menu.index(1)] = <<EOF +���ץꥱ��������λ����Ȥ��˻Ȥ��ޤ��� +EOF + +$helpTopics[$root.frame.entry[1]] = <<EOF +̾���������륨��ȥ�Ǥ��� +EOF + +$helpTopics[$root.frame.entry[2]] = <<EOF +����������륨��ȥ�Ǥ��� +EOF + +$helpTopics[$root.frame.entry[3]] = <<EOF +����������륨��ȥ�Ǥ��� +EOF + +$helpTopics[$root.frame.entry[4]] = <<EOF +����������륨��ȥ�Ǥ��� +EOF + +$helpTopics[$root.frame.entry[5]] = <<EOF +����������ֹ�������륨��ȥ�Ǥ�������\ +�������ʤ��Ȥ��� private �ȵ������ޤ��� +EOF + +$helpTopics[$root.frame.entry[6]] = <<EOF +��Ҥ������ֹ�������륨��ȥ�Ǥ��� +EOF + +$helpTopics[$root.frame.entry[7]] = <<EOF +FAX�ֹ�������륨��ȥ�Ǥ��� +EOF + +$helpTopics["����ƥ�����"] = <<EOF +Ruby/Tk�Ǥ�grab�ε������ʤ����ᤳ�Υ��ץꥱ�������Ǥ�\ +����ƥ����ȥإ�פϥ��ݡ��Ȥ���Ƥ��ޤ��� +������Ʊ���褦�ʸ��̤�bind�ȥޥ����ΰ��֤�Wedget���Τ�\ +���Ȥ����뤳�Ȥ��Ǥ��ޤ��� +EOF + +$helpTopics["�إ��"] = <<EOF +�ޥ�������ɥ��ˤ��碌��F1���������Ȥˤ�ä�\ +���Υإ�פ뤳�Ȥ��Ǥ��ޤ��� +EOF + +$helpTopics["������ɥ�"] = <<EOF +���Υ�����ɥ��ϥ��ߡ��Ǥ��� +EOF + +$helpTopics["�������"] = <<EOF +Ctrl+A: �ɲ� +Ctrl+C: ���ꥢ�� +Ctrl+D: �õ� +Ctrl+F: �ե��������� +Ctrl+Q: ��λ +Ctrl+S: ���� +EOF + +$helpTopics["�С���������"] = <<EOF +�С������� 1.0 �Ǥ��� +EOF + +Tk.mainloop diff --git a/ext/tk/sample/demos-jp/ruler.rb b/ext/tk/sample/demos-jp/ruler.rb new file mode 100644 index 0000000000..d1a7818be4 --- /dev/null +++ b/ext/tk/sample/demos-jp/ruler.rb @@ -0,0 +1,197 @@ +# +# ruler widget demo (called by 'widget') +# + +# rulerMkTab -- +# This method creates a new triangular polygon in a canvas to +# represent a tab stop. +# +# Arguments: +# c - The canvas window. +# x, y - Coordinates at which to create the tab stop. + +def rulerMkTab(c,x,y) + v = $demo_rulerInfo + TkcPolygon.new(c, x, y, x+v.size, y+v.size, x-v.size, y+v.size) +end + +# toplevel widget ��¸�ߤ���к������ +if defined?($ruler_demo) && $ruler_demo + $ruler_demo.destroy + $ruler_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$ruler_demo = TkToplevel.new {|w| + title("Ruler Demonstration") + iconname("ruler") + positionWindow(w) +} + +# label ���� +TkLabel.new($ruler_demo, 'font'=>$font, 'wraplength'=>'5i', 'justify'=>'left', + 'text'=>"���Υ����Х�widget�ϥ롼�顼���Ϸ��Ǥ����롼�顼�α��ˤ���Τϥ��֥��ȥåפΰ�ͤǡ������������ĥ�äƤ��뤳�Ȥˤ�äƥ��֥��ȥåפ��뤳�Ȥ��Ǥ��ޤ����ޤ������Ǥˤ��륿�֥��ȥåפ�ư�������Ȥ�Ǥ��ޤ������֥��ȥåפ�����ޤ��ϲ����ˤ������ɽ�������ޤǥɥ�å�����ȡ��ޥ����ܥ����Υ�������ˤ��Υ��֥��ȥåפϾä��ޤ���"){ + pack('side'=>'top') +} + +# frame ���� +$ruler_buttons = TkFrame.new($ruler_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $ruler_demo + $ruler_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'ruler'} + }.pack('side'=>'left', 'expand'=>'yes') +} +$ruler_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# canvas ���� +$ruler_canvas = TkCanvas.new($ruler_demo, 'width'=>'14.8c', 'height'=>'2.5c') +$ruler_canvas.pack('side'=>'top', 'fill'=>'x') + +# ������ +unless Struct.const_defined?("RulerInfo") + $demo_rulerInfo = Struct.new("RulerInfo", :grid, :left, :right, :x, :y, + :top, :bottom, :size, :normalStyle, + :activeStyle, :deleteStyle).new +end +$demo_rulerInfo.grid = '.25c' +$demo_rulerInfo.left = TkWinfo.fpixels($ruler_canvas, '1c') +$demo_rulerInfo.right = TkWinfo.fpixels($ruler_canvas, '13c') +$demo_rulerInfo.top = TkWinfo.fpixels($ruler_canvas, '1c') +$demo_rulerInfo.bottom = TkWinfo.fpixels($ruler_canvas, '1.5c') +$demo_rulerInfo.size = TkWinfo.fpixels($ruler_canvas, '.2c') +$demo_rulerInfo.normalStyle = {'fill'=>'black'} +if TkWinfo.depth($ruler_canvas) > 1 + $demo_rulerInfo.activeStyle = {'fill'=>'red', 'stipple'=>''} + $demo_rulerInfo.deleteStyle = {'fill'=>'red', + 'stipple'=>'@'+[$demo_dir, 'images', 'gray25.bmp'].join(File::Separator)} +else + $demo_rulerInfo.activeStyle = {'fill'=>'black', 'stipple'=>''} + $demo_rulerInfo.deleteStyle = {'fill'=>'black', + 'stipple'=>'@'+[$demo_dir, 'images', 'gray25.bmp'].join(File::Separator)} +end + +TkcLine.new($ruler_canvas, + '1c', '0.5c', '1c', '1c', '13c', '1c', '13c', '0.5c', 'width'=>1) +(0..11).each{|i| + x = i+1 + TkcLine.new($ruler_canvas, "#{x}c", '1c', "#{x}c", '0.6c', 'width'=>1) + TkcLine.new($ruler_canvas, "#{x}.25c", '1c', "#{x}.25c", '0.8c', 'width'=>1) + TkcLine.new($ruler_canvas, "#{x}.5c", '1c', "#{x}.5c", '0.7c', 'width'=>1) + TkcLine.new($ruler_canvas, "#{x}.75c", '1c', "#{x}.75c", '0.8c', 'width'=>1) + TkcText.new($ruler_canvas, "#{x}.15c", '0.75c', 'text'=>i, 'anchor'=>'sw') +} + +$rulerTag_well = TkcTag.new($ruler_canvas) +$ruler_canvas\ +.addtag_withtag($rulerTag_well, + TkcRectangle.new($ruler_canvas, + '13.2c', '1c', '13.8c', '0.5c', + 'outline'=>'black', + 'fill'=>($ruler_canvas\ + .configinfo('background'))[4]) ) +$ruler_canvas\ +.addtag_withtag($rulerTag_well, + rulerMkTab($ruler_canvas, + TkWinfo.pixels($ruler_canvas, '13.5c'), + TkWinfo.pixels($ruler_canvas, '.65c') ) ) + +$rulerTag_well.bind('1', proc{|x,y| rulerNewTab($ruler_canvas,x,y)}, '%x %y') +$ruler_canvas.itembind('tab', '1', + proc{|x,y| rulerSelectTab($ruler_canvas,x,y)}, '%x %y') +$ruler_canvas.bind('B1-Motion', + proc{|x,y| rulerMoveTab($ruler_canvas,x,y)}, '%x %y') +$ruler_canvas.bind('Any-ButtonRelease-1', proc{rulerReleaseTab($ruler_canvas)}) + +# rulerNewTab -- +# Does all the work of creating a tab stop, including creating the +# triangle object and adding tags to it to give it tab behavior. +# +# Arguments: +# c - The canvas window. +# x, y - The coordinates of the tab stop. + +def rulerNewTab(c,x,y) + v = $demo_rulerInfo + c.addtag_withtag('active', rulerMkTab(c,x,y)) + c.addtag_withtag('tab', 'active') + v.x = x + v.y = y + rulerMoveTab(c,x,y) +end + +# rulerSelectTab -- +# This method is invoked when mouse button 1 is pressed over +# a tab. It remembers information about the tab so that it can +# be dragged interactively. +# +# Arguments: +# c - The canvas widget. +# x, y - The coordinates of the mouse (identifies the point by +# which the tab was picked up for dragging). + +def rulerSelectTab(c,x,y) + v = $demo_rulerInfo + v.x = c.canvasx(x, v.grid) + v.y = v.top+2 + c.addtag_withtag('active', 'current') + c.itemconfigure('active', v.activeStyle) + c.raise('active') +end + +# rulerMoveTab -- +# This method is invoked during mouse motion events to drag a tab. +# It adjusts the position of the tab, and changes its appearance if +# it is about to be dragged out of the ruler. +# +# Arguments: +# c - The canvas widget. +# x, y - The coordinates of the mouse. + +def rulerMoveTab(c,x,y) + v = $demo_rulerInfo + return if c.find_withtag('active') == [] + cx = c.canvasx(x,v.grid) + cy = c.canvasy(y) + cx = v.left if cx < v.left + cx = v.right if cx > v.right + if (cy >= v.top && cy <= v.bottom) + cy = v.top+2 + c.itemconfigure('active', v.activeStyle) + else + cy = cy-v.size-2 + c.itemconfigure('active', v.deleteStyle) + end + c.move('active', cx-v.x, cy-v.y) + v.x = cx + v.y = cy +end + +# rulerReleaseTab -- +# This method is invoked during button release events that end +# a tab drag operation. It deselects the tab and deletes the tab if +# it was dragged out of the ruler. +# +# Arguments: +# c - The canvas widget. +# x, y - The coordinates of the mouse. + +def rulerReleaseTab(c) + v = $demo_rulerInfo + return if c.find_withtag('active') == [] + if v.y != v.top+2 + c.delete('active') + else + c.itemconfigure('active', v.normalStyle) + c.dtag('active') + end +end + diff --git a/ext/tk/sample/demos-jp/sayings.rb b/ext/tk/sample/demos-jp/sayings.rb new file mode 100644 index 0000000000..f627396e0f --- /dev/null +++ b/ext/tk/sample/demos-jp/sayings.rb @@ -0,0 +1,99 @@ +# +# listbox widget demo 'sayings' (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($sayings_demo) && $sayings_demo + $sayings_demo.destroy + $sayings_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$sayings_demo = TkToplevel.new {|w| + title("Listbox Demonstration (well-known sayings)") + iconname("sayings") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($sayings_demo) { + font $font + wraplength '4i' + justify 'left' + text "���Υꥹ�ȥܥå����ˤϤ��������ʳʸ������äƤ��ޤ����ꥹ�Ȥ������뤵����Τϥ���������С��Ǥ�Ǥ��ޤ������ꥹ�ȥܥå�������ǥޥ����Υܥ���2(��ܥ���)�����ޤޥɥ�å����Ƥ�Ǥ��ޤ���" +} +msg.pack('side'=>'top') + +# frame ���� +TkFrame.new($sayings_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $sayings_demo + $sayings_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'sayings'} + }.pack('side'=>'left', 'expand'=>'yes') + +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +sayings_lbox = nil +TkFrame.new($sayings_demo, 'borderwidth'=>10) {|w| + sv = TkScrollbar.new(w) + sh = TkScrollbar.new(w, 'orient'=>'horizontal') + sayings_lbox = TkListbox.new(w) { + setgrid 1 + width 20 + height 10 + yscrollcommand proc{|first,last| sv.set first,last} + xscrollcommand proc{|first,last| sh.set first,last} + } + sv.command(proc{|*args| sayings_lbox.yview(*args)}) + sh.command(proc{|*args| sayings_lbox.xview(*args)}) + + if $tk_version =~ /^4\.[01]/ + sv.pack('side'=>'right', 'fill'=>'y') + sh.pack('side'=>'bottom', 'fill'=>'x') + sayings_lbox.pack('expand'=>'yes', 'fill'=>'y') + + else + sayings_lbox.grid('row'=>0, 'column'=>0, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + sv.grid('row'=>0, 'column'=>1, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + sh.grid('row'=>1, 'column'=>0, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + TkGrid.rowconfigure(w, 0, 'weight'=>1, 'minsize'=>0) + TkGrid.columnconfigure(w, 0, 'weight'=>1, 'minsize'=>0) + end + +}.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'y') + +sayings_lbox.insert(0, +"Waste not, want not", +"Early to bed and early to rise makes a man healthy, wealthy, and wise", +"Ask not what your country can do for you, ask what you can do for your country", +"I shall return", +"NOT", +"A picture is worth a thousand words", +"User interfaces are hard to build", +"Thou shalt not steal", +"A penny for your thoughts", +"Fool me once, shame on you; fool me twice, shame on me", +"Every cloud has a silver lining", +"Where there's smoke there's fire", +"It takes one to know one", +"Curiosity killed the cat", +"Take this job and shove it", +"Up a creek without a paddle", +"I'm mad as hell and I'm not going to take it any more", +"An apple a day keeps the doctor away", +"Don't look a gift horse in the mouth" +) + diff --git a/ext/tk/sample/demos-jp/search.rb b/ext/tk/sample/demos-jp/search.rb new file mode 100644 index 0000000000..538c607c01 --- /dev/null +++ b/ext/tk/sample/demos-jp/search.rb @@ -0,0 +1,187 @@ +# +# Text Search widget demo (called by 'widget') +# + +# textLoadFile -- +# This method below loads a file into a text widget, discarding +# the previous contents of the widget. Tags for the old widget are +# not affected, however. +# +# Arguments: +# w - The window into which to load the file. Must be a +# text widget. +# file - The name of the file to load. Must be readable. + +def textLoadFile(w,file) + w.delete('1.0', 'end') + f = open(file, 'r') + while(!f.eof?) + w.insert('end', f.read(1000)) + end + f.close +end + +# textSearch -- +# Search for all instances of a given string in a text widget and +# apply a given tag to each instance found. +# +# Arguments: +# w - The window in which to search. Must be a text widget. +# string - The string to search for. The search is done using +# exact matching only; no special characters. +# tag - Tag to apply to each instance of a matching string. + +def textSearch(w, string, tag) + tag.remove('0.0', 'end') + return if string == "" + cur = '1.0' + loop { + cur, len = w.search_with_length(string, cur, 'end') + break if cur == "" + tag.add(cur, "#{cur} + #{len} char") + cur = w.index("#{cur} + #{len} char") + } +end + +# textToggle -- +# This method is invoked repeatedly to invoke two commands at +# periodic intervals. It normally reschedules itself after each +# execution but if an error occurs (e.g. because the window was +# deleted) then it doesn't reschedule itself. +# +# Arguments: +# cmd1 - Command to execute when method is called. +# sleep1 - Ms to sleep after executing cmd1 before executing cmd2. +# cmd2 - Command to execute in the *next* invocation of this method. +# sleep2 - Ms to sleep after executing cmd2 before executing cmd1 again. + +def textToggle(cmd1,sleep1,cmd2,sleep2) + sleep_list = [sleep2, sleep1] + TkAfter.new(proc{sleep = sleep_list.shift; sleep_list.push(sleep); sleep}, + -1, cmd1, cmd2).start(sleep1) +end + +# toplevel widget ��¸�ߤ���к������ +if defined?($search_demo) && $search_demo + $search_demo.destroy + $search_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$search_demo = TkToplevel.new {|w| + title("Text Demonstration - Search and Highlight") + iconname("search") + positionWindow(w) +} + +# frame ���� +$search_buttons = TkFrame.new($search_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $search_demo + $search_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'search'} + }.pack('side'=>'left', 'expand'=>'yes') +} +$search_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +TkFrame.new($search_demo) {|f| + TkLabel.new(f, 'text'=>'�ե�����̾:', + 'width'=>13, 'anchor'=>'w').pack('side'=>'left') + $search_fileName = TkVariable.new + TkEntry.new(f, 'width'=>40, + 'textvariable'=>$search_fileName) { + pack('side'=>'left') + bind('Return', proc{textLoadFile($search_text, $search_fileName.value) + $search_string_entry.focus}) + focus + } + TkButton.new(f, 'text'=>'�ɤ߹���', + 'command'=>proc{textLoadFile($search_text, + $search_fileName.value)})\ + .pack('side'=>'left', 'pady'=>5, 'padx'=>10) +}.pack('side'=>'top', 'fill'=>'x') + +TkFrame.new($search_demo) {|f| + TkLabel.new(f, 'text'=>'����ʸ����:', + 'width'=>13, 'anchor'=>'w').pack('side'=>'left') + $search_searchString = TkVariable.new + $search_string_entry = TkEntry.new(f, 'width'=>40, + 'textvariable'=>$search_searchString) { + pack('side'=>'left') + bind('Return', proc{textSearch($search_text, $search_searchString.value, + $search_Tag)}) + } + TkButton.new(f, 'text'=>'ȿž', + 'command'=>proc{textSearch($search_text, + $search_searchString.value, + $search_Tag)}) { + pack('side'=>'left', 'pady'=>5, 'padx'=>10) + } +}.pack('side'=>'top', 'fill'=>'x') + +$search_text = TkText.new($search_demo, 'setgrid'=>true) {|t| + $search_Tag = TkTextTag.new(t) + TkScrollbar.new($search_demo, 'command'=>proc{|*args| t.yview(*args)}) {|sc| + t.yscrollcommand(proc{|first,last| sc.set first,last}) + pack('side'=>'right', 'fill'=>'y') + } + pack('expand'=>'yes', 'fill'=>'both') +} + +# Set up display styles for text highlighting. + +if TkWinfo.depth($search_demo) > 1 + textToggle(proc{ + begin + $search_Tag.configure('background'=>'#ce5555', + 'foreground'=>'white') + rescue + end + }, + 800, + proc{ + begin + $search_Tag.configure('background'=>'', 'foreground'=>'') + rescue + end + }, + 200 ) +else + textToggle(proc{ + begin + $search_Tag.configure('background'=>'black', + 'foreground'=>'white') + rescue + end + }, + 800, + proc{ + begin + $search_Tag.configure('background'=>'', 'foreground'=>'') + rescue + end + }, + 200 ) +end +$search_text.insert('1.0', '\ +���Υ�����ɥ��ϸ���������¸�����Τ˥ƥ����� widget �Υ�����ǽ���ɤ� +�褦�˻Ȥ���Τ���ǥ⤹���ΤǤ����ޤ���Υ���ȥ�˥ե�����̾���� +�졢<�����> �����֥����ɡץܥ�����Ƥ������������ˤ��β��� +����ȥ��ʸ��������Ϥ���<�����> ������ȿž�ץܥ�����Ƥ� +������������ȥե�������Ρ�����ʸ����Ȱ��פ�����ʬ������ "search_Tag" +�Ȥ����������Ĥ���졢������ɽ��°���Ȥ��Ƥ���ʸ�������Ǥ���褦�� +���ꤵ��ޤ���') +$search_text.set_insert '0.0' + +$search_fileName.value = '' +$search_searchString.value = '' + diff --git a/ext/tk/sample/demos-jp/square b/ext/tk/sample/demos-jp/square new file mode 100644 index 0000000000..b914b735b2 --- /dev/null +++ b/ext/tk/sample/demos-jp/square @@ -0,0 +1,74 @@ +#!/usr/local/bin/ruby + +# square -- +# This script generates a demo application containing only +# a "square" widget. It's only usable if Tk has been compiled +# with tkSquare.c and with the -DSQUARE_DEMO compiler switch. +# This demo arranges the following bindings for the widget: +# +# Button-1 press/drag: moves square to mouse +# "a": toggle size animation on/off +# + +require 'tk' +require 'tkafter' + +class TkSquare<TkWindow + def create_self + tk_call 'square', path + end + def size(amount=nil) + if amount + tk_send 'size', amount + else + number(tk_send 'size') + end + end + def position(x,y) + tk_send 'position', x, y + end +end + +$s = TkSquare.new{ + pack('expand'=>'yes', 'fill'=>'both') + bind('1', proc{|x,y| center(x,y)}, '%s %y') + bind('B1-Motion', proc{|x,y| center(x,y)}, '%s %y') + bind('a', proc{animate}) + focus +} +TkRoot.new.minsize(1,1) + +# The procedure below centers the square on a given position. + +def center(x,y) + a = $s.size + $s.position(x-(a/2), y-(a/2)) +end + +# The procedures below provide a simple form of animation where +# the box changes size in a pulsing pattern: larger, smaller, larger, +# and so on. + +$inc = 0 + +def timer_proc + a = $s.size + return if $inc == 0 + $inc = -3 if a >= 40 + $inc = 3 if a <= 10 + $s.size(a+$inc) +end + +$timer = TkAfter.new(30, -1, proc{timer_proc}) + +def animate + if $inc == 0 + $inc = 3 + $timer.start + else + $inc = 0 + $timer.stop + end +end + +Tk.mainloop diff --git a/ext/tk/sample/demos-jp/states.rb b/ext/tk/sample/demos-jp/states.rb new file mode 100644 index 0000000000..cf8a6768b6 --- /dev/null +++ b/ext/tk/sample/demos-jp/states.rb @@ -0,0 +1,70 @@ +# +# listbox widget demo 'states' (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($states_demo) && $states_demo + $states_demo.destroy + $states_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$states_demo = TkToplevel.new {|w| + title("Listbox Demonstration (states)") + iconname("states") + positionWindow(w) +} + +# label ���� +msg = TkLabel.new($states_demo) { + font $font + wraplength '4i' + justify 'left' + text "���ˤ���Τ���ƻ�ܸ�̾�����ä�����������С��դΥꥹ�ȥܥå����Ǥ����ꥹ�Ȥ������뤵����Τϥ���������С��Ǥ�Ǥ��ޤ������ꥹ�ȥܥå�������ǥޥ����Υܥ���2(��ܥ���)�����ޤޥɥ�å����Ƥ�Ǥ��ޤ���" +} +msg.pack('side'=>'top') + +# frame ���� +TkFrame.new($states_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $states_demo + $states_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'states'} + }.pack('side'=>'left', 'expand'=>'yes') + +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +states_lbox = nil +TkFrame.new($states_demo, 'borderwidth'=>'.5c') {|w| + s = TkScrollbar.new(w) + states_lbox = TkListbox.new(w) { + setgrid 1 + height 12 + yscrollcommand proc{|first,last| s.set first,last} + } + s.command(proc{|*args| states_lbox.yview(*args)}) + s.pack('side'=>'right', 'fill'=>'y') + states_lbox.pack('side'=>'left', 'expand'=>1, 'fill'=>'both') +}.pack('side'=>'top', 'expand'=>'yes', 'fill'=>'y') + +ins_data = [ + '����','�Ŀ�','����','����','���','���','��ɲ', + '��ʬ','���','����','����','����','������','������', + '����','����','����','����','����','���','����', + '����','�Ų�','�纬','����','���','����','����', + 'Ļ��','�ٻ�','Ĺ��','Ĺ��','����','����','ʼ��', + '����','ʡ��','ʡ��','ʡ��','�̳�ƻ','����','�ܾ�', + '�ܺ�','����','����','����','�²λ�' +] + +states_lbox.insert(0, *ins_data) + diff --git a/ext/tk/sample/demos-jp/style.rb b/ext/tk/sample/demos-jp/style.rb new file mode 100644 index 0000000000..d58c6115ae --- /dev/null +++ b/ext/tk/sample/demos-jp/style.rb @@ -0,0 +1,247 @@ +# +# text (display styles) widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($style_demo) && $style_demo + $style_demo.destroy + $style_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$style_demo = TkToplevel.new {|w| + title("Text Demonstration - Display Styles") + iconname("style") + positionWindow(w) +} + +# frame ���� +TkFrame.new($style_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $style_demo + $style_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'style'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# text ���� +TkText.new($style_demo){|t| + # ���� + setgrid 'true' + width 70 + height 32 + wrap 'word' + TkScrollbar.new($style_demo) {|s| + pack('side'=>'right', 'fill'=>'y') + command proc{|*args| t.yview(*args)} + t.yscrollcommand proc{|first,last| s.set first,last} + } + 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) + 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-*') +### +# case($tk_version) +# when /^4.*/ +# style_tag_big = TkTextTag.new(t, 'font'=>'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=>$msg_kanji_font) +# style_tag_small = TkTextTag.new(t, 'font'=>'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=>$kanji_font) +# when /^8.*/ +# unless $style_demo_do_first +# $style_demo_do_first = true +# Tk.tk_call('font', 'create', '@bigascii', +# '-copy', '-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*') +# Tk.tk_call('font', 'create', '@smallascii', +# '-copy', '-Adobe-Helvetica-Bold-R-Normal-*-100-*') +# Tk.tk_call('font', 'create', '@cBigFont', +# '-compound', '@bigascii @msg_knj') +# Tk.tk_call('font', 'create', '@cSmallFont', +# '-compound', '@smallascii @kanji') +# end +# style_tag_big = TkTextTag.new(t, 'font'=>'@cBigFont') +# style_tag_small = TkTextTag.new(t, 'font'=>'@cSmallFont') +# end + + # �ƥ����ȥ������� (�������մ�Ϣ) + if TkWinfo.depth($root).to_i > 1 + style_tag_color1 = TkTextTag.new(t, 'background'=>'#a0b7ce') + style_tag_color2 = TkTextTag.new(t, 'foreground'=>'red') + style_tag_raised = TkTextTag.new(t, 'relief'=>'raised', 'borderwidth'=>1) + style_tag_sunken = TkTextTag.new(t, 'relief'=>'sunken', 'borderwidth'=>1) + else + style_tag_color1 = TkTextTag.new(t, 'background'=>'black', + 'foreground'=>'white') + style_tag_color2 = TkTextTag.new(t, 'background'=>'black', + 'foreground'=>'white') + style_tag_raised = TkTextTag.new(t, 'background'=>'white', + 'relief'=>'raised', 'borderwidth'=>1) + style_tag_sunken = TkTextTag.new(t, 'background'=>'white', + 'relief'=>'sunken', 'borderwidth'=>1) + end + + # �ƥ����ȥ������� (����¾) + if $tk_version =~ /^4\.[01]/ + style_tag_bgstipple = TkTextTag.new(t, 'background'=>'black', + 'borderwidth'=>0, + 'bgstipple'=>'gray25') + else + style_tag_bgstipple = TkTextTag.new(t, 'background'=>'black', + 'borderwidth'=>0, + 'bgstipple'=>'gray12') + end + style_tag_fgstipple = TkTextTag.new(t, 'fgstipple'=>'gray50') + style_tag_underline = TkTextTag.new(t, 'underline'=>'on') + 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-*-*-*-*-*-*') + style_tag_margins = TkTextTag.new(t, 'lmargin1'=>'12m', 'lmargin2'=>'6m', + 'rmargin'=>'10m') + style_tag_spacing = TkTextTag.new(t, 'spacing1'=>'10p', 'spacing2'=>'2p', + 'lmargin1'=>'12m', 'lmargin2'=>'6m', + 'rmargin'=>'10m') + + # �ƥ��������� + insert('end', '���Τ褦�˥ƥ����� widget �Ͼ�����͡��ʥ��������ɽ�����뤳�� +���Ǥ��ޤ���') + insert('end', '����', style_tag_big) + insert('end', '�Ȥ����ᥫ�˥���ǥ���ȥ����뤵��ޤ��� +�����Ȥϥƥ����� widget ��Τ���ʸ�� (���ϰ�)���Ф���Ŭ�ѤǤ��� +ñ�ʤ�̾���Τ��ȤǤ����������͡���ɽ���������������Ǥ��ޤ��� +���ꤹ��ȡ����Υ����ΤĤ���ʸ���ϻ��ꤷ�����������ɽ������� +�褦�ˤʤ�ޤ������ѤǤ���ɽ����������ϼ����̤�Ǥ��� +') + insert('end', ' +1. �ե����', style_tag_big) + insert('end', ' �ɤ�� X �Υե���ȤǤ�Ȥ��ޤ���') + insert('end', 'large', style_tag_verybig) + insert('end', ' +�Ȥ�') +# insert('end', '������', style_tag_small) + insert('end', 'small', style_tag_small) + insert('end', '�Ȥ��� +') + insert('end', ' +2. ��', style_tag_big) + insert('end', ' ') + insert('end', '�طʿ�', style_tag_color1) + insert('end', '��') + insert('end', '���ʿ�', style_tag_color2) + insert('end', '��') + insert('end', 'ξ��', style_tag_color1, style_tag_color2) + insert('end', '�Ȥ��Ѥ��뤳�Ȥ��Ǥ��ޤ��� +') + insert('end', ' +3. �֤���', style_tag_big) + insert('end', ' ���Τ褦������κݤ�') + insert('end', '�طʤ�', style_tag_bgstipple) + insert('end', 'ʸ����', style_tag_fgstipple) + insert('end', 'ñ�ʤ��ɤ�Ĥ֤� +�Ǥʤ����֤�����Ȥ����Ȥ��Ǥ��ޤ��� +') + insert('end', ' +4. ����', style_tag_big) + insert('end', ' ���Τ褦��') + insert('end', 'ʸ���˲��������', style_tag_underline) + insert('end', '���Ȥ��Ǥ��ޤ��� +') + insert('end', ' +5. �Ǥ��ä���', style_tag_big) + insert('end', ' ���Τ褦��') + insert('end', 'ʸ���˽Ťͤ��������', style_tag_overstrike) + insert('end', '���Ȥ��Ǥ��ޤ��� +') + insert('end', ' +6. 3D ����', style_tag_big) + insert('end', ' �طʤ��Ȥ�Ĥ��ơ�ʸ����') + insert('end', '���ӽФ�', style_tag_raised) + insert('end', '�褦�ˤ�����') + insert('end', '����', style_tag_sunken) + insert('end', ' +�褦�ˤǤ��ޤ��� +') + insert('end', ' +7. ��·��', style_tag_big) + insert('end', ' ���Τ褦�˹Ԥ� +') + insert('end', '����·������ +') + insert('end', '����·������ +', style_tag_right) + insert('end', '�����·������Ǥ��ޤ��� +', style_tag_center) + insert('end', ' +8. ���դ�ʸ����ź��', style_tag_big) + insert('end', ' 10') + insert('end', 'n', style_tag_super) + insert('end', ' �Τ褦�˸��դ�ʸ���θ��̤䡢') + insert('end', ' +X') + insert('end', 'i', style_tag_sub) + insert('end', '�Τ褦��ź���θ��̤�Ф����Ȥ��Ǥ��ޤ��� +') + insert('end', ' +9. �ޡ�����', style_tag_big) + insert('end', '�ƥ����Ȥκ�¦��;ʬ�ʶ�����֤����Ȥ��Ǥ��ޤ�: +') + insert('end', '��������ϥޡ�����λ�����Ǥ����������', + style_tag_margins) + insert('end', '����ޤ��֤����ɽ������Ƥ���1�ԤΥƥ����ȤǤ���', + style_tag_margins) + insert('end', '��¦�ˤ�2����Υޡ����������ޤ���', style_tag_margins) + insert('end', '1���ܤ��Ф����Τȡ�', style_tag_margins) + insert('end', '2���ܰʹߤ�Ϣ³�����ޡ�����', style_tag_margins) + insert('end', '�Ǥ����ޤ���¦�ˤ�ޡ�������ޤ���', style_tag_margins) + insert('end', '�Ԥ��ޤ��֤����֤���뤿��˻��Ѥ��뤳�Ȥ��Ǥ��ޤ��� +', style_tag_margins) + insert('end', ' +10. ���ڡ�����', style_tag_big) + insert('end', '3�ĤΥѥ����ǹԤΥ��ڡ�����') + insert('end', '���椹 +�뤳�Ȥ��Ǥ��ޤ���Spacing1�ǡ��Ԥ�') + insert('end', '��ˤɤΤ��餤�ζ��֤��֤����� +spacing3') + insert('end', '�ǹԤβ��ˤɤΤ��餤�ζ��֤��֤�����') + insert('end', '�Ԥ��ޤ��֤���Ƥ���ʤ� +�С�spacing2�ǡ�') + insert('end', '�ƥ����ȹԤ��������Ƥ���Ԥδ֤ˤɤΤ��餤') + insert('end', '�ζ��֤��� +�������ޤ��� +') + insert('end', '�����Υ���ǥ�Ȥ��줿����ϤɤΤ褦��', + style_tag_spacing) + insert('end', '���ڡ��������Ԥ���Τ����ޤ���', + style_tag_spacing) + insert('end', '������ϼºݤϥƥ�����widget', style_tag_spacing) + insert('end', '��1�Ԥǡ�widget�ˤ�ä��ޤ���ޤ�Ƥ��ޤ��� +', style_tag_spacing) + insert('end', 'Spacing1�Ϥ��Υƥ����ȤǤ�10point��', style_tag_spacing) + insert('end', '���ꤵ��Ƥ��ޤ���', style_tag_spacing) + insert('end', '����ˤ�ꡢ����δ֤��礭�ʴֳ֤�', style_tag_spacing) + insert('end', '¸�ߤ��Ƥ��ޤ���', style_tag_spacing) + insert('end', 'Spacing2��2point�����ꤵ��Ƥ��ޤ���', style_tag_spacing) + insert('end', '������������ˤۤ�ξ����ֳ֤�¸�ߤ��Ƥ��ޤ���', + style_tag_spacing) + insert('end', 'Spacing3�Ϥ�����Ǥϻ��Ѥ���Ƥ��ޤ��� +', style_tag_spacing) + insert('end', '�ֳ֤��ɤ��ˤ��뤫������С������������', + style_tag_spacing) + insert('end', '�ʤ��ǥƥ����Ȥ����Ƥ��������������', style_tag_spacing) + insert('end', 'ȿž������ʬ�ˤ�;ʬ�ˤȤ�줿�ֳ֤�', style_tag_spacing) + insert('end', '�ޤޤ�Ƥ��ޤ��� +', style_tag_spacing) + +} + diff --git a/ext/tk/sample/demos-jp/tcolor b/ext/tk/sample/demos-jp/tcolor new file mode 100644 index 0000000000..5464aebae2 --- /dev/null +++ b/ext/tk/sample/demos-jp/tcolor @@ -0,0 +1,513 @@ +#!/usr/local/bin/ruby +# +# tcolor -- +# ���Υ�����ץȤ�RGB,HSB,CYM�����ݡ��Ȥ��� +# �ʰץ��顼���ǥ����Ǥ��� +# +# Copyright (C) 1998 Takaaki Tateishi([email protected]) +# last update: Thu Jun 18 06:32:35 JST 1998 +# + +# �ޤ���tk.rb���ɤ߹��ࡣ + +require "tk" + + +# Tk�ˤ�ä��ѹ�������ѿ���TkVariable�Υ�����Ȥ��� + +$colorSpace = TkVariable.new(:rgb) +$red = 65535 +$green = 0 +$blue = 0 +$color = "#ffff00000000" +$updating = TkVariable.new(0) +$autoUpdate = TkVariable.new(1) +$name = TkVariable.new("") +# $command = TkVariable.new("print(%%,\"\n\")") +$command = TkVariable.new("") +$label1 = TkVariable.new("label1") +$label2 = TkVariable.new("label2") +$label3 = TkVariable.new("label3") + + +# �ƥ��٥���ѤΥ�å� + +def rgbToHsv(red,green,blue) + + if ( red > green ) + max = red + min = green + else + max = green + min = red + end + + if ( blue > max ) + max = blue + else + if ( blue < min ) + min = blue + end + end + + range = max - min + + if ( max == 0 ) + sat = 0.0 + else + sat = (max-min)/max + end + + if ( sat == 0 ) + hue = 0.0 + else + rc = (max-red)/range + gc = (max-green)/range + bc = (max-blue)/range + if ( red == max ) + hue = 0.166667 * (bc - gc) + else + if ( green == max ) + hue = 0.166667 * (2.0 + rc - bc) + else + hue = 0.166667 * (4.0 + gc - rc) + end + end + if ( hue < 0.0 ) + hue = hue + 1.0 + end + end + + [hue,sat,max/65535] +end + + +def hsbToRgb(hue,sat,value) + v = 65535.0 * value + if( sat == 0 ) + ans = [v,v,v] + else + hue = hue*6.0 + if ( hue >= 6 ) + hue = 0.0 + end + i = hue.to_i + f = hue - i + p = 65535.0 * value * (1.0 - sat) + q = 65535.0 * value * (1.0 - (sat * f)) + t = 65535.0 * value * (1.0 - (sat * (1.0 - f))) + case i + when 0 + ans = [v,t,p] + when 1 + ans = [q,v,p] + when 2 + ans = [p,v,t] + when 3 + ans = [p,q,v] + when 4 + ans = [t,p,v] + when 5 + ans = [v,p,q] + else + raise(eException,"i value #{i} is out of range") + end + end + return ans +end + + +def doUpdate + newCmd = $command.to_s.gsub("%%","\"#{$color}\"") + eval(newCmd) +end + + +def tc_scaleChanged + if( $updating.to_i == 1 ) + return + end + + scale1 = $root.middle.middle.scale1 + scale2 = $root.middle.middle.scale2 + scale3 = $root.middle.middle.scale3 + + case $colorSpace.to_i + when :rgb + $red = (scale1.get * 65.535).to_i + $green = (scale2.get * 65.535).to_i + $blue = (scale3.get * 65.535).to_i + when :cmy + $red = (65535 - scale1.get * 65.535).to_i + $green = (65535 - scale2.get * 65.535).to_i + $blue = (65535 - scale3.get * 65.535).to_i + when :hsb + list = hsbToRgb(scale1.get / 1000.0, + scale2.get / 1000.0, + scale3.get / 1000.0) + $red = list[0] + $green = list[1] + $blue = list[2] + else + raise(Exception,"unknown colorSpace") + end + $color = format("#%04x%04x%04x",$red.to_i,$green.to_i,$blue.to_i) + $root.middle.right.set_color($color) + if( $autoUpdate.to_i == 1 ) + doUpdate + end + Tk.update(TRUE) +end + + +def tc_setScales + $updating.value = 1 + + scale1 = $root.middle.middle.scale1 + scale2 = $root.middle.middle.scale2 + scale3 = $root.middle.middle.scale3 + + case $colorSpace.to_i + when :rgb + scale1.set($red / 65.535) + scale2.set($green / 65.535) + scale3.set($blue / 65.535) + when :cmy + scale1.set((65535 - $red) / 65.535) + scale2.set((65535 - $green) / 65.535) + scale3.set((65535 - $blue) / 65.535) + when :hsb + list = rgbToHsv($red,$green,$blue) + scale1.set( list[0] * 1000.0 ) + scale2.set( list[1] * 1000.0 ) + scale3.set( list[2] * 1000.0 ) + else + raise(Exception,"unknown colorSpace") + end + + $updating.value = 0 +end + + +def tc_loadNamedColor(name) + if name[0,1] != "#" + list = TkWinfo.rgb($root.middle.right.swatch,name) + $red = list[0] + $green = list[1] + $blue = list[2] + else + case name.length + when 4 + format = /#(.{1})(.{1})(.{1})/ + shift = 12 + when 7 + format = /#(.{2})(.{2})(.{2})/ + shift = 8 + when 10 + format = /#(.{3})(.{3})(.{3})/ + shift = 4 + when 13 + format = /#(.{4})(.{4})(.{4})/ + shift = 0 + else + raise(eException,"syntax error in color name \"#{name}\"") + end + name.scan(format){|strlist| + if strlist.length != 3 + raise(eException,"syntax error in color name \"#{name}\"") + end + $red = strlist[0].to_i + $green = strlist[1].to_i + $blue = strlist[2].to_i + } + $red = $red << shift + $green = $green << shift + $blue = $blue << shift + end + + tc_setScales + $color = format("#%04x%04x%04x",$red,$green,$blue) + $root.middle.right.set_color($color) + if $autoUpdate.to_i == 1 + doUpdate + end +end + + +def changeColorSpace(space) + case space + when :rgb + $label1.value = "Red" + $label2.value = "Green" + $label3.value = "Blue" + when :cmy + $label1.value = "Cyan" + $label2.value = "Magenta" + $label3.value = "Yellow" + when :hsb + $label1.value = "Hue" + $label2.value = "Saturation" + $label3.value = "Brightness" + end + tc_setScales +end + + + + + +# tcolor�ѤΥ�˥塼 + +class TkColorMenuFrame<TkFrame + def initialize(parent) + super(parent, + "relief"=>"raised", + "borderwidth"=>"2") + + # File��˥塼�ܥ�������� + @file = TkMenubutton.new(self){|button| + + # File��˥塼�κ��� + @file_menu = TkMenu.new(button){ + add "radio", + "label" => "RGB color space", + "variable" => $colorSpace, + "value" => :rgb, + "underline" => "0", + "command" => proc{changeColorSpace(:rgb)} + add "radio", + "label" => "CMY color space", + "variable" => $colorSpace, + "value" => :cmy, + "underline" => "0", + "command" => proc{changeColorSpace(:cmy)} + add "radio", + "label" => "HSB color space", + "variable" => $colorSpace, + "value" => :hsb, + "underline" => "0", + "command" => proc{changeColorSpace(:hsb)} + add "separator" + add "radio", + "label" => "Qutomatic updates", + "variable" => $autoUpdate, + "value" => "1", + "underline" => "0" + add "radio", + "label" => "Manual updates", + "variable" => $autoUpdate, + "value" => "0", + "underline" => "0" + add "separator" + add "command", + "label" => "Exit program", + "underline" => "0", + "command" => proc{exit} + } + + # File��˥塼��File�ܥ�����Ϣ�դ��� + menu @file_menu + + text "File" + underline "0" + }.pack("side"=>"left") + + self + end +end + + +# �����Υե졼��Τ���Υ��饹 +class TkColorBotFrame<TkFrame + def initialize(parent) + super(parent, + "relief"=> "raised", + "borderwidth"=> 2) + + @commandLabel = TkLabel.new(self, + "text"=> "Command:") + @command = TkEntry.new(self, + "relief"=> "sunken", + "borderwidth"=> "2", + "textvariable"=> $command, + "font"=> "-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*") + @update = TkButton.new(self, + "text"=> "Update", + "command"=> proc{doUpdate}) + @commandLabel.pack("side"=>"left") + @update.pack("side"=>"right","pady"=>".1c","padx"=>".25c") + @command.pack("expand"=>"yes","fill"=>"x","ipadx"=>".25c") + + self + end +end + + +# ���ʺ��Υե졼�� +class TkColorMiddleLeftFrame<TkFrame + def initialize(parent) + super(parent) + + for i in ["/usr/local/lib/X11rgb.txt","/usr/lib/X11/rgb.txt", + "/X11/R5/lib/X11/rgb.txt","/X11/R4/lib/rgb/rgb.txt", + "/usr/openwin/lib/X11/rgb.txt"] + if !File.readable?(i) + next + end + f = File.open(i) + @scroll = TkScrollbar.new(self, + "orient"=>"vertical", + "relief"=>"sunken", + "borderwidth"=>"2") + @scroll.pack("side"=>"right","fill"=>"y") + @names = TkListbox.new(self, + "width"=>"20", + "height"=>"12", + "yscrollcommand"=> proc{|first,last| @scroll.set first,last}, + "relief"=>"sunken", + "borderwidth"=>"2", + "exportselection"=>"false") + @scroll.command(proc{|*args| @names.yview *args}) + @names.bind("Double-1",proc{ + tc_loadNamedColor(@names.get(@names.curselection))}) + @names.pack("side"=>"left") + while (line = f.gets) + line.chop! + linelist = line.split(/[ \t]+/) + if linelist.length == 4 + @names.insert("end",linelist[3]) + end + end + f.close + break + end + + self + end +end + + +# ��������Υե졼�� +class TkColorMiddleMiddleFrame<TkFrame + # @scale1,@scale2,@scale3�������黲�ȤΤߵ��Ĥ��롣(�ѹ��Բ�) + attr_reader :scale1, :scale2, :scale3 + + def initialize(parent) + super(parent) + + @f1 = TkFrame.new(self) + @f2 = TkFrame.new(self) + @f3 = TkFrame.new(self) + @f4 = TkFrame.new(self) + + for f in [@f1,@f2,@f3] + f.pack("side"=>"top","expand"=>"yes") + end + @f4.pack("side"=>"top","expand"=>"yes","fill"=>"x") + + @label1 = TkLabel.new(self,"textvariable"=>$label1) + @scale1 = TkScale.new(self,"from"=>"0","to"=>"1000","length"=>"6c", + "orient"=>"horizontal", + "command"=>proc{tc_scaleChanged}) + @scale1.pack("side"=>"top","anchor"=>"w") + @label1.pack("side"=>"top","anchor"=>"w") + + @label2 = TkLabel.new(self,"textvariable"=>$label2) + @scale2 = TkScale.new(self,"from"=>"0","to"=>"1000","length"=>"6c", + "orient"=>"horizontal", + "command"=>proc{tc_scaleChanged}) + @scale2.pack("side"=>"top","anchor"=>"w") + @label2.pack("side"=>"top","anchor"=>"w") + + @label3 = TkLabel.new(self,"textvariable"=>$label3) + @scale3 = TkScale.new(self,"from"=>"0","to"=>"1000","length"=>"6c", + "orient"=>"horizontal", + "command"=>proc{tc_scaleChanged}) + @scale3.pack("side"=>"top","anchor"=>"w") + @label3.pack("side"=>"top","anchor"=>"w") + + @nameLabel = TkLabel.new(self,"text"=>"Name:") + @name = TkEntry.new(self,"relief"=>"sunken","borderwidth"=>"2", + "textvariable"=>$name,"width"=>"10", + "font"=>"-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*") + @nameLabel.pack("side"=>"left") + @name.pack("side"=>"right", "expand"=>"1", "fill"=>"x") + @name.bind("Return",proc{tc_loadNamedColor $name.to_s}) + + self + end +end + + +class TkColorMiddleRightFrame<TkFrame + attr_reader :swatch + + def initialize(parent) + super(parent) + @swatch = TkFrame.new(self, "width"=>"2c", "height"=>"5c", + "background"=>$color) + @value = TkLabel.new(self, + "text"=>$color, + "width"=>"13", + "font"=>"-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*") + @swatch.pack("side"=>"top","expand"=>"yes","fill"=>"both") + @value.pack("side"=>"bottom","pady"=>".25c") + + self + end + + def set_color(color) + @swatch["background"] = color + @value["text"] = color + end +end + + + +# ���ʤΥե졼�� +class TkColorMiddleFrame<TkFrame + attr_reader :left, :middle, :right + + def initialize(parent) + super(parent, + "relief"=> "raised", + "borderwidth"=> "2") + + @left = TkColorMiddleLeftFrame.new(self) + @left.pack("side"=>"left","padx"=>".25c","pady"=>".25c") + + @middle = TkColorMiddleMiddleFrame.new(self) + @middle.pack("side"=>"left","expand"=>"yes","fill"=>"y") + + @right = TkColorMiddleRightFrame.new(self) + @right.pack("side"=>"left","padx"=>".25c","pady"=>".25c","anchor"=>"s") + + self + end +end + + +class TkColor<TkRoot + attr_reader :menu, :bottom, :middle + + def initialize + super + @menu = TkColorMenuFrame.new(self) + @menu.pack("side"=>"top", "fill"=>"x") + + @bottom = TkColorBotFrame.new(self) + @bottom.pack("side"=>"bottom","fill"=>"x") + + @middle = TkColorMiddleFrame.new(self) + @middle.pack("side"=>"top","fill"=>"both") + + self + end +end + + +$root = TkColor.new + +# ���٥�Ȥ��Ԥİ٤˥롼�פ����롣 +changeColorSpace :rgb +Tk.mainloop diff --git a/ext/tk/sample/demos-jp/text.rb b/ext/tk/sample/demos-jp/text.rb new file mode 100644 index 0000000000..a8232088a5 --- /dev/null +++ b/ext/tk/sample/demos-jp/text.rb @@ -0,0 +1,94 @@ +# +# text (basic facilities) widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($text_demo) && $text_demo + $text_demo.destroy + $text_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$text_demo = TkToplevel.new {|w| + title("Text Demonstration - Basic Facilities") + iconname("text") + positionWindow(w) +} + +# frame ���� +TkFrame.new($text_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $text_demo + $text_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'text'} + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# text ���� +TkText.new($text_demo){|t| + # ���� + relief 'sunken' + bd 2 + setgrid 1 + height 30 + TkScrollbar.new($text_demo) {|s| + pack('side'=>'right', 'fill'=>'y') + command proc{|*args| t.yview(*args)} + t.yscrollcommand proc{|first,last| s.set first,last} + } + pack('expand'=>'yes', 'fill'=>'both') + + # �ƥ��������� + insert('0.0', %q| +���Υ�����ɥ��ϥƥ����� widget �Ǥ���1�Ԥޤ��Ϥ���ʾ�Υƥ����Ȥ�ɽ +�����Խ����뤳�Ȥ��Ǥ��ޤ����ʲ��ϥƥ����� widget �ǤǤ������ˤĤ��� +�ޤȤ��ΤǤ��� + +1. ���������롣����������С��ǥƥ����Ȥ�ɽ����ʬ��ư�������Ȥ��Ǥ��ޤ��� + +2. ������˥��ƥ����ȤΥ�����ɥ��ǥޥ����ܥ���2 (��ܥ����) �� +���ƾ岼�˥ɥ�å����Ƥ�����������������ȥƥ����Ȥ���®�ǥɥ�å����졢 +���Ƥä�į��뤳�Ȥ��Ǥ��ޤ��� + +3. �ƥ����Ȥ��������ޥ����ܥ���1 (���ܥ���) ����������������� +�Ȥ��Ƥ���ƥ����Ȥ����Ϥ��Ƥ������������Ϥ�����Τ� widget ������ޤ��� + +4. �������ϰϤ�ʸ��������ˤϥޥ����ܥ���1 �����ɥ�å��� +�Ƥ������������٥ܥ����Υ�����顢���եȥ������ʤ���ܥ���1 �� +���Ȥ������ϰϤ�Ĵ�����Ǥ��ޤ�������������ϰϤκǸ��ޥ������������ +�Ǥ�ᤤ���֤˥ꥻ�åȤ����ܥ����Υ�����˥ޥ�����ɥ�å����뤳�ȤǤ� +��������ϰϤ�Ĵ���Ǥ��ޤ������֥륯��å��ǥ�ɤޤ��ȥ�ץ륯��� +���ǹ����Τ����뤳�Ȥ��Ǥ��ޤ��� + +5. �õ���ִ����ƥ����Ȥ�õ��ˤϡ��õ����ʸ�������ƥХå� +���ڡ������ǥ�ȥ��������Ϥ��Ƥ������������뤤�ϡ��������ƥ����Ȥ� +���Ϥ�������줿�ƥ����Ȥ��ִ�����ޤ��� + +6. ������ʬ�Υ��ԡ���������ʬ�Υ�����ɥ�����Τɤ����˥��ԡ����� +�ˤϡ��ޤ����ԡ��������������(�����ǡ����뤤���̤Υ��ץꥱ��������) +�����ܥ��� 2 ��å����ơ�������������ΰ��֤˥��ԡ����Ƥ��������� + +7. �Խ����ƥ����� widget �� Emacs �Υ����Х���ɤ˲ä���ɸ��Ū�ʤ� Motif +���Խ���ǽ�ݡ��Ȥ��Ƥ��ޤ����Хå����ڡ����ȥ���ȥ�����-H ������ +��������κ�¦��ʸ���������ޤ����ǥ�ȥ����ȥ���ȥ�����-D ������ +��������α�¦��ʸ���������ޤ���Meta-�Хå����ڡ������������������ +��¦��ñ���������Meta-D ��������������κ�¦��ñ��������ޤ��� +����ȥ�����-K �������������뤫������ޤǤ����������ΰ��֤˲��� +�����ʤ��ä����ϡ����Ԥ������ޤ��� + +8. ������ɥ��Υꥵ���������� widget �� "setGrid" ���ץ�����ˤ� +�Ƥ���ޤ��Τǡ�������ɥ���ꥵ����������ˤϹ⤵�����Ͼ��ʸ�����ʸ +�����������ܤˤʤ�ޤ����ޤ���������ɥ����������ˤ�Ĺ���Ԥ���ư +Ū���ޤ��֤��졢������Ƥ����Ƥ�������褦�ˤʤäƤ��ޤ���|) + + set_insert('0.0') +} + diff --git a/ext/tk/sample/demos-jp/timer b/ext/tk/sample/demos-jp/timer new file mode 100644 index 0000000000..232f4ae5ca --- /dev/null +++ b/ext/tk/sample/demos-jp/timer @@ -0,0 +1,120 @@ +#!/usr/local/bin/ruby +# +# timer -- +# This script generates a counter with start,stop and reset buttons. +# +# Copyright (C) 1998 Takaaki Tateishi ([email protected]) +# last update: Sat Jun 27 12:24:14 JST 1998 +# + +require "tk" +require "thread" +require "tkafter" + +$time = "0.00" +$m = Mutex.new +$loop = false + +def timer_stop + $loop = false + $m.lock +end + +def timer_start + $loop = true + $m.unlock +end + +def timer_reset + $time = "0.00" + $root.countframe.counter['text'] = $time +end + +def timer_loop + if $loop + $time = $time.succ + $root.countframe.counter['text'] = $time + end + Tk.after(10,proc{timer_loop}) +end + + +# +# thread version +# +def timer_loop2 + while true + $m.lock + $time = $time.succ + $root.countframe.counter['text'] = $time + sleep(0.01) + $m.unlock + end +end + +# +# TkAfter +# +def timer_loop3 + if $loop + $time = $time.succ + $root.countframe.counter['text'] = $time + end +end + + +class CountFrame < TkFrame + attr_reader :counter + + def initialize(parent=nil,keys=nil) + super(parent,keys) + @counter = TkLabel.new(self, + 'text'=>$time, + 'relief'=>'raised') + @counter.pack('fill'=>'both') + self + end +end + + +class ButtonFrame < TkFrame + def initialize(parent=nil,keys=nil) + super(parent,keys) + @stop = TkButton.new(self, + 'text'=>'Stop', + 'command'=>proc{timer_stop}) + @start = TkButton.new(self, + 'text'=>'Start', + 'command'=>proc{timer_start}) + @reset = TkButton.new(self, + 'text'=>'Reset', + 'command'=>proc{timer_reset}) + for b in [@stop,@start,@reset] + b.pack('side'=>'left', 'fill'=>'both', 'expand'=>'yes') + end + end +end + + +class Timer < TkRoot + attr_reader :countframe + + def initialize + super + @countframe = CountFrame.new(self) + @buttonframe = ButtonFrame.new(self) + for f in [@buttonframe,@countframe] + f.pack('side'=>'top', 'fill'=>'both') + end + self + end +end + + +$root = Timer.new + +#$thread = Thread.start{timer_loop2} +#timer_loop +TkAfter.new(10,-1,proc{timer_loop3}).start + +Tk.mainloop diff --git a/ext/tk/sample/demos-jp/twind.rb b/ext/tk/sample/demos-jp/twind.rb new file mode 100644 index 0000000000..d35acd24d0 --- /dev/null +++ b/ext/tk/sample/demos-jp/twind.rb @@ -0,0 +1,284 @@ +# +# text (embedded windows) widget demo (called by 'widget') +# + +# toplevel widget ��¸�ߤ���к������ +if defined?($twind_demo) && $twind_demo + $twind_demo.destroy + $twind_demo = nil +end + +# demo �Ѥ� toplevel widget ������ +$twind_demo = TkToplevel.new {|w| + title("Text Demonstration - Embedded Windows") + iconname("Embedded Windows") + positionWindow(w) +} + +# frame ���� +$twind_buttons = TkFrame.new($twind_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc{ + tmppath = $twind_demo + $twind_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc{showCode 'twind'} + }.pack('side'=>'left', 'expand'=>'yes') +} +$twind_buttons.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +# frame ���� +$twind_text = nil +TkFrame.new($twind_demo, 'highlightthickness'=>2, 'borderwidth'=>2, + 'relief'=>'sunken') {|f| + $twind_text = TkText.new(f, 'setgrid'=>'true', 'font'=>$font, + 'width'=>'70', 'height'=>35, 'wrap'=>'word', + 'highlightthickness'=>0, 'borderwidth'=>0 ){|t| + TkScrollbar.new(f) {|s| + command proc{|*args| t.yview(*args)} + t.yscrollcommand proc{|first,last| s.set first,last} + }.pack('side'=>'right', 'fill'=>'y') + }.pack('expand'=>'yes', 'fill'=>'both') +}.pack('expand'=>'yes', 'fill'=>'both') + +# �������� +$tag_center = TkTextTag.new($twind_text, + 'justify' =>'center', + 'spacing1'=>'5m', + 'spacing3'=>'5m' ) +$tag_buttons = TkTextTag.new($twind_text, + 'lmargin1'=>'1c', + 'lmargin2'=>'1c', + 'rmargin' =>'1c', + 'spacing1'=>'3m', + 'spacing2'=>0, + 'spacing3'=>0 ) + +# �ƥ����Ȥ����� +$twind_text.insert('end', + '�ƥ�����widget���¾��widget���Ȥ߹��ळ�Ȥ��Ǥ��ޤ���') +$twind_text.insert('end', + '�Ȥ߹��ߥ�����ɥ��ȸƤФ졢Ǥ�դ�widget����ǽ�Ǥ���') +$twind_text.insert('end', + '�㤨�С�������2�ĤΥܥ���widget���Ȥ߹��ޤ�Ƥ��ޤ���') +$twind_text.insert('end', '�ǽ�Υܥ����å����ȿ�ʿ�����Υ����������') +TkTextWindow.new($twind_text, 'end', + 'window'=>TkButton.new($twind_text) { + #text 'ON' + text '����' + command proc{textWindOn $twind_text,$twind_buttons} + cursor 'top_left_arrow' + }) +$twind_text.insert('end', '�ˤ��ޤ����ޤ�2�Ĥ�Υܥ����å������') +$twind_text.insert('end', '��ʿ�����Υ����������') +TkTextWindow.new($twind_text, 'end', + 'window'=>TkButton.new($twind_text) { + #text 'OFF' + text '����' + command proc{textWindOff $twind_text} + cursor 'top_left_arrow' + }) +$twind_text.insert('end', '�ˤ��ޤ���') + +$twind_text.insert('end', '�⤦�ҤȤĤ���Ǥ���') +TkTextWindow.new($twind_text, 'end', + 'window'=>TkButton.new($twind_text) { + text '������å�' + command proc{textWindPlot $twind_text} + cursor 'top_left_arrow' + }) +$twind_text.insert('end', '����ȡ�x-y�ץ��åȤ������˸���ޤ���') +$mark_plot = TkTextMark.new($twind_text, 'insert') +$mark_plot.gravity='left' +$twind_text.insert('end', '�ޥ����ǥǡ��������褹�뤳�Ȥ��Ǥ��ޤ���') +TkTextWindow.new($twind_text, 'end', + 'window'=>TkButton.new($twind_text) { + text '�õ�' + command proc{textWindDel $twind_text} + cursor 'top_left_arrow' + }) +$twind_text.insert('end', '��å�����ȸ������ޤ��� + +') + +$twind_text.insert('end', '�Ȥ߹��ߥ�����ɥ�������ƥ�����widget��ˡ��ºݤ�') +$twind_text.insert('end', '�ƥ����ȤϤʤ����Ȥ߹��ळ�Ȥ������Ǥ���') +$twind_text.insert('end', '���ξ��ϡ��ƥ�����widget�ϥ�����ɥ��ޥ͡������') +$twind_text.insert('end', '�褦��ư��ޤ����㤨�С������ˤϥƥ�����widget��') +$twind_text.insert('end', '��äƥܥ����줤���¤٤��Ƥ��ޤ���') +$twind_text.insert('end', '�����Υܥ�����طʿ����Ѥ��뤳�Ȥ��Ǥ��ޤ�') +$twind_text.insert('end', '("Default"�Ǹ��ο����᤹���Ȥ��Ǥ��ޤ�)��') +$twind_text.insert('end', '"Short"�Ȥ����ܥ����å������ʸ�����Ĺ����') +$twind_text.insert('end', '�Ѥ��ޤ�������ȼ�ưŪ�˥ƥ�����widget��') +$twind_text.insert('end', '�쥤�����Ȥ������Ƥ���ޤ���') +$twind_text.insert('end', '�⤦����Ʊ���ܥ�����ȸ������ޤ��� + +') + +TkTextWindow.new($twind_text, 'end', + 'window'=>TkButton.new($twind_text) {|b| + text '�ǥե����' + command proc{embDefBg $twind_text} + cursor 'top_left_arrow' + $tag_buttons.add('end') + }, + 'padx'=>3 ) +embToggle = TkVariable.new('Short') +TkTextWindow.new($twind_text, 'end', + 'window'=>TkCheckButton.new($twind_text) { + textvariable embToggle + indicatoron 0 + variable embToggle + onvalue 'A much longer string' + offvalue 'Short' + cursor 'top_left_arrow' + pady 5 + padx 2 + }, + 'padx'=>3, + 'pady'=>2 ) + +[ 'AntiqueWhite3', 'Bisque1', 'Bisque2', 'Bisque3', 'Bisque4', + 'SlateBlue3', 'RoyalBlue1', 'SteelBlue2', 'DeepSkyBlue3', 'LightBlue1', + 'DarkSlateGray1', 'Aquamarine2', 'DarkSeaGreen2', 'SeaGreen1', + 'Yellow1', 'IndianRed1', 'IndianRed2', 'Tan1', 'Tan4' +].each{|twind_color| + TkTextWindow.new($twind_text, 'end', + 'window'=>TkButton.new($twind_text) { + text twind_color + cursor 'top_left_arrow' + command proc{$twind_text.bg twind_color} + }, + 'padx'=>3, + 'pady'=>2 ) +} + +# ��å���� +def textWindOn (w,f) + if defined? $twind_scroll + begin + $twind_scroll.destroy + rescue + end + $twind_scroll = nil + end + + base = TkWinfo.parent( TkWinfo.parent(w) ) + $twind_scroll = TkScrollbar.new(base) {|s| + orient 'horizontal' + command proc{|*args| w.xview(*args)} + w.xscrollcommand proc{|first,last| s.set first,last} + w.wrap 'none' + pack('after'=>f, 'side'=>'bottom', 'fill'=>'x') + } + + return nil +end + +def textWindOff (w) + if defined? $twind_scroll + begin + $twind_scroll.destroy + rescue + end + $twind_scroll = nil + end + w.xscrollcommand '' + w.wrap 'word' +end + +def textWindPlot (t) + if (defined? $twind_plot) && (TkWinfo.exist?($twind_plot)) + return + end + + $twind_plot = TkCanvas.new(t) { + relief 'sunken' + width 450 + height 300 + cursor 'top_left_arrow' + } + + font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*' + + TkcLine.new($twind_plot, 100, 250, 400, 250, 'width'=>2) + TkcLine.new($twind_plot, 100, 250, 100, 50, 'width'=>2) + TkcText.new($twind_plot, 225, 20, + 'text'=>"A Simple Plot", 'font'=>font, 'fill'=>'brown') + + (0..10).each {|i| + x = 100 + (i * 30) + TkcLine.new($twind_plot, x, 250, x, 245, 'width'=>2) + TkcText.new($twind_plot, x, 254, + 'text'=>10*i, 'font'=>font, 'anchor'=>'n') + } + (0..5).each {|i| + y = 250 - (i * 40) + TkcLine.new($twind_plot, 100, y, 105, y, 'width'=>2) + TkcText.new($twind_plot, 96, y, + 'text'=>"#{i*50}.0", 'font'=>font, 'anchor'=>'e') + } + + for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]] + x = 100 + (3*xx) + y = 250 - (4*yy)/5 + item = TkcOval.new($twind_plot, x-6, y-6, x+6, y+6, + 'width'=>1, 'outline'=>'black', 'fill'=>'SkyBlue2') + item.addtag 'point' + end + + $twind_plot.itembind('point', 'Any-Enter', + proc{$twind_plot.itemconfigure 'current', 'fill', 'red'}) + $twind_plot.itembind('point', 'Any-Leave', + proc{$twind_plot.itemconfigure 'current', 'fill', 'SkyBlue2'}) + $twind_plot.itembind('point', '1', + proc{|x,y| embPlotDown $twind_plot,x,y}, "%x %y") + $twind_plot.itembind('point', 'ButtonRelease-1', + proc{$twind_plot.dtag 'selected'}) + $twind_plot.bind('B1-Motion', + proc{|x,y| embPlotMove $twind_plot,x,y}, "%x %y") + while ($twind_text.get($mark_plot) =~ /[ \t\n]/) + $twind_text.delete $mark_plot + end + $twind_text.insert $mark_plot,"\n" + TkTextWindow.new($twind_text, $mark_plot, 'window'=>$twind_plot) + $tag_center.add $mark_plot + $twind_text.insert $mark_plot,"\n" +end + +$embPlot = {'lastX'=>0, 'lastY'=>0} + +def embPlotDown (w, x, y) + w.dtag 'selected' + w.addtag_withtag 'selected', 'current' + w.raise 'current' + $embPlot['lastX'] = x + $embPlot['lastY'] = y +end + +def embPlotMove (w, x, y) + w.move 'selected', x - $embPlot['lastX'], y - $embPlot['lastY'] + $embPlot['lastX'] = x + $embPlot['lastY'] = y +end + +def textWindDel (w) + if (defined? $twind_text) && TkWinfo.exist?($twind_plot) + $twind_text.delete $twind_plot + $twind_plot = nil + while ($twind_text.get($mark_plot) =~ /[ \t\n]/) + $twind_text.delete $mark_plot + end + $twind_text.insert $mark_plot," " + end +end + +def embDefBg (w) + w['background'] = w.configinfo('background')[3] +end diff --git a/ext/tk/sample/demos-jp/vscale.rb b/ext/tk/sample/demos-jp/vscale.rb new file mode 100644 index 0000000000..4cb8e0f6b7 --- /dev/null +++ b/ext/tk/sample/demos-jp/vscale.rb @@ -0,0 +1,77 @@ +require "tkcanvas" + +if defined?($vscale_demo) && $vscale_demo + $vscale_demo.destroy + $vscale_demo = nil +end + +$vscale_demo = TkToplevel.new {|w| + title("Vertical Scale Demonstration") + iconname("vscale") +} +positionWindow($vscale_demo) + +msg = TkLabel.new($vscale_demo) { + font $font + wraplength '3.5i' + justify 'left' +# text "���ˤ������1�ĤȾ�ľ�ʥ������뤬ɽ������Ƥ��ޤ���\ +#���������ǥޥ����ܥ���1��å����ޤ��ϥɥ�å������\ +#�����Ĺ�����Ѥ��뤳�Ȥ��Ǥ��ޤ���" + text "�ˤϥС��Ƚķ��Υ������뤬ɽ������Ƥ��ޤ�����������ǥޥ����Υܥ���1 ��å����뤫�ɥ�å����ƥС��ι⤵���Ѥ��뤳�Ȥ��Ǥ��ޤ������ä����λ��ץܥ�����Ƥ���������" +} +msg.pack('side'=>'top', 'padx'=>'.5c') + +TkFrame.new($vscale_demo) {|frame| + TkButton.new(frame) { + text 'λ��' + command proc { + tmppath = $vscale_demo + $vscale_demo = nil + tmppath.destroy + } + }.pack('side'=>'left', 'expand'=>'yes') + + TkButton.new(frame) { + text '�����ɻ���' + command proc { showCode 'vscale' } + }.pack('side'=>'left', 'expand'=>'yes') +}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') + +TkFrame.new($vscale_demo) {|frame| + borderwidth 10 + canvas = TkCanvas.new(frame) {|c| + width 50 + height 50 + bd 0 + highlightthickness 0 + TkcPolygon.new(c, 0, 0, 1, 1, 2, 2) { + fill 'SeaGreen3' + tags 'poly' + } + TkcLine.new(c, 0, 0, 1, 1, 2, 2, 0, 0) { + fill 'black' + tags 'line' + } + }.pack('side'=>'left', 'anchor'=>'nw', 'fill'=>'y') + scale = TkScale.new(frame) { + orient 'vertical' + length 284 + from 0 + to 250 + command proc{|value| setHeight(canvas, value)} + tickinterval 50 + }.pack('side'=>'left', 'anchor'=>'ne') + scale.set 75 +}.pack + + +def setHeight(w, height) + height = height + 21 + y2 = height - 30 + if y2 < 21 + y2 = 21 + end + 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 new file mode 100644 index 0000000000..3d4690d57a --- /dev/null +++ b/ext/tk/sample/demos-jp/widget @@ -0,0 +1,504 @@ +#!/usr/local/bin/ruby + +# tk �ط��饤�֥����ɤ߹��� +require 'tk' +require 'tkafter' + +# widget demo directory ���֤γ��� +$demo_dir = File.dirname($0) + +# root ������ +$root = TkRoot.new{title "Widget Demonstration"} + +# tk �С������μ��� +$tk_version = Tk::TK_VERSION + +# tcl_platform ����ؤΥ����������֥������� +$tk_platform = TkVarAccess.new('tcl_platform') + +# �ե�������� +$font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', nil) +knjfont = '-*--16-*-jisx0208.1983-0' +$kanji_font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', + knjfont) +TkOption.add('*kanjiFont', knjfont, 'startupFile') +$msg_kanji_font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', + '-*--24-*-jisx0208.1983-0') +####### +#case($tk_version) +#when /^4.*/ +# $font = '-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*' +# $kanji_font = '-*--16-*-jisx0208.1983-0' +# $msg_kanji_font = '-*--24-*-jisx0208.1983-0' +# $knjfont_opt = 'kanjifont' +# TkOption.add('*kanjiFont', $kanji_font, 'startupFile') +# +#when /^8.*/ +# Tk.tk_call('font', 'create', '@ascii', +# '-copy', '-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*') +# Tk.tk_call('font', 'create', '@kanji', +# '-copy', '-*--16-*-jisx0208.1983-0') +# Tk.tk_call('font', 'create', '@msg_knj', +# '-copy', '-*--24-*-jisx0208.1983-0') +# Tk.tk_call('font', 'create', '@cFont', '-compound', '@ascii @kanji') +# Tk.tk_call('font', 'create', '@cMsgFont', '-compound', '@ascii @msg_knj') +# $font = '-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*' +# $kanji_font = '@cFont' +# $msg_kanji_font = '@cMsgFont' +# $knjfont_opt = 'font' +#end +####### + +# ��˥塼���� +TkMenubar.new($root, + [[['File', 0], + ['About ... ', proc{aboutBox}, 0, '<F1>'], + '---', + ['Quit', proc{exit}, 0, 'Meta-Q'] + ]]).pack('side'=>'top', 'fill'=>'x') +$root.bind('F1', proc{aboutBox}) + +=begin +TkFrame.new($root){|frame| + TkMenubutton.new(frame){|button| + m = TkMenu.new(button) { + add 'command', 'label'=>'Quit', 'command'=>proc{exit}, 'underline'=>0 + } + menu m + text 'File' + underline 0 + }.pack('side'=>'left') +}.pack('side'=>'top', 'fill'=>'x') +=end + +# �ƥ����ȥܥå��������� +if $tk_version =~ /^4\.[01]/ + scr = TkScrollbar.new($root, 'orient'=>'vertical') + txt = TkText.new($root) { + #wrap 'word' + wrap 'char' + width 60 + height 30 + font $font + setgrid 'yes' + yscrollcommand proc{|first,last| scr.set first,last} + } + scr.command(proc{|*args| txt.yview(*args)}) + scr.pack('side'=>'right', 'fill'=>'y') + txt.pack('expand'=>'yes', 'fill'=>'both') +else + textFrame = TkFrame.new($root) + scr = TkScrollbar.new($root, 'orient'=>'vertical', + 'highlightthickness'=>0, 'takefocus'=>1) { + pack('in'=>textFrame, 'side'=>'right', 'fill'=>'y', 'padx'=>1) + } + txt = TkText.new($root) { + #wrap 'word' + wrap 'char' + width 60 + height 30 + font $font + setgrid 'yes' + highlightthickness 0 + padx 4 + pady 2 + takefocus 0 + yscrollcommand proc{|first,last| scr.set first,last} + } + scr.command(proc{|*args| txt.yview(*args)}) +# txt.pack('in'=>textFrame, 'expand'=>'yes', 'fill'=>'both', 'padx'=>1) + txt.pack('in'=>textFrame, 'expand'=>'yes', 'fill'=>'both') +# textFrame.pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>2) + textFrame.pack('expand'=>'yes', 'fill'=>'both') + + statusBar = TkFrame.new($root) {|f| + $statusBarLabel = \ + TkLabel.new(f, 'text'=>" ", 'relief'=>'sunken', 'bd'=>1, 'anchor'=>'w', + 'font'=>'-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*') \ + .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-*-*-*-*-*-*') \ + .pack('side'=>'left', 'padx'=>2) + }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>2) +end + +# �ƥ����ȥ������� +tag_title = TkTextTag.new(txt, 'font'=>'-*-Helvetica-Bold-R-Normal--*-180-*-*-*-*-*-*') +tag_kanji_title = TkTextTag.new(txt, 'kanjifont'=>$msg_kanji_font) +tag_middle = TkTextTag.new(txt, 'kanjifont'=>$kanji_font) +tag_demospace = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c') + +if TkWinfo.depth($root) == '1' + tag_demo = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', + 'underline'=>1) + $tag_visited = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', + 'underline'=>1) + tag_hot = TkTextTag.new(txt, 'background'=>'black', 'foreground'=>'white') +else + tag_demo = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', + 'foreground'=>'blue', 'underline'=>1) + $tag_visited = TkTextTag.new(txt, 'lmargin1'=>'1c', 'lmargin2'=>'1c', + 'foreground'=>'#303080', 'underline'=>1) +# tag_hot = TkTextTag.new(txt, 'relief'=>'raised', 'borderwidth'=>1, +# 'background'=>'SeaGreen3') + tag_hot = TkTextTag.new(txt, 'borderwidth'=>1, 'foreground'=>'red') +end + +#tag_demo.bind('Button-1', proc{invoke txt, txt.index('current')}) +tag_demo.bind('ButtonRelease-1', + proc{|x,y|invoke txt, txt.index("@#{x},#{y}")}, '%x %y') + +lastLine = TkVariable.new("") +newLine = TkVariable.new("") +tag_demo.bind('Enter', proc{|x,y| + lastLine.value = txt.index("@#{x},#{y} linestart") + tag_hot.add(lastLine.value, "#{lastLine.value} lineend") + showStatus txt, txt.index("@#{x},#{y}") + }, + '%x %y') +tag_demo.bind('Leave', + proc{ + tag_hot.remove('1.0','end') + txt.configure('cursor','xterm') + $statusBarLabel.configure('text'=>"") + }) +tag_demo.bind('Motion', proc{|x, y| + newLine.value = txt.index("@#{x},#{y} linestart") + if newLine.value != lastLine.value + tag_hot.remove('1.0','end') + lastLine.value = newLine.value + if ( txt.tag_names("@#{x},#{y}").find{|t| + t.kind_of?(String) && t =~ /^demo-/ + } ) + tag_hot.add(lastLine.value, + "#{lastLine.value} lineend -1 chars") + end + end + showStatus txt, txt.index("@#{x},#{y}") + }, + '%x %y') + +# �ƥ��������� +txt.insert('end', 'Ruby/Tk : Widget', tag_title) +#txt.insert('end', " �ǥ�ȥ졼�����\n", tag_middle) +txt.insert('end', " �ǥ�ȥ졼�����\n", tag_kanji_title) +txt.insert('end', <<"EOT") + +���Υ��ץꥱ�������ϡ�Tk Widget ���Ѥ��ƤɤΤ褦�ʤ��Ȥ��Ǥ��뤫\ +������Ρ������Ĥ��ξ����ʥ�����ץȤ��Ф���ե���ȥ���ɤ���\ +�����Ƥ��ޤ����ʲ��˽��֤˵��Ƥ���ǥ�ȥ졼������¹�\ +����ˤϥޥ����ǥ���å����Ƥ����������ǥ�ȥ졼�����Υ�����\ +�ɥ��������ȡ��ǥ�ȥ졼�������������� Ruby/Tk �Υ����ɤ�\ +�뤿��ˡ�"�����ɻ���"�ܥ����å����뤳�Ȥ��Ǥ��ޤ������ʤ���\ +˾��ʤ顢���Υ����ɤ������뤳�Ȥ��Ǥ��ޤ����������������ɤǥǥ�\ +�ȥ졼������Ƽ¹Ԥ��뤿��ˤϡ������ɤ��줿������ɥ���\ +����"�ǥ�Ƽ¹�" �ܥ����å����Ƥ��������� + +EOT + +#txt.insert('end',"��٥�, �ܥ���, �����å��ܥ���, �饸���ܥ���\n",tag_middle) +txt.insert('end', "��٥�, �ܥ���, �����å��ܥ���, �饸���ܥ���\n", + tag_kanji_title) +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "1. ��٥� (�ƥ�����, �ӥåȥޥå�)\n", + tag_demo, "demo-label") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "2. �ܥ��� \n", tag_demo, "demo-button") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "3. �����å��ܥ��� (ʣ���������ǽ)\n", + tag_demo, "demo-check") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "4. �饸���ܥ��� (Ǥ�դΰ�Ĥ������ǽ)\n", + tag_demo, "demo-radio") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "5. �ܥ���Ǻ��줿15-�ѥ��륲����\n", + tag_demo, "demo-puzzle") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "6. �ӥåȥޥåפ���Ѥ�����������ܥ���\n", + tag_demo, "demo-icon") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "7. ������ɽ��������ĤΥ�٥�\n", + tag_demo, "demo-image1") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "8. �����뤿��δ�ñ�ʥ桼�������ե�����\n", + tag_demo, "demo-image2") +txt.insert('end', " \n ", tag_demospace) + +txt.insert('end', "\n") +#txt.insert('end', "�ꥹ�ȥܥå���\n", tag_middle) +txt.insert('end', "�ꥹ�ȥܥå���\n", tag_kanji_title) +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "1. ��ƻ�ܸ�.\n", tag_demo, "demo-states") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "2. ��: ���ץꥱ�������Τ�����ۿ����Ѥ���\n", + "#{tag_demo.id} demo-colors") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "3. �ʸ���\n", tag_demo, "demo-sayings") +txt.insert('end', " \n ", tag_demospace) + +txt.insert('end', "\n") +#txt.insert('end', "����ȥ�\n", tag_middle) +txt.insert('end', "����ȥ�\n", tag_kanji_title) +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "1. ����������С��ʤ�\n", tag_demo, "demo-entry1") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "2. ����������С�����\n", tag_demo, "demo-entry2") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "3. ��ñ�ʥե�����\n", tag_demo, "demo-form") +txt.insert('end', " \n ", tag_demospace) + +txt.insert('end', "\n") +#txt.insert('end', "�ƥ�����\n", tag_middle) +txt.insert('end', "�ƥ�����\n", tag_kanji_title) +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "1. ����Ū�ʥƥ�����\n", tag_demo, "demo-text") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "2. ɽ����������.\n", tag_demo, "demo-style") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "3. �ϥ��ѡ��ƥ�����(�����Х����).\n", + tag_demo, "demo-bind") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "4. ������ɥ�����������ƥ�����\n", + tag_demo, "demo-twind") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "5. ����\n", tag_demo, "demo-search") +txt.insert('end', " \n ", tag_demospace) + +txt.insert('end', "\n") +#txt.insert('end', "�����Х�\n", tag_middle) +txt.insert('end', "�����Х�\n", tag_kanji_title) +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "1. �����ƥ�η�\n", tag_demo, "demo-items") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "2. 2 �����Υץ��å�\n", tag_demo, "demo-plot") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "3. �ƥ�����\n", tag_demo, "demo-ctext") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "4. ����η�\n", tag_demo, "demo-arrow") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "5. �롼�顼\n", tag_demo, "demo-ruler") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "6. �ե����ץ��\n", tag_demo, "demo-floor") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "7. �����������ǽ�ʥ����Х�\n", + tag_demo, "demo-cscroll") +txt.insert('end', " \n ", tag_demospace) + +txt.insert('end', "\n") +#txt.insert('end', "��������\n", tag_middle) +txt.insert('end', "��������\n", tag_kanji_title) +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "1. ��ľ\n", tag_demo.id, "demo-vscale") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "2. ��ʿ\n", tag_demo.id, "demo-hscale") +txt.insert('end', " \n ", tag_demospace) + +txt.insert('end', "\n") +#txt.insert('end', "��˥塼\n", tag_middle) +txt.insert('end', "��˥塼\n", tag_kanji_title) +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "1. ��˥塼�ȥ��������ɤ�ޤ��������ɥ�\n", + tag_demo, "demo-menu") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "2. ��˥塼�ȥ��������ɤ�ޤ��������ɥ� (Tk8.x ����)\n", + tag_demo, "demo-menu8x") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "3. ��˥塼�ܥ��� (Tk8.x ����)\n", + tag_demo, "demo-menubu") +txt.insert('end', " \n ", tag_demospace) + +txt.insert('end', "\n") +#txt.insert('end', "����������������ɥ�\n", tag_middle) +txt.insert('end', "����������������ɥ�\n", tag_kanji_title) +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "1. ��å������ܥå���\n", tag_demo, "demo-msgbox") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "2. �ե������������������\n", tag_demo, "demo-filebox") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "3. ���������������\n", tag_demo, "demo-clrpick") +txt.insert('end', " \n ", tag_demospace) + +txt.insert('end', "\n") +#txt.insert('end', "����¾\n", tag_middle) +txt.insert('end', "����¾\n", tag_kanji_title) +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "1. �Ȥ߹��ߤΥӥåȥޥå�\n", tag_demo, "demo-bitmap") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "2. �⡼�������������(�������륰���)\n", + tag_demo, "demo-dialog1") +txt.insert('end', " \n ", tag_demospace) +txt.insert('end', "3. �⡼�������������(�������Х륰���)\n", + tag_demo, "demo-dialog2") +txt.insert('end', " \n ", tag_demospace) + +txt.state('disabled') +scr.focus + +################################ +# method ��� +################################ +def positionWindow(w) + w.geometry('+300+300') +end + +# �ƥ��������åȤȡ��ѿ�̾�� TkVariable �Ȥ���(����)���¤Ӥ��Ϥ� +$showVarsWin = {} +def showVars (parent, *args) + if $showVarsWin[parent.path] + begin + $showVarsWin[parent.path].destroy + rescue + end + end + w = TkToplevel.new(parent) {|w| + title "Variable values" + TkLabel.new(w) { + text "�ѿ���:" + width 20 + anchor 'center' + font '-Adobe-helvetica-medium-r-normal--*-180-*-*-*-*-*-*' + }.pack('side'=>'top', 'fill'=>'x') + len = 1 + args.each{|vnam,vbody| + len = vnam.to_s.length if vnam.to_s.length > len + } + args.each{|vnam,vbody| + TkFrame.new(w){|f| + #TkLabel.new(f, 'text'=>"#{vnam}: ").pack('side'=>'left') + TkLabel.new(f, 'text'=>"#{vnam}: ",'width'=>len+2).pack('side'=>'left') + TkLabel.new(f, 'textvariable'=>vbody, 'anchor'=>'w')\ + .pack('side'=>'left', 'expand'=>'yes', 'fill'=>'x') + }.pack('side'=>'top', 'anchor'=>'w', 'fill'=>'x') + } + TkButton.new(w) { + text "λ��" + command proc{w.destroy} + }.pack('side'=>'bottom', 'pady'=>2) + } + $showVarsWin[parent.path] = w +end + +# �ƥ����Ⱦ�Ǥ� click ���Ф���ư�� +def invoke (txt, index) + tag = txt.tag_names(index).find{|t| t.kind_of?(String) && t =~ /^demo-/} + return unless tag + cursor = txt.cget('cursor') + txt.cursor('watch') + Tk.update +# eval `cat #{tag[5..-1]}.rb` + eval `cat #{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb` + Tk.update +# txt.cursor('xterm') + txt.cursor(cursor) + + $tag_visited.add("#{index} linestart +1 chars", "#{index} lineend +1 chars") +end + +# ����ɽ�� +def showStatus (txt, index) + tag = txt.tag_names(index).find{|t| t.kind_of?(String) && t =~ /^demo-/} + cursor = txt.cget('cursor') + unless tag + $statusBarLabel.configure('text', " ") + newcursor = 'xterm' + else + demoname = tag[5..-1] + $statusBarLabel.configure('text', + "����ץ�ץ������ \"#{demoname}\" �μ¹� ") + newcursor = 'hand2' + end + txt.configure('cursor'=>newcursor) if cursor != newcursor +end + +# �����������ɤ�ɽ�� +def showCode (demo) + file = "#{demo}.rb" + $code_window = nil unless defined? $code_window + if $code_window == nil || TkWinfo.exist?($code_window) == '0' + $code_window = TkToplevel.new(nil) + f = TkFrame.new($code_window) + TkButton.new(f) { + text "λ��" + command proc{ + $code_window.destroy + $code_window = nil + } + }.pack('side'=>'left', 'expand'=>'yes', 'pady'=>2) + TkButton.new(f) { + text "�Ƽ¹�" + command proc{eval($code_text.get('1.0','end'))} + }.pack('side'=>'left', 'expand'=>'yes', 'pady'=>2) +# f.pack('side'=>'bottom', 'expand'=>'yes', 'fill'=>'x') + f.pack('side'=>'bottom', 'fill'=>'x') + + if $tk_version =~ /^4\.[01]/ + s = TkScrollbar.new($code_window, 'orient'=>'vertical') + $code_text = TkText.new($code_window) { + height 40 + setgrid 'yes' + yscrollcommand proc{|first,last| s.set first,last} + } + s.command(proc{|*args| $code_text.yview(*args)}) + s.pack('side'=>'right', 'fill'=>'y') + $code_text.pack('side'=>'left', 'expand'=>'yes', 'fill'=>'both') + else + TkFrame.new($code_window) {|f| + pack('expand'=>'yes', 'fill'=>'both', 'padx'=>1, 'pady'=>1) + + hs = TkScrollbar.new($code_window, 'highlightthickness'=>0, + 'orient'=>'horizontal') + vs = TkScrollbar.new($code_window, 'highlightthickness'=>0, + 'orient'=>'vertical') + $code_text = TkText.new($code_window) {|t| + height 40 + #wrap 'word' + wrap 'char' + xscrollcommand proc{|first,last| hs.set first,last} + yscrollcommand proc{|first,last| vs.set first,last} + setgrid 'yes' + highlightthickness 0 + pady 2 + padx 3 + hs.command(proc{|*args| $code_text.xview(*args)}) + vs.command(proc{|*args| $code_text.yview(*args)}) + } + + $code_text.grid('in'=>f, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>0, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + vs.grid('in'=>f, 'padx'=>1, 'pady'=>1, 'row'=>0, 'column'=>1, + 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') +# xs.grid('in'=>f, 'padx'=>1, 'pady'=>1, 'row'=>1, 'column'=>0, +# 'rowspan'=>1, 'columnspan'=>1, 'sticky'=>'news') + TkGrid.rowconfigure(f, 0, 'weight'=>1, 'minsize'=>0) + TkGrid.columnconfigure(f, 0, 'weight'=>1, 'minsize'=>0) + } + end + else + $code_window.deiconify + $code_window.raise + end + $code_window.title("Demo code: #{file}") + $code_window.iconname(file) +# fid = open(file, 'r') + fid = open([$demo_dir, file].join(File::Separator), 'r') + $code_text.delete('1.0', 'end') + #$code_text.insert('1.0', `cat #{file}`) + $code_text.insert('1.0', fid.read) + #$code_mark = TkTextMark.new($code_text, '1.0') + #$code_text.set_insert('1.0') + TkTextMarkInsert.new($code_text,'1.0') + fid.close +end + +# aboutBox +# +# Pops up a message box with an "about" message +# +def aboutBox + Tk.messageBox('icon'=>'info', 'type'=>'ok', 'title'=>'About Widget Demo', + 'message'=>"Ruby/Tk ���������åȥǥ� Ver.1.2.2\n\n( based on Tk ���������åȥǥ� :: Copyright (c) 1996-1997 Sun Microsystems, Inc. )\n\nRunning Version :: Ruby#{VERSION}/Tk#{$tk_version}#{(Tk::JAPANIZED_TK)? 'jp': ''}") +end + +################################ +# ���٥���Ԥ������� +Tk.mainloop |