diff --git a/include/nana/gui/widgets/listbox.hpp b/include/nana/gui/widgets/listbox.hpp index e35cfc8f..76cb4a0b 100644 --- a/include/nana/gui/widgets/listbox.hpp +++ b/include/nana/gui/widgets/listbox.hpp @@ -175,7 +175,7 @@ namespace nana cell(cell&&) noexcept; cell(::std::string) noexcept; cell(::std::string, const format&); - cell(::std::string, const ::nana::color& bgcolor, const ::nana::color& fgcolor); + //cell(::std::string, const ::nana::color& bgcolor, const ::nana::color& fgcolor); //deprecated cell& operator=(const cell&); cell& operator=(cell&&) noexcept; diff --git a/source/gui/widgets/listbox.cpp b/source/gui/widgets/listbox.cpp index 8eaef071..b352842c 100644 --- a/source/gui/widgets/listbox.cpp +++ b/source/gui/widgets/listbox.cpp @@ -35,10 +35,17 @@ namespace nana { + static void check_range(std::size_t pos, std::size_t size) + { + if (!(pos < size)) + throw std::out_of_range("listbox: invalid element position"); + } + namespace drawerbase { namespace listbox { + class model_lock_guard { model_lock_guard(const model_lock_guard&) = delete; @@ -84,13 +91,15 @@ namespace nana cell::cell(std::string text, const format& fmt) : text(std::move(text)), - custom_format(std::make_unique( fmt )) // or custom_format(new format{ fmt }) + custom_format(std::make_unique( fmt )) {} - cell::cell(std::string text, const ::nana::color& bgcolor, const ::nana::color& fgcolor) + /* + cell::cell(std::string text, const ::nana::color& bgcolor, const ::nana::color& fgcolor) //deprecated : text(std::move(text)), custom_format{std::make_unique( bgcolor, fgcolor ) } {} + */ cell& cell::operator=(const cell& rhs) { @@ -135,7 +144,6 @@ namespace nana column() = default; - column(const column&) = default; column& operator=(const column& other) @@ -403,8 +411,9 @@ namespace nana size_type cast(size_type pos, bool disp_order) const { - if (pos >= cont_.size()) - throw std::out_of_range("listbox: invalid header index."); + //if (pos >= cont_.size()) + // throw std::out_of_range("listbox: invalid header index."); //deprecated + check_range(pos, cont_.size()); size_type order = 0; //order for display position for (auto & m : cont_) @@ -432,8 +441,9 @@ namespace nana /// find and return a ref to the column that originaly was at position "pos" previous to any list reorganization. column& at(size_type pos, bool disp_order = false) { - if(pos >= cont_.size()) - throw std::out_of_range("listbox: invalid header index."); + //if(pos >= cont_.size()) + // throw std::out_of_range("listbox: invalid header index."); //deprecated + check_range(pos, cont_.size()); if (!disp_order) pos = this->cast(pos, false); @@ -443,8 +453,9 @@ namespace nana const column& at(size_type pos, bool disp_order = false) const { - if (pos >= cont_.size()) - throw std::out_of_range("listbox: invalid header index."); + //if (pos >= cont_.size()) + // throw std::out_of_range("listbox: invalid header index."); //deprecated + check_range(pos, cont_.size()); if (!disp_order) pos = this->cast(pos, false); @@ -1009,8 +1020,9 @@ namespace nana auto & catobj = *get(pos.cat); const auto item_count = catobj.items.size(); - if (pos.item > item_count) - throw std::out_of_range("listbox: insert an item at invalid position"); + //if (pos.item > item_count) + // throw std::out_of_range("listbox: insert an item at invalid position"); //deprecated + check_range(pos.item, item_count); catobj.sorted.push_back(item_count); @@ -1934,8 +1946,9 @@ namespace nana /// categories iterator container::iterator get(size_type pos) { - if (pos >= categories_.size()) - throw std::out_of_range("nana::listbox: invalid category index"); + //if (pos >= categories_.size()) + // throw std::out_of_range("nana::listbox: invalid category index"); //deprecated + check_range(pos, categories_.size()); auto i = categories_.begin(); std::advance(i, pos); @@ -1944,8 +1957,9 @@ namespace nana container::const_iterator get(size_type pos) const { - if (pos >= categories_.size()) - throw std::out_of_range("nana::listbox: invalid category index"); + //if (pos >= categories_.size()) + // throw std::out_of_range("nana::listbox: invalid category index"); //deprecated + check_range(pos, categories_.size()); auto i = categories_.cbegin(); std::advance(i, pos); @@ -5063,8 +5077,10 @@ namespace nana item_proxy cat_proxy::at(size_type pos_abs) const { - if(pos_abs >= size()) - throw std::out_of_range("listbox.cat_proxy.at() invalid position"); + //if(pos_abs >= size()) + // throw std::out_of_range("listbox.cat_proxy.at() invalid position"); //deprecated + + check_range(pos_abs, size()); return item_proxy(ess_, index_pair(pos_, pos_abs)); } @@ -5166,8 +5182,9 @@ namespace nana void cat_proxy::inline_factory(size_type column, pat::cloneable> factory) { - if (column >= this->columns()) - throw std::out_of_range("listbox.cat_proxy.inline_factory: invalid column index"); + //if (column >= this->columns()) + // throw std::out_of_range("listbox.cat_proxy.inline_factory: invalid column index"); //deprecated + check_range(column, this->columns()); if (column >= cat_->factories.size()) { @@ -5443,16 +5460,18 @@ namespace nana listbox::cat_proxy listbox::at(size_type pos) { - if (pos >= this->size_categ()) - throw std::out_of_range("Nana.Listbox.at(): invalid position"); + //if (pos >= this->size_categ()) + // throw std::out_of_range("Nana.Listbox.at(): invalid position"); //deprecated + check_range(pos, size_categ()); return{ &_m_ess(), pos }; } const listbox::cat_proxy listbox::at(size_type pos) const { - if(pos >= this->size_categ()) - throw std::out_of_range("Nana.Listbox.at(): invalid position"); + //if(pos >= this->size_categ()) + // throw std::out_of_range("Nana.Listbox.at(): invalid position"); //deprecated + check_range(pos, size_categ()); return{ &_m_ess(), pos }; }