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
10namespace BPrivate {
11
12class TGroupedMenu;
13
14class 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
46class 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,
62			int32 atIndex);
63		void RemoveGroupItem(TMenuItemGroup* group, BMenuItem* item);
64
65	private:
66		BList	fGroups;
67};
68
69}	// namespace BPrivate
70
71#endif	// GROUPED_MENU_H
72