# # Tcl/Tk specific functions # function write_start () { print "proc start {} { handle_" start_name " } " } function write_menu_function_header () { if ( menu_class == "template") { print "proc handle_" menu_name "_template { template_id } {" } else { print "proc handle_" menu_name " {} {" } print "global var_array" } function write_menu_boolean_init ( i ) { # print "global " menu_var[i] print "set var_array(" var_name(menu_var[i]) ") [ get_value " var_name(menu_var[i]) " ]" print "if { [ string length $var_array(" var_name(menu_var[i]) ")] == 0 } { set var_array(" var_name(menu_var[i]) ") off }" return i } function write_menu_input_init ( i ) { # print "global " menu_var[i] print "set var_array(" var_name(menu_var[i]) ") [ get_value " var_name(menu_var[i]) " ]" return i } function write_menu_list_init ( i ) { # print "global " menu_var[i] print "set var_array(" var_name(menu_var[i]) ") [ get_value " var_name(menu_var[i]) " ]" # Special case - '*' means catch all, which in this version equates to "" print "if { $var_array(" var_name(menu_var[i]) ") == \"\" } { set var_array(" var_name(menu_var[i]) ") \"*\" }" list = menu_var[i] while (menu_type[i] == "list" && list == menu_var[i]) { i++ } # This overshoots .. i -- return i } function write_menu_submenu_init ( i ) { # DUMMY return i } function write_menu_text_init ( i ) { # DUMMY return i } function write_menu_menu_header ( i ) { print "toplevel .frame_" frame_name(menu_name) " -class Dialog" print "positionSubWindow .frame_" frame_name(menu_name) print "wm title .frame_" frame_name(menu_name) " \"" menu_title "\"" print "label .frame_" frame_name(menu_name) ".description -text \"" menu_description "\"" print "pack .frame_" frame_name(menu_name) ".description" } function write_menu_entry_submenu ( i ) { # print "button .frame_" frame_name(menu_name) ".item" i " -text \"" menu_text[i] "\" -command { if {[string length [ info commands handle_" menu_data[i] " ]] > 0} { handle_" menu_data[i] " } else { message .error -text \"The menu for \'" menu_data[i] "\' appears to be missing.\" } }" print "button .frame_" frame_name(menu_name) ".item" i " -text \"" menu_text[i] "\" -command { if {[string length [ info commands handle_" menu_data[i] " ]] > 0} { handle_" menu_data[i] " } else { toplevel .error -class Dialog; positionSubWindow .error; wm title .error "Error"; message .error.message -text \"The menu for " menu_data[i] " appears to be missing.\"; button .error.exit -text \"OK\" -command { destroy .error }; pack .error.message .error.exit } } " print "pack .frame_" frame_name(menu_name) ".item" i " -fill x" return i } function write_menu_entry_boolean ( i ) { print "if { [string compare \$var_array(" var_name(menu_var[i]) ") off] && [string compare \$var_array(" var_name(menu_var[i]) ") on] } { if { [string compare \$var_array(" var_name(menu_var[i]) ") 0] } {set var_array(" var_name(menu_var[i]) ") on} else {set var_array(" var_name(menu_var[i]) ") off} }" print "checkbutton .frame_" frame_name(menu_name) ".item" i " -text \"" menu_text[i] "\" -indicatoron true -offvalue \"off\" -onvalue \"on\" -variable var_array(" var_name(menu_var[i]) ")" print "pack .frame_" frame_name(menu_name) ".item" i " -anchor w -padx 10" return i } function write_menu_entry_input ( i ) { print "frame .frame_" frame_name(menu_name) ".item" i print "pack .frame_" frame_name(menu_name) ".item" i " -fill x" print "label .frame_" frame_name(menu_name) ".item" i ".label -text \"" menu_text[i] "\"" print "entry .frame_" frame_name(menu_name) ".item" i ".entry -textvariable var_array(" var_name(menu_var[i]) ")" # print ".frame_" frame_name(menu_name) ".item" i ".entry insert 0 \$" menu_var[i] # print "pack .frame_" frame_name(menu_name) ".item" i ".label .frame_" frame_name(menu_name) ".item" i ".entry -fill x -side left" print "pack .frame_" frame_name(menu_name) ".item" i ".label -side left -anchor w -fill x" print "pack .frame_" frame_name(menu_name) ".item" i ".entry -side right -anchor e -fill x" # print "bind .frame_" frame_name(menu_name) ".item" i ".entry { global " menu_var[i] "; set " menu_var[i] " [ .frame_" frame_name(menu_name) ".item" i ".entry get ] }" return i } function write_menu_entry_list ( i ) { print "radiobutton .frame_" frame_name(menu_name) ".item" i " -text \"" menu_text[i] "\" -value \"" menu_data[i] "\" -variable var_array(" var_name(menu_var[i]) ") -anchor w" print "pack .frame_" frame_name(menu_name) ".item" i " -padx 10 -fill x" return i } function write_menu_entry_text ( i ) { print "label .frame_" frame_name(menu_name) ".item" i " -text \"" menu_text[i] "\"" print "pack .frame_" frame_name(menu_name) ".item" i return i } function write_menu_menu () { # DUMMY } function write_menu_action ( ) { # DUMMY } function write_menu_menu_footer () { if ( menu_class == "template" ) { # print "global " var_name(template_deleted) print "global " frame_name(menu_name) "_deleted" print "set " frame_name(menu_name)"_deleted var_array(" var_name(template_deleted) ")" # print "button .frame_" frame_name(menu_name)".del -text \"Remove " template_text "\" -command { set $" frame_name(menu_name) "_deleted \"on\" ; destroy .frame_" frame_name(menu_name)"; destroy .frame_" menu_name "; handle_" menu_name" } " print "button .frame_" frame_name(menu_name)".del -text \"Remove " template_text "\" -command { set var_array(" var_name(template_deleted) ") \"on\" ; destroy .frame_" frame_name(menu_name)"; destroy .frame_" menu_name "; handle_" menu_name" } " print "pack .frame_" frame_name(menu_name) ".del" } print "frame .frame_" frame_name(menu_name) ".footer" print "pack .frame_" frame_name(menu_name) ".footer" if ( menu_class == "template" ) { print "button .frame_" frame_name(menu_name) ".footer.exit -text \"Ok\" -command { destroy .frame_" frame_name(menu_name)"; destroy .frame_" menu_name "; handle_" menu_name" } " # print "button .frame_" frame_name(menu_name) ".footer.exit -text \"Ok\" -command { destroy .frame_" frame_name(menu_name) "; if {[string length [ info commands " menu_name"_exit ]] > 0 } { " menu_name "_exit } }" } else if ( menu_class == "menu" && menu_exit != "" ) { print "button .frame_" frame_name(menu_name) ".footer.exit -text \"Ok\" -command { destroy .frame_" frame_name(menu_name) "; if {[string length [ info commands " menu_name"_exit ]] > 0 } { " menu_name "_exit }; if {[string length [ info commands " menu_exit " ]] > 0} { " menu_exit " } else {show_error { \"The exit function " menu_exit " appears to be missing\" } } }" } else { print "button .frame_" frame_name(menu_name) ".footer.exit -text \"Ok\" -command { destroy .frame_" frame_name(menu_name) "; if {[string length [ info commands " menu_name"_exit ]] > 0 } { " menu_name "_exit } }" } print "button .frame_" frame_name(menu_name) ".footer.help -text \"Help\" -command { handle_help {" menu_name"} }" print "pack configure .frame_" frame_name(menu_name) ".footer.exit .frame_" frame_name(menu_name) ".footer.help -fill x -side left -padx 5" } function write_menu_function_footer () { print "}" } function write_menu ( line_length, i, line, list, list_item) { # Write out the header write_menu_function_header() # Initialise Values for (i = 0; i < menu_items; i++) { if ( menu_type[i] == "boolean") { i = write_menu_boolean_init(i) } else if ( menu_type[i] == "input") { i = write_menu_input_init(i) } else if ( menu_type[i] == "list") { i = write_menu_list_init(i) } else if ( menu_type[i] == "submenu") { i = write_menu_submenu_init(i) } else if ( menu_type[i] == "text") { i = write_menu_text_init(i) } } # Create Menu ... write_menu_menu_header() for (i = 0; i < menu_items; i++) { if (menu_type[i] == "submenu") { i = write_menu_entry_submenu(i) } else if (menu_type[i] == "boolean") { i = write_menu_entry_boolean(i) } else if (menu_type[i] == "input") { i = write_menu_entry_input(i) } else if (menu_type[i] == "list") { i = write_menu_entry_list(i) } else if (menu_type[i] == "text") { i = write_menu_entry_text(i) } } # Do Menu ... write_menu_menu() # Handle Results ... write_menu_action() write_menu_menu_footer() write_menu_function_footer() } function write_template () { print "proc handle_" menu_name " {} {" print "toplevel .frame_" menu_name " -class Dialog" print "positionSubWindow .frame_" menu_name print "wm title .frame_" menu_name " \"" menu_title "\"" print "label .frame_" menu_name ".description -text \"" template_description "\"" print "pack .frame_" menu_name ".description" print "set template_size [ get_value " template_counter " ] " print "for { set count 1 } { $count <= $template_size } { incr count } {" # Will this work ? print "set temp \"var_array(" template_deleted "_$count)\"" print "set deleted [ get_value $temp ] " print "if { $deleted != \"on\" } {" print "set command_str \"if {[string length [ info commands handle_" menu_name "_template ]] > 0} { handle_" menu_name "_template $count } else { show_error { \\\"The template for " menu_name " appears to be missing\\\" } }\"" print "button \".frame_" menu_name ".item$count\" -text \"" template_text " $count\" -command $command_str" print "pack \".frame_" menu_name ".item$count\" -fill x" print "}" print "}" print "set command_str \"if {[string length [ info commands handle_" menu_name "_template ]] > 0} { set var_array(" template_counter ") $count; handle_" menu_name "_template $count } else { show_error { \\\"The template for " menu_name " appears to be missing\\\" } }\"" print "button .frame_" menu_name ".add -text \"Add " template_text "\" -command $command_str" print "pack .frame_" menu_name ".add -fill x" print "frame .frame_" menu_name ".footer" print "pack .frame_" menu_name ".footer" if ( menu_exit != "" ) { print "button .frame_" menu_name ".footer.exit -text \"Ok\" -command { destroy .frame_" menu_name "; if {[string length [ info commands " menu_exit " ]] > 0} { " menu_exit " } else { show_error { \"The exit function " menu_exit " appears to be missing\" } } }" } else { print "button .frame_" menu_name ".footer.exit -text \"Ok\" -command { destroy .frame_" menu_name " }" } print "button .frame_" menu_name ".footer.help -text \"Help\" -command { handle_help menu_name }" print "pack configure .frame_" menu_name ".footer.exit .frame_" menu_name ".footer.help -fill x -side left -padx 5" print "}" } function var_name ( base ) { if (menu_class == "template" ) { return base "_" "$template_id" } else { return base } } function frame_name ( base ) { if (menu_class == "template" ) { return base "_template" } else { return base } }