• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. Creating and handling correctly a "dynamic" menu

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 143
  • Views 2544
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Creating and handling correctly a "dynamic" menu

izucker
izucker over 13 years ago

Reformatted below

  • Cancel
  • izucker
    izucker over 13 years ago

    Hi,

    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

     

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • izucker
    izucker over 13 years ago
    Ignore, moved it to "Custom IC Skill" forum
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • izucker
    izucker over 13 years ago
    Hi,
    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
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 13 years ago

    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.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • izucker
    izucker over 13 years ago

    Hi Andrew,

    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?

    Thanks!
    Itay

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 13 years ago

    Itay,

    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.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • izucker
    izucker over 13 years ago

    Thank you Andrew for this explanation.
    Your solution works perfectly.

    Thanks again,
    Itay

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information