doxy comments

This commit is contained in:
qPCR4vir 2016-03-01 17:00:43 +01:00
parent 8be4603ef5
commit ddbbdf21ff

View File

@ -42,7 +42,7 @@ namespace nana
void events_operation_cancel(event_handle); void events_operation_cancel(event_handle);
}//end namespace detail }//end namespace detail
/// base clase for all event argument types /// base class for all event argument types
class event_arg class event_arg
{ {
public: public:
@ -57,7 +57,12 @@ namespace nana
struct general_events; struct general_events;
/// the type of the members of general_events /// \brief the type of the members of general_events.
/// It connect the functions to be called as response to the event and manages that chain of responses
/// It is a functor, that get called to connect a "normal" response function, with normal "priority".
/// If a response function need another priority (unignorable or called first) it will need to be connected with
/// the specific connect function not with the operator()
/// It also permit to "emit" that event, calling all the active responders.
template<typename Arg> template<typename Arg>
class basic_event : public detail::event_interface class basic_event : public detail::event_interface
{ {
@ -68,6 +73,8 @@ namespace nana
: public detail::docker_interface : public detail::docker_interface
{ {
basic_event * const event_ptr; basic_event * const event_ptr;
/// the callback/response function taking the typed argument
std::function<void(arg_reference)> invoke; std::function<void(arg_reference)> invoke;
bool flag_deleted{ false }; bool flag_deleted{ false };
@ -92,9 +99,9 @@ namespace nana
} }
}; };
//class emit_counter is a RAII helper for emitting count /// \breif RAII helper for emitting count.
//It is used for avoiding a try{}catch block which is required for some finial works when /// It is used to avoid a try{}catch block which is required for some finial works when
//event handlers throw exceptions. /// event handlers throw exceptions.
class emit_counter class emit_counter
{ {
public: public:
@ -133,11 +140,12 @@ namespace nana
using prototype = typename std::remove_reference<Function>::type; using prototype = typename std::remove_reference<Function>::type;
std::unique_ptr<detail::docker_interface> dck(new docker(this, factory<prototype, std::is_bind_expression<prototype>::value>::build(std::forward<Function>(fn)), false)); std::unique_ptr<detail::docker_interface> dck(new docker(this, factory<prototype, std::is_bind_expression<prototype>::value>::build(std::forward<Function>(fn)), false));
auto evt = reinterpret_cast<event_handle>(dck.get()); auto evt = reinterpret_cast<event_handle>(dck.get());
dockers_->emplace(dockers_->begin(), std::move(dck)); dockers_->emplace(dockers_->begin(), std::move(dck)); // <---- the difference
detail::events_operation_register(evt); detail::events_operation_register(evt);
return evt; return evt;
} }
/// It will not get called if stop_propagation() was called.
event_handle connect(void (*fn)(arg_reference)) event_handle connect(void (*fn)(arg_reference))
{ {
return connect([fn](arg_reference arg){ return connect([fn](arg_reference arg){
@ -145,7 +153,7 @@ namespace nana
}); });
} }
/// It will not get called if stop_propagation() was called. /// It will not get called if stop_propagation() was called, because it is set at the end of the chain..
template<typename Function> template<typename Function>
event_handle connect(Function && fn) event_handle connect(Function && fn)
{ {
@ -156,7 +164,7 @@ namespace nana
using prototype = typename std::remove_reference<Function>::type; using prototype = typename std::remove_reference<Function>::type;
std::unique_ptr<detail::docker_interface> dck(new docker(this, factory<prototype, std::is_bind_expression<prototype>::value>::build(std::forward<Function>(fn)), false)); std::unique_ptr<detail::docker_interface> dck(new docker(this, factory<prototype, std::is_bind_expression<prototype>::value>::build(std::forward<Function>(fn)), false));
auto evt = reinterpret_cast<event_handle>(dck.get()); auto evt = reinterpret_cast<event_handle>(dck.get());
dockers_->emplace_back(std::move(dck)); dockers_->emplace_back(std::move(dck)); // <---- the difference
detail::events_operation_register(evt); detail::events_operation_register(evt);
return evt; return evt;
} }
@ -187,12 +195,14 @@ namespace nana
return evt; return evt;
} }
/// how many responses are registered?
std::size_t length() const std::size_t length() const
{ {
internal_scope_guard lock; internal_scope_guard lock;
return (nullptr == dockers_ ? 0 : dockers_->size()); return (nullptr == dockers_ ? 0 : dockers_->size());
} }
/// by emitting the event it call each active response with the given arg.
void emit(arg_reference& arg) void emit(arg_reference& arg)
{ {
internal_scope_guard lock; internal_scope_guard lock;
@ -205,7 +215,7 @@ namespace nana
const auto dockers_len = dockers.size(); const auto dockers_len = dockers.size();
//The dockers may resize when a new event handler is created by a calling handler. //The dockers may resize when a new event handler is created by a calling handler.
//Traverses with position can avaid crash error which caused by a iterator which becomes invalid. //Traverses with position can avoid crash error caused by an iterator which becomes invalid.
for (std::size_t pos = 0; pos < dockers_len; ++pos) for (std::size_t pos = 0; pos < dockers_len; ++pos)
{ {
auto docker_ptr = static_cast<docker*>(dockers[pos].get()); auto docker_ptr = static_cast<docker*>(dockers[pos].get());
@ -221,7 +231,7 @@ namespace nana
if (!docker_ptr->unignorable || docker_ptr->flag_deleted) if (!docker_ptr->unignorable || docker_ptr->flag_deleted)
continue; continue;
docker_ptr->invoke(arg); docker_ptr->invoke(arg); // <--- finally call the response
} }
break; break;
} }
@ -418,11 +428,11 @@ namespace nana
bool deleted_flags_{ false }; bool deleted_flags_{ false };
std::unique_ptr<std::vector<std::unique_ptr<detail::docker_interface>>> dockers_; std::unique_ptr<std::vector<std::unique_ptr<detail::docker_interface>>> dockers_;
}; };
struct arg_mouse struct arg_mouse
: public event_arg : public event_arg
{ {
event_code evt_code; ///< event_code evt_code; ///< what kind of mouse event?
::nana::window window_handle; ///< A handle to the event window ::nana::window window_handle; ///< A handle to the event window
::nana::point pos; ///< cursor position in the event window ::nana::point pos; ///< cursor position in the event window
::nana::mouse button; ///< indicates a button which triggers the event ::nana::mouse button; ///< indicates a button which triggers the event
@ -473,7 +483,7 @@ namespace nana
{ {
::nana::window window_handle; ///< A handle to the event window ::nana::window window_handle; ///< A handle to the event window
::nana::native_window_type receiver; ///< it is a native window handle, and specified which window receives focus ::nana::native_window_type receiver; ///< it is a native window handle, and specified which window receives focus
bool getting; ///< the window received focus? bool getting; ///< the window received focus? (as oppose to losing focus)
}; };
struct arg_keyboard : public event_arg struct arg_keyboard : public event_arg
@ -518,7 +528,7 @@ namespace nana
{ {
::nana::window window_handle; ///< A handle to the event window ::nana::window window_handle; ///< A handle to the event window
}; };
/// a higher level event argument than just mouse down
struct arg_click : public event_arg struct arg_click : public event_arg
{ {
::nana::window window_handle; ///< A handle to the event window ::nana::window window_handle; ///< A handle to the event window