#ifndef GROUPED_MENU_H #define GROUPED_MENU_H #include #include #include namespace BPrivate { class TGroupedMenu; class TMenuItemGroup { public: TMenuItemGroup(const char* name); ~TMenuItemGroup(); bool AddItem(BMenuItem* item); bool AddItem(BMenuItem* item, int32 atIndex); bool AddItem(BMenu* menu); bool AddItem(BMenu* menu, int32 atIndex); bool RemoveItem(BMenuItem* item); bool RemoveItem(BMenu* menu); BMenuItem* RemoveItem(int32 index); BMenuItem* ItemAt(int32 index); int32 CountItems(); private: friend class TGroupedMenu; void Separated(bool separated); bool HasSeparator(); private: const char* fName; BList fList; TGroupedMenu* fMenu; int32 fFirstItemIndex; int32 fItemsTotal; bool fHasSeparator; }; class TGroupedMenu : public BMenu { public: TGroupedMenu(const char* name); ~TGroupedMenu(); bool AddGroup(TMenuItemGroup* group); bool AddGroup(TMenuItemGroup* group, int32 atIndex); bool RemoveGroup(TMenuItemGroup* group); TMenuItemGroup* GroupAt(int32 index); int32 CountGroups(); private: friend class TMenuItemGroup; void AddGroupItem(TMenuItemGroup* group, BMenuItem* item, int32 atIndex); void RemoveGroupItem(TMenuItemGroup* group, BMenuItem* item); private: BList fGroups; }; } // namespace BPrivate #endif // GROUPED_MENU_H