Revision: 40450
          http://brlcad.svn.sourceforge.net/brlcad/?rev=40450&view=rev
Author:   bob1961
Date:     2010-09-03 17:58:15 +0000 (Fri, 03 Sep 2010)

Log Message:
-----------
Mods to handle multiple instances of comb members.

Modified Paths:
--------------
    brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl

Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl   2010-09-03 15:32:06 UTC 
(rev 40449)
+++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl   2010-09-03 17:58:15 UTC 
(rev 40450)
@@ -697,13 +697,13 @@
 
        # tree commands
        method updateTreeDrawLists        {{_cflag 0}}
-       method fillTree          {_pnode _ctext {_flat 0}}
+       method fillTree          {_pnode _ctext _flat {_allow_multiple 0}}
        method fillTreeColumns   {_cnode _ctext}
        method isRegion          {_cgdata}
        method loadMenu          {_menu _node _nodeType}
        method findTreeChildNodes {_pnode}
        method findTreeParentNodes {_cnode}
-       method getCNodeFromCText {_pnode _text}
+       method getCNodesFromCText {_pnode _text}
        method getTreeImage {_obj _type {_op ""} {_isregion 0}}
        method getTreeNode {_path {_cflag 0}}
        method getTreeNodes {_path {_cflag 0}}
@@ -2108,7 +2108,7 @@
 
        # Anything leftover in mlist needs to be added
        foreach member $mlist {
-           fillTree $_pnode $member $mEnableListView
+           fillTree $_pnode $member $mEnableListView 1
        }
     } else {
        set pgdata [$itk_component(ged) get $ptext]
@@ -2170,12 +2170,14 @@
 
     # Make sure each item has a tree node
     foreach item $scrubbed_items {
-       set cnode [getCNodeFromCText {} $item]
+       set cnodes [getCNodesFromCText {} $item]
 
-       if {$cnode == ""} {
+       if {$cnodes == {}} {
            fillTree {} $item $mEnableListView
        } elseif {!$mEnableListView} {
-           rsyncTree $cnode
+           foreach item $cnodes {
+               rsyncTree $item
+           }
        }
     }
 
@@ -2892,6 +2894,8 @@
     # remove all other unwanted stuff
     regsub -all {^[lun!GXN^-] |\{[lun!GXN^-]|\}} $_tlist "" _tlist
 
+    return $_tlist
+
     # finally, remove any duplicates
     set ntlist {}
     foreach item $_tlist {
@@ -3272,16 +3276,6 @@
                eval lappend mNodeDrawList [lindex [lindex $mText2Node($ditem) 
0] 0]
            } else {
                eval lappend mNodePDrawList [lindex [lindex $mText2Node([lindex 
$dlist 0]) 0] 0]
-#              incr dlen -1
-#              for {set i 0} {$i < $dlen} {incr i} {
-#                  foreach ilist $mText2Node([lindex $dlist $i]) {
-#                      eval lappend mNodePDrawList [lindex $ilist 0]
-#                  }
-#              }
-#
-#              foreach ilist $mText2Node([lindex $dlist end]) {
-#                  eval lappend mNodeDrawList [lindex $ilist 0]
-#              }
            }
        } else {
            set nodesList [getTreeNodes $ditem $_cflag]
@@ -3301,33 +3295,32 @@
     }
 }
 
-::itcl::body ArcherCore::fillTree {_pnode _ctext {_flat 0}} {
-    set cnode [getCNodeFromCText $_pnode $_ctext]
+::itcl::body ArcherCore::fillTree {_pnode _ctext _flat {_allow_multiple 0}} {
+    set cnodes [getCNodesFromCText $_pnode $_ctext]
 
-    # A node for _pnode/_ctext already exists
-    if {$cnode != ""} {
+    # Atleast one node for _pnode/_ctext already exists
+    if {!$_allow_multiple && $cnodes != {}} {
        return
     }
 
     if {[catch {$itk_component(ged) get $_ctext} cgdata]} {
-       return
+       set ctype invalid
+       set isregion 0
+    } else {
+       set ctype [lindex $cgdata 0]
+       set isregion [isRegion $cgdata]
     }
 
-    set ctype [lindex $cgdata 0]
     set ptext $mNode2Text($_pnode)
+    set op [getTreeOp $ptext $_ctext]
+    set img [getTreeImage $_ctext $ctype $op $isregion]
+    set cnode [$itk_component(newtree) insert $_pnode end \
+                  -tags $TREE_POPUP_TAG \
+                  -text $_ctext \
+                  -image $img]
+    fillTreeColumns $cnode $_ctext
 
     if {!$_flat && $ctype == "comb"} {
-       set isregion [isRegion $cgdata]
-
-       set op [getTreeOp $ptext $_ctext]
-       set img [getTreeImage $_ctext $ctype $op $isregion]
-       set cnode [$itk_component(newtree) insert $_pnode end \
-                      -tags $TREE_POPUP_TAG \
-                      -text $_ctext \
-                      -image $img]
-
-       fillTreeColumns $cnode $_ctext
-
        set tree [getTreeFromGData $cgdata]
        set mlist [getTreeMembers $tree]
        if {$mlist != ""} {
@@ -3335,16 +3328,6 @@
            $itk_component(newtree) item $cnode -open false
            addTreePlaceholder $cnode
        }
-    } else {
-       set isregion [isRegion $cgdata]
-       set op [getTreeOp $ptext $_ctext]
-       set img [getTreeImage $_ctext $ctype $op $isregion]
-       set cnode [$itk_component(newtree) insert $_pnode end \
-                      -tags $TREE_POPUP_TAG \
-                      -text $_ctext \
-                      -image $img]
-
-       fillTreeColumns $cnode $_ctext
     }
 
     lappend mText2Node($_ctext) [list $cnode $_pnode]
@@ -3609,17 +3592,21 @@
     return $pnode
 }
 
-::itcl::body ArcherCore::getCNodeFromCText {_pnode _text} {
+::itcl::body ArcherCore::getCNodesFromCText {_pnode _text} {
     if {[catch {set clists $mPNode2CList($_pnode)}]} {
        return ""
     }
 
-    set i [lsearch -index 0 $clists $_text]
-    if {$i != -1} {
-       return [lindex [lindex $clists $i] 1]
+    set cnodes {}
+
+    set ilist [lsearch -all -index 0 $clists $_text]
+    if {$ilist != {}} {
+       foreach i $ilist {
+           lappend cnodes [lindex [lindex $clists $i] 1]
+       }
     }
 
-    return ""
+    return $cnodes
 }
 
 ::itcl::body ArcherCore::getTreeImage {_obj _type {_op ""} {_isregion 0}} {
@@ -3815,29 +3802,26 @@
            set tree [getTreeFromGData $cgdata]
            foreach gctext [getTreeMembers $tree] {
                if {[catch {$itk_component(ged) get $gctext} gcgdata]} {
-                   set gcnode [getCNodeFromCText $cnode $gctext]
-                   if {$gcnode == ""} {
-                       set op [getTreeOp $ctext $gctext]
-                       set img [getTreeImage $gctext "invalid" $op]
+                   set op [getTreeOp $ctext $gctext]
+                   set img [getTreeImage $gctext "invalid" $op]
 
-                       set gcnode [$itk_component(newtree) insert $cnode end \
-                                       -tags $TREE_POPUP_TAG \
-                                       -text $gctext \
-                                       -image $img]
+                   set gcnode [$itk_component(newtree) insert $cnode end \
+                                   -tags $TREE_POPUP_TAG \
+                                   -text $gctext \
+                                   -image $img]
 
-                       fillTreeColumns $gcnode $gctext
+                   fillTreeColumns $gcnode $gctext
 
-                       lappend mText2Node($gctext) [list $gcnode $cnode]
-                       set mNode2Text($gcnode) $gctext
-                       lappend mPNode2CList($cnode) [list $gctext $gcnode]
-                       set mCNode2PList($gcnode) [list $ctext $cnode]
-                   }
+                   lappend mText2Node($gctext) [list $gcnode $cnode]
+                   set mNode2Text($gcnode) $gctext
+                   lappend mPNode2CList($cnode) [list $gctext $gcnode]
+                   set mCNode2PList($gcnode) [list $ctext $cnode]
 
                    continue
                }
 
                # Add gchild members
-               fillTree $cnode $gctext
+               fillTree $cnode $gctext $mEnableListView 1
            }
        }
     }


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
This SF.net Dev2Dev email is sponsored by:

Show off your parallel programming skills.
Enter the Intel(R) Threading Challenge 2010.
http://p.sf.net/sfu/intel-thread-sfd
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to