deleting menu items??

From: Harm Voordenhout (harm_at_nospam.nl)
Date: 12/29/03


Date: Mon, 29 Dec 2003 15:48:14 +0100

Hello all,

I've run across a problem that at this moment completely baffles me.
What I want is to create dynamically some menu items, based on file
input. So far, so good.
But after new input, I may want to change these items. So I thought to
delete the existing items and create new ones. But if one of the new
items (say subItem3) is the same as one of the old ones I get the error
" window name "subItem3" already exists in parent"

I've managed to isolate the problem in some code. I've inserted a bit of
comment to illustrate the steps

---------------------------------------------------------
# First create my menu

menu .menubar
. config -menu .menubar
foreach m {File item1 item2 Help} {
  .menubar add cascade -label $m -menu [menu .menubar.m$m -tearoff 0]
}

.menubar.mFile add command -label "Quit" -command {exit}

set subItemList {{1 {2 3 4}} {3 {4 5 6}}}

    foreach subList $subItemList {
      set resourceNr [lindex $subList 0]
      set labelText "subItem $resourceNr"
      .menubar.mitem1 add cascade -label $labelText -menu [menu
.menubar.mitem1.subItem$resourceNr \
           -tearoff 0] -state active
      .menubar.mitem2 add cascade -label $labelText -menu [menu
.menubar.mitem2.subItem$resourceNr \
           -tearoff 0] -state active
      foreach capability [lindex $subList 1] {
        set labelText [format "Capability %s" $capability]
        .menubar.mitem1.subItem$resourceNr add command -label $labelText
-command \
            [format "puts %s_%s" $resourceNr \
              $capability] -state active
        .menubar.mitem2.subItem$resourceNr add command -label $labelText
-command \
          [format "puts %s_%s" $resourceNr \
              $capability] -state active
      }
    }

# at this point everything looks fine, I get what I want

    foreach subList $subItemList {
      set resourceNr [lindex $subList 0]
      foreach capability [lindex $subList 1] {
        .menubar.mitem1.subItem$resourceNr delete 0 end
        .menubar.mitem2.subItem$resourceNr delete 0 end
      }
      .menubar.mitem1 delete 0 end
      .menubar.mitem2 delete 0 end
    }

# at this point, everything still looks fine, my menu-items are gone

#next I want to create new menu-items and this is where I run into
problems

set subItemList {{2 {7 8 4}} {3 {3 2 1}}}

    foreach subList $subItemList {
      set resourceNr [lindex $subList 0]
      set labelText "subItem $resourceNr"
      .menubar.mitem1 add cascade -label $labelText -menu [menu
.menubar.mitem1.subItem$resourceNr \
           -tearoff 0] -state active
      .menubar.mitem2 add cascade -label $labelText -menu [menu
.menubar.mitem2.subItem$resourceNr \
           -tearoff 0] -state active
      foreach capability [lindex $subList 1] {
        set labelText [format "Capability %s" $capability]
        .menubar.mitem1.subItem$resourceNr add command -label $labelText
-command \
            [format "puts %s_%s" $resourceNr \
              $capability] -state active
        .menubar.mitem2.subItem$resourceNr add command -label $labelText
-command \
          [format "puts %s_%s" $resourceNr \
              $capability] -state active
      }
    }

---------------------------------------------------------------

So, can anyone tell me what I do wrong? Thanks in advance for any
answers.

Greetings,

Harm Voordenhout