14 #include <boost/noncopyable.hpp> 16 #include <shared_mutex> 22 namespace duds {
namespace ui {
32 class MenuOutputAccess;
45 class Menu :
public std::enable_shared_from_this<Menu>, boost::noncopyable {
50 typedef std::vector< std::shared_ptr<MenuItem> >
ItemVec;
54 typedef std::map< MenuView*, std::weak_ptr<MenuView> >
ViewMap;
110 Menu(std::size_t reserve = 0);
118 Menu(
const std::string &
title, std::size_t reserve = 0);
124 static std::shared_ptr<Menu>
make(std::size_t reserve = 0) {
125 return std::make_shared<Menu>(reserve);
133 static std::shared_ptr<Menu>
make(
134 const std::string &
title,
135 std::size_t reserve = 0
137 return std::make_shared<Menu>(
title, reserve);
163 return items.size() -
invis;
169 return items.empty();
197 void addView(
const std::shared_ptr<MenuView> &view);
216 ItemVec::const_iterator
iterator(std::size_t index)
const;
221 return items.cbegin();
226 ItemVec::const_iterator
cend()
const {
235 void clear() noexcept;
240 void title(
const std::string &newTitle) noexcept;
246 void append(std::shared_ptr<MenuItem> &&mi);
252 void append(
const std::shared_ptr<MenuItem> &mi);
262 void insert(std::size_t index, std::shared_ptr<MenuItem> &&mi);
271 void insert(std::size_t index,
const std::shared_ptr<MenuItem> &mi);
277 void remove(
const std::shared_ptr<MenuItem> &mi);
283 void remove(std::size_t index);
298 #endif // #ifndef MENU_HPP