# AddItem

> Add an item to the menu.

## Definition

* **Type:** Method
* **Namespace:** [UnityEditor](/engine/6000.5/script-reference/unityeditor.md)
* **Assembly:** UnityEditor.CoreModule

## AddItem(GUIContent, bool, MenuFunction)

Add an item to the menu.

```csharp
public void AddItem(GUIContent content, bool on, GenericMenu.MenuFunction func)
```

### Parameters

**** (\[GUIContent]\(/engine/6000.5/script-reference/unityengine/guicontent)): The GUIContent to add as a menu item.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Specifies whether to show the item is currently activated (i.e. a tick next to the item in the menu).**** (\[MenuFunction]\(/engine/6000.5/script-reference/unityeditor/genericmenu/menufunction)): The function to call when the menu item is selected.

### Remarks

Additional Resources: [GenericMenu.AddDisabledItem](/engine/6000.5/script-reference/unityeditor/genericmenu/adddisableditem.md), [GenericMenu.AddSeparator](/engine/6000.5/script-reference/unityeditor/genericmenu/addseparator.md).

## AddItem(GUIContent, bool, MenuFunction2, Object)

Add an item to the menu.

```csharp
public void AddItem(GUIContent content, bool on, GenericMenu.MenuFunction2 func, object userData)
```

### Parameters

**** (\[GUIContent]\(/engine/6000.5/script-reference/unityengine/guicontent)): The GUIContent to add as a menu item.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Specifies whether to show the item is currently activated (i.e. a tick next to the item in the menu).**** (\[MenuFunction2]\(/engine/6000.5/script-reference/unityeditor/genericmenu/menufunction2)): The function to call when the menu item is selected.**** (\[Object]\(https\://learn.microsoft.com/dotnet/api/system.object)): The data to pass to the function called when the item is selected.

### Remarks

Additional Resources: [GenericMenu.AddDisabledItem](/engine/6000.5/script-reference/unityeditor/genericmenu/adddisableditem.md), [GenericMenu.AddSeparator](/engine/6000.5/script-reference/unityeditor/genericmenu/addseparator.md).

### Examples

```csharp
// This example shows how to create a context menu inside a custom EditorWindow.
using UnityEngine;
using UnityEditor;

public class MyWindow : EditorWindow
{
    [MenuItem("TestContextMenu/Open Window")]
    public static void Init()
    {
        var window = GetWindow(typeof(MyWindow));
        window.position = new Rect(50, 50, 250, 60);
        window.Show();
    }

    public void Callback(object obj)
    {
        Debug.Log("Selected: " + obj);
    }

    public void OnGUI()
    {
        Event evt = Event.current;
        Rect contextRect = new Rect(10, 10, 100, 100);

        if (evt.type == EventType.ContextClick)
        {
            Vector2 mousePos = evt.mousePosition;
            if (contextRect.Contains(mousePos))
            {
                // Now create the menu, add items and show it
                GenericMenu menu = new GenericMenu();

                menu.AddItem(new GUIContent("MenuItem1"), false, Callback, "item 1");
                menu.AddItem(new GUIContent("MenuItem2"), false, Callback, "item 2");
                menu.AddSeparator("");
                menu.AddItem(new GUIContent("SubMenu/MenuItem3"), false, Callback, "item 3");
                menu.AddItem(new GUIContent("SubMenu/MenuItem4"), false, Callback, "item 4");
                menu.AddItem(new GUIContent("SubMenu/MenuItem5"), false, Callback, "item 5");
                menu.AddSeparator("SubMenu/");
                menu.AddItem(new GUIContent("SubMenu/MenuItem6"), false, Callback, "item 6");

                menu.ShowAsContext();

                evt.Use();
            }
        }
    }
}
```

```csharp
// This example shows how to create a context menu inside a custom EditorWindow.
using UnityEngine;
using UnityEditor;

public class MyWindow : EditorWindow
{
    [MenuItem("TestContextMenu/Open Window")]
    public static void Init()
    {
        var window = GetWindow(typeof(MyWindow));
        window.position = new Rect(50, 50, 250, 60);
        window.Show();
    }

    bool item2enabled = false;
    public void Toggle()
    {
        item2enabled = !item2enabled;
        Debug.Log("item2enabled: " + item2enabled);
    }

    public void Item2Callback()
    {
        Debug.Log("Item 2 Selected");
    }

    public void OnGUI()
    {
        Event evt = Event.current;
        Rect contextRect = new Rect(10, 10, 100, 100);

        if (evt.type == EventType.ContextClick)
        {
            Vector2 mousePos = evt.mousePosition;
            if (contextRect.Contains(mousePos))
            {
                // Now create the menu, add items and show it
                GenericMenu menu = new GenericMenu();

                menu.AddItem(new GUIContent("Toggle item 2"), item2enabled, Toggle);
                if (item2enabled)
                {
                    menu.AddItem(new GUIContent("Item 2"), false, Item2Callback);
                }
                else
                {
                    menu.AddDisabledItem(new GUIContent("Item 2"));
                }

                menu.ShowAsContext();

                evt.Use();
            }
        }
    }
}
```
