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;
|
tabbar<T> & widget;
|
||||||
T & value;
|
T & value;
|
||||||
|
std::size_t item_pos; ///< position of the item
|
||||||
|
|
||||||
arg_tabbar(tabbar<T>& wdg, T& v)
|
arg_tabbar(tabbar<T>& wdg, T& v, std::size_t p)
|
||||||
: widget(wdg), value{ v }
|
: 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>
|
template<typename T>
|
||||||
struct arg_tabbar_adding
|
struct arg_tabbar_adding
|
||||||
: public event_arg
|
: public event_arg
|
||||||
{
|
{
|
||||||
arg_tabbar_adding(tabbar<T>& wdg, std::size_t pos)
|
arg_tabbar_adding(tabbar<T>& wdg, std::size_t p)
|
||||||
: widget(wdg), where(pos)
|
: widget(wdg), where(p)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
tabbar<T> & widget;
|
tabbar<T> & widget;
|
||||||
@ -51,8 +77,8 @@ namespace nana
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
struct arg_tabbar_removed : public arg_tabbar<T>
|
struct arg_tabbar_removed : public arg_tabbar<T>
|
||||||
{
|
{
|
||||||
arg_tabbar_removed(tabbar<T>& wdg, T& v)
|
arg_tabbar_removed(tabbar<T>& wdg, T& v, std::size_t p)
|
||||||
: arg_tabbar<T>({wdg, v})
|
: arg_tabbar<T>({wdg, v, p})
|
||||||
{}
|
{}
|
||||||
|
|
||||||
mutable bool remove = true; ///< determines whether to remove the item
|
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_adding<value_type>> adding;
|
||||||
basic_event<arg_tabbar<value_type>> added;
|
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<value_type>> activated;
|
||||||
basic_event<arg_tabbar_removed<value_type>> removed;
|
basic_event<arg_tabbar_removed<value_type>> removed;
|
||||||
};
|
};
|
||||||
@ -81,6 +108,7 @@ namespace nana
|
|||||||
virtual ~event_agent_interface() = default;
|
virtual ~event_agent_interface() = default;
|
||||||
virtual bool adding(std::size_t) = 0;
|
virtual bool adding(std::size_t) = 0;
|
||||||
virtual void added(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 void activated(std::size_t) = 0;
|
||||||
virtual bool removed(std::size_t, bool & close_attached) = 0;
|
virtual bool removed(std::size_t, bool & close_attached) = 0;
|
||||||
};
|
};
|
||||||
@ -124,9 +152,9 @@ namespace nana
|
|||||||
|
|
||||||
bool adding(std::size_t pos) override
|
bool adding(std::size_t pos) override
|
||||||
{
|
{
|
||||||
::nana::arg_tabbar_adding<T> arg(tabbar_, pos);
|
::nana::arg_tabbar_adding<T> arg_ta(tabbar_, pos);
|
||||||
tabbar_.events().adding.emit(arg, tabbar_);
|
tabbar_.events().adding.emit(arg_ta, tabbar_);
|
||||||
return arg.add;
|
return arg_ta.add;
|
||||||
}
|
}
|
||||||
|
|
||||||
void added(std::size_t pos) override
|
void added(std::size_t pos) override
|
||||||
@ -134,21 +162,28 @@ namespace nana
|
|||||||
if(pos != npos)
|
if(pos != npos)
|
||||||
{
|
{
|
||||||
drawer_trigger_.at_no_bound_check(pos) = T();
|
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
|
void activated(std::size_t pos) override
|
||||||
{
|
{
|
||||||
if(pos != npos)
|
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
|
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_);
|
tabbar_.events().removed.emit(arg, tabbar_);
|
||||||
close_attach = arg.close_attach_window;
|
close_attach = arg.close_attach_window;
|
||||||
return arg.remove;
|
return arg.remove;
|
||||||
|
@ -492,9 +492,17 @@ namespace nana
|
|||||||
return (trace_.what != trace_.null);
|
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()
|
bool release()
|
||||||
@ -1285,7 +1293,7 @@ namespace nana
|
|||||||
{
|
{
|
||||||
if(layouter_->press())
|
if(layouter_->press())
|
||||||
{
|
{
|
||||||
if(false == layouter_->active_by_trace())
|
if(false == layouter_->active_by_trace(arg))
|
||||||
layouter_->toolbox_answer(arg);
|
layouter_->toolbox_answer(arg);
|
||||||
layouter_->render();
|
layouter_->render();
|
||||||
API::dev::lazy_refresh();
|
API::dev::lazy_refresh();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user