private static void InsertMenuFromAttributeIfNecessary(MenuItemsTree <MenuItemOrderingNative> menuTree, HashSet <string> addedMenuItemAttributes, MenuItemsTree <MenuItemScriptCommand> menuItems, string menuName, string currentPrefix, int priority, int parentPriority) { if (currentPrefix == "") { bool mustAddNow = false; if (menuName == null) { mustAddNow = true; } else { mustAddNow = menuName == k_WindowMenuName || menuName == k_HelpMenuName; } if (mustAddNow) { foreach (var menuPerMode in menuItems.menuItemChildrenSorted) { if (!addedMenuItemAttributes.Contains(menuPerMode.name) && (menuName == null || // if there are no menus left we should add every menu item attributes that were not added (!menuPerMode.name.StartsWith(k_HelpMenuName + "/") && // Creating a help menu from attribute should only happen if there are no menus left since Help is the last !(menuName == k_WindowMenuName && menuPerMode.name.StartsWith(k_WindowMenuName + "/"))))) //Creating a window menu from attribute should happen when there are only Help or no menu left, so if the next is Window then we should not add window menu item { addedMenuItemAttributes.Add(menuPerMode.name); menuTree.AddChildSearch(new MenuItemOrderingNative(menuPerMode.name, menuPerMode.name, menuPerMode.priority, menuPerMode.priority)); } } } } else { // find if there is a mode specific menu to insert at this position var menuItemTree = menuItems.FindTree(currentPrefix.Substring(0, currentPrefix.Length - 1)); if (menuItemTree != null) { foreach (var menuPerMode in menuItemTree.menuItemChildrenSorted) { if (!addedMenuItemAttributes.Contains(menuPerMode.name) && (menuPerMode.priority < priority || menuName == null)) { addedMenuItemAttributes.Add(menuPerMode.name); if (menuPerMode.name.Substring(currentPrefix.Length).Contains("/")) { menuTree.AddChildSearch(new MenuItemOrderingNative(menuPerMode.name, menuPerMode.name, menuPerMode.priority, menuPerMode.priority)); } else { menuTree.AddChildSearch(new MenuItemOrderingNative(menuPerMode.name, menuPerMode.name, menuPerMode.priority, parentPriority)); } } } } } }