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

通讯编程

开发平台:

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_view.tcl,v 1.10 2001/07/30 22:16:46 mehringe Exp $
  17. Animator instproc new_view {} {
  18.     $self instvar netModel viewctr nam_name netViews tlw_
  19.     toplevel $tlw_.v$viewctr
  20.     set w $tlw_.v$viewctr
  21.     incr viewctr
  22.     wm title $w $nam_name
  23.     frame $w.f
  24.     #frame is just to sink the newView
  25.     frame $w.f.f -borderwidth 2 -relief sunken
  26.     # Do not use editview!!
  27.     $netModel view $w.f.f.net
  28.     set newView $w.f.f.net
  29.     lappend netViews $newView
  30.     pack $w.f.f.net -side top -expand true -fill both
  31.     
  32.     $newView xscroll $w.f.hsb
  33.     scrollbar $w.f.hsb -orient horizontal -width 10 -borderwidth 1 
  34.     -command "$newView xview"
  35.     $w.f.hsb set 0.0 1.0
  36.     pack $w.f.hsb -side bottom -fill x
  37.     pack $w.f.f -side top -fill both -expand true
  38.     
  39.     frame $w.f2
  40.     $newView yscroll $w.f2.vsb
  41.     scrollbar $w.f2.vsb -orient vertical -width 10 -borderwidth 1 
  42.     -command "$newView yview"
  43.     $w.f2.vsb set 0.0 1.0
  44.     pack $w.f2.vsb -side top -fill y -expand true
  45.     frame $w.f2.l -width 12 -height 12
  46.     pack $w.f2.l -side top
  47.     frame $w.ctrl -borderwidth 2 -relief groove
  48.     $self build-zoombar $newView $w.ctrl $w
  49.     pack $w.ctrl -side left -fill y
  50.     pack $w.f2 -side right -fill y
  51.     pack $w.f -side left -fill both -expand true
  52.     $self window_bind $w
  53.     $self view_bind $newView
  54. }
  55. Animator instproc energy_view {} {
  56.   $self instvar netView now vslider windows nam_name graphs tlw_ tracefile
  57.   set name "node_energy"
  58.   set graphtrace [new Trace $tracefile $self]
  59.   set netgraph [new EnergyNetworkGraph]
  60.   $windows(title) configure -text "Please wait - reading tracefile..."
  61.   update
  62.   set maxtime [$graphtrace maxtime]
  63.   set mintime [$graphtrace mintime]
  64.   $graphtrace connect $netgraph
  65.   $netgraph timerange $mintime $maxtime
  66.   #force the entire tracefile to be read
  67.   $graphtrace settime $maxtime 1
  68.   set w $tlw_.graph
  69.   if {[winfo exists $w]==0} {
  70.        frame $w
  71.        pack $w -side top -fill x -expand true -after [$vslider frame]
  72.   }
  73.   lappend graphs $netgraph
  74.   frame $w.f$name -borderwidth 2 -relief groove
  75.   pack $w.f$name -side top -expand true -fill both
  76.   label $w.f$name.pr -bitmap pullright -borderwidth 1 -relief raised
  77.   bind $w.f$name.pr <Enter> 
  78.         "$self viewgraph_label "node of no energy left" 
  79.          $w.f$name $w.f$name.pr $netgraph"
  80.   pack $w.f$name.pr -side left
  81.   $netgraph view $w.f$name.view
  82.   #set the current time in the graph
  83.   $netgraph settime $now
  84.   pack $w.f$name.view -side left -expand true 
  85.                -fill both
  86.   frame $w.f$name.l2 -width [expr [$vslider swidth]/2] -height 30
  87.   pack $w.f$name.l2 -side left
  88.   $windows(title) configure -text $nam_name
  89. }
  90. Animator instproc view_drag_start {view x y} {
  91. $self instvar drag
  92. set drag($view,x) $x
  93. set drag($view,y) $y
  94. }
  95. Animator instproc view_drag_motion {view x y} {
  96. $self instvar drag
  97.         set MAX_DRAG_LENGTH 0.008
  98. set dx [expr ($drag($view,x) - $x)]
  99. set dy [expr ($drag($view,y) - $y)]
  100.         if {$dx > $MAX_DRAG_LENGTH} {
  101.           set dx $MAX_DRAG_LENGTH
  102.         }
  103.         if {$dx < -$MAX_DRAG_LENGTH} {
  104.           set dx -$MAX_DRAG_LENGTH
  105.         }
  106.         if {$dy > $MAX_DRAG_LENGTH} {
  107.           set dy $MAX_DRAG_LENGTH
  108.         }
  109.         if {$dy < -$MAX_DRAG_LENGTH} {
  110.           set dy -$MAX_DRAG_LENGTH
  111.         }
  112.         
  113. $view xview scroll $dx world
  114. $view yview scroll $dy world
  115. $self view_drag_start $view $x $y
  116. }
  117. # Creation of an EditView. Currently only one editview is allowed.
  118. Animator instproc new_editview {} {
  119. $self instvar netModel nam_name NETWORK_MODEL tlw_
  120. #if {$NETWORK_MODEL == "NetworkModel"} {
  121. # tk_messageBox -title "Warning" -message 
  122. # "Editing works only with auto layout." 
  123. # -type ok
  124. # return
  125. #}
  126. if [winfo exists $tlw_.editview] { 
  127. return 
  128. }
  129. toplevel $tlw_.editview
  130. set w $tlw_.editview
  131. wm title $w $nam_name
  132. frame $w.f
  133. #frame is just to sink the newView
  134. frame $w.f.f -borderwidth 2 -relief sunken
  135. $netModel editview $w.f.f.edit
  136. set newView $w.f.f.edit
  137. pack $w.f.f.edit -side top -expand true -fill both
  138. $newView xscroll $w.f.hsb
  139. scrollbar $w.f.hsb -orient horizontal -width 10 -borderwidth 1 
  140.     -command "$newView xview"
  141. $w.f.hsb set 0.0 1.0
  142. pack $w.f.hsb -side bottom -fill x
  143. pack $w.f.f -side top -fill both -expand true
  144.     
  145. frame $w.f2
  146. $newView yscroll $w.f2.vsb
  147. scrollbar $w.f2.vsb -orient vertical -width 10 -borderwidth 1 
  148. -command "$newView yview"
  149. $w.f2.vsb set 0.0 1.0
  150. pack $w.f2.vsb -side top -fill y -expand true
  151. frame $w.f2.l -width 12 -height 12
  152. pack $w.f2.l -side top
  153. # Here we are going to put control buttons, but not now
  154. frame $w.ctrl -borderwidth 2 -relief groove
  155. $self build-zoombar $newView $w.ctrl $w
  156. pack $w.ctrl -side left -fill y
  157. pack $w.f2 -side right -fill y
  158. pack $w.f -side left -fill both -expand true
  159. $self editview_bind $w.f.f.edit
  160. }
  161. # Interaction in TkView
  162. Animator instproc editview_bind { ev } {
  163. # If there is some object, then select it; otherwise set current
  164. # point and prepare to start a rubber band rectangle
  165. bind $ev <ButtonPress-1> "$ev setPoint %x %y 0"
  166. # Add an object to selection
  167. bind $ev <Shift-ButtonPress-1> "$ev setPoint %x %y 1"
  168. bind $ev <ButtonRelease-3> "$ev dctag"
  169. # If any object is selected, set the object's position to point (x,y); 
  170. # otherwise set the rubber band rectangle and select all the 
  171. # objects in that rectangle
  172. # Note: we need a default tag for the selection in rubber band.
  173. bind $ev <ButtonRelease-1> "$ev releasePoint %x %y"
  174. # If any object(s) are selected, move the object's shadow to the
  175. # current point; otherwise move the current point and set rubber 
  176. # band
  177. bind $ev <Any-B1-Motion> "$ev moveTo %x %y"
  178. }
  179. Animator instproc clear_editview_bind { ev } {
  180. bind $ev <ButtonPress-1> ""
  181. bind $ev <Shift-ButtonPress-1> ""
  182. bind $ev <ButtonRelease-3> ""
  183. bind $ev <ButtonRelease-1> ""
  184. bind $ev <Any-B1-Motion> ""
  185. $ev view_mode
  186. }