Merge branch 'besh81-hotfix-1.6.2' into hotfix-1.6.2
This commit is contained in:
commit
ab2d39397f
@ -29,18 +29,44 @@ namespace nana
|
||||
{
|
||||
tabbar<T> & widget;
|
||||
T & value;
|
||||
std::size_t item_pos; ///< position of the item
|
||||
|
||||
arg_tabbar(tabbar<T>& wdg, T& v)
|
||||
: widget(wdg), value{ v }
|
||||
arg_tabbar(tabbar<T>& wdg, T& v, std::size_t p)
|
||||
: widget(wdg), value{ v }, item_pos(p)
|
||||
{}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct arg_tabbar_click : public arg_tabbar<T>
|
||||
{
|
||||
arg_tabbar_click(tabbar<T>& wdg, T& v, std::size_t p)
|
||||
: arg_tabbar<T>({wdg, v, p})
|
||||
{}
|
||||
|
||||
bool left_button = false; ///< true if mouse left button is pressed
|
||||
bool mid_button = false; ///< true if mouse middle button is pressed
|
||||
bool right_button = false; ///< true if mouse right button is pressed
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct arg_tabbar_mouse
|
||||
: public arg_mouse
|
||||
{
|
||||
arg_tabbar_mouse(const arg_mouse& arg, tabbar<T>& wdg, T& v, std::size_t p)
|
||||
: arg_mouse{ arg }, widget(wdg), value{ v }, item_pos(p)
|
||||
{}
|
||||
|
||||
tabbar<T> & widget;
|
||||
T & value;
|
||||
std::size_t item_pos; ///< position of the item
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct arg_tabbar_adding
|
||||
: public event_arg
|
||||
{
|
||||
arg_tabbar_adding(tabbar<T>& wdg, std::size_t pos)
|
||||
: widget(wdg), where(pos)
|
||||
arg_tabbar_adding(tabbar<T>& wdg, std::size_t p)
|
||||
: widget(wdg), where(p)
|
||||
{}
|
||||
|
||||
tabbar<T> & widget;
|
||||
@ -51,8 +77,8 @@ namespace nana
|
||||
template<typename T>
|
||||
struct arg_tabbar_removed : public arg_tabbar<T>
|
||||
{
|
||||
arg_tabbar_removed(tabbar<T>& wdg, T& v)
|
||||
: arg_tabbar<T>({wdg, v})
|
||||
arg_tabbar_removed(tabbar<T>& wdg, T& v, std::size_t p)
|
||||
: arg_tabbar<T>({wdg, v, p})
|
||||
{}
|
||||
|
||||
mutable bool remove = true; ///< determines whether to remove the item
|
||||
@ -71,6 +97,7 @@ namespace nana
|
||||
|
||||
basic_event<arg_tabbar_adding<value_type>> adding;
|
||||
basic_event<arg_tabbar<value_type>> added;
|
||||
basic_event<arg_tabbar_mouse<value_type>> tab_click;
|
||||
basic_event<arg_tabbar<value_type>> activated;
|
||||
basic_event<arg_tabbar_removed<value_type>> removed;
|
||||
};
|
||||
@ -81,6 +108,7 @@ namespace nana
|
||||
virtual ~event_agent_interface() = default;
|
||||
virtual bool adding(std::size_t) = 0;
|
||||
virtual void added(std::size_t) = 0;
|
||||
virtual bool click(const arg_mouse&, std::size_t) = 0;
|
||||
virtual void activated(std::size_t) = 0;
|
||||
virtual bool removed(std::size_t, bool & close_attached) = 0;
|
||||
};
|
||||
@ -124,9 +152,9 @@ namespace nana
|
||||
|
||||
bool adding(std::size_t pos) override
|
||||
{
|
||||
::nana::arg_tabbar_adding<T> arg(tabbar_, pos);
|
||||
tabbar_.events().adding.emit(arg, tabbar_);
|
||||
return arg.add;
|
||||
::nana::arg_tabbar_adding<T> arg_ta(tabbar_, pos);
|
||||
tabbar_.events().adding.emit(arg_ta, tabbar_);
|
||||
return arg_ta.add;
|
||||
}
|
||||
|
||||
void added(std::size_t pos) override
|
||||
@ -134,21 +162,28 @@ namespace nana
|
||||
if(pos != npos)
|
||||
{
|
||||
drawer_trigger_.at_no_bound_check(pos) = T();
|
||||
tabbar_.events().added.emit(arg_tabbar({ tabbar_, tabbar_[pos] }), tabbar_);
|
||||
tabbar_.events().added.emit(arg_tabbar({ tabbar_, tabbar_[pos], pos }), tabbar_);
|
||||
}
|
||||
}
|
||||
|
||||
bool click(const arg_mouse& arg, std::size_t pos) override
|
||||
{
|
||||
::nana::arg_tabbar_mouse<T> arg_tm(arg, tabbar_, tabbar_[pos], pos);
|
||||
tabbar_.events().tab_click.emit(arg_tm, tabbar_);
|
||||
return arg_tm.propagation_stopped();
|
||||
}
|
||||
|
||||
void activated(std::size_t pos) override
|
||||
{
|
||||
if(pos != npos)
|
||||
tabbar_.events().activated.emit(arg_tabbar({ tabbar_, tabbar_[pos]}), tabbar_);
|
||||
tabbar_.events().activated.emit(arg_tabbar({ tabbar_, tabbar_[pos], pos}), tabbar_);
|
||||
}
|
||||
|
||||
bool removed(std::size_t pos, bool & close_attach) override
|
||||
{
|
||||
if (pos != npos)
|
||||
if(pos != npos)
|
||||
{
|
||||
::nana::arg_tabbar_removed<T> arg(tabbar_, tabbar_[pos]);
|
||||
::nana::arg_tabbar_removed<T> arg(tabbar_, tabbar_[pos], pos);
|
||||
tabbar_.events().removed.emit(arg, tabbar_);
|
||||
close_attach = arg.close_attach_window;
|
||||
return arg.remove;
|
||||
|
@ -492,9 +492,17 @@ namespace nana
|
||||
return (trace_.what != trace_.null);
|
||||
}
|
||||
|
||||
bool active_by_trace()
|
||||
bool active_by_trace(const arg_mouse& arg)
|
||||
{
|
||||
return ((trace_.what == trace_.item) && (trace_.item_part != trace_.close)? activate(trace_.u.index) : false);
|
||||
if((trace_.what == trace_.item) && (trace_.item_part != trace_.close))
|
||||
{
|
||||
if(false == evt_agent_->click(arg, trace_.u.index))
|
||||
return activate(trace_.u.index);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool release()
|
||||
@ -1285,7 +1293,7 @@ namespace nana
|
||||
{
|
||||
if(layouter_->press())
|
||||
{
|
||||
if(false == layouter_->active_by_trace())
|
||||
if(false == layouter_->active_by_trace(arg))
|
||||
layouter_->toolbox_answer(arg);
|
||||
layouter_->render();
|
||||
API::dev::lazy_refresh();
|
||||
|
Loading…
x
Reference in New Issue
Block a user