#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