menu_file.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:9k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (C) 1998 by USC/ISI
  3. # All rights reserved.                                            
  4. #                                                                
  5. # Redistribution and use in source and binary forms are permitted
  6. # provided that the above copyright notice and this paragraph are
  7. # duplicated in all such forms and that any documentation, advertising
  8. # materials, and other materials related to such distribution and use
  9. # acknowledge that the software was developed by the University of
  10. # Southern California, Information Sciences Institute.  The name of the
  11. # University may not be used to endorse or promote products derived from
  12. # this software without specific prior written permission.
  13. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  14. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  15. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16. # $Header: /cvsroot/nsnam/nam-1/tcl/menu_file.tcl,v 1.5 2000/02/16 01:01:11 haoboy Exp $
  17. #
  18. # Helper functions
  19. #
  20. proc filesel {w dlg args} {
  21.     frame $w -borderwidth 0
  22.     set next ""
  23.     set ctr 0
  24.     foreach arg $args {
  25. if {[string range $arg 0 0]=="-"} {
  26.     switch [string range $arg 1 end] {
  27. "variable" {
  28.     set next variable
  29. }
  30. "command" {
  31.     set next command
  32. }
  33. "label" {
  34.     set next label
  35. }
  36.     }
  37. } else {
  38.     if {$next!=""} {
  39. set vars($next) $arg
  40.     }
  41. }
  42.     }
  43.     global $vars(variable)
  44.     set $vars(variable) [pwd]
  45.     frame $w.f0 -relief sunken -borderwidth 2
  46.     listbox $w.f0.lb -width 50 -height 10 
  47.         -yscroll "$w.f0.sb set" 
  48.         -selectforeground [resource activeForeground] 
  49.         -selectbackground [resource activeBackground] 
  50.         -highlightthickness 0
  51.     scrollbar $w.f0.sb -command "$w.f0.lb yview" 
  52.         -highlightthickness 0
  53.     pack $w.f0.lb -side left
  54.     pack $w.f0.sb -side left -fill y
  55.     pack $w.f0 -side top
  56.     # We should allow flexible labeling 
  57.     label $w.l2 -text $vars(label)
  58.     pack $w.l2 -side top -anchor w
  59.     entry $w.entry -width 50 -relief sunken
  60.     bind $w.entry <Return> 
  61. "checkfile [set $vars(variable)] "w" $w $dlg "$vars(command)""
  62.     $w.entry insert 0 [pwd]
  63.     bind $w.entry <Delete> 
  64. "[bind Entry <BackSpace>];
  65. set $vars(variable) [$w.entry get];break"
  66.     bind $w.entry <BackSpace> 
  67. "[bind Entry <BackSpace>];
  68. set $vars(variable) [$w.entry get];break"
  69.     bind $w.entry <Key> 
  70. "[bind Entry <Key>];
  71. set $vars(variable) [$w.entry get];break"
  72.     bind $w.f0.lb <1> "%W selection set [%W nearest %y];
  73. $w.entry delete 0 end;
  74. set $vars(variable) [pwd]/[%W get [%W nearest %y]]; 
  75. $w.entry insert 0 [pwd]/[%W get [%W nearest %y]]"
  76.     bind $w.f0.lb <Double-Button-1> 
  77. "checkfile [set $vars(variable)] "w" $w $dlg "$vars(command)""
  78.     pack $w.entry -side top -anchor w -fill x -expand true
  79.     
  80.     checkfile [pwd] "r" $w $dlg ""
  81.     return $w
  82. }
  83. proc checkfile {file op w dlg cmd} {
  84.     if {[file isdirectory $file]} {
  85. $w.entry delete 0 end
  86. cd $file
  87. $w.entry insert 0 [pwd]
  88. $w.f0.lb delete 0 end
  89. # insert the parent dir, because glob won't generate it
  90. $w.f0.lb insert end ..
  91. foreach i [glob *] {
  92. $w.f0.lb insert end $i
  93. }
  94.     } elseif {[file isfile $file]} {
  95.     if {$op == "r"} {
  96.     set flag [file readable $file]
  97.     } else {
  98.     set flag [file writable $file]
  99.     }
  100.     if $flag {
  101.     eval $cmd
  102.     destroy $dlg
  103.     } else {
  104.     errorpopup "Error" "File $file is not writable"
  105.     }
  106.     } else {
  107.     # Is it a wild card filter?
  108.     set dirname [file dirname $file]
  109.     set fname [file tail $file]
  110.     if {$dirname != ""} {
  111.     if [catch "cd $dirname"] {
  112.     # bail out
  113.     eval $cmd
  114.     destroy $dlg
  115.     }
  116.     }
  117.     set flist [glob -nocomplain $fname]
  118.     $w.entry delete 0 end
  119.     $w.entry insert 0 [pwd]
  120.     $w.f0.lb delete 0 end
  121.     if [llength $flist] {
  122.     $w.f0.lb insert end ..
  123.     foreach i $flist {
  124.     $w.f0.lb insert end $i
  125.     }
  126.     } else {
  127.     # not expandable, try write it
  128.     if {$op == "w"} {
  129.     eval $cmd
  130.     destroy $dlg
  131.     } else {
  132.     errorpopup "Error" "File $file is not writable"
  133.     }
  134.     }
  135.     }
  136. }
  137. Animator instproc save_layout {} {
  138.     $self instvar netModel tlw_
  139.     $self tkvar savefile
  140.     toplevel $tlw_.save
  141.     set w $tlw_.save
  142.     wm title $w "Save layout"
  143.     frame $w.f -borderwidth 1 -relief raised
  144.     pack $w.f -side top -fill both -expand true
  145.     filesel $w.f.sel $w -variable [$self tkvarname savefile] 
  146.     -command "$netModel savelayout [set [$self tkvarname savefile]]" 
  147.     -label "File to save to:"
  148.     pack $w.f.sel -side top -fill both -expand true
  149.     frame $w.f.btns -borderwidth 0
  150.     pack $w.f.btns -side top -fill x
  151.     button $w.f.btns.save -text Save 
  152.     -command "$self do_save_layout $w.f.sel $w"
  153.     pack $w.f.btns.save -side left -fill x -expand true
  154.     button $w.f.btns.cancel -text Cancel -command "destroy $w"
  155.     pack $w.f.btns.cancel -side left -fill x -expand true
  156.     set savefile [pwd]
  157. }
  158. Animator instproc do_save_layout {w dlg} {
  159. $self instvar netModel
  160. $self tkvar savefile
  161. set t $savefile
  162. puts "save to file $t"
  163. checkfile $t "w" $w $dlg "$netModel savelayout $t"
  164. }
  165. Animator instproc disablefile {w} {
  166.     $w.entry configure -state disabled 
  167.     -foreground [option get . disabledForeground Nam]
  168.     $w.l2 configure -foreground [option get . disabledForeground Nam]
  169.     $w.f0.lb configure -foreground [option get . disabledForeground Nam]
  170. }
  171. Animator instproc normalfile {w filevar} {
  172.     $self tkvar $filevar
  173.     $w.entry configure -state normal 
  174.     -foreground [option get . foreground Nam]
  175.     set $filevar [$w.entry get]
  176.     $w.l2 configure -foreground [option get . foreground Nam]
  177.     $w.f0.lb configure -foreground [option get . foreground Nam]
  178. }
  179. Animator instproc print_view { viewobject windowname } {
  180.     $self tkvar printfile printto 
  181.     $self instvar tlw_
  182.     set p print
  183.  
  184.     if {[winfo exists $tlw_.$windowname-$p]} {
  185.         puts "Quit due to duplicate print view window!"
  186.     }
  187. #    toplevel .print
  188. #    set w .print
  189. #    wm title $w "Print nam animation"
  190.     toplevel $tlw_.$windowname-$p
  191.     set w $tlw_.$windowname-$p
  192.     wm title $w "Print $windowname"    
  193.     frame $w.f -borderwidth 1 -relief raised
  194.     pack $w.f -side top -fill both -expand true
  195.     frame $w.f.f0 
  196.     pack $w.f.f0 -side top -fill x
  197.     label $w.f.f0.l -text "Print to:"
  198.     pack $w.f.f0.l -side left
  199.     $self tkvar printto
  200.     radiobutton $w.f.f0.r1 -text "Printer" -variable [$self tkvarname printto] 
  201.     -value printer -command "$self disablefile $w.f.sel;
  202.     $w.f.f1.e configure -state normal -foreground 
  203.     [option get . foreground Nam];
  204.     $w.f.f1.l configure -foreground [option get . foreground Nam];
  205.     set [$self tkvarname printfile] [$w.f.f1.e get]"
  206.     pack $w.f.f0.r1 -side left 
  207.     radiobutton $w.f.f0.r2 -text "File" -variable [$self tkvarname printto] 
  208.     -value file -command "$self normalfile $w.f.sel printfile;
  209.     $w.f.f1.e configure -state disabled -foreground 
  210.     [option get . disabledForeground Nam];
  211.     $w.f.f1.l configure -foreground 
  212.     [option get . disabledForeground Nam]"
  213.     pack $w.f.f0.r2 -side left 
  214.     frame $w.f.f1 
  215.     pack $w.f.f1 -side top -fill x
  216.     label $w.f.f1.l -text "Print command:"
  217.     pack $w.f.f1.l -side left
  218.     entry $w.f.f1.e 
  219.     pack $w.f.f1.e -side left -fill x -expand true
  220.     bind $w.f.f1.e <Key> "[bind Entry <Key>];
  221.     set [$self tkvarname printfile] [$w.f.f1.e get];break"
  222.     bind $w.f.f1.e <Return> 
  223.     "$self print_animation $viewobject $w"
  224.     set printer ""
  225.     global env
  226.     catch {set printer $env(PRINTER)}
  227.     if {$printer!=""} {
  228. $w.f.f1.e insert 0 "lpr -P$printer "
  229.     } else {
  230. $w.f.f1.e insert 0 "lpr "
  231.     }
  232.     filesel $w.f.sel $w -variable [$self tkvarname printfile] 
  233.     -command "$viewobject psview [set [$self tkvarname printfile]]" 
  234.     -label "File to save to:"
  235.     pack $w.f.sel -side top -fill both -expand true
  236.     frame $w.f.btns -borderwidth 0
  237.     pack $w.f.btns -side top -fill x
  238.     button $w.f.btns.print -text Print 
  239.     -command "$self print_animation $viewobject $w"
  240.     pack $w.f.btns.print -side left -fill x -expand true
  241.     button $w.f.btns.cancel -text Cancel -command "destroy $w"
  242.     pack $w.f.btns.cancel -side left -fill x -expand true
  243.     set printto printer
  244.     set printfile [$w.f.f1.e get]
  245.     $self disablefile $w.f.sel
  246. }
  247. Animator instproc print_animation {viewobject w} {
  248. $self tkvar printto printfile
  249. if {$printto=="file"} {
  250. checkfile $printfile "w" $w.f.sel $w 
  251. "$viewobject psview $printfile"
  252. } else {
  253. $viewobject psview /tmp/nam.ps
  254. puts [eval "exec $printfile /tmp/nam.ps"]
  255. catch {destroy $w}
  256. }
  257. }
  258. Animator instproc show_subtrees {} {
  259.     $self instvar netModel
  260.     $netModel showtrees
  261. }