16 namespace duds {
namespace ui {
namespace menu {
19 lockCnt(0), updateIdx(0), invis(0), toggles(0) {
20 items.reserve(reserve);
25 items.reserve(reserve);
29 if (
lockOwner != std::this_thread::get_id()) {
55 if (index >=
items.size()) {
61 return items.begin() + index;
89 views[view.get()] = view;
94 void (
MenuView::* eventFunc)(std::size_t),
97 ViewMap::iterator iter =
views.begin();
98 while (iter !=
views.end()) {
104 (view.get()->*eventFunc)(idx);
109 iter =
views.erase(iter);
119 items.back()->parent =
this;
121 if (
items.back()->isInvisible()) {
125 if (
items.back()->isToggle()) {
137 std::shared_ptr<MenuItem> item(mi);
146 if (index >
items.size()) {
152 ItemVec::iterator iter =
items.insert(
155 (*iter)->parent =
this;
157 if ((*iter)->isInvisible()) {
161 if ((*iter)->isToggle()) {
172 void Menu::insert(std::size_t index,
const std::shared_ptr<MenuItem> &mi) {
175 std::shared_ptr<MenuItem> item(mi);
184 ItemVec::iterator iter = std::find(
items.begin(),
items.end(), mi);
186 if (iter ==
items.end()) {
192 std::size_t idx = iter -
items.begin();
196 mi->parent =
nullptr;
209 if (index >
items.size()) {
215 ItemVec::iterator iter =
items.begin() + index;
217 std::weak_ptr<MenuItem> mi(*iter);
221 std::shared_ptr<MenuItem> smi = mi.lock();
224 smi->parent =
nullptr;
move_impl move(unsigned int c, unsigned int r)
Display stream manipulator that moves the display cursor to the given location.
#define DUDS_THROW_EXCEPTION(x)
Works like BOOST_THROW_EXCEPTION, but includes a stack trace if DUDS_ERRORS_VERBOSE is defined...