help_menu

TCL/TK UseCase4



Abstract : Contains the help windows and procedure. Comments : The on-line help needs 2 text files that contain information. The procedures then search though these files for topics and other information. Complete instructions on adding help entrys and information are located at the end of this document. At this time, there isn't much in the help text files.
# #Help menu by Paul Guglielmino #Part of a class project for COM1205 fall 95 # #This is just a message box to tell the user that help ain't here! proc NoHelp {} { toplevel .nohelp wm title .nohelp "ERROR!" message .nohelp.msg -width 8c -text "The help files can not be found. Help functions will not be available." button .nohelp.noHelpOK -text "OK" -command {destroy .nohelp} pack .nohelp.msg pack .nohelp.noHelpOK } #This proc enables action to take place in the text widget than deletes all #text in it and inserts the new help text that the user selected. proc displayHelp { helpStuff window } { $window configure -state normal $window delete 1.0 end $window insert end $helpStuff $window configure -state disabled } # Proc to get the help text from help file "help2.txt" proc getHelpText { indexNum window } { global helpfile2 set helpText [open $helpfile2 r] set count 0 while { [gets $helpText line] >= 0 } { if {$line == "00"} { incr count } if { $count == $indexNum } { set theHelp "" while { [gets $helpText newLine] != -1} { if { $newLine != "00" } { append theHelp $newLine } else { break } } displayHelp $theHelp $window set theHelp "" break } } } #Finds the help that the user wants from "help1.txt" proc FindHelp { userSel window } { global helpfile1 set helpFile [open $helpfile1 r] while { [gets $helpFile line] >= 0 } { if { [ regexp $userSel $line ] == 1 } { set foo [string index $line [expr [string length $line]-1] ] getHelpText $foo $window break } } close $helpFile } #This proc will display the results of a user's search for them proc SearchBox {} { global searchFor helpfile1 destroy .watch set helpFile [open $helpfile1 r] toplevel .search -borderwidth 3 wm geometry .search 600x300 wm title .search "Search Results" wm iconname .search "Search Results" listbox .search.selectedHelp -relief sunken -exportselection 0 -borderwidth 2 -yscrollcommand ".search.scroll set" text .search.helpText -relief sunken -wrap word -yscrollcommand ".search.scrollHelp set" button .search.done -text "Done" -command "destroy .search" scrollbar .search.scrollHelp -command ".search.helpText yview" scrollbar .search.scroll -command ".search.selectedHelp yview" pack .search.done -side bottom -fill x pack .search.selectedHelp -side left -fill both -ipadx 1c pack .search.scroll -side left -fill y pack .search.scrollHelp -side right -fill y pack .search.helpText -side right -fill both bind .search.selectedHelp { FindHelp [.search.selectedHelp get [.search.selectedHelp curselection] ] .search.helpText } while { [gets $helpFile line] >= 0 } { if [ regexp $searchFor $line ] { set line [string range "$line" 0 [expr [string length "$line"] - 4] ] .search.selectedHelp insert end $line } } close $helpFile } #This proc will display a window in which the user can type his desired search #string and will start the search proc proc HelpMe {} { global searchFor helpfile1 helpfile2 if { [ catch {open $helpfile1 r} result ] || [ catch {open $helpfile2 r} result ] } { NoHelp return } toplevel .watch -borderwidth 4 wm title .watch "Help Search" wm geometry .watch 350x125 label .watch.value -text "What would you like to search for:" entry .watch.entry -width 20 -relief sunken -bd 2 -textvariable searchFor button .watch.go -text "Start Search" -command { SearchBox } button .watch.cancel -text "Cancel Search" -command "destroy .watch" bind .watch.entry { SearchBox } pack .watch.cancel -side bottom -padx 1m -padx 1m pack .watch.go -side bottom pack .watch.value .watch.entry -side left -padx 1m -pady 1m focus .watch.entry } #These procs bring the user to the demeter home page and faq. proc WebHelp {} { exec sh -c "netscape -install http://www.ccs.neu.edu/research/demeter/index.html" } proc WebHelp.faq {} { exec sh -c "netscape -install ftp://ftp.ccs.neu.edu/pub/people/lieber/faq/Demeter-FAQ" } proc DemDrawPage {} { exec sh -c "netscape -install http://www.ccs.neu.edu/home/prat/cddoc" } #This proc will list all the topics in "help1.txt" for the user to see and #select proc listTopics {} { global helpfile1 helpfile2 if { [ catch {open $helpfile1 r} result ] || [ catch {open $helpfile2 r} result ] } { NoHelp return } toplevel .topics wm title .topics "Help Topics" wm geometry .topics 500x400 frame .topics.pick listbox .topics.pick.list -relief sunken -borderwidth 2 scrollbar .topics.pick.textscroll -command ".topics.helpText yview" text .topics.helpText -relief sunken -yscrollcommand ".topics.pick.textscroll set" entry .topics.where -relief sunken -textvariable whereIS button .topics.done -text "Done" -command "destroy .topics" #Pack Everything pack .topics.pick -side top pack .topics.pick.list -side left -fill x -ipadx 1c pack .topics.pick.textscroll -side left -fill y pack .topics.done .topics.helpText -side bottom -fill x set helpText [open $helpfile1 r] while { [gets $helpText line] >= 0 } { set line [string range "$line" 0 [expr [string length "$line"] - 4] ] .topics.pick.list insert end $line } bind .topics.pick.list { FindHelp [.topics.pick.list get [.topics.pick.list curselection] ] .topics.helpText } close $helpText } #The about box! Anyone for pictures? :-) proc about {} { toplevel .about -borderwidth 3 wm title .about "About DemDraw" wm geometry .about 300x475 message .about.people -width 12c -text "This project was headed by: Professor Karl Lieberherr The students working on this project were: Adam N Reitsma Carlos A. Santiago Chandan Bandopadhyay Chih-Chien Ueng Eric Singleton Gary B. Card Jiatong Li Joshua J Houghton Karen D Ready Kevin Chau-Ming Marsha Akeson Michael Robert Boucher Paul Guglielmino Peter Tandara-Kuhns Ronald Westberg Saqib Rehman Steven Kaufman Tim Russo Tom Kneeland Young Soo Yang" button .about.ok -text "OK" -command "destroy .about" pack .about.people pack .about.ok -padx 3m -pady 3m -fill x }