modify listbox's arg_listbox and arg_listbox_category

This commit is contained in:
Jinhao 2016-06-15 01:17:28 +08:00
parent 4d279b8378
commit a087486452
2 changed files with 29 additions and 44 deletions

View File

@ -54,10 +54,10 @@ namespace nana
/// Automatically adjusted width /// Automatically adjusted width
/** /**
* @param minimize The minimized width of column, in pixel * @param minimum The minimal width of column, in pixel
* @param maximize The maximized width of column, in pixel * @param maximum The maximal width of column, in pixel
*/ */
virtual void width(unsigned minimize, unsigned maximize) = 0; virtual void width(unsigned minimum, unsigned maximum) = 0;
/// Sets alignment of column text /// Sets alignment of column text
/** /**
@ -67,9 +67,10 @@ namespace nana
/// Adjusts the width to fit the content /// Adjusts the width to fit the content
/** /**
* The priority of max: maximize, ranged width, scheme's max_fit_content. * The priority of max: maximum, ranged width, scheme's max_fit_content.
* @param maximum Sets the width of column to the maximum if the width of content is larger than maximum
*/ */
virtual void fit_content(unsigned maximize = 0) noexcept = 0; virtual void fit_content(unsigned maximum = 0) noexcept = 0;
/// Determines the visibility state of the column /// Determines the visibility state of the column
/** /**
@ -533,26 +534,20 @@ namespace nana
: public event_arg : public event_arg
{ {
mutable drawerbase::listbox::item_proxy item; mutable drawerbase::listbox::item_proxy item;
bool selected;
arg_listbox(const drawerbase::listbox::item_proxy&, bool selected) noexcept; arg_listbox(const drawerbase::listbox::item_proxy&) noexcept;
}; };
/// The event argument type for listbox's category_dbl_click /// The event parameter type for listbox's category_dbl_click
struct arg_listbox_category struct arg_listbox_category
: public event_arg : public event_arg
{ {
drawerbase::listbox::cat_proxy category; drawerbase::listbox::cat_proxy category;
/// Block expension/shrink of category /// A flag that indicates whether or not to block expension/shrink of category when it is double clicking.
void block_category_change() const noexcept; mutable bool block_operation{ false };
/// Determines whether expension/shrink of category is blocked
bool category_change_blocked() const noexcept;
arg_listbox_category(const drawerbase::listbox::cat_proxy&) noexcept; arg_listbox_category(const drawerbase::listbox::cat_proxy&) noexcept;
private:
mutable bool block_change_;
}; };
namespace drawerbase namespace drawerbase

View File

@ -544,14 +544,14 @@ namespace nana
_m_refresh(); _m_refresh();
} }
void width(unsigned minimize, unsigned maximize) void width(unsigned minimum, unsigned maximum)
{ {
//maximize must be larger than minimize, but minimize == maximize is allowed //maximum must be larger than minimum, but maximum == 0 is allowed if minimum is 0
if ((minimize >= maximize) && (minimize != 0)) if ((minimum >= maximum) && (minimum != 0))
throw std::invalid_argument("listbox.column.width() minimize must be less than maximize"); throw std::invalid_argument("listbox.column.width() minimum must be less than maximum");
range_width_px.first = minimize; range_width_px.first = minimum;
range_width_px.second = maximize; range_width_px.second = maximum;
} }
void text_align(::nana::align align) noexcept override void text_align(::nana::align align) noexcept override
@ -1344,7 +1344,7 @@ namespace nana
{ {
m.flags.checked = ck; m.flags.checked = ck;
arg_listbox arg{ item_proxy{ess_, pos}, ck}; arg_listbox arg{ item_proxy{ess_, pos}};
wd_ptr()->events().checked.emit(arg, wd_ptr()->handle()); wd_ptr()->events().checked.emit(arg, wd_ptr()->handle());
} }
++pos.item; ++pos.item;
@ -1398,7 +1398,7 @@ namespace nana
changed = true; changed = true;
m.flags.selected = sel; m.flags.selected = sel;
arg_listbox arg{ item_proxy(ess_, i), sel }; arg_listbox arg{ item_proxy(ess_, i) };
wd_ptr()->events().selected.emit(arg, wd_ptr()->handle()); wd_ptr()->events().selected.emit(arg, wd_ptr()->handle());
if (m.flags.selected) if (m.flags.selected)
@ -1490,7 +1490,7 @@ namespace nana
auto do_cancel = [this, for_selection](category_t::container::value_type& m, std::size_t cat_pos, std::size_t item_pos) auto do_cancel = [this, for_selection](category_t::container::value_type& m, std::size_t cat_pos, std::size_t item_pos)
{ {
arg_listbox arg{ item_proxy(ess_, index_pair(cat_pos, item_pos)), false }; arg_listbox arg{ item_proxy(ess_, index_pair(cat_pos, item_pos)) };
if (for_selection) if (for_selection)
{ {
m.flags.selected = false; m.flags.selected = false;
@ -1573,7 +1573,7 @@ namespace nana
auto cancel = [this, for_selection](category_t::container::value_type& m, std::size_t cat_pos, std::size_t item_pos) auto cancel = [this, for_selection](category_t::container::value_type& m, std::size_t cat_pos, std::size_t item_pos)
{ {
arg_listbox arg{ item_proxy(ess_, index_pair(cat_pos, item_pos)), false }; arg_listbox arg{ item_proxy(ess_, index_pair(cat_pos, item_pos)) };
if (for_selection) if (for_selection)
{ {
m.flags.selected = false; m.flags.selected = false;
@ -1678,7 +1678,7 @@ namespace nana
{ {
m.flags.checked = ck; m.flags.checked = ck;
arg_listbox arg{ item_proxy(ess_, index_pair(cat, index)), ck}; arg_listbox arg{ item_proxy(ess_, index_pair(cat, index)) };
wd_ptr()->events().checked.emit(arg, widget_->handle()); wd_ptr()->events().checked.emit(arg, widget_->handle());
changed = true; changed = true;
@ -3749,7 +3749,7 @@ namespace nana
{ {
item_ptr->flags.selected = sel; item_ptr->flags.selected = sel;
arg_listbox arg{ item_proxy{ essence_, abs_item_pos }, sel }; arg_listbox arg{ item_proxy{ essence_, abs_item_pos } };
lister.wd_ptr()->events().selected.emit(arg, lister.wd_ptr()->handle()); lister.wd_ptr()->events().selected.emit(arg, lister.wd_ptr()->handle());
if (item_ptr->flags.selected) if (item_ptr->flags.selected)
@ -3771,7 +3771,7 @@ namespace nana
item_ptr->flags.checked = ! item_ptr->flags.checked; item_ptr->flags.checked = ! item_ptr->flags.checked;
index_pair abs_pos{ item_pos.cat, lister.absolute(item_pos) }; index_pair abs_pos{ item_pos.cat, lister.absolute(item_pos) };
arg_listbox arg{ item_proxy{ essence_, abs_pos }, item_ptr->flags.checked }; arg_listbox arg{ item_proxy{ essence_, abs_pos } };
lister.wd_ptr()->events().checked.emit(arg, lister.wd_ptr()->handle()); lister.wd_ptr()->events().checked.emit(arg, lister.wd_ptr()->handle());
if (item_ptr->flags.checked) if (item_ptr->flags.checked)
@ -4043,7 +4043,7 @@ namespace nana
if(m.flags.checked != ck) if(m.flags.checked != ck)
{ {
m.flags.checked = ck; m.flags.checked = ck;
arg_listbox arg{*this, ck}; arg_listbox arg{*this};
ess_->lister.wd_ptr()->events().checked.emit(arg, ess_->lister.wd_ptr()->handle()); ess_->lister.wd_ptr()->events().checked.emit(arg, ess_->lister.wd_ptr()->handle());
ess_->update(); ess_->update();
} }
@ -4063,7 +4063,7 @@ namespace nana
if(m.flags.selected == s) return *this; // ignore if no change if(m.flags.selected == s) return *this; // ignore if no change
m.flags.selected = s; // actually change selection m.flags.selected = s; // actually change selection
arg_listbox arg{*this, s}; arg_listbox arg{*this};
ess_->lister.wd_ptr()->events().selected.emit(arg, ess_->lister.wd_ptr()->handle()); ess_->lister.wd_ptr()->events().selected.emit(arg, ess_->lister.wd_ptr()->handle());
if (m.flags.selected) if (m.flags.selected)
@ -4594,8 +4594,8 @@ namespace nana
} }
}//end namespace drawerbase }//end namespace drawerbase
arg_listbox::arg_listbox(const drawerbase::listbox::item_proxy& m, bool selected) noexcept arg_listbox::arg_listbox(const drawerbase::listbox::item_proxy& m) noexcept
: item(m), selected(selected) : item(m)
{ {
} }
@ -4603,20 +4603,10 @@ namespace nana
//Implementation of arg_listbox_category //Implementation of arg_listbox_category
//Contributed by leobackes(pr#97) //Contributed by leobackes(pr#97)
arg_listbox_category::arg_listbox_category(const nana::drawerbase::listbox::cat_proxy& cat) noexcept arg_listbox_category::arg_listbox_category(const nana::drawerbase::listbox::cat_proxy& cat) noexcept
: category(cat), block_change_(false) : category(cat)
{ {
} }
void arg_listbox_category::block_category_change() const noexcept
{
block_change_ = true;
}
bool arg_listbox_category::category_change_blocked() const noexcept
{
return block_change_;
}
//class listbox //class listbox