diff options
Diffstat (limited to 'ext/tk/sample/demos-en/rolodex')
-rw-r--r-- | ext/tk/sample/demos-en/rolodex | 320 |
1 files changed, 320 insertions, 0 deletions
diff --git a/ext/tk/sample/demos-en/rolodex b/ext/tk/sample/demos-en/rolodex new file mode 100644 index 0000000000..84254d93bf --- /dev/null +++ b/ext/tk/sample/demos-en/rolodex @@ -0,0 +1,320 @@ +#!/usr/bin/env ruby +# +# rolodex -- +# This script is a part of Tom LaStrange's rolodex +# +# Copyright (C) 1998 by Takaaki Tateishi <ttate@jaist.ac.jp> +# 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 |