1 #ifndef GROUPED_MENU_H 2 #define GROUPED_MENU_H 3 4 5 #include <Menu.h> 6 #include <MenuItem.h> 7 #include <List.h> 8 9 10 namespace BPrivate { 11 12 class TGroupedMenu; 13 14 class TMenuItemGroup { 15 public: 16 TMenuItemGroup(const char *name); 17 ~TMenuItemGroup(); 18 19 bool AddItem(BMenuItem *item); 20 bool AddItem(BMenuItem *item, int32 atIndex); 21 bool AddItem(BMenu *menu); 22 bool AddItem(BMenu *menu, int32 atIndex); 23 24 bool RemoveItem(BMenuItem *item); 25 bool RemoveItem(BMenu *menu); 26 BMenuItem *RemoveItem(int32 index); 27 28 BMenuItem *ItemAt(int32 index); 29 int32 CountItems(); 30 31 private: 32 friend class TGroupedMenu; 33 void Separated(bool separated); 34 bool HasSeparator(); 35 36 private: 37 const char *fName; 38 BList fList; 39 TGroupedMenu *fMenu; 40 int32 fFirstItemIndex; 41 int32 fItemsTotal; 42 bool fHasSeparator; 43 }; 44 45 46 class TGroupedMenu : public BMenu { 47 public: 48 TGroupedMenu(const char *name); 49 ~TGroupedMenu(); 50 51 bool AddGroup(TMenuItemGroup *group); 52 bool AddGroup(TMenuItemGroup *group, int32 atIndex); 53 54 bool RemoveGroup(TMenuItemGroup *group); 55 56 TMenuItemGroup *GroupAt(int32 index); 57 int32 CountGroups(); 58 59 private: 60 friend class TMenuItemGroup; 61 void AddGroupItem(TMenuItemGroup *group, BMenuItem *item, int32 atIndex); 62 void RemoveGroupItem(TMenuItemGroup *group, BMenuItem *item); 63 64 private: 65 BList fGroups; 66 }; 67 68 } // namespace BPrivate 69 70 #endif /* GROUPED_MENU_H */ 71