ruby--ruby/ext/tk/sample/demos-jp/rolodex-j

300 lines
7.3 KiB
Ruby

#!/usr/bin/env ruby
#
# rolodex --
# このスクリプトは Tom LaStrange の rolodex の一部です。
#
# Copyright (C) 1998 by Takaaki Tateishi <ttate@jaist.ac.jp>
# Time-stamp: "04/04/09 00:32:12 nagai"
#
require "tk"
Tk.encoding = "euc-jp"
def show_help(topic,x=0,y=0)
if( topic.is_a?(TkWindow) )
w = TkWinfo.containing(x,y)
if( w.is_a?(TkWindow) )
if( TkWinfo.exist?(w) )
topic = w
end
end
end
if( $helpTopics.include?(topic) )
msg = $helpTopics[topic]
else
msg = "このトピックについてのヘルプはまだ使用できません"
end
TkDialog.new("title"=>"Rolodex Help",
"message"=>"#{topic}\n\n#{msg}",
"default_button"=>0,
"buttons"=>["OK"])
end
def fillCard
clearAction
$root.frame.entry[1].insert(0, "立石 孝彰")
$root.frame.entry[2].insert(0, "923-1292 石川県")
$root.frame.entry[3].insert(0, "辰口町 旭台 1-1")
$root.frame.entry[4].insert(0, "北陸先端科学技術大学院大学")
$root.frame.entry[5].insert(0,"private")
$root.frame.entry[6].insert(0,"***-***-****")
$root.frame.entry[7].insert(0,"***-***-****")
end
def addAction
for i in 1..7
STDERR.print format("%-12s %s\n",
RolodexFrame::LABEL[i],
$root.frame.entry[i].value)
end
end
def clearAction
for i in 1..7
$root.frame.entry[i].delete(0,"end")
end
end
def fileAction
TkDialog.new("title"=>"File Selection",
"message"=>"これはファイル選択ダイアログのダミーです。\n",
"default_button"=>0,
"buttons"=>["OK"])
STDERR.print "dummy file name\n"
end
def deleteAction
result = TkDialog.new("title"=>"Confirm Action",
"message"=>"よろしいですか?",
"default_button"=>0,
"buttons"=>["キャンセル"])
if( result.value == 0 )
clearAction
end
end
class RolodexFrame < TkFrame
attr_reader :entry, :label
LABEL = ["","名前:","住所","","","電話(自宅):","電話(会社):","Fax:"]
def initialize(parent=nil,keys=nil)
super(parent,keys)
self["relief"] = "flat"
@i = []
@label = []
@entry = []
for i in 1..7
@i[i] = TkFrame.new(self)
@i[i].pack("side"=>"top",
"pady"=>2,
"anchor"=>"e")
@label[i] = TkLabel.new(@i[i],
"text"=>LABEL[i],
"anchor"=>"e")
@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" => "クリアー")
@add = TkButton.new(self, "text" => "追加")
@search = TkButton.new(self, "text" => "検索")
@delete = TkButton.new(self, "text" => "消去")
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"=> "ファイル",
"underline"=>0)
@file_menu = TkMenu.new(@file)
@file_menu.add("command",
"label" => "読み込み ...",
"command" => proc{fileAction},
"underline" => 0)
@file_menu.add("command",
"label" => "終了",
"command" => proc{$root.destroy},
"underline" => 0)
@file.menu(@file_menu)
@file.pack("side"=>"left")
@help = TkMenubutton.new(self,
"text"=> "ヘルプ",
"underline"=>0)
@help_menu = TkMenu.new(@help)
@help_menu.add("command",
"label"=> "コンテキストについて",
"command"=>proc{show_help("コンテキスト")},
"underline"=>3)
@help_menu.add("command",
"label"=> "ヘルプについて",
"command"=>proc{show_help("ヘルプ")},
"underline"=>3)
@help_menu.add("command",
"label"=> "ウィンドウについて",
"command"=>proc{show_help("ウィンドウ")},
"underline"=>3)
@help_menu.add("command",
"label"=> "キー操作について",
"command"=>proc{show_help("キー操作")},
"underline"=>3)
@help_menu.add("command",
"label"=> "バージョン情報",
"command"=>proc{show_help("バージョン情報")},
"underline"=>3)
@help.menu(@help_menu)
@help.pack("side"=>"right")
end
end
class Rolodex < TkRoot
attr_reader :frame, :buttons, :menu
def initialize(*args)
super(*args)
@frame = RolodexFrame.new(self)
@frame.pack("side"=>"top",
"fill"=>"y",
"anchor"=>"center")
@buttons = RolodexButtons.new(self)
@buttons.pack("side"=>"bottom",
"pady"=>2,
"anchor"=>"center")
@menu = RolodexMenuFrame.new(self)
@menu.pack("before"=>@frame,
"side"=>"top",
"fill"=>"x")
end
end
$root = Rolodex.new
$root.buttons.delete.configure("command"=>proc{deleteAction})
$root.buttons.add.configure("command"=>proc{addAction})
$root.buttons.clear.configure("command"=>proc{clearAction})
$root.buttons.search.configure("command"=>proc{addAction; fillCard})
$root.buttons.clear.configure("text"=> "クリアー Ctrl+C")
$root.bind("Control-c",proc{clearAction})
$root.buttons.add.configure("text"=> "追加 Ctrl+A")
$root.bind("Control-a",proc{addAction})
$root.buttons.search.configure("text"=> "検索 Ctrl+S")
$root.bind("Control-s",proc{addAction; fillCard})
$root.buttons.delete.configure("text"=> "消去 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.1j
EOF
Tk.mainloop