]> git.entuzijast.net Git - imunes.git/commitdiff
Bug found by:
authormarko <marko>
Mon, 26 Mar 2007 11:51:39 +0000 (11:51 +0000)
committermarko <marko>
Mon, 26 Mar 2007 11:51:39 +0000 (11:51 +0000)
Submitted by:
Requested by:
Reviewed by:
Approved by:
Obtained from:

Do not show odd grid lines when zooming is set to or lower than 50%.

Refactor TopoGen procedures so that they can operate on already
existing nodes.

Implement utilities for connecting selected nodes in a chain, star,
cycle or clique topology.  The functions are accessible when
holding the right button over a selected node.

Minor indentation cleanups.

editor.tcl
topogen.tcl

index 9362e6bf06356ee3fd8d07b6c1933530ca48b6e1..f6b553119a97b1444ecc0159861f9890d17d1f7a 100755 (executable)
@@ -149,9 +149,9 @@ proc updateUndoLog {} {
        set t_undolog ""
        dumpCfg string t_undolog
        incr undolevel
-        if { $undolevel == 1 } {
-            .menubar.edit entryconfigure "Undo" -state normal 
-        }
+       if { $undolevel == 1 } {
+           .menubar.edit entryconfigure "Undo" -state normal
+       }
        set undolog($undolevel) $t_undolog
        set redolevel $undolevel
        set changed 0
@@ -172,11 +172,10 @@ proc undo {} {
     global undolevel undolog oper_mode
 
     if {$oper_mode == "edit" && $undolevel > 0} {
-        .menubar.edit entryconfigure "Redo" -state normal 
        incr undolevel -1
-        if { $undolevel == 0 } {
-            .menubar.edit entryconfigure "Undo" -state disabled 
-        }
+       if { $undolevel == 0 } {
+           .menubar.edit entryconfigure "Undo" -state disabled
+       }
        .c config -cursor watch
        loadCfg $undolog($undolevel)
        switchCanvas none
@@ -200,12 +199,12 @@ proc redo {} {
 
     if {$oper_mode == "edit" && $redolevel > $undolevel} {
        incr undolevel
-        if { $undolevel == 1 } {
-            .menubar.edit entryconfigure "Undo" -state normal 
-        }
-        if {$redolevel <= $undolevel} {
-            .menubar.edit entryconfigure "Redo" -state disabled 
-        }
+       if { $undolevel == 1 } {
+           .menubar.edit entryconfigure "Undo" -state normal
+       }
+       if {$redolevel <= $undolevel} {
+           .menubar.edit entryconfigure "Redo" -state disabled
+       }
        .c config -cursor watch
        loadCfg $undolog($undolevel)
        switchCanvas none
@@ -243,8 +242,10 @@ proc redrawAll {} {
     if { 1 } {
        for { set x $e_grid } { $x < $e_sizex } { incr x $e_grid } {
            if { [expr {$x % $e_grid2}] != 0 } {
-               .c create line $x 1 $x $e_sizey -fill gray -dash {1 7} \
-                   -tags "background"
+               if { $zoom > 0.5 } {
+                   .c create line $x 1 $x $e_sizey \
+                       -fill gray -dash {1 7} -tags "background"
+               }
            } else {
                .c create line $x 1 $x $e_sizey -fill gray -dash {1 3} \
                    -tags "background"
@@ -252,8 +253,10 @@ proc redrawAll {} {
        }
        for { set y $e_grid } { $y < $e_sizey } { incr y $e_grid } {
            if { [expr {$y % $e_grid2}] != 0 } {
-               .c create line 1 $y $e_sizex $y -fill gray -dash {1 7} \
-                   -tags "background"
+               if { $zoom > 0.5 } {
+                   .c create line 1 $y $e_sizex $y \
+                       -fill gray -dash {1 7} -tags "background"
+               }
            } else {
                .c create line 1 $y $e_sizex $y -fill gray -dash {1 3} \
                    -tags "background"
@@ -763,19 +766,32 @@ proc selectNodes { nodelist } {
     }
 }
 
-proc selectAdjacent {} {
-    global curcanvas
+proc selectedNodes {} {
+    set selected {}
+    foreach obj [.c find withtag "node && selected"] {
+       lappend selected [lindex [.c gettags $obj] 1]
+    }
+    return $selected
+}
 
+proc selectedRealNodes {} {
     set selected {}
-    set adjacent {}
     foreach obj [.c find withtag "node && selected"] {
        set node [lindex [.c gettags $obj] 1]
-       if { [getNodeCanvas $node] != $curcanvas || \
-           [getNodeMirror $node] != "" } {
-           return
+       if { [getNodeMirror $node] != "" ||
+           [nodeType $node] == "rj45" } {
+           continue
        }
        lappend selected $node
     }
+    return $selected
+}
+
+proc selectAdjacent {} {
+    global curcanvas
+
+    set selected [selectedNodes]
+    set adjacent {}
     foreach node $selected {
        foreach ifc [ifcList $node] {
            set peer [peerByIfc $node $ifc]
@@ -884,10 +900,8 @@ proc button3link { c x y } {
 proc movetoCanvas { canvas } {
     global changed
 
-    set selected_nodes {}
-    foreach obj [.c find withtag "node && selected"] {
-       set node [lindex [.c gettags $obj] 1]
-       lappend selected_nodes $node
+    set selected_nodes [selectedNodes]
+    foreach node $selected_nodes {
        setNodeCanvas $node $canvas
        set changed 1
     }
@@ -1027,12 +1041,24 @@ proc button3node { c x y } {
        .button3menu add cascade -label "Create link to" \
            -menu .button3menu.connect
     }
-    .button3menu.connect add command -label "Canvas:" -state disabled
+    destroy .button3menu.connect.selected
+    menu .button3menu.connect.selected -tearoff 0
+    .button3menu.connect add cascade -label "Selected" \
+       -menu .button3menu.connect.selected
+    .button3menu.connect.selected add command \
+           -label "Chain" -command "P \[selectedRealNodes\]"
+    .button3menu.connect.selected add command \
+           -label "Star" \
+           -command "Kb \[lindex \[selectedRealNodes\] 0\] \
+               \[lrange \[selectedNodes\] 1 end\]"
+    .button3menu.connect.selected add command \
+           -label "Cycle" -command "C \[selectedRealNodes\]"
+    .button3menu.connect.selected add command \
+           -label "Clique" -command "K \[selectedRealNodes\]"
+    .button3menu.connect add separator
     foreach canvas $canvas_list {
        destroy .button3menu.connect.$canvas
        menu .button3menu.connect.$canvas -tearoff 0
-       .button3menu.connect.$canvas add command \
-           -label "Node:" -state disabled
        .button3menu.connect add cascade -label [getCanvasName $canvas] \
            -menu .button3menu.connect.$canvas
     }
@@ -1448,7 +1474,7 @@ proc newGUILink { lnode1 lnode2 } {
 #****
 proc button1-release { c x y } {
     global node_list activetool newlink curobj grid
-    global changed undolog undolevel redolevel selectbox selected
+    global changed undolog undolevel redolevel selectbox
     global lastX lastY sizex sizey zoom
     global autorearrange_enabled
 
@@ -2602,8 +2628,7 @@ proc deleteSelection { } {
     catch {unset viewid}
     .c config -cursor watch; update
 
-    foreach obj [.c find withtag "node && selected"] {
-       set lnode [lindex [.c gettags $obj] 1]
+    foreach lnode [selectedNodes] {
        if { $lnode != "" } {
            removeGUINode $lnode
        }
@@ -2621,7 +2646,7 @@ proc deleteSelection { } {
 
 
 proc align2grid {} {
-    global sizex sizey grid zoom changed
+    global sizex sizey grid zoom
 
     set node_objects [.c find withtag node]
     if { [llength $node_objects] == 0 } {
index 02bb535483cf8e30ca6be06caad4288058ae6a03..af47465a4319a50d56d147594a7c9754baf38c71 100755 (executable)
@@ -36,42 +36,45 @@ set m .menubar.t_g.chain
 menu $m -tearoff 0
 .menubar.t_g add cascade -label "Chain" -menu $m -underline 0 -state disabled
 for { set i 2 } { $i <= 24 } { incr i } {
-    $m add command -label "P($i)" -command "P $i"
+    $m add command -label "P($i)" -command "P \[newNodes $i\]"
 }
 
 set m .menubar.t_g.star
 menu $m -tearoff 0
 .menubar.t_g add cascade -label "Star" -menu $m -underline 0 -state disabled
 for { set i 3 } { $i <= 25 } { incr i } {
-    $m add command -label "S($i)" -command "S $i"
+    $m add command -label "S($i)" \
+       -command "Kb \[newNodes 1\] \[newNodes [expr {$i - 1}]\]"
 }
 
 set m .menubar.t_g.cycle
 menu $m -tearoff 0
 .menubar.t_g add cascade -label "Cycle" -menu $m -underline 0 -state disabled
 for { set i 3 } { $i <= 24 } { incr i } {
-    $m add command -label "C($i)" -command "C $i"
+    $m add command -label "C($i)" -command "C \[newNodes $i\]"
 }
 
 set m .menubar.t_g.wheel
 menu $m -tearoff 0
 .menubar.t_g add cascade -label "Wheel" -menu $m -underline 0 -state disabled
 for { set i 4 } { $i <= 25 } { incr i } {
-    $m add command -label "W($i)" -command "W $i"
+    $m add command -label "W($i)" \
+       -command "W \"\[newNodes 1\] \[newNodes [expr {$i - 1}]\]\""
 }
 
 set m .menubar.t_g.cube
 menu $m -tearoff 0
 .menubar.t_g add cascade -label "Cube" -menu $m -underline 0 -state disabled
 for { set i 2 } { $i <= 6 } { incr i } {
-    $m add command -label "Q($i)" -command "Q $i"
+    $m add command -label "Q($i)" \
+       -command "Q \[newNodes [expr {int(pow(2,$i))}]\]"
 }
 
 set m .menubar.t_g.clique
 menu $m -tearoff 0
 .menubar.t_g add cascade -label "Clique" -menu $m -underline 0 -state disabled
 for { set i 3 } { $i <= 24 } { incr i } {
-    $m add command -label "K($i)" -command "K $i"
+    $m add command -label "K($i)" -command "K \[newNodes $i\]"
 }
 
 set m .menubar.t_g.bipartite
@@ -83,27 +86,27 @@ for { set i 1 } { $i <= 12 } { incr i } {
     menu $n -tearoff 0
     $m add cascade -label "K($i,N)" -menu $n -underline 0
     for { set j $i } { $j <= [expr {24 - $i}] } { incr j } {
-       $n add command -label "K($i,$j)" -command "Kb $i $j"
+       $n add command -label "K($i,$j)" -command "Kbhelper $i $j"
     }
 }
 
 
-proc newNodes { node_type n } {
-    global curcanvas grid sizex sizey
+proc newNodes { n } {
+    global curcanvas grid sizex sizey activetool
 
     set v {}
     set r [expr {($n - 1) * (1 + 4 / $n) * $grid / 2}]
     set x0 [expr {$sizex / 2}]
     set y0 [expr {$sizey / 2}]
     set twopidivn [expr {acos(0) * 4 / $n}]
-    if { $node_type == "router" } {
+    if { $activetool == "router" } {
        set dy 24
     } else {
        set dy 32
     }
 
     for { set i 0 } { $i < $n } { incr i } {
-       set new_node [newNode $node_type]
+       set new_node [newNode $activetool]
        set x [expr {$x0 + $r * cos($twopidivn * $i)}]
        set y [expr {$y0 - $r * sin($twopidivn * $i)}]
        setNodeCoords $new_node "$x $y"
@@ -115,94 +118,60 @@ proc newNodes { node_type n } {
     return $v
 }
 
-proc topoGenDone { nodes } {
+proc topoGenDone { v } {
     global changed
 
     set changed 1
     updateUndoLog
     redrawAll
-    selectNodes $nodes
+    selectNodes $v
 }
 
 #
 # Chain
 #
-proc P { n } {
-    global activetool
-
+proc P { v } {
     .c config -cursor watch; update
-
-    set v [newNodes $activetool $n]
+    set n [llength $v]
     for { set i 0 } { $i < [expr {$n - 1}] } { incr i } {
        newLink [lindex $v $i] [lindex $v [expr {($i + 1) % $n}]]
     }
-
     topoGenDone $v
 }
 
-#
-# Star
-#
-proc S { n } {
-    global activetool
-
-    .c config -cursor watch; update
-
-    incr n -1
-    set cv [newNodes $activetool 1]
-    set v [newNodes $activetool $n]
-    for { set i 0 } { $i < $n } { incr i } {
-       newLink [lindex $v $i] $cv
-    }
-
-    topoGenDone "$cv $v"
-}
-
 #
 # Cycle
 #
-proc C { n } {
-    global activetool
-
+proc C { v } {
     .c config -cursor watch; update
-
-    set v [newNodes $activetool $n]
+    set n [llength $v]
     for { set i 0 } { $i < $n } { incr i } {
        newLink [lindex $v $i] [lindex $v [expr {($i + 1) % $n}]]
     }
-
     topoGenDone $v
 }
 
 #
 # Wheel 
 #
-proc W { n } {
-    global activetool
-
+proc W { v } {
     .c config -cursor watch; update
-
-    incr n -1
-    set cv [newNodes $activetool 1]
-    set v [newNodes $activetool $n]
-    for { set i 0 } { $i < $n } { incr i } {
-       newLink [lindex $v $i] [lindex $v [expr {($i + 1) % $n}]]
-       newLink [lindex $v $i] $cv
+    set n [llength $v]
+    set vr [lindex $v 0]
+    set vt "$v [lindex $v 1]"
+    for { set i 1 } { $i < $n } { incr i } {
+       newLink $vr [lindex $v $i]
+       newLink [lindex $v $i] [lindex $vt [expr {$i + 1}]]
     }
-
-    topoGenDone "$cv $v"
+    topoGenDone $v
 }
 
 #
 # Cube
 #
-proc Q { order } {
-    global activetool
-
-    .c config -cursor watch; update
-
-    set n [expr {int(pow(2,$order))}]
-    set v [newNodes $activetool $n]
+proc Q { v } {
+    set n [llength $v]
+    set order [expr int(log($n)/log(2))]
     for { set i 0 } { $i < $order } { incr i } {
        animateCursor
        set d [expr {int(pow(2, $i))}]
@@ -212,40 +181,39 @@ proc Q { order } {
            }
        }
     }
-
     topoGenDone $v
 }
 
 #
 # Clique
 #
-proc K { n } {
-    global activetool
-
-    set v [newNodes $activetool $n]
+proc K { v } {
+    set n [llength $v]
     for { set i 0 } { $i < [expr {$n - 1}] } { incr i } {
        animateCursor
        for { set j [expr {$i + 1}] } { $j < $n } {incr j } {
            newLink [lindex $v $i] [lindex $v $j]
        }
     }
-
     topoGenDone $v
 }
 
 #
 # Bipartite
 #
-proc Kb { n m } {
-    global activetool
-
-    set v [newNodes $activetool [expr {$n + $m}]]
-    for { set i 0 } { $i < $n } { incr i } {
+proc Kb { v1 v2 } {
+    set n1 [llength $v1]
+    set n2 [llength $v2]
+    for { set i 0 } { $i < $n1 } { incr i } {
        animateCursor
-       for { set j 0 } { $j < $m } {incr j } {
-           newLink [lindex $v $i] [lindex $v [expr { $j + $n }]]
+       for { set j 0 } { $j < $n2 } {incr j } {
+           newLink [lindex $v1 $i] [lindex $v2 $j]
        }
     }
+    topoGenDone "$v1 $v2"
+}
 
-    topoGenDone $v
+proc Kbhelper { n m } {
+    set v [newNodes [expr $n + $m]]
+    Kb [lrange $v 0 [expr $n -1]] [lrange $v $n end]
 }