new item::insert to add an item at specified pos
This commit is contained in:
parent
880a91b717
commit
238e85756f
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* A Menu implementation
|
* A Menu implementation
|
||||||
* Nana C++ Library(http://www.nanapro.org)
|
* Nana C++ Library(http://www.nanapro.org)
|
||||||
* Copyright(C) 2009-2016 Jinhao(cnjinhao@hotmail.com)
|
* Copyright(C) 2009-2017 Jinhao(cnjinhao@hotmail.com)
|
||||||
*
|
*
|
||||||
* Distributed under the Boost Software License, Version 1.0.
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
* (See accompanying file LICENSE_1_0.txt or copy at
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
@ -48,6 +48,8 @@ namespace nana
|
|||||||
item_proxy& checked(bool);
|
item_proxy& checked(bool);
|
||||||
bool checked() const;
|
bool checked() const;
|
||||||
|
|
||||||
|
std::string text() const;
|
||||||
|
|
||||||
std::size_t index() const;
|
std::size_t index() const;
|
||||||
private:
|
private:
|
||||||
std::size_t index_;
|
std::size_t index_;
|
||||||
@ -123,8 +125,19 @@ namespace nana
|
|||||||
~menu();
|
~menu();
|
||||||
|
|
||||||
/// Appends an item to the menu.
|
/// Appends an item to the menu.
|
||||||
item_proxy append(std::string text_utf8, const event_fn_t& callback= event_fn_t());
|
item_proxy append(std::string text_utf8, const event_fn_t& handler = {});
|
||||||
void append_splitter();
|
void append_splitter();
|
||||||
|
|
||||||
|
/// Inserts new item at specified position
|
||||||
|
/**
|
||||||
|
* It will invalidate the existing item proxies from the specified position.
|
||||||
|
* @param pos The position where new item to be inserted
|
||||||
|
* @param text_utf8 The title of item
|
||||||
|
* @param handler The event handler for the item.
|
||||||
|
* @return the item proxy to the new inserted item.
|
||||||
|
*/
|
||||||
|
item_proxy insert(std::size_t pos, std::string text_utf8, const event_fn_t& handler = {});
|
||||||
|
|
||||||
void clear(); ///< Erases all of the items.
|
void clear(); ///< Erases all of the items.
|
||||||
/// Closes the menu. It does not destroy the menu; just close the window for the menu.
|
/// Closes the menu. It does not destroy the menu; just close the window for the menu.
|
||||||
void close();
|
void close();
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* A Menu implementation
|
* A Menu implementation
|
||||||
* Nana C++ Library(http://www.nanapro.org)
|
* Nana C++ Library(http://www.nanapro.org)
|
||||||
* Copyright(C) 2009-2016 Jinhao(cnjinhao@hotmail.com)
|
* Copyright(C) 2009-2017 Jinhao(cnjinhao@hotmail.com)
|
||||||
*
|
*
|
||||||
* Distributed under the Boost Software License, Version 1.0.
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
* (See accompanying file LICENSE_1_0.txt or copy at
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
@ -86,6 +86,11 @@ namespace nana
|
|||||||
return item_.flags.checked;
|
return item_.flags.checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string menu_item_type::item_proxy::text() const
|
||||||
|
{
|
||||||
|
return item_.text;
|
||||||
|
}
|
||||||
|
|
||||||
std::size_t menu_item_type::item_proxy::index() const
|
std::size_t menu_item_type::item_proxy::index() const
|
||||||
{
|
{
|
||||||
return index_;
|
return index_;
|
||||||
@ -1117,10 +1122,11 @@ namespace nana
|
|||||||
delete impl_;
|
delete impl_;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto menu::append(std::string text_utf8, const menu::event_fn_t& callback) -> item_proxy
|
auto menu::append(std::string text_utf8, const menu::event_fn_t& handler) -> item_proxy
|
||||||
{
|
{
|
||||||
impl_->mbuilder.data().items.emplace_back(new item_type(std::move(text_utf8), callback));
|
std::unique_ptr<item_type> item{ new item_type{ std::move(text_utf8), handler } };
|
||||||
return item_proxy(size() - 1, *impl_->mbuilder.data().items.back());
|
impl_->mbuilder.data().items.emplace_back(item.get());
|
||||||
|
return item_proxy(size() - 1, *item.release());
|
||||||
}
|
}
|
||||||
|
|
||||||
void menu::append_splitter()
|
void menu::append_splitter()
|
||||||
@ -1128,6 +1134,18 @@ namespace nana
|
|||||||
impl_->mbuilder.data().items.emplace_back(new item_type);
|
impl_->mbuilder.data().items.emplace_back(new item_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto menu::insert(std::size_t pos, std::string text_utf8, const event_fn_t& handler) -> item_proxy
|
||||||
|
{
|
||||||
|
auto & items = impl_->mbuilder.data().items;
|
||||||
|
if (pos > items.size())
|
||||||
|
throw std::out_of_range("menu: a new item inserted to an invalid position");
|
||||||
|
|
||||||
|
std::unique_ptr<item_type> item{ new item_type{ std::move(text_utf8), handler } };
|
||||||
|
impl_->mbuilder.data().items.emplace(impl_->mbuilder.data().items.cbegin() + pos, item.get());
|
||||||
|
|
||||||
|
return item_proxy{ pos, *item.release() };
|
||||||
|
}
|
||||||
|
|
||||||
void menu::clear()
|
void menu::clear()
|
||||||
{
|
{
|
||||||
internal_scope_guard lock;
|
internal_scope_guard lock;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user