spicec: add menu id & find_sub()

This commit is contained in:
Arnon Gilboa 2010-10-17 11:44:13 +02:00
parent 21f586762f
commit 793dd31cad
2 changed files with 21 additions and 2 deletions

View File

@ -20,10 +20,11 @@
#include "utils.h"
#include "debug.h"
Menu::Menu(CommandTarget& target, const std::string& name)
Menu::Menu(CommandTarget& target, const std::string& name, int id)
: _refs (1)
, _target (target)
, _name (name)
, _id (id)
{
}
@ -115,6 +116,21 @@ Menu* Menu::sub_at(int pos)
return ((Menu*)_items[pos].obj)->ref();
}
Menu* Menu::find_sub(int id)
{
Menu* sub;
if (_id == id) {
return ref();
}
for (unsigned int i = 0; i < _items.size(); i++) {
if (_items[i].type == MENU_ITEM_TYPE_MENU && (sub = ((Menu*)_items[i].obj)->find_sub(id))) {
return sub;
}
}
return NULL;
}
void Menu::clear()
{
for (unsigned int i = 0; i < _items.size(); i++) {

View File

@ -26,7 +26,7 @@ public:
class Menu {
public:
Menu(CommandTarget& target, const std::string& name);
Menu(CommandTarget& target, const std::string& name, int id = 0);
enum ItemType {
MENU_ITEM_TYPE_INVALID,
@ -46,6 +46,7 @@ public:
void set_name(const std::string& name) { _name = name;}
const std::string& get_name() { return _name;}
CommandTarget& get_target() { return _target;}
int get_id() { return _id;}
void add_command(const std::string& name, int cmd_id, int state = 0);
void add_separator();
@ -57,6 +58,7 @@ public:
ItemType item_type_at(int pos);
void command_at(int pos, std::string& name, int& cmd_id, int& state);
Menu* sub_at(int pos);
Menu* find_sub(int id);
void clear();
@ -94,6 +96,7 @@ private:
CommandTarget& _target;
std::string _name;
std::vector<MenuItem> _items;
int _id;
};
#endif