20 #ifndef _MFORMS_MENU_H_
21 #define _MFORMS_MENU_H_
24 #include "boost/signals2.hpp"
26 #include "base/trackable.h"
28 #include "base/ui_form.h"
35 #pragma make_public(mforms::Menu) // To allow using Menu in interface functions in assemblies.
40 #ifndef DOXYGEN_SHOULD_SKIP_THIS
44 bool (*create)(Menu *
self);
46 void (*remove_item)(Menu *
self,
int i);
47 int (*add_item)(Menu *
self,
const std::string &caption,
const std::string &action);
48 int (*add_separator)(Menu *
self);
49 int (*add_submenu)(Menu *
self,
const std::string &caption, Menu *submenu);
50 void (*clear)(Menu *
self);
52 void (*set_item_enabled)(Menu *
self,
int i,
bool flag);
54 void (*popup_at)(Menu *
self, Object *control,
int x,
int y);
65 boost::signals2::signal<void (const std::string&)>
_on_action;
72 void remove_item(
int i);
73 int add_item(
const std::string &caption,
const std::string &action);
75 int add_submenu(
const std::string &caption,
Menu *submenu);
76 void add_items_from_list(
const bec::MenuItemList& list);
78 void set_item_enabled(
int i,
bool flag);
79 void set_item_enabled(
const std::string &action,
bool flag);
81 void set_handler(
const boost::function<
void (
const std::string&)> &action_handler);
83 void popup_at(Object *control,
int x,
int y);
86 void handle_action(
const std::string &action);
88 int get_item_index(
const std::string &action);
91 boost::signals2::signal<void (const std::string&)>*
signal_on_action() {
return &_on_action; }