• 
      

    Add a model and collections for tracking menu items.

    Review Request #13630 — Created March 13, 2024 and submitted — Latest diff uploaded

    Information

    Ink
    master

    Reviewers

    This introduces the model-level support for menus, consisting of three
    parts:

    • MenuItem: This is a model containing state for any kind of supported
      menu item (a standard action item, checkbox menu item, radio menu
      item, or a separator).

    • MenuItemsCollection: A collection of menu items, which will be used
      as the backing for a menu view.

    • MenuItemsRadioGroup: A radio group for tracking menu items, which
      ensures only one item can be marked as checked at a time.

    The design for MenuItem consolidates all state for all types into one
    model, rather than having subclasses for each type. There are a few
    reasons for this:

    1. It makes it easier to maintain items in a collection and still allow
      instantiation of new entries via the collection's .add().

    2. It avoids needing to do instanceof checks for different operations.

    3. It seems to be common practice (looking at the Apple, Windows, and
      GTK foundational classes for menu items).

    The upcoming MenuView will make use of these classes to provide a full
    menu implementation.

    Unit tests pass.

    Tested this thoroughly with the in-progress MenuView work.

    Commits

    Files