📄 cluster.tk
字号:
pack $frame.m.x -side bottom -fill x -padx 0 -pady 0 \ -ipadx 0 -ipady 0 pack $frame.m.y -side right -fill y -padx 0 -pady 0 -ipadx 0 -ipady 0 pack $frame.m.c -expand true -fill both -padx 0 -pady 0 -ipadx 0 \ -ipady 0 pack $frame.s.label -fill both -expand true -padx 0 -pady 0 -ipadx 0 \ -ipady 0 pack $frame.l $frame.m $frame.s -side top -fill both -anchor nw \ -expand true -padx 0 -pady 0 -ipadx 0 -ipady 0 pack $frame -fill both -expand true -padx 0 -pady 0 -ipadx 0 -ipady 0 return [list $retwidth $retheight]}proc clusterReCreate { frame } { global canvas sysview set retwidth 0 set retheight 0 set sitename [systemNameGet [clusterSystemFrameGet $frame]] set clusterLabel [clusterLabelTextGet $frame] $frame.l.label configure -text $clusterLabel set labelWidth [expr \ 2*$canvas(medBd) + 2*$canvas(medLabelBd) + \ $canvas(medLabelFontWidth)*[string length $clusterLabel]] set labelHeight [expr $canvas(medBd) + 2*$canvas(medLabelBd) \ + $canvas(medLabelFontHeight)] set footerHeader [clusterFooterHeaderGet $frame] $frame.s.label configure -text $footerHeader set footerWidth [expr \ 2*$canvas(medBd) + \ 2*$canvas(medLabelBd) + \ $canvas(medLabelFontWidth)*[string length $footerHeader]] set footerHeight [expr 2*$canvas(medLabelBd) + \ $canvas(medBd) + \ 2*$canvas(medLabelFontHeight)] set canvasFrameWidth [expr $canvas(medBd) + \ 2*$canvas(medCanvasBd)] set canvasFrameHeight [expr 2*$canvas(medCanvasBd)] set totwidth 0 set totheight 0 set x1 0 set y1 0 set pw 0 set ph 0 if {$footerWidth > $labelWidth} { set maxWidth $footerWidth } else { set maxWidth $labelWidth } set nlist [clusterNodesListGet $frame] set llen [llength $nlist] set prevNode "" set rowNodes "" set j 0 for {set i 0} {$i < $llen} {incr i} { set nodeinfo [lindex $nlist $i] set nodename [lindex $nodeinfo 0] set nodelabel $nodename set nodetype [lindex $nodeinfo 1] catch {frame $frame.m.c.$i -borderwidth 0} nodeNamePut $frame.m.c.$i $nodename nodeLabelPut $frame.m.c.$i $nodelabel nodeViewTypePut $frame.m.c.$i $sysview($sitename) nodeTypePut $frame.m.c.$i $nodetype $frame.m.c.canvas delete $frame.m.c.$i set pos [nodeReCreate $frame.m.c.$i] set w [lindex $pos 0] set h [lindex $pos 1] if { $i == 0 } { set rowNodes $frame.m.c.$i incr totwidth $w incr totheight $h } elseif { [expr $j % $canvas(clusterNumBoxesPerRow)] == 0 || \ [expr $totwidth + $w] > $canvas(clusterMaxWidth) } { set rowOffset [expr ($maxWidth - $totwidth) / 2] if {$rowOffset > 0} { foreach fr $rowNodes { nodeOffsetWidthPut $fr $rowOffset } } set rowNodes $frame.m.c.$i set x1 0 incr y1 $ph incr totheight $h if {$totwidth > $maxWidth} { set maxWidth $totwidth } set totwidth $w set j 0 } else { lappend rowNodes $frame.m.c.$i # same row incr x1 $pw incr totwidth $w if {[string compare $prevNode ""] != 0} { nodeNextPut $prevNode $frame.m.c.$i } } pack forget $frame.m.c.$i set wid [$frame.m.c.canvas create window $x1 $y1 \ -window $frame.m.c.$i -anchor nw \ -tags $frame.m.c.$i -width $w -height $h] nodeXposPut $frame.m.c.$i $x1 nodeYposPut $frame.m.c.$i $y1 set pw $w set ph $h set prevNode $frame.m.c.$i incr j } if {[string compare $rowNodes ""] != 0} { set rowOffset [expr ($maxWidth - $totwidth) / 2] if {$rowOffset > 0} { foreach fr $rowNodes { nodeOffsetWidthPut $fr $rowOffset } } } if {$maxWidth > $totwidth} { set totwidth $maxWidth } $frame.m.x.xscroll configure -orient horizontal \ -width $canvas(medLabelFontHeight) \ -command [list $frame.m.c.canvas xview] set scrollHeight [expr \ 2*[lindex [$frame.m.x.xscroll configure -borderwidth] end] \ + [lindex [$frame.m.x.xscroll configure -width] end]] $frame.m.x configure -height $scrollHeight $frame.m.y.yscroll configure -orient vertical \ -width $canvas(medLabelFontHeight) \ -command [list $frame.m.c.canvas yview] set scrollWidth [expr $canvas(medBd) + \ 2*[lindex [$frame.m.y.yscroll configure -borderwidth] end] \ + [lindex [$frame.m.y.yscroll configure -width] end]] $frame.m.y configure -width $scrollWidth clusterScrollRegionWidthPut $frame $totwidth clusterScrollRegionHeightPut $frame $totheight set scrollRegionWidth [clusterScrollRegionWidthGet $frame] set scrollRegionHeight [clusterScrollRegionHeightGet $frame] set retwidth [expr $canvasFrameWidth + $totwidth + $scrollWidth] if {$labelWidth > $retwidth && \ $labelWidth > $footerWidth} { set retwidth $labelWidth } elseif {$footerWidth > $retwidth && \ $footerWidth > $labelWidth} { set retwidth $footerWidth } clusterCanvasWidthPut $frame $totwidth clusterDisplayWidthPut $frame $retwidth set canvWidth $totwidth if { $retwidth > $canvas(clusterMaxWidth) } { set canvWidth [expr $canvas(clusterMaxWidth) - \ $canvasFrameWidth - $scrollWidth] if {$canvWidth > 0} { clusterDisplayWidthPut $frame $canvas(clusterMaxWidth) clusterCanvasWidthPut $frame $canvWidth set retwidth $canvas(clusterMaxWidth) } } set retheight [expr $labelHeight + $canvasFrameHeight + $totheight + \ $scrollHeight + $footerHeight] clusterCanvasHeightPut $frame $totheight clusterDisplayHeightPut $frame $retheight set canvHeight $totheight if { $retheight > $canvas(clusterMaxHeight) } { set canvHeight [expr $canvas(clusterMaxHeight) - \ $labelHeight - $canvasFrameHeight - \ $scrollHeight - $footerHeight] if {$canvHeight > 0} { clusterDisplayHeightPut $frame $canvas(clusterMaxHeight) clusterCanvasHeightPut $frame $canvHeight set retheight $canvas(clusterMaxHeight) } } set canvWidth [clusterCanvasWidthGet $frame] set canvHeight [clusterCanvasHeightGet $frame] $frame.m.c.canvas configure -width $canvWidth -height $canvHeight \ -xscrollcommand [list $frame.m.x.xscroll set] \ -yscrollcommand [list $frame.m.y.yscroll set] \ -scrollregion [list 0 0 $scrollRegionWidth $scrollRegionHeight] catch {pack forget $frame.m.x.xscroll} if {$canvWidth > 0 && $scrollRegionWidth > $canvWidth} { catch {pack $frame.m.x.xscroll -side bottom -fill x -padx 0 \ -pady 0 -ipadx 0 -ipady 0} } catch {pack forget $frame.m.y.yscroll} if {$canvHeight > 0 && $scrollRegionHeight > $canvHeight} { catch {pack $frame.m.y.yscroll -side right -fill y -padx 0 \ -pady 0 -ipadx 0 -ipady 0 -anchor nw} } return [list $retwidth $retheight]}proc clusterRepack {clusterframe} { global canvas if {[string compare $clusterframe ""] == 0} { return } set systemc [systemCanvasGet [clusterSystemFrameGet $clusterframe]] if {[string compare $systemc ""] == 0} { return } set label [clusterLabelGet $clusterframe] set labelf [clusterLabelFrameGet $clusterframe] set canv [clusterCanvasGet $clusterframe] set canvf [clusterCanvasFrameGet $clusterframe] set xscroll [clusterXscrollGet $clusterframe] set xscrollf [clusterXscrollFrameGet $clusterframe] set yscroll [clusterYscrollGet $clusterframe] set yscrollf [clusterYscrollFrameGet $clusterframe] set sbar [clusterStatusBarGet $clusterframe] set sbarf [clusterStatusBarFrameGet $clusterframe] set mframe [clusterMainFrameGet $clusterframe] set footerHeader [lindex [$sbar configure -text] end] set footerWidth [expr 2*$canvas(medBd) + \ 2*$canvas(medLabelBd) + \ $canvas(medLabelFontWidth)*[string length $footerHeader]] set dispWidth [clusterDisplayWidthGet $clusterframe] if {$footerWidth > $dispWidth} { set diff [expr ($footerWidth - $dispWidth) * $canvas(nodeScaleFactor)] clusterPropagateOffset $clusterframe $diff clusterAddWidth $clusterframe $diff set dispWidth $footerWidth } set dispHeight [clusterDisplayHeightGet $clusterframe] set canvWidth [clusterCanvasWidthGet $clusterframe] set canvHeight [clusterCanvasHeightGet $clusterframe] set scrollRegionWidth [clusterScrollRegionWidthGet $clusterframe] set scrollRegionHeight [clusterScrollRegionHeightGet $clusterframe] $systemc delete $clusterframe catch {pack forget $label $sbar $labelf $mframe $sbarf $xscrollf $yscrollf $canvf} if {$canvWidth > 0 && $scrollRegionWidth > $canvWidth} { catch {pack $xscroll -side bottom -fill x -padx 0 -pady 0 -ipadx 0 -ipady 0} } else { catch {pack forget $xscroll} } if {$canvHeight > 0 && $scrollRegionHeight > $canvHeight} { catch {pack $yscroll -side right -fill y -padx 0 -pady 0 -ipadx 0 -ipady 0 -anchor nw} } else { catch {pack forget $yscroll} } $canv configure -width $canvWidth -height $canvHeight \ -scrollregion [list 0 0 $scrollRegionWidth $scrollRegionHeight] pack $label -fill both -expand true -padx 0 -pady 0 -ipadx 0 -ipady 0 pack $canv -fill both -expand true -padx 0 -pady 0 -ipadx 0 -ipady 0 pack $xscrollf -side bottom -fill x -padx 0 -pady 0 -ipadx 0 -ipady 0 pack $yscrollf -side right -fill y -padx 0 -pady 0 -ipadx 0 -ipady 0 pack $canvf -expand true -fill both -padx 0 -pady 0 -ipadx 0 -ipady 0 pack $sbar -fill both -expand true -padx 0 -pady 0 -ipadx 0 -ipady 0 pack $labelf $mframe $sbarf -side top -anchor nw -fill both \ -expand true -padx 0 -pady 0 -ipadx 0 -ipady 0 set dispWidth [clusterDisplayWidthGet $clusterframe] set dispHeight [clusterDisplayHeightGet $clusterframe] $systemc create window [clusterXposGet $clusterframe] \ [clusterYposGet $clusterframe] \ -window $clusterframe -anchor nw \ -tags $clusterframe \ -width [expr $dispWidth + 2*$canvas(medBd)] \ -height $dispHeight}proc clusterStatsUpdate {clusterf status oper} { switch -exact -- $status { OFFLINE { clusterOfflinePoolPut $clusterf \ [expr [clusterOfflinePoolGet $clusterf] $oper 1] } DOWN { clusterDownPoolPut $clusterf \ [expr [clusterDownPoolGet $clusterf] $oper 1] } FREE { clusterAvailPoolPut $clusterf \ [expr [clusterAvailPoolGet $clusterf] $oper 1] } INUSE-SHARED - INUSE-EXCLUSIVE { clusterUsePoolPut $clusterf \ [expr [clusterUsePoolGet $clusterf] $oper 1] } RESERVED { clusterReservedPoolPut $clusterf \ [expr [clusterReservedPoolGet $clusterf] $oper 1] } NOINFO { clusterUnkPoolPut $clusterf \ [expr [clusterUnkPoolGet $clusterf] $oper 1] } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -