change parameter type of click event from arg_mouse to arg_click
This commit is contained in:
parent
d8a964d8f0
commit
5bc1568f3e
@ -46,7 +46,7 @@ namespace nana
|
||||
virtual void resizing(graph_reference, const arg_resizing&);
|
||||
virtual void resized(graph_reference, const arg_resized&);
|
||||
virtual void move(graph_reference, const arg_move&);
|
||||
virtual void click(graph_reference, const arg_mouse&);
|
||||
virtual void click(graph_reference, const arg_click&);
|
||||
virtual void dbl_click(graph_reference, const arg_mouse&);
|
||||
virtual void mouse_enter(graph_reference, const arg_mouse&);
|
||||
virtual void mouse_move(graph_reference, const arg_mouse&);
|
||||
@ -100,7 +100,7 @@ namespace nana
|
||||
void bind(basic_window*);
|
||||
|
||||
void typeface_changed();
|
||||
void click(const arg_mouse&);
|
||||
void click(const arg_click&);
|
||||
void dbl_click(const arg_mouse&);
|
||||
void mouse_enter(const arg_mouse&);
|
||||
void mouse_move(const arg_mouse&);
|
||||
|
||||
@ -512,6 +512,12 @@ namespace nana
|
||||
::nana::window window_handle; ///< A handle to the event window
|
||||
};
|
||||
|
||||
struct arg_click : public event_arg
|
||||
{
|
||||
::nana::window window_handle; ///< A handle to the event window
|
||||
bool by_mouse; ///< Determines whether the event is emitted by clicking mouse button
|
||||
};
|
||||
|
||||
/// provides some fundamental events that every widget owns.
|
||||
struct general_events
|
||||
{
|
||||
@ -521,7 +527,7 @@ namespace nana
|
||||
basic_event<arg_mouse> mouse_leave; ///< the cursor leaves the window
|
||||
basic_event<arg_mouse> mouse_down; ///< the user presses the mouse button
|
||||
basic_event<arg_mouse> mouse_up; ///< the user presses the mouse button
|
||||
basic_event<arg_mouse> click; ///< the window is clicked, but occurs after mouse_down and before mouse_up
|
||||
basic_event<arg_click> click; ///< the window is clicked, but occurs after mouse_down and before mouse_up
|
||||
basic_event<arg_mouse> dbl_click; ///< the window is double clicked
|
||||
basic_event<arg_wheel> mouse_wheel; ///< the mouse wheel rotates while the window has focus
|
||||
basic_event<arg_dropfiles> mouse_dropfiles; ///< the mouse drops some external data while the window enable accepting files
|
||||
|
||||
@ -45,6 +45,7 @@ namespace nana{
|
||||
void mouse_up(graph_reference, const arg_mouse&) override;
|
||||
void key_char(graph_reference, const arg_keyboard&) override;
|
||||
void key_press(graph_reference, const arg_keyboard&) override;
|
||||
void key_release(graph_reference, const arg_keyboard&) override;
|
||||
void focus(graph_reference, const arg_focus&) override;
|
||||
private:
|
||||
void _m_draw(graph_reference);
|
||||
|
||||
@ -89,7 +89,7 @@ namespace drawerbase
|
||||
std::size_t checked() const; ///< Retrieves the index of the checkbox which is checked.
|
||||
std::size_t size() const;
|
||||
private:
|
||||
void _m_checked(const arg_mouse&);
|
||||
void _m_checked(const arg_click&);
|
||||
void _m_destroy(const arg_destroy&);
|
||||
private:
|
||||
std::vector<element_tag> ui_container_;
|
||||
|
||||
@ -40,7 +40,7 @@ namespace nana
|
||||
void refresh(graph_reference) override;
|
||||
void mouse_move(graph_reference, const arg_mouse&) override;
|
||||
void mouse_leave(graph_reference, const arg_mouse&) override;
|
||||
void click(graph_reference, const arg_mouse&) override;
|
||||
void click(graph_reference, const arg_click&) override;
|
||||
private:
|
||||
impl_t * impl_;
|
||||
};
|
||||
|
||||
@ -195,6 +195,16 @@ namespace nana
|
||||
switch (evt_code)
|
||||
{
|
||||
case event_code::click:
|
||||
{
|
||||
auto arg = dynamic_cast<const arg_click*>(&event_arg);
|
||||
if (nullptr == arg)
|
||||
return;
|
||||
|
||||
wd->drawer.click(*arg);
|
||||
if (!draw_only)
|
||||
evts_ptr->click.emit(*arg);
|
||||
}
|
||||
break;
|
||||
case event_code::dbl_click:
|
||||
case event_code::mouse_enter:
|
||||
case event_code::mouse_move:
|
||||
@ -211,10 +221,6 @@ namespace nana
|
||||
|
||||
switch (evt_code)
|
||||
{
|
||||
case event_code::click:
|
||||
drawer_event_fn = &drawer::click;
|
||||
evt_addr = &evts_ptr->click;
|
||||
break;
|
||||
case event_code::dbl_click:
|
||||
drawer_event_fn = &drawer::dbl_click;
|
||||
evt_addr = &evts_ptr->dbl_click;
|
||||
|
||||
@ -49,7 +49,7 @@ namespace nana
|
||||
overrided_ &= ~(1 << static_cast<int>(event_code::move));
|
||||
}
|
||||
|
||||
void drawer_trigger::click(graph_reference, const arg_mouse&)
|
||||
void drawer_trigger::click(graph_reference, const arg_click&)
|
||||
{
|
||||
overrided_ &= ~(1 << static_cast<int>(event_code::click));
|
||||
}
|
||||
@ -155,7 +155,7 @@ namespace nana
|
||||
realizer_->typeface_changed(graphics);
|
||||
}
|
||||
|
||||
void drawer::click(const arg_mouse& arg)
|
||||
void drawer::click(const arg_click& arg)
|
||||
{
|
||||
_m_emit(event_code::click, arg, &drawer_trigger::click);
|
||||
}
|
||||
|
||||
@ -699,15 +699,18 @@ namespace detail
|
||||
bool dbl_click = (last_mouse_down_window == msgwnd) && (xevent.xbutton.time - last_mouse_down_time <= 400);
|
||||
last_mouse_down_time = xevent.xbutton.time;
|
||||
last_mouse_down_window = msgwnd;
|
||||
auto new_focus = (msgwnd->flags.take_active ? msgwnd : msgwnd->other.active_window);
|
||||
|
||||
if(new_focus && !new_focus->flags.ignore_mouse_focus)
|
||||
if (Button1 == xevent.xbutton.button) //Sets the focus only if left button is pressed
|
||||
{
|
||||
auto new_focus = (msgwnd->flags.take_active ? msgwnd : msgwnd->other.active_window);
|
||||
if (new_focus && !new_focus->flags.ignore_mouse_focus)
|
||||
{
|
||||
context.event_window = new_focus;
|
||||
auto kill_focus = brock.wd_manager.set_focus(new_focus, false);
|
||||
if(kill_focus != new_focus)
|
||||
if (kill_focus != new_focus)
|
||||
brock.wd_manager.do_lazy_refresh(kill_focus, false);
|
||||
}
|
||||
}
|
||||
|
||||
auto retain = msgwnd->together.events_ptr;
|
||||
context.event_window = msgwnd;
|
||||
@ -774,7 +777,9 @@ namespace detail
|
||||
if((arg.button == ::nana::mouse::left_button) && hit)
|
||||
{
|
||||
msgwnd->flags.action = mouse_action::over;
|
||||
arg.evt_code = event_code::click;
|
||||
arg_click arg;
|
||||
arg.window_handle = reinterpret_cast<window>(msgwnd);
|
||||
arg.by_mouse = true;
|
||||
emit_drawer(&drawer::click, msgwnd, arg, &context);
|
||||
fire_click = true;
|
||||
}
|
||||
@ -794,7 +799,9 @@ namespace detail
|
||||
|
||||
if(fire_click)
|
||||
{
|
||||
arg.evt_code = event_code::click;
|
||||
arg_click arg;
|
||||
arg.window_handle = reinterpret_cast<window>(msgwnd);
|
||||
arg.by_mouse = true;
|
||||
evt_ptr->click.emit(arg);
|
||||
}
|
||||
|
||||
@ -806,7 +813,9 @@ namespace detail
|
||||
}
|
||||
else if(fire_click)
|
||||
{
|
||||
arg.evt_code = event_code::click;
|
||||
arg_click arg;
|
||||
arg.window_handle = reinterpret_cast<window>(msgwnd);
|
||||
arg.by_mouse = true;
|
||||
msgwnd->together.events_ptr->click.emit(arg);
|
||||
}
|
||||
brock.wd_manager.do_lazy_refresh(msgwnd, false);
|
||||
|
||||
@ -949,13 +949,17 @@ namespace detail
|
||||
if(msgwnd->flags.enabled)
|
||||
{
|
||||
pressed_wd = msgwnd;
|
||||
|
||||
if (WM_LBUTTONDOWN == message) //Sets focus only if left button is pressed
|
||||
{
|
||||
auto new_focus = (msgwnd->flags.take_active ? msgwnd : msgwnd->other.active_window);
|
||||
if(new_focus && (!new_focus->flags.ignore_mouse_focus))
|
||||
if (new_focus && (!new_focus->flags.ignore_mouse_focus))
|
||||
{
|
||||
auto kill_focus = brock.wd_manager.set_focus(new_focus, false);
|
||||
if(kill_focus != new_focus)
|
||||
if (kill_focus != new_focus)
|
||||
brock.wd_manager.do_lazy_refresh(kill_focus, false);
|
||||
}
|
||||
}
|
||||
|
||||
arg_mouse arg;
|
||||
assign_arg(arg, msgwnd, message, pmdec);
|
||||
@ -1007,7 +1011,9 @@ namespace detail
|
||||
msgwnd->flags.action = mouse_action::over;
|
||||
if (::nana::mouse::left_button == arg.button)
|
||||
{
|
||||
arg.evt_code = event_code::click;
|
||||
arg_click arg;
|
||||
arg.window_handle = reinterpret_cast<window>(msgwnd);
|
||||
arg.by_mouse = true;
|
||||
emit_drawer(&drawer::click, msgwnd, arg, &context);
|
||||
fire_click = true;
|
||||
}
|
||||
@ -1021,7 +1027,9 @@ namespace detail
|
||||
|
||||
if (fire_click)
|
||||
{
|
||||
arg.evt_code = event_code::click;
|
||||
arg_click arg;
|
||||
arg.window_handle = reinterpret_cast<window>(msgwnd);
|
||||
arg.by_mouse = true;
|
||||
retain->click.emit(arg);
|
||||
}
|
||||
|
||||
@ -1033,7 +1041,9 @@ namespace detail
|
||||
}
|
||||
else if (fire_click)
|
||||
{
|
||||
arg.evt_code = event_code::click;
|
||||
arg_click arg;
|
||||
arg.window_handle = reinterpret_cast<window>(msgwnd);
|
||||
arg.by_mouse = true;
|
||||
retain->click.emit(arg);
|
||||
}
|
||||
brock.wd_manager.do_lazy_refresh(msgwnd, false);
|
||||
|
||||
@ -126,7 +126,6 @@ namespace nana{ namespace drawerbase
|
||||
|
||||
attr_.e_state = element_state::pressed;
|
||||
attr_.keep_pressed = true;
|
||||
|
||||
_m_draw(graph);
|
||||
API::capture_window(*wdg_, true);
|
||||
API::lazy_refresh();
|
||||
@ -158,12 +157,20 @@ namespace nana{ namespace drawerbase
|
||||
|
||||
void trigger::key_char(graph_reference, const arg_keyboard& arg)
|
||||
{
|
||||
if (static_cast<char_t>(keyboard::enter) == arg.key || static_cast<char_t>(keyboard::space) == arg.key)
|
||||
if (static_cast<char_t>(keyboard::enter) == arg.key)
|
||||
emit_click();
|
||||
}
|
||||
|
||||
void trigger::key_press(graph_reference, const arg_keyboard& arg)
|
||||
void trigger::key_press(graph_reference graph, const arg_keyboard& arg)
|
||||
{
|
||||
if (keyboard::space == static_cast<char_t>(arg.key))
|
||||
{
|
||||
attr_.e_state = element_state::pressed;
|
||||
attr_.keep_pressed = true;
|
||||
_m_draw(graph);
|
||||
API::lazy_refresh();
|
||||
return;
|
||||
}
|
||||
bool ch_tabstop_next;
|
||||
switch(arg.key)
|
||||
{
|
||||
@ -179,6 +186,25 @@ namespace nana{ namespace drawerbase
|
||||
API::move_tabstop(*wdg_, ch_tabstop_next);
|
||||
}
|
||||
|
||||
void trigger::key_release(graph_reference graph, const arg_keyboard& arg)
|
||||
{
|
||||
if (arg.key != static_cast<char_t>(keyboard::space))
|
||||
return;
|
||||
|
||||
emit_click();
|
||||
|
||||
attr_.keep_pressed = false;
|
||||
|
||||
if (element_state::pressed == attr_.e_state)
|
||||
attr_.e_state = element_state::hovered;
|
||||
else
|
||||
attr_.e_state = element_state::normal;
|
||||
|
||||
attr_.pushed = false;
|
||||
_m_draw(graph);
|
||||
API::lazy_refresh();
|
||||
}
|
||||
|
||||
void trigger::focus(graph_reference graph, const arg_focus& arg)
|
||||
{
|
||||
attr_.focused = arg.getting;
|
||||
@ -343,14 +369,20 @@ namespace nana{ namespace drawerbase
|
||||
|
||||
void trigger::emit_click()
|
||||
{
|
||||
/*
|
||||
arg_mouse arg;
|
||||
arg.evt_code = event_code::click;
|
||||
arg.window_handle = wdg_->handle();
|
||||
arg.window_handle = wdg_->handle(); //deprecated
|
||||
arg.ctrl = arg.shift = false;
|
||||
arg.button = ::nana::mouse::left_button;
|
||||
arg.mid_button = arg.right_button = false;
|
||||
arg.left_button = true;
|
||||
arg.pos.x = arg.pos.y = 1;
|
||||
*/
|
||||
|
||||
arg_click arg;
|
||||
arg.window_handle = wdg_->handle();
|
||||
arg.by_mouse = false;
|
||||
API::emit_event(event_code::click, arg.window_handle, arg);
|
||||
}
|
||||
|
||||
|
||||
@ -231,7 +231,7 @@ namespace checkbox
|
||||
return ui_container_.size();
|
||||
}
|
||||
|
||||
void radio_group::_m_checked(const arg_mouse& arg)
|
||||
void radio_group::_m_checked(const arg_click& arg)
|
||||
{
|
||||
for (auto & i : ui_container_)
|
||||
i.uiobj->check(arg.window_handle == i.uiobj->handle());
|
||||
|
||||
@ -730,7 +730,7 @@ namespace nana
|
||||
}
|
||||
}
|
||||
|
||||
void trigger::click(graph_reference, const arg_mouse&)
|
||||
void trigger::click(graph_reference, const arg_click&)
|
||||
{
|
||||
//make a copy, because the listener may popup a window, and then
|
||||
//user moves the mouse. it will reset the url when the mouse is moving out from the element.
|
||||
|
||||
@ -371,13 +371,12 @@ namespace nana
|
||||
|
||||
bool visible(bool v)
|
||||
{
|
||||
if(visible_ != v)
|
||||
{
|
||||
if (visible_ == v)
|
||||
return false;
|
||||
|
||||
visible_ = v;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool sortable() const
|
||||
{
|
||||
@ -635,16 +634,18 @@ namespace nana
|
||||
nana::string to_string(const export_options& exp_opt) const
|
||||
{
|
||||
nana::string item_str;
|
||||
bool first{true};
|
||||
for( size_type idx{}; idx<exp_opt.columns_order.size(); ++idx)
|
||||
|
||||
bool ignore_first = true;
|
||||
for (size_type idx{}; idx < exp_opt.columns_order.size(); ++idx)
|
||||
{
|
||||
if(first)
|
||||
first=false;
|
||||
if (ignore_first)
|
||||
ignore_first = false;
|
||||
else
|
||||
item_str += exp_opt.sep;
|
||||
|
||||
item_str += cells[exp_opt.columns_order[idx]].text;
|
||||
}
|
||||
|
||||
return item_str;
|
||||
}
|
||||
};
|
||||
@ -2416,7 +2417,6 @@ namespace nana
|
||||
const std::size_t column_pos_;
|
||||
};
|
||||
|
||||
|
||||
void es_lister::scroll_refresh()
|
||||
{
|
||||
ess_->scroll_y_dpl_refresh();
|
||||
@ -2567,7 +2567,7 @@ namespace nana
|
||||
{
|
||||
if(hd.visible)
|
||||
{
|
||||
if((static_cast<int>(hd.pixels) - 2 < x) && (x < static_cast<int>(hd.pixels) + 3))
|
||||
if((static_cast<int>(hd.pixels) < x + 2) && (x < static_cast<int>(hd.pixels) + 3))
|
||||
{
|
||||
item_spliter_ = hd.index; // original index
|
||||
return true;
|
||||
@ -2617,9 +2617,8 @@ namespace nana
|
||||
essence_->header.item_width(item_spliter_, (new_w < static_cast<int>(essence_->suspension_width + 20) ? essence_->suspension_width + 20 : new_w));
|
||||
auto new_w = essence_->header.pixels();
|
||||
if(new_w < (rect.width + essence_->scroll.offset_x))
|
||||
{
|
||||
essence_->scroll.offset_x = (new_w > rect.width ? new_w - rect.width : 0);
|
||||
}
|
||||
|
||||
essence_->adjust_scroll_life();
|
||||
return 2;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user