In reply to izucker:
I am writing a Skill code that creates dynamic menu which change its state according to the design edit state.The pop up menu is getting built with menu items such as the following:hiCreateMenu('myPopupMenu "myPopupMenu" list( hiCreateMenuItem( ?name 'dynamicContext1 ?itemText "item1" ?callback "doSomething()" ?disable isEditable() ))
"isEditable" is a function that will return t/nil according to the design state (read/write).As far as I understand I need to build the entire menu from scratch at each time the menu is getting triggered to get the "disable" state change dynamically, Is that true?
The next question is what should be done on the next menu pop up (menu creation) time? should I unbound "myPopupMenu" first and then create it agian in the same way?Thanks,Itay
First of all, no need to post in the second forum - if needed I will move posts around (as you can see, I merged your two posts).
You don't need to create the menu each time. You could just use:
if(isEditable() then hiDisableMenuItem(myPopupMenu 'dynamicContext1)else hiEnableMenuItem(myPopupMenu 'dynamicContext1))
before calling hiDisplayMenu(). You could make this more compact by doing:
funcall(if(isEditable() 'hiDisableMenuItem 'hiEnableMenuItem) myPopupMenu 'dynamicContext1)
but that's probably less readable than the version above.
If you were to recreate it, you don't need to set it to unbound first.
In reply to Andrew Beckett:
Sorry for the mess in submitting this post :-) I'll try your suggestion, it looks like a good solution that I obviously didn't think of.
In case you recreate a menu, doesn't the old one stay in memory? I do see a new menu id returns each time.Can you explain why unbounding is not needed?
The reason why you don't have to set it to unbound is that the garbage collection will kick in and take care of this. It doesn't matter whether the variable is set to unbound, nil, or indeed a new menu id, the old menu id will cease to be referred to by anything, and hence is a candidate for garbage collection.
Thank you Andrew for this explanation.Your solution works perfectly.