diff --git a/source/gui/widgets/listbox.cpp b/source/gui/widgets/listbox.cpp index a0d30cdd..707eb339 100644 --- a/source/gui/widgets/listbox.cpp +++ b/source/gui/widgets/listbox.cpp @@ -329,7 +329,7 @@ namespace nana struct column_t { native_string_type text; ///< "text" header of the column number "index" with weigth "pixels" - unsigned pixels; + unsigned pixels; ///< width bool visible{true}; size_type index; std::function weak_ordering; @@ -411,7 +411,7 @@ namespace nana return cont_.back().index; } - void item_width(size_type pos, unsigned width) + void item_width(size_type pos, unsigned width) ///< set the column width { column(pos).pixels = width; } @@ -428,7 +428,7 @@ namespace nana return 0; } - unsigned pixels() const + unsigned pixels() const ///< the visible width of the whole header { unsigned pixels = 0; for(auto & m : cont_) @@ -471,12 +471,13 @@ namespace nana { if(x < static_cast(col.pixels)) return col.index; - x -= col.pixels; + if (col.visible) + x -= col.pixels; } return npos; } - /// return the left position of the column originaly at index "pos" . + /// return the left position and width (in variable *pixels) of the column originaly at index "pos" . int item_pos(size_type pos, unsigned * pixels) const { int left = 0; @@ -494,7 +495,8 @@ namespace nana } return left; } - /// return the original index of the visible col currently before(in front of) or after the col originaly at index "index" + + /// return the original index of the visible col currently before(in front of) or after the col originaly at index "index" size_type neighbor(size_type index, bool front) const { size_type n = npos; @@ -510,11 +512,12 @@ namespace nana break; } else if(i->visible) - n = i->index; + n = i->index; } return npos; } - /// return the original index of the currently first visible col + + /// return the original index of the currently first visible col size_type begin() const { for(const auto & m : cont_) @@ -533,7 +536,8 @@ namespace nana } return npos; } - /// move the col originaly at index to the position currently in front (or after) the col originaly at index "to" invalidating some current index + + /// move the col originaly at "index" to the position currently in front (or after) the col originaly at index "to" invalidating some current index void move(size_type index, size_type to, bool front) throw() { if ((index == to) || (index >= cont_.size()) || (to >= cont_.size())) @@ -880,7 +884,8 @@ namespace nana list_.back().key_ptr = ptr; return &list_.back(); } - /// add a new cat created at "pos" and return a ref to it + + /// add a new cat created at "pos" and return a ref to it category_t* create_cat(std::size_t pos, native_string_type&& text) { return &(*list_.emplace(this->get(pos), std::move(text))); @@ -1941,8 +1946,8 @@ namespace nana //number_of_lister_item - //@brief: Returns the number of items that are contained in pixels - //@param,with_rest: Means whether including extra one item that is not completely contained in reset pixels. + /// @brief Returns the number of items that are contained in pixels + /// @param with_rest: Means whether including extra one item that is not completely contained in reset pixels. size_type number_of_lister_items(bool with_rest) const { unsigned lister_s = graph->height() - 2 - header_visible_px() - (scroll.h.empty() ? 0 : scroll.scale); @@ -2072,10 +2077,10 @@ namespace nana bool v = (lister.the_number_of_expanded() > screen_number); if(v == true && h == false) - h = (header_s > (sz.width - 2 - scroll.scale)); + h = ( (header_s + 2 + scroll.scale ) > sz.width); // 2? - unsigned width = sz.width - 2 - (v ? scroll.scale : 0); - unsigned height = sz.height - 2 - (h ? scroll.scale : 0); + unsigned width = sz.width - 2 - (v ? scroll.scale : 0); // -? 2? + unsigned height = sz.height - 2 - (h ? scroll.scale : 0); // -? 2? //event hander for scrollbars auto evt_fn = [this](const arg_scroll& arg) @@ -2168,7 +2173,8 @@ namespace nana return (seq.size() ? (header.item_pos(seq[0], nullptr) - scroll.offset_x + r.x) : 0); } - std::pair where(int x, int y){ + std::pair where(int x, int y) + { std::pair new_where; if(2 < x && x < static_cast(graph->width()) - 2 && 1 < y && y < static_cast(graph->height()) - 1) @@ -2659,7 +2665,7 @@ namespace nana item_spliter_ = hd.index; // original index return true; } - x -= hd.pixels; + x -= hd.pixels; } } } @@ -2673,7 +2679,7 @@ namespace nana if(is_grab) { ref_xpos_ = pos.x; - if(item_spliter_ != npos) + if(item_spliter_ != npos) // resize header item, not move it orig_item_width_ = essence_->header.column(item_spliter_).pixels; } else if(grab_terminal_.index != npos && grab_terminal_.index != essence_->pointer_where.second) @@ -2686,16 +2692,16 @@ namespace nana int grab_move(const nana::rectangle& rect, const nana::point& pos) { if(item_spliter_ == npos) - { - draw(rect); - _m_make_float(rect, pos); + { // move header item, not resize it + draw(rect); // first draw the entery header as it was + _m_make_float(rect, pos); // now draw one floating header item //Draw the target strip grab_terminal_.index = _m_target_strip(pos.x, rect, essence_->pointer_where.second, grab_terminal_.place_front); return 1; } else - { + { // resize header item, not move it const auto& item = essence_->header.column(item_spliter_); //Resize the item specified by item_spliter_. auto new_w = orig_item_width_ - (ref_xpos_ - pos.x); @@ -3350,18 +3356,18 @@ namespace nana if(essence_->ptr_state == item_state::pressed) { if(essence_->pointer_where.first == parts::header) - { + { // moving a pressed header : grab it (or split-resize?) essence_->ptr_state = item_state::grabbed; nana::point pos = arg.pos; essence_->widget_to_header(pos); drawer_header_->grab(pos, true); API::capture_window(essence_->lister.wd_ptr()->handle(), true); - update = 2; + update = 2; //0 = nothing, 1 = update, 2 = refresh } } if(essence_->ptr_state == item_state::grabbed) - { + { // moving a grabbed header nana::point pos = arg.pos; essence_->widget_to_header(pos); @@ -3713,6 +3719,7 @@ namespace nana //end class trigger //class item_proxy + item_proxy::item_proxy(essence_t * ess) : ess_(ess) {} @@ -3985,6 +3992,7 @@ namespace nana //end class item_proxy //class cat_proxy + //the member cat_ is used for fast accessing to the category cat_proxy::cat_proxy(essence_t * ess, size_type pos) : ess_(ess), @@ -4315,6 +4323,7 @@ namespace nana //Implementation of arg_category //Contributed by leobackes(pr#97) + arg_category::arg_category ( const nana::drawerbase::listbox::cat_proxy& cat ) noexcept : category(cat), block_change_(false) { @@ -4332,6 +4341,7 @@ namespace nana //class listbox + listbox::listbox(window wd, bool visible) { create(wd, rectangle(), visible);